Увеличьте интервал обновления календаря за пределами значений по умолчанию в Thunderbird/Lightning
Thunderbird/Lightning предлагает 5 различных временных интервалов для обновления удаленных календарей, между "Каждой минутой" и "Каждыми 60 минутами".
Но моя работа требует, чтобы у меня было более десятка удаленных календарей, большинство из которых не будут меняться чаще, чем один или два раза в неделю. В результате, даже на самом длинном интервале обновления Thunderbird тратит много времени на повторную загрузку и обновление данных календаря, которые не нуждаются в обновлениях, и при этом замедляет сканирование.
Можно ли настроить / настроить Lightning так, чтобы время обновления было больше, чем разрешено по умолчанию (например, один раз в день)?
2 ответа
Интервалы обновления статически указываются в исходном коде расширения Lightning, но код расширения Thunderbird полностью представлен на Javascript, а диалект XML используется Gecko для определения пользовательских интерфейсов, поэтому добавить особые интервалы вам не составит особого труда. Вот как вы это делаете:
Во-первых, если у вас его еще нет, вам необходимо загрузить копию установочного пакета Lightning. (Далее предполагается, что Lightning 1.9.1; интересующие объекты, вероятно, не сильно изменились в нескольких версиях, но для достижения наилучших результатов убедитесь, что это версия, с которой вы работаете.)
Когда у вас есть файл.xpi, найдите удобный, в противном случае пустой каталог для его распаковки - установщик XPI - это просто переименованный zip-файл, так что unzip
, WinZip, WinRar и т. Д., Все могут справиться с этим. (Возможно, вам придется сначала переименовать его в ".xpi.zip" или щелкнуть правой кнопкой мыши и "Открыть с помощью…", в зависимости от.) Извлеките все файлы, которые вы найдете внутри, сохранив каталоги.
Как правило, вы можете найти код, который обрабатывает данный диалог или другую часть пользовательского интерфейса, отыскивая строки, которые в нем появляются. В этом случае я искал "Показать напоминания":
me@box [lightning] $ find -exec grep -nH "Show Reminders" {} \;
Binary file ./chrome/calendar-en-GB.jar matches
Binary file ./chrome/calendar-en-US.jar matches
me@box [lightning] $ grep -a 'Show Reminders' chrome/calendar-en-US.jar
<!ENTITY calendarproperties.firealarms.label "Show Reminders">
Это говорит нам о том, что, за исключением локализации, код Lightning внутренне ссылается на строку, за которой мы охотимся как calendarproperties.firealarms.label
, Это удобно, потому что теперь мы знаем, что искать в реальном коде; мы найдем там хотя бы один экземпляр этой ссылки, и этот экземпляр будет очень близок к тому, что связано с интересующим нас выпадающим списком. Итак:
me@box [lightning] $ find -exec grep -nH 'calendarproperties.firealarms.label' {} \;
[many matches on i18n dialect files elided...]
./chrome/calendar/content/calendar/calendar-properties-dialog.xul:102: label="&calendarproperties.firealarms.label;"
Ах-ха! Это файл.xul, поэтому мы знаем, что он определяет часть пользовательского интерфейса; label=
выглядит как атрибут label для элемента управления пользовательского интерфейса, что должно означать, что мы нашли код для диалога Edit Calendar. Раскрывающийся список, который мы ищем, появляется незадолго до флажка "Показать напоминания" в диалоговом окне, поэтому можно с уверенностью предположить, что они будут аналогичным образом сопоставлены в источнике - и, действительно, когда мы посмотрим на calendar-properties-dialog.xul мы видим это в строках 79-89:
<menulist id="calendar-refreshInterval-menulist"
disable-with-calendar="true"
label="&calendarproperties.refreshInterval.label;">
<menupopup id="calendar-refreshInterval-menupopup">
<!-- This will be filled programatically to reduce the number of needed strings -->
<menuseparator id="calendar-refreshInterval-manual-separator"/>
<menuitem id="calendar-refreshInterval-manual"
value="0"
label="&calendarproperties.refreshInterval.manual.label;"/>
</menupopup>
</menulist>
Да. Мы не совсем дома и сухо, потому что спецификации интервала здесь не живут. Было бы неплохо, если бы в этом комментарии было точно указано, какой исходный файл содержал код, отвечающий за заполнение параметров раскрывающегося списка, но, возможно, это что-то закаленное XUL-хакер, не нужно было бы говорить. Тем не менее, это не должно создавать слишком много осложнений; Теперь у нас есть идентификатор выпадающего меню, на которое почти наверняка будет ссылаться любой код, заполняющий выпадающий список, поэтому:
me@box [lightning] $ find -exec grep -nH 'calendar-refreshInterval-menulist' {} \;
./chrome/calendar/content/calendar/calendar-properties-dialog.js:91: let value = getElementValue("calendar-refreshInterval-menulist");
./chrome/calendar/content/calendar/calendar-properties-dialog.js:153: let menulist = document.getElementById("calendar-refreshInterval-menulist");
./chrome/calendar/content/calendar/calendar-properties-dialog.xul:79: <menulist id="calendar-refreshInterval-menulist"
Третье совпадение указывает на файл.xul, о котором мы уже знаем, и мы можем его игнорировать. Первое совпадение указывает на некоторый код, который получает текущее выбранное значение раскрывающегося списка, и мы можем это игнорировать. Второй матч, с другой стороны, использует ссылку на выпадающий список в целом, и это, вероятно, то, что нам нужно. И действительно, если мы рассмотрим calendar-properties-dialog.js, в строках 154-162 мы найдем:
for each (let min in [1, 5, 15, 30, 60]) {
let menuitem = createMenuItem(min);
separator.parentNode.insertBefore(menuitem, separator);
if (refreshInterval == min) {
menulist.selectedItem = menuitem;
foundValue = true;
}
}
И вот мы здесь! Массив значений, выраженных в минутах, которые соответствуют значениям, которые вы видите в раскрывающемся меню "Изменить календарь".
Теперь, глядя на то, как настроены эти пункты меню, кажется, что весь процесс предполагает, что они будут выражаться только в минутах (например, createMenuItem
функция, строки 137-146.) Если бы мы собирались внести это изменение вверх по течению, мы бы определенно хотели изменить эту функцию, чтобы она могла создавать выпадающие элементы с метками в произвольные единицы времени, такие как "Каждые 4 часа", "Каждый 1 день" и т. Д. Мы могли бы оставить базовое представление в считанные минуты, но мы бы хотели очистить отображаемый код, чтобы он не выглядел уродливо.
Однако, поскольку все, что вам действительно нужно, - это сама функциональность, мы оставим ее привлекательной в качестве упражнения для заинтересованного читателя. Просто добавьте нужные интервалы в конец массива в строке 154, например:
for each (let min in [1, 5, 15, 30, 60, (60*4), (60*8), (60*12), (60*24)]) {
(Конечно, вы можете добавить их как 240, 480, 720 и 1440, но почему бы не позволить интерпретатору выполнить работу? Потратьте процессорное время, чтобы сэкономить время программиста. Это будет оцениваться только при открытии нового календаря и редактировании календаря диалогов, так что вы на самом деле не делаете много работы для компьютера.)
После того, как вы сохранили свои изменения и закрыли файл, остается только упаковать обновленный код Lightning и установить его в Thunderbird. Это довольно просто:
me@box [lightning] $ zip -r lightning-1.9.1-me.xpi *
(Или используйте WinZip, WinRAR и т. Д., Что у вас есть. Существенными моментами являются то, что готовый ZIP-файл должен сохранять структуру каталогов, а его имя файла должно заканчиваться на.xpi - как на этапе распаковки, это может быть переименован после создания, если это необходимо.)
Затем установите только что созданный файл XPI, как и любое дополнение Thunderbird. Как только вы это сделаете и перезапустите Tbird, откроется выпадающий список Edit Calendar:
Для полноты картины я должен упомянуть, что я на самом деле не проверял, чтобы подтвердить, что календарь действительно обновляется с указанными интервалами, потому что то, что я еще не исправил, заставляет мой Thunderbird выдавать исключение, когда я выбираю вкладку "Расширения" в Менеджер дополнений - я создал приведенный выше снимок экрана, создав новый профиль Tbird и установив туда модифицированное дополнение Lightning.
Тем не менее, у меня нет оснований подозревать, что возникнет проблема, поскольку в коде есть только одно место, где указаны параметры длины интервала; после установки в диалоговом окне они сохраняются с данными конфигурации Thunderbird.
В связи с этим возникает вопрос: если вы знаете GUID для календарей, интервалы обновления которых вы хотите настроить, вы можете сделать это в "Редакторе конфигурации" (т.е. about:config), предлагаемом на вкладке "Дополнительно" диалогового окна "Установки" Thunderbird; изменить значение calendar.registry.[guid].refreshinterval
сколько угодно минут.
Для этого вам необходимо иметь возможность привязать GUID календаря к именам, что довольно просто сделать в about:config. Если вы печатаете .name
в окне поиска появятся многие результаты, но только некоторые из них будут принадлежать calendar.registry
группа, и все они должны быть выделены жирным шрифтом, так как они не присутствуют по умолчанию в Thunderbird; каждое из этих значений является именем календаря, и каждый результат, содержащий GUID календаря в имени свойства, можно тривиально сопоставить между именем и GUID. Затем введите .[guid].refreshinterval
в поле поиска, настройте значение, и все готово.
Но это неприятно, если у вас есть много календарей, и, судя по тому, что видно из списка на фоне вашего скриншота, у вас есть значительное количество календарей, к которым можно применить это изменение - это В этом случае, я думаю, что изменение диалога может облегчить вам процесс.
Тем более что вы можете скачать версию Lightning, содержащую модификации, описанные в этом посте, здесь!
Я использовал одно и то же редактирование, чтобы сетевые обновления обновлялись ежедневно или еженедельно. Добавлены (60*24) и (60*24*7) в список. Но вам не нужно беспокоиться о распаковке и перепаковке xpi файла. Просто узнайте, где живет ваше приложение / расширение. На моем Mac он находится в каталоге ~ / Library / Thunderbird / Profiles /... somepath... / chrome / calendar / content / calendar. Там отредактируйте файл calendar-properties-dialog.js, как описано выше. Затем все, что вам нужно сделать, это перезапустить Thunderbird, и вы увидите новые настройки интервала.
У меня есть календари для моей работы, личных, праздничных дней и т. Д. У меня также есть все расписания спортивных команд (NFL/MLB/NBA/NHL) для моих команд. Эти графики действительно не меняются, поэтому я обновляю их еженедельно. Работает действительно хорошо. И я всегда могу вручную синхронизировать при необходимости.