Created
August 8, 2019 04:19
-
-
Save qmacro/821cdbd498fe772447165ad95a4cc470 to your computer and use it in GitHub Desktop.
Google Apps Script to accompany "email to task mechanism" post https://qmacro.org/2011/10/04/automated-email-to-task-mechanism-with-google-apps-script/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ----------------------------------------------------- | |
// Globals, contants | |
// ----------------------------------------------------- | |
TASKLIST = "DJ's list"; | |
LABEL_PENDING = "newtask"; | |
LABEL_DONE = "newtaskdone"; | |
// ----------------------------------------------------- | |
// getTasklistId_(tasklistName) | |
// Returns the id of the tasklist specified | |
// Oddly, we should be able to use: | |
// Tasks.Tasklists.get(tasklistName) | |
// but it always gives an error "Invalid Value". | |
// ----------------------------------------------------- | |
function getTasklistId_(tasklistName) { | |
var tasklistsList = Tasks.Tasklists.list(); | |
var taskLists = tasklistsList.getItems(); | |
for (tl in taskLists) { | |
var title = taskLists[tl].getTitle(); | |
if (title == tasklistName) { | |
return taskLists[tl].getId(); | |
} | |
} | |
} | |
// ----------------------------------------------------- | |
// processPending(sheet) | |
// Process any pending emails and then move them to done | |
// ----------------------------------------------------- | |
function processPending_(sheet) { | |
var label_pending = GmailApp.getUserLabelByName(LABEL_PENDING); | |
var label_done = GmailApp.getUserLabelByName(LABEL_DONE); | |
// The threads currently assigned to the 'pending' label | |
var threads = label_pending.getThreads(); | |
// Process each one in turn, assuming there's only a single | |
// message in each thread | |
for (var t in threads) { | |
var thread = threads[t]; | |
// Grab the task data | |
var taskTitle = thread.getFirstMessageSubject(); | |
// Insert the task | |
addTask_(taskTitle, TASKLIST); | |
// Set to 'done' by exchanging labels | |
thread.removeLabel(label_pending); | |
thread.addLabel(label_done); | |
} | |
// Increment the processed tasks count | |
var processedRange = sheet.getRange("B1"); | |
processedRange.setValue(processedRange.getValue() + threads.length) | |
} | |
// ----------------------------------------------------- | |
// addTask_(title, taskListId) | |
// Create new task and insert into given tasklist | |
// ----------------------------------------------------- | |
function addTask_(title, tasklistId) { | |
var newTask = Tasks.newTask().setTitle(title); | |
Tasks.Tasks.insert(newTask, getTasklistId_(tasklistId)); | |
} | |
// ----------------------------------------------------- | |
// main() | |
// Starter function; to be scheduled regularly | |
// ----------------------------------------------------- | |
function main_taskconverter() { | |
// Get the active spreadsheet and make sure the first | |
// sheet is the active one | |
var ss = SpreadsheetApp.getActiveSpreadsheet(); | |
var sh = ss.setActiveSheet(ss.getSheets()[0]); | |
// Process the pending task emails | |
processPending_(sh); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment