Handles defer error on Db closing. Updated lint recommendations.
This commit is contained in:
@@ -29,7 +29,11 @@ func main() {
|
|||||||
app = tview.NewApplication()
|
app = tview.NewApplication()
|
||||||
|
|
||||||
db = util.ConnectStorm()
|
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)
|
projectRepo = repo.NewProjectRepository(db)
|
||||||
taskRepo = repo.NewTaskRepository(db)
|
taskRepo = repo.NewTaskRepository(db)
|
||||||
@@ -88,7 +92,7 @@ func setKeyboardShortcuts() *tview.Application {
|
|||||||
case 'f':
|
case 'f':
|
||||||
// @TODO : Remove
|
// @TODO : Remove
|
||||||
// statusBar.showForSeconds(reflect.TypeOf(app.GetFocus()).String(), 5)
|
// statusBar.showForSeconds(reflect.TypeOf(app.GetFocus()).String(), 5)
|
||||||
statusBar.showForSeconds(projectPane.activeProject.Title, 5)
|
statusBar.showForSeconds(projectPane.GetActiveProject().Title, 5)
|
||||||
}
|
}
|
||||||
|
|
||||||
return event
|
return event
|
||||||
|
|||||||
@@ -7,11 +7,13 @@ import (
|
|||||||
"github.com/ajaxray/geek-life/model"
|
"github.com/ajaxray/geek-life/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ProjectDetailPane Displays relevant actions of current project
|
||||||
type ProjectDetailPane struct {
|
type ProjectDetailPane struct {
|
||||||
*tview.Flex
|
*tview.Flex
|
||||||
project *model.Project
|
project *model.Project
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewProjectDetailPane Initializes ProjectDetailPane
|
||||||
func NewProjectDetailPane() *ProjectDetailPane {
|
func NewProjectDetailPane() *ProjectDetailPane {
|
||||||
pane := ProjectDetailPane{
|
pane := ProjectDetailPane{
|
||||||
Flex: tview.NewFlex().SetDirection(tview.FlexRow),
|
Flex: tview.NewFlex().SetDirection(tview.FlexRow),
|
||||||
@@ -31,6 +33,7 @@ func NewProjectDetailPane() *ProjectDetailPane {
|
|||||||
return &pane
|
return &pane
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetProject Sets the active Project
|
||||||
func (pd *ProjectDetailPane) SetProject(project *model.Project) {
|
func (pd *ProjectDetailPane) SetProject(project *model.Project) {
|
||||||
pd.project = project
|
pd.project = project
|
||||||
pd.SetTitle("[::b]" + pd.project.Title)
|
pd.SetTitle("[::b]" + pd.project.Title)
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/ajaxray/geek-life/repository"
|
"github.com/ajaxray/geek-life/repository"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ProjectPane Displays projects and dynamic lists
|
||||||
type ProjectPane struct {
|
type ProjectPane struct {
|
||||||
*tview.Flex
|
*tview.Flex
|
||||||
projects []model.Project
|
projects []model.Project
|
||||||
@@ -21,6 +22,7 @@ type ProjectPane struct {
|
|||||||
projectListStarting int // The index in list where project names starts
|
projectListStarting int // The index in list where project names starts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewProjectPane initializes
|
||||||
func NewProjectPane(repo repository.ProjectRepository) *ProjectPane {
|
func NewProjectPane(repo repository.ProjectRepository) *ProjectPane {
|
||||||
pane := ProjectPane{
|
pane := ProjectPane{
|
||||||
Flex: tview.NewFlex().SetDirection(tview.FlexRow),
|
Flex: tview.NewFlex().SetDirection(tview.FlexRow),
|
||||||
@@ -126,6 +128,7 @@ func (pane *ProjectPane) activateProject(idx int) {
|
|||||||
app.SetFocus(taskPane)
|
app.SetFocus(taskPane)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RemoveActivateProject deletes the currently active project
|
||||||
func (pane *ProjectPane) RemoveActivateProject() {
|
func (pane *ProjectPane) RemoveActivateProject() {
|
||||||
if pane.activeProject != nil && pane.repo.Delete(pane.activeProject) == nil {
|
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 {
|
func (pane *ProjectPane) GetActiveProject() *model.Project {
|
||||||
return pane.activeProject
|
return pane.activeProject
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/rivo/tview"
|
"github.com/rivo/tview"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// StatusBar displays hints and messages at the bottom of app
|
||||||
type StatusBar struct {
|
type StatusBar struct {
|
||||||
*tview.Pages
|
*tview.Pages
|
||||||
message *tview.TextView
|
message *tview.TextView
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ import (
|
|||||||
"github.com/ajaxray/geek-life/repository"
|
"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 {
|
type TaskDetailPane struct {
|
||||||
*tview.Flex
|
*tview.Flex
|
||||||
taskName, taskDateDisplay *tview.TextView
|
taskName, taskDateDisplay *tview.TextView
|
||||||
@@ -25,9 +29,7 @@ type TaskDetailPane struct {
|
|||||||
task *model.Task
|
task *model.Task
|
||||||
}
|
}
|
||||||
|
|
||||||
const dateLayoutISO = "2006-01-02"
|
// NewTaskDetailPane initializes and configures a TaskDetailPane
|
||||||
const dateLayoutHuman = "02 Jan, Monday"
|
|
||||||
|
|
||||||
func NewTaskDetailPane(taskRepo repository.TaskRepository) *TaskDetailPane {
|
func NewTaskDetailPane(taskRepo repository.TaskRepository) *TaskDetailPane {
|
||||||
pane := TaskDetailPane{
|
pane := TaskDetailPane{
|
||||||
Flex: tview.NewFlex().SetDirection(tview.FlexRow),
|
Flex: tview.NewFlex().SetDirection(tview.FlexRow),
|
||||||
@@ -237,6 +239,7 @@ func (td *TaskDetailPane) handleShortcuts(event *tcell.EventKey) *tcell.EventKey
|
|||||||
return event
|
return event
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetTask sets a Task to be displayed
|
||||||
func (td *TaskDetailPane) SetTask(task *model.Task) {
|
func (td *TaskDetailPane) SetTask(task *model.Task) {
|
||||||
td.task = task
|
td.task = task
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/ajaxray/geek-life/repository"
|
"github.com/ajaxray/geek-life/repository"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TaskPane displays tasks of current TaskList or Project
|
||||||
type TaskPane struct {
|
type TaskPane struct {
|
||||||
*tview.Flex
|
*tview.Flex
|
||||||
list *tview.List
|
list *tview.List
|
||||||
@@ -23,6 +24,7 @@ type TaskPane struct {
|
|||||||
hint *tview.TextView
|
hint *tview.TextView
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewTaskPane initializes and configures a TaskPane
|
||||||
func NewTaskPane(projectRepo repository.ProjectRepository, taskRepo repository.TaskRepository) *TaskPane {
|
func NewTaskPane(projectRepo repository.ProjectRepository, taskRepo repository.TaskRepository) *TaskPane {
|
||||||
pane := TaskPane{
|
pane := TaskPane{
|
||||||
Flex: tview.NewFlex().SetDirection(tview.FlexRow),
|
Flex: tview.NewFlex().SetDirection(tview.FlexRow),
|
||||||
@@ -46,7 +48,7 @@ func NewTaskPane(projectRepo repository.ProjectRepository, taskRepo repository.T
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
task, err := taskRepo.Create(*projectPane.activeProject, name, "", "", 0)
|
task, err := taskRepo.Create(*projectPane.GetActiveProject(), name, "", "", 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
statusBar.showForSeconds("[red::]Could not create Task:"+err.Error(), 5)
|
statusBar.showForSeconds("[red::]Could not create Task:"+err.Error(), 5)
|
||||||
return
|
return
|
||||||
@@ -72,6 +74,7 @@ func NewTaskPane(projectRepo repository.ProjectRepository, taskRepo repository.T
|
|||||||
return &pane
|
return &pane
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ClearList removes all items from TaskPane
|
||||||
func (pane *TaskPane) ClearList() {
|
func (pane *TaskPane) ClearList() {
|
||||||
pane.list.Clear()
|
pane.list.Clear()
|
||||||
pane.tasks = nil
|
pane.tasks = nil
|
||||||
@@ -79,6 +82,7 @@ func (pane *TaskPane) ClearList() {
|
|||||||
pane.RemoveItem(pane.newTask)
|
pane.RemoveItem(pane.newTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetList Sets a list of tasks to be displayed
|
||||||
func (pane *TaskPane) SetList(tasks []model.Task) {
|
func (pane *TaskPane) SetList(tasks []model.Task) {
|
||||||
pane.ClearList()
|
pane.ClearList()
|
||||||
pane.tasks = tasks
|
pane.tasks = tasks
|
||||||
@@ -103,6 +107,7 @@ func (pane *TaskPane) handleShortcuts(event *tcell.EventKey) *tcell.EventKey {
|
|||||||
return event
|
return event
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LoadProjectTasks loads tasks of a project in taskPane
|
||||||
func (pane *TaskPane) LoadProjectTasks(project model.Project) {
|
func (pane *TaskPane) LoadProjectTasks(project model.Project) {
|
||||||
var tasks []model.Task
|
var tasks []model.Task
|
||||||
var err error
|
var err error
|
||||||
@@ -117,6 +122,7 @@ func (pane *TaskPane) LoadProjectTasks(project model.Project) {
|
|||||||
pane.AddItem(pane.newTask, 1, 0, false)
|
pane.AddItem(pane.newTask, 1, 0, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ActivateTask marks a task as currently active and loads in TaskDetailPane
|
||||||
func (pane *TaskPane) ActivateTask(idx int) {
|
func (pane *TaskPane) ActivateTask(idx int) {
|
||||||
removeThirdCol()
|
removeThirdCol()
|
||||||
pane.activeTask = &pane.tasks[idx]
|
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() {
|
func (pane *TaskPane) ClearCompletedTasks() {
|
||||||
count := 0
|
count := 0
|
||||||
for i, task := range pane.tasks {
|
for i, task := range pane.tasks {
|
||||||
|
|||||||
Reference in New Issue
Block a user