From d62656e1b7e4cbe5deed4962d7e0c8d871583a21 Mon Sep 17 00:00:00 2001 From: Anis Ahmad Date: Wed, 17 Jun 2020 01:57:50 +0600 Subject: [PATCH] Handles defer error on Db closing. Updated lint recommendations. --- app/cli.go | 8 ++++++-- app/project_detail.go | 3 +++ app/projects.go | 4 ++++ app/status_bar.go | 1 + app/task_detail.go | 9 ++++++--- app/tasks.go | 9 ++++++++- 6 files changed, 28 insertions(+), 6 deletions(-) diff --git a/app/cli.go b/app/cli.go index 6f8bc23..31536d4 100644 --- a/app/cli.go +++ b/app/cli.go @@ -29,7 +29,11 @@ func main() { app = tview.NewApplication() db = util.ConnectStorm() - defer db.Close() + defer func() { + if err := db.Close(); err != nil { + util.LogIfError(err, "Error in closing storm Db") + } + }() projectRepo = repo.NewProjectRepository(db) taskRepo = repo.NewTaskRepository(db) @@ -88,7 +92,7 @@ func setKeyboardShortcuts() *tview.Application { case 'f': // @TODO : Remove // statusBar.showForSeconds(reflect.TypeOf(app.GetFocus()).String(), 5) - statusBar.showForSeconds(projectPane.activeProject.Title, 5) + statusBar.showForSeconds(projectPane.GetActiveProject().Title, 5) } return event diff --git a/app/project_detail.go b/app/project_detail.go index 87df8f9..ddbca03 100644 --- a/app/project_detail.go +++ b/app/project_detail.go @@ -7,11 +7,13 @@ import ( "github.com/ajaxray/geek-life/model" ) +// ProjectDetailPane Displays relevant actions of current project type ProjectDetailPane struct { *tview.Flex project *model.Project } +// NewProjectDetailPane Initializes ProjectDetailPane func NewProjectDetailPane() *ProjectDetailPane { pane := ProjectDetailPane{ Flex: tview.NewFlex().SetDirection(tview.FlexRow), @@ -31,6 +33,7 @@ func NewProjectDetailPane() *ProjectDetailPane { return &pane } +// SetProject Sets the active Project func (pd *ProjectDetailPane) SetProject(project *model.Project) { pd.project = project pd.SetTitle("[::b]" + pd.project.Title) diff --git a/app/projects.go b/app/projects.go index 2562f3a..b8254ea 100644 --- a/app/projects.go +++ b/app/projects.go @@ -11,6 +11,7 @@ import ( "github.com/ajaxray/geek-life/repository" ) +// ProjectPane Displays projects and dynamic lists type ProjectPane struct { *tview.Flex projects []model.Project @@ -21,6 +22,7 @@ type ProjectPane struct { projectListStarting int // The index in list where project names starts } +// NewProjectPane initializes func NewProjectPane(repo repository.ProjectRepository) *ProjectPane { pane := ProjectPane{ Flex: tview.NewFlex().SetDirection(tview.FlexRow), @@ -126,6 +128,7 @@ func (pane *ProjectPane) activateProject(idx int) { app.SetFocus(taskPane) } +// RemoveActivateProject deletes the currently active project func (pane *ProjectPane) RemoveActivateProject() { if pane.activeProject != nil && pane.repo.Delete(pane.activeProject) == nil { @@ -152,6 +155,7 @@ func (pane *ProjectPane) loadListItems(focus bool) { } } +// GetActiveProject provides pointer to currently active project func (pane *ProjectPane) GetActiveProject() *model.Project { return pane.activeProject } diff --git a/app/status_bar.go b/app/status_bar.go index 949a58b..63597c1 100644 --- a/app/status_bar.go +++ b/app/status_bar.go @@ -6,6 +6,7 @@ import ( "github.com/rivo/tview" ) +// StatusBar displays hints and messages at the bottom of app type StatusBar struct { *tview.Pages message *tview.TextView diff --git a/app/task_detail.go b/app/task_detail.go index 9cd5ef4..b963602 100644 --- a/app/task_detail.go +++ b/app/task_detail.go @@ -13,6 +13,10 @@ import ( "github.com/ajaxray/geek-life/repository" ) +const dateLayoutISO = "2006-01-02" +const dateLayoutHuman = "02 Jan, Monday" + +// TaskDetailPane displays detailed info of a Task type TaskDetailPane struct { *tview.Flex taskName, taskDateDisplay *tview.TextView @@ -25,9 +29,7 @@ type TaskDetailPane struct { task *model.Task } -const dateLayoutISO = "2006-01-02" -const dateLayoutHuman = "02 Jan, Monday" - +// NewTaskDetailPane initializes and configures a TaskDetailPane func NewTaskDetailPane(taskRepo repository.TaskRepository) *TaskDetailPane { pane := TaskDetailPane{ Flex: tview.NewFlex().SetDirection(tview.FlexRow), @@ -237,6 +239,7 @@ func (td *TaskDetailPane) handleShortcuts(event *tcell.EventKey) *tcell.EventKey return event } +// SetTask sets a Task to be displayed func (td *TaskDetailPane) SetTask(task *model.Task) { td.task = task diff --git a/app/tasks.go b/app/tasks.go index cf1b158..453a105 100644 --- a/app/tasks.go +++ b/app/tasks.go @@ -11,6 +11,7 @@ import ( "github.com/ajaxray/geek-life/repository" ) +// TaskPane displays tasks of current TaskList or Project type TaskPane struct { *tview.Flex list *tview.List @@ -23,6 +24,7 @@ type TaskPane struct { hint *tview.TextView } +// NewTaskPane initializes and configures a TaskPane func NewTaskPane(projectRepo repository.ProjectRepository, taskRepo repository.TaskRepository) *TaskPane { pane := TaskPane{ Flex: tview.NewFlex().SetDirection(tview.FlexRow), @@ -46,7 +48,7 @@ func NewTaskPane(projectRepo repository.ProjectRepository, taskRepo repository.T return } - task, err := taskRepo.Create(*projectPane.activeProject, name, "", "", 0) + task, err := taskRepo.Create(*projectPane.GetActiveProject(), name, "", "", 0) if err != nil { statusBar.showForSeconds("[red::]Could not create Task:"+err.Error(), 5) return @@ -72,6 +74,7 @@ func NewTaskPane(projectRepo repository.ProjectRepository, taskRepo repository.T return &pane } +// ClearList removes all items from TaskPane func (pane *TaskPane) ClearList() { pane.list.Clear() pane.tasks = nil @@ -79,6 +82,7 @@ func (pane *TaskPane) ClearList() { pane.RemoveItem(pane.newTask) } +// SetList Sets a list of tasks to be displayed func (pane *TaskPane) SetList(tasks []model.Task) { pane.ClearList() pane.tasks = tasks @@ -103,6 +107,7 @@ func (pane *TaskPane) handleShortcuts(event *tcell.EventKey) *tcell.EventKey { return event } +// LoadProjectTasks loads tasks of a project in taskPane func (pane *TaskPane) LoadProjectTasks(project model.Project) { var tasks []model.Task var err error @@ -117,6 +122,7 @@ func (pane *TaskPane) LoadProjectTasks(project model.Project) { pane.AddItem(pane.newTask, 1, 0, false) } +// ActivateTask marks a task as currently active and loads in TaskDetailPane func (pane *TaskPane) ActivateTask(idx int) { removeThirdCol() pane.activeTask = &pane.tasks[idx] @@ -126,6 +132,7 @@ func (pane *TaskPane) ActivateTask(idx int) { } +// ClearCompletedTasks removes tasks from current list that are in completed state func (pane *TaskPane) ClearCompletedTasks() { count := 0 for i, task := range pane.tasks {