Created
June 18, 2017 11:11
-
-
Save schlos/169a6e853753db395290804303d910a6 to your computer and use it in GitHub Desktop.
GMail Snooze Script
This file contains hidden or 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
var LABEL = 'Snooze'; | |
var MONTHS = 1; | |
var MARK_UNREAD = true; | |
var ADD_UNSNOOZED_LABEL = true; | |
function dailySnooze() { | |
var today; | |
var page; | |
var d = new Date(); | |
var day = d.getDate(); | |
var month = d.getMonth(); | |
var year = d.getFullYear(); | |
// Mails snoozed for today back to inbox | |
today = GmailApp.getUserLabelByName(getLabelName(day, month, year)); | |
// It’s time to unsnooze it | |
unSnooze(today); | |
page = today.getThreads(0, 100); | |
if (page.length === 0) { | |
// Delete todays label | |
GmailApp.deleteLabel(today); | |
} | |
} | |
function twoSnooze() { | |
var label; | |
// Mails snoozed for 2pm back to inbox | |
label = GmailApp.getUserLabelByName(LABEL + '/2pm'); | |
// It’s time to unsnooze it | |
unSnooze(label); | |
} | |
function fiveSnooze() { | |
var label; | |
// Mails snoozed for 5pm back to inbox | |
label = GmailApp.getUserLabelByName(LABEL + '/5pm'); | |
// It’s time to unsnooze it | |
unSnooze(label); | |
} | |
function unSnooze(label) { | |
var page = null; | |
// Get threads in 'pages' of 100 at a time | |
while (!page || page.length == 100) { | |
page = label.getThreads(0, 100); | |
if (page.length > 0) { | |
// It’s time to unsnooze it | |
GmailApp.moveThreadsToInbox(page); | |
// Move the threads out of label | |
label.removeFromThreads(page); | |
if (MARK_UNREAD) { | |
GmailApp.markThreadsUnread(page); | |
} | |
if (ADD_UNSNOOZED_LABEL) { | |
GmailApp.getUserLabelByName('Unsnoozed') | |
.addToThreads(page); | |
} | |
} | |
} | |
} | |
function moveToDateFolder() { | |
snoozeTomorrow(); | |
snoozeNextWeek(); | |
} | |
function snoozeTomorrow() { | |
var label; | |
label = GmailApp.getUserLabelByName(LABEL + '/by/tomorrow'); | |
var d = new Date(); | |
d.setDate(d.getDate() + 1); | |
// Move to correct folder. | |
setSnooze(label, d); | |
} | |
function snoozeNextWeek() { | |
var label; | |
label = GmailApp.getUserLabelByName(LABEL + '/by/next-week'); | |
var d = new Date(); | |
var day = d.getDay(); | |
var diff = d.getDate() - day + (day === 0 ? 1 : 8); | |
d.setDate(diff); | |
// Move to correct folder. | |
setSnooze(label, d); | |
} | |
function setSnooze(label, date) { | |
var page = null; | |
var day = date.getDate(); | |
var month = date.getMonth(); | |
var year = date.getFullYear(); | |
var newlabel = GmailApp.getUserLabelByName(getLabelName(day, month, year)); | |
// Get threads in 'pages' of 100 at a time | |
while (!page || page.length == 100) { | |
page = label.getThreads(0, 100); | |
if (page.length > 0) { | |
// Move the threads out of label | |
newlabel.addToThreads(page); | |
label.removeFromThreads(page); | |
} | |
} | |
} | |
function xMonthsLabels() { | |
var startday; | |
var endday; | |
var newmonth00; | |
var d = new Date(); | |
var day = d.getDate(); | |
var month = d.getMonth(); | |
var year = d.getFullYear(); | |
// Create the labels we’ll need for snoozing | |
GmailApp.createLabel(LABEL); | |
GmailApp.createLabel(LABEL + '/2pm'); | |
GmailApp.createLabel(LABEL + '/5pm'); | |
GmailApp.createLabel(LABEL + '/by'); | |
GmailApp.createLabel(LABEL + '/by/tomorrow'); | |
GmailApp.createLabel(LABEL + '/by/next-week'); | |
GmailApp.createLabel(LABEL + '/date'); | |
if (ADD_UNSNOOZED_LABEL) { | |
GmailApp.createLabel('Unsnoozed'); | |
} | |
// Add Labels for x Months | |
for (var i = 0; i <= MONTHS; ++i) { | |
var newd = new Date(year, month + i, 1); | |
var newyear = newd.getFullYear(); | |
var newmonth = newd.getMonth(); | |
// Make month two-digit for sorting | |
if (newmonth < 10) { | |
newmonth00 = '0' + (newmonth + 1); | |
} else { | |
newmonth00 = newmonth + 1; | |
} | |
// If it's todays month, don't start | |
// with day 1 - but with tomorrow | |
if (i === 0) { | |
startday = day + 1; | |
} else { | |
startday = 1; | |
} | |
// If it's the last month, don't proceed | |
// till the months last day but the numbers | |
// we skipped in the first month | |
if (i === MONTHS) { | |
endday = Math.min(day, daysInMonth(newmonth, newyear)); | |
} else { | |
endday = daysInMonth(newmonth, newyear); | |
} | |
for (var x = startday; x <= endday; x++) { | |
GmailApp.createLabel(getLabelName(x, newmonth, newyear)); | |
} | |
} | |
} | |
function getLabelName(day, month, year) { | |
var month00; | |
var day00; | |
// Make month two-digit for sorting | |
if (month < 10) { | |
month00 = '0' + (month + 1); | |
} else { | |
month00 = month + 1; | |
} | |
// Make day two-digit for sorting | |
if (day < 10) { | |
day00 = '0' + day; | |
} else { | |
day00 = day; | |
} | |
return LABEL + '/date/' + year + month00 + day00; | |
} | |
function daysInMonth(month, year) { | |
return new Date(year, month + 1, 0).getDate(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment