Впрочем для gmail запилить это оказалось непросто — потратил немного времени и не нашел вариантов

Форум сейчас не активен, приходите ко мне в Telegram-канал
Код: Выделить всё
//функция, которая уже встречалась выше по ветке, выброшена запись в таблицу, включен возврат значения
function getMailDays(accessToken) {
GmailApp.setCurrentMessageAccessToken(accessToken);
var threads = GmailApp.getInboxThreads();
//Добавляем еще других лейблов
// var extra_labels = ["starred"];
// for (var i = 0; i < extra_labels.length; i++) {
// Array.prototype.push.apply(threads, GmailApp.getUserLabelByName(extra_labels[i]).getThreads());
// }
Array.prototype.push.apply(threads, GmailApp.getStarredThreads()); //Папка "Помеченные
var messages = GmailApp.getMessagesForThreads(threads);
var multiplier = 1000*60*60*24;
var now = new Date()
var maildays = 0;
for (var i = 0; i < threads.length; i++) {
var messages=threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
maildays+=(now - messages[j].getDate())/multiplier;
}
}
return maildays;
}
// искромсанный квикстарт
/**
* Copyright Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Returns the array of cards that should be rendered for the current
* e-mail thread. The name of this function is specified in the
* manifest 'onTriggerFunction' field, indicating that this function
* runs every time the add-on is started.
*
* @param {Object} e The data provided by the Gmail UI.
* @return {Card[]}
*/
function buildAddOn(e) {
// Activate temporary Gmail add-on scopes.
var accessToken = e.messageMetadata.accessToken;
GmailApp.setCurrentMessageAccessToken(accessToken);
// Build the main card after adding the section.
var card = CardService.newCardBuilder()
.setHeader(CardService.newCardHeader()
.setTitle('MD = ' + getMailDays()) //собственно письмодни выводятся в заголовке
.setImageUrl('https://www.gstatic.com/images/icons/material/system/1x/label_googblue_48dp.png'))
.build();
return [card];
}
Код: Выделить всё
{
"oauthScopes": [
"https://www.googleapis.com/auth/gmail.addons.execute",
"https://www.googleapis.com/auth/gmail.readonly"
],
"gmail": {
"name": "Mailday counter",
"logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/label_googblue_24dp.png",
"contextualTriggers": [{
"unconditional": {
},
"onTriggerFunction": "buildAddOn"
}],
"openLinkUrlPrefixes": [
"https://mail.google.com/"
],
"primaryColor": "#4285F4",
"secondaryColor": "#4285F4"
}
}
Ага, спасибо, исправил в оригиналеLomelind писал(а): ↑Пт фев 15, 2019 1:46 amНе дождавшись ответа, полезла гуглить.
обрела https://www.toptal.com/software/definit ... nipulation
С месяцем точно косяк: январь - это 0, а не 1 месяц!
так что там ещё единица нужна:)
в своём скрипте добавила
С днём интереснее
вместо getday там надо getdate
тогда работает правильно
итого, последняя строчка sheet.appendRow([now.getDate() + '.' + (now.getMonth()+1) + '.' + now.getFullYear(), maildays]);
Ага, но рассчиатно это у них на другой сценарий — когда требуется что-то с сообщением сделать (данные там из CRM потянуть).Дмитрий Неумойчев писал(а): ↑Вс фев 17, 2019 9:58 pmУгу, заморочено.
https://developers.google.com/gmail/add ... quickstart - позволяет запилить кнопку в новый боковой сайдбар, на всякий случай название гайда Quickstart: Gmail Add-on , а то урл кажется в общий хелп идет.
Получилось сделать кнопку из хелпа. Правда для работы надо выделить письмо. Можно ли без этого обойтись мне уже лениво разбираться. (должно быть можно, календарь то работает)
Нельзя. Удобгий у них SDK.Дмитрий Неумойчев писал(а): ↑Вс фев 17, 2019 9:58 pmМожно ли без этого обойтись мне уже лениво разбираться. (должно быть можно, календарь то работает)
А какой смысл считать это для списка задач и тем более в Today? Мы можем прокрастинировать задачи просто никогда не перенося их в Today, например.