Skip to content

jtsalva/tasq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tasQ

Built on top of google.golang.org/api/tasks/v1 adding extra functionality making it easier to get started with the Google Tasks API in Golang.

Getting Started

  1. Enable Google Tasks API from API Console
  2. Create a new OAuth Client ID credential and download it as JSON
  3. Configure your OAuth consent screen
  4. Understand the concepts developers.google.com/tasks/concepts
  5. Get tasq go get -u github.com/jtsalva/tasq
  6. Import tasq import "github.com/jtsalva/tasq"
tasq.Init(&tasq.QConfig{
  // Either QTasksReadWriteScope or QTasksReadOnlyScope
  Scope:       tasq.QTasksReadWriteScope,
  Credentials: "/path/to/credentials.json",
})

// Direct users here to grant access to your
// application from their Google accounts
authURL := tasq.Auth.GetAuthCodeURL()

// Once the user grants access and is
// redirected to your specified URL, grab
// the code from the query string
authCode := "4/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXX"

// The auth code can only be used once
// to generate a token, the token is
// reusable, store it somewhere safe
token, err := tasq.Auth.GetToken(authCode)


// Create new service using token
svc, err := tasq.NewService(token)

// List all Tasklists
tasklists, err := svc.Tasklists.List().Do()

// List Tasks from Tasklist
tasks, err := svc.Tasks.List(tasklistId).Do()

Listing Tasklists

// tasklists is of type QTaskLists
tasklists, err := svc.Tasklists.List().Do()

// tasklists.Items is of type []*QTaskList
for _, tasklist := range tasklists.Items {
  fmt.Println(tasklist.Id, tasklist.Name)
}

Listing Tasks

// tasks is of type QTasks
tasks, err := svc.Tasks.List().Do()

// tasks.Items is of type []*QTask
for _, task := range tasks.Items {
  fmt.Println(task.Id, task.Title, task.Notes)

  // List sub-tasks of task
  // task.Children is of type []*QTask
  for _, child := range task.Children {
    fmt.Println("\t", child.Id, child.Title, child.Notes)
  }
}

Filter and Sort Tasks

Fllter by either

  • QCompletedFilter - show only completed tasks
  • QNeedsActionFilter - show only tasks needing action
  • QOverdueFilter - show only tasks needing action where the datetime now is more than the due datetime
filteredTasks, err := svc.Tasks.List().Filter(tasq.QOverdueFilter).Do()

Additionally, you can sort your items either by

  • QPositionSort - sort in the way the user positioned the tasks
  • QLatestFirstSort - newly updated tasks first
  • QOldestFirstSort - oldest updated tasks first
sortedTasks, err := svc.Tasks.List().Sort(tasq.QPositionSort).Do()

You can combine filter and sort

filterdAndSortedTasks, err := svc.Tasks.List().Filter(filter).Sort(sort).Do()

Interacting with Tasks

You can directly manipulate and perform actions on a QTaskList and QTask.

// tasklist is of type QTaskList
tasklist, err := svc.Tasklists.Get(tasklistid).Do()

// task is of type QTask
task, err := svc.Tasks.Get(tasklistid, taskid).Do()
  1. Deleting
  2. Inserting
  3. Updating
  4. Refreshing
  5. Move to Parent
  6. Move to Previous
  7. Move to Beginning
  8. Get Time of Last Update

Deleting

// Delete a list, including the tasks and subtasks within it
err := tasklist.Delete()

// Delete a single task
err := task.Delete()

Inserting

Insert a task into another list

insertedTask, err := task.Insert(anotherTasklistid)

Updating

tasklist.Title = "change tasklist title"
updatedTasklist, err := tasklist.Update()

task.Title = "change task title"
updatedTask, err := task.Update()

Refreshing

If there have been remote changes, update the data currently stored in memory

err := tasklist.Refresh()
err := task.Refresh()

Move to Parent

Make task a subtask to the given parent task id

movedTask, err := task.MoveToParent(parentTaskid)

Move to Previous

Move task after given previous task id

movedTask, err := task.MoveToPrevious(previousTaskid)

Move to Beginning

Moves task to beginning of list

movedTask, err := task.MoveToBeginning()

Get Time of Last Update

Returns time of last update as type time.Time

tasklistUpdatedTime, err := tasklist.Time()
taskUpdatedTime, err := task.Time()