mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
This is now a multi-source scrollable widget, trying to leverage as much of existing functionality as possible for consistency
89 lines
1.4 KiB
Go
89 lines
1.4 KiB
Go
package todoist
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/darkSasori/todoist"
|
|
)
|
|
|
|
type Project struct {
|
|
todoist.Project
|
|
|
|
index int
|
|
tasks []todoist.Task
|
|
}
|
|
|
|
func NewProject(id int) *Project {
|
|
// Todoist seems to experience a lot of network issues on their side
|
|
// If we can't connect, handle it with an empty project until we can
|
|
project, err := todoist.GetProject(id)
|
|
if err != nil {
|
|
return &Project{}
|
|
}
|
|
|
|
proj := &Project{
|
|
Project: project,
|
|
|
|
index: -1,
|
|
}
|
|
|
|
proj.loadTasks()
|
|
|
|
return proj
|
|
}
|
|
|
|
func (proj *Project) isLast() bool {
|
|
return proj.index >= len(proj.tasks)-1
|
|
}
|
|
|
|
func (proj *Project) loadTasks() {
|
|
tasks, err := todoist.ListTask(todoist.QueryParam{"project_id": fmt.Sprintf("%d", proj.ID)})
|
|
if err == nil {
|
|
proj.tasks = tasks
|
|
}
|
|
}
|
|
|
|
func (proj *Project) LongestLine() int {
|
|
maxLen := 0
|
|
|
|
for _, task := range proj.tasks {
|
|
if len(task.Content) > maxLen {
|
|
maxLen = len(task.Content)
|
|
}
|
|
}
|
|
|
|
return maxLen
|
|
}
|
|
|
|
func (proj *Project) currentTask() *todoist.Task {
|
|
if proj.index < 0 {
|
|
return nil
|
|
}
|
|
|
|
return &proj.tasks[proj.index]
|
|
}
|
|
|
|
func (proj *Project) closeSelectedTask() {
|
|
currTask := proj.currentTask()
|
|
|
|
if currTask != nil {
|
|
if err := currTask.Close(); err != nil {
|
|
return
|
|
}
|
|
|
|
proj.loadTasks()
|
|
}
|
|
}
|
|
|
|
func (proj *Project) deleteSelectedTask() {
|
|
currTask := proj.currentTask()
|
|
|
|
if currTask != nil {
|
|
if err := currTask.Delete(); err != nil {
|
|
return
|
|
}
|
|
|
|
proj.loadTasks()
|
|
}
|
|
}
|