Refactoring and color improvements

This commit is contained in:
Anis Ahmad
2021-01-18 03:32:01 +06:00
parent d8677ca6d7
commit 0d6b7080b3
5 changed files with 81 additions and 65 deletions

View File

@@ -35,6 +35,7 @@
- [x] Set Task due date with quick input buttons (today, +1 day, -1 day)
- [x] Update Task Title
- [x] Tasklist items should indicate status (done, pending, overdue) using colors
- [ ] Pin Tasks
- [x] Shortcut for Adding new Project and Task
- [x] Global shortcuts for jumping to Projects or Tasks panel anytime
- [x] Cleanup all completed tasks of project
@@ -46,7 +47,9 @@
- Today - Due Today and overdue
- Tomorrow
- Upcoming - Due in next 7 days
- [ ] [Habitica](https://habitica.com/)<sup>3</sup> integration - Use it as Habitica client or use Habitica for cloud backup
- [ ] Integrations
- Google Tasks
- (Share your ideas)
- [ ] Time tracking
### :rocket: Ready for action (installing and running)
@@ -80,25 +83,25 @@ You'll see a currently focused pane bordered with double line.
In case writing in a text input (e,g, new project/task, due date), you have to `Enter` to submit/save.
| Context | Shortcut | Action |
|---|:---:|---|
| Global | `p` | Go to Project list |
| Global | `t` | Go to Task list |
| Projects | `n` | New Project |
| Projects | `↑`/`k`/`Shift+Tab` | Go up in project list |
| Projects | `↓`/`j`/`Tab` | Go down in project list |
| Tasks | `n` | New Task |
| Tasks | `Esc`/`h` | Go back to Projects Pane |
| Tasks | `↑`/`k`/`Shift+Tab` | Go up in task list |
| Tasks | `↓`/`j`/`Tab` | Go down in task list |
| Task Detail | `Esc`/`h` | Go back to Tasks Pane |
| Task Detail | `Space` | Toggle task as done/pending |
| Task Detail | `d` | Set Due date |
| Task Detail | `↓`/`↑` | Scroll Up/Down the note editor |
| Task Detail | `e` | Activate note editor for modification |
| Task Detail | `v` | Edit task details in external editor (default `vim`) _Known Bug<sup>[4](#footnotes)</sup>_ |
| Task Detail | `r` | Rename Task Title |
| Active Note Editor | `Esc` | Deactivate note editor and save content |
| Context | Shortcut | Action |
| --- | :---: | --- |
| Global | `p` | Go to Project list |
| Global | `t` | Go to Task list |
| Projects | `n` | New Project |
| Projects | `↑`/`k`/`Shift+Tab` | Go up in project list |
| Projects | `↓`/`j`/`Tab` | Go down in project list |
| Tasks | `n` | New Task |
| Tasks | `Esc`/`h` | Go back to Projects Pane |
| Tasks | `↑`/`k`/`Shift+Tab` | Go up in task list |
| Tasks | `↓`/`j`/`Tab` | Go down in task list |
| Task Detail | `Esc`/`h` | Go back to Tasks Pane |
| Task Detail | `Space` | Toggle task as done/pending |
| Task Detail | `d` | Set Due date |
| Task Detail | `↓`/`↑` | Scroll Up/Down the note editor |
| Task Detail | `e` | Activate note editor for modification |
| Task Detail | `v` | Edit task details in external editor (default `vim`) |
| Task Detail | `r` | Rename Task Title |
| Active Note Editor | `Esc` | Deactivate note editor and save content |
**Tips about using shortcuts efficiently:**
@@ -174,7 +177,5 @@ You may :thumbsup: issues if you want to increase priority of a feature.
### Footnotes
1. In my Macbook Air, 1.6 GHz Dual-Core Intel Core i5, RAM: 8 GB 1600 MHz DDR3
2. Using [monakai](https://github.com/sickill/vim-monokai) color scheme for markdown syntax
3. Habitica is a free habit and productivity app that treats your real life like a game
4. Known Bug: Mouse events (click) don't work after getting back from Editor.
---
> "This is the Book about which there is no doubt, a guidance for those conscious of Allah" - [Al-Quran](http://quran.com)

View File

@@ -40,44 +40,28 @@ func main() {
}()
if len(os.Args) > 1 && os.Args[1] == "migrate" {
migrate()
migrate(db)
} else {
projectRepo = repo.NewProjectRepository(db)
taskRepo = repo.NewTaskRepository(db)
layout = tview.NewFlex().SetDirection(tview.FlexRow).
AddItem(makeTitleBar(), 2, 1, false).
AddItem(prepareContentPages(), 0, 2, true).
AddItem(prepareStatusBar(app), 1, 1, false)
setKeyboardShortcuts()
if err := app.SetRoot(layout, true).EnableMouse(true).Run(); err != nil {
panic(err)
}
}
projectRepo = repo.NewProjectRepository(db)
taskRepo = repo.NewTaskRepository(db)
titleText := tview.NewTextView().SetText("[lime::b]Geek-life [::-]- Task Manager for geeks!").SetDynamicColors(true)
cloudStatus := tview.NewTextView().SetText("[::d]Version: 0.1.0").SetTextAlign(tview.AlignRight).SetDynamicColors(true)
titleBar := tview.NewFlex().
AddItem(titleText, 0, 2, false).
AddItem(cloudStatus, 0, 1, false)
statusBar = makeStatusBar(app)
projectPane = NewProjectPane(projectRepo)
taskPane = NewTaskPane(projectRepo, taskRepo)
projectDetailPane = NewProjectDetailPane()
taskDetailPane = NewTaskDetailPane(taskRepo)
contents = tview.NewFlex().
AddItem(projectPane, 25, 1, true).
AddItem(taskPane, 0, 2, false)
layout = tview.NewFlex().SetDirection(tview.FlexRow).
AddItem(titleBar, 2, 1, false).
AddItem(contents, 0, 2, true).
AddItem(statusBar, 1, 1, false)
setKeyboardShortcuts()
if err := app.SetRoot(layout, true).EnableMouse(true).Run(); err != nil {
panic(err)
}
}
func migrate() {
util.FatalIfError(db.ReIndex(&model.Project{}), "Error in migrating Projects")
util.FatalIfError(db.ReIndex(&model.Task{}), "Error in migrating Tasks")
func migrate(database *storm.DB) {
util.FatalIfError(database.ReIndex(&model.Project{}), "Error in migrating Projects")
util.FatalIfError(database.ReIndex(&model.Task{}), "Error in migrating Tasks")
fmt.Println("Migration completed. Start geek-life normally.")
os.Exit(0)
@@ -112,3 +96,26 @@ func setKeyboardShortcuts() *tview.Application {
return event
})
}
func prepareContentPages() *tview.Flex {
projectPane = NewProjectPane(projectRepo)
taskPane = NewTaskPane(projectRepo, taskRepo)
projectDetailPane = NewProjectDetailPane()
taskDetailPane = NewTaskDetailPane(taskRepo)
contents = tview.NewFlex().
AddItem(projectPane, 25, 1, true).
AddItem(taskPane, 0, 2, false)
return contents
}
func makeTitleBar() *tview.Flex {
titleText := tview.NewTextView().SetText("[lime::b]Geek-life [::-]- Task Manager for geeks!").SetDynamicColors(true)
versionInfo := tview.NewTextView().SetText("[::d]Version: 0.1.1").SetTextAlign(tview.AlignRight).SetDynamicColors(true)
return tview.NewFlex().
AddItem(titleText, 0, 2, false).
AddItem(versionInfo, 0, 1, false)
}

View File

@@ -19,8 +19,8 @@ const (
messagePage = "message"
)
func makeStatusBar(app *tview.Application) *StatusBar {
statusBar := StatusBar{
func prepareStatusBar(app *tview.Application) *StatusBar {
statusBar = &StatusBar{
Pages: tview.NewPages(),
message: tview.NewTextView().SetDynamicColors(true).SetText("Loading..."),
container: app,
@@ -39,7 +39,7 @@ func makeStatusBar(app *tview.Application) *StatusBar {
true,
)
return &statusBar
return statusBar
}
func (bar *StatusBar) showForSeconds(message string, timeout int) {

View File

@@ -37,6 +37,7 @@ func NewTaskPane(projectRepo repository.ProjectRepository, taskRepo repository.T
hint: tview.NewTextView().SetTextColor(tcell.ColorYellow).SetTextAlign(tview.AlignCenter),
}
pane.list.SetSelectedBackgroundColor(tcell.ColorDarkBlue)
pane.list.SetDoneFunc(func() {
app.SetFocus(projectPane)
})

View File

@@ -34,9 +34,9 @@ func makeHorizontalLine(lineChar rune, color tcell.Color) *tview.TextView {
func makeLightTextInput(placeholder string) *tview.InputField {
return tview.NewInputField().
SetPlaceholder(placeholder).
SetPlaceholderTextColor(tcell.ColorYellow).
SetPlaceholderTextColor(tcell.ColorDarkSlateBlue).
SetFieldTextColor(tcell.ColorBlack).
SetFieldBackgroundColor(tcell.ColorGray)
SetFieldBackgroundColor(tcell.ColorLightBlue)
}
// If input text is a valid date, parse it. Or get current date
@@ -78,11 +78,18 @@ func removeThirdCol() {
}
func getTaskTitleColor(task model.Task) string {
colorName := "olive"
colorName := "smokewhite"
if task.Completed {
colorName = "lime"
} else if task.DueDate != 0 && task.DueDate < time.Now().Truncate(24*time.Hour).Unix() {
colorName = "red"
colorName = "green"
} else if task.DueDate != 0 {
dayDiff := int(time.Unix(task.DueDate, 0).Sub(time.Now()).Hours() / 24)
if dayDiff == 0 {
colorName = "orange"
} else if dayDiff < 0 {
colorName = "red"
}
}
return colorName