Увеличьте интервал обновления календаря за пределами настроек по умолчанию в Thunderbird / Lightning

3005
anschauung

Thunderbird / Lightning предлагает 5 различных временных интервалов для обновления удаленных календарей, между «Каждой минутой» и «Каждыми 60 минутами».

Но моя работа требует, чтобы у меня было более десятка удаленных календарей, большинство из которых не будут меняться чаще, чем один или два раза в неделю. В результате, даже на самом длинном интервале обновления Thunderbird тратит много времени на повторную загрузку и обновление данных календаря, которые не нужно обновлять, и при этом замедляет сканирование.

Можно ли настроить / настроить Lightning так, чтобы время обновления было больше, чем разрешено по умолчанию (например, один раз в день)?

enter image description here

4

2 ответа на вопрос

6
Aaron Miller

Интервалы обновления статически указываются в исходном коде расширения Lightning, но код расширения Thunderbird полностью представлен на Javascript, а диалект XML используется Gecko для определения пользовательских интерфейсов, поэтому добавить особые интервалы вам не составит особого труда. Вот как вы это делаете:

Во-первых, если у вас его еще нет, вам необходимо загрузить копию установочного пакета Lightning. (Далее предполагается, что Lightning 1.9.1; интересующие объекты, вероятно, не сильно изменились в нескольких версиях, но для достижения наилучших результатов убедитесь, что это версия, с которой вы работаете.)

Когда у вас есть файл .xpi, найдите удобный, в противном случае пустой каталог, в который его можно распаковать - установщик XPI - это просто переименованный zip-файл, поэтому unzipWinZip, WinRar, & c., & C. Могут все справиться. (Возможно, вам придется сначала переименовать его в «.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=выглядит как атрибут этикетки для управления пользовательского интерфейса, который должен сказать, что мы нашли код для диалога редактирования календаря. Раскрывающийся выпадающий список появляется незадолго до флажка «Показать напоминания» в диалоговом окне, поэтому можно с уверенностью сказать, что они будут аналогичным образом сопоставлены в источнике - и, действительно, когда мы посмотрим на 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 приведет к следующему:

Modified 'Edit Calendar' dialog, showing newly added intervals

Для полноты картины я должен упомянуть, что я на самом деле не проверял, чтобы подтвердить, что календарь действительно обновляется с указанными интервалами, потому что то, что я еще не исправил, заставляет мой Thunderbird выдавать исключение, когда я выбираю вкладку Расширения в Менеджер дополнений - я создал приведенный выше снимок экрана, создав новый профиль Tbird и установив туда модифицированное дополнение Lightning.

Тем не менее, у меня нет оснований подозревать, что возникнет проблема, поскольку в коде есть только одно место, где указаны параметры длины интервала; после установки в диалоговом окне они сохраняются с данными конфигурации Thunderbird.

В связи с этим возникает вопрос: если вы знаете GUID для календарей, интервалы обновления которых вы хотите настроить, вы можете сделать это в «Редакторе конфигурации» (т.е. about: config), предлагаемом на вкладке «Дополнительно» диалогового окна «Установки» Thunderbird; измените значение calendar.registry.[guid].refreshintervalна сколько угодно минут.

Для этого вам нужно иметь возможность привязать GUID календаря к именам, что довольно просто сделать в about: config. Если вы введете .nameв поле поиска, появится много результатов, но только некоторые из них будут принадлежать calendar.registryгруппе, и все они должны быть выделены жирным шрифтом, так как они не представлены по умолчанию в Thunderbird; каждое из этих значений является именем календаря, и каждый результат, содержащий GUID календаря в имени свойства, можно тривиально сопоставить между именем и GUID. Затем введите .[guid].refreshintervalв поле поиска, настройте значение, и все готово.

Но это неприятно, если у вас есть много календарей, и, судя по тому, что видно из списка на фоне скриншота, у вас есть значительное количество календарей, к которым можно применить это изменение - В этом случае, я думаю, что изменение диалога может облегчить вам процесс.

Тем более что вы можете скачать версию Lightning, содержащую модификации, описанные в этом посте, здесь !

Вау - большое спасибо за подробный и подробный ответ! Это будет отличное руководство, так как я ищу и другие настройки. Большой +1, и я приму ответ, как только смогу подтвердить, что новые интервалы обновления работают :-D anschauung 10 лет назад 0
Рад помочь! Я был удивлен тем, как легко взломать расширения Thunderbird, чтобы они делали то, что я хочу, и я всегда рад поделиться тем, что я узнал. :) Aaron Miller 10 лет назад 1
Очень хорошее описание. Обратите внимание, что вам не нужно загружать и редактировать xpi-файл, см. Ответ ниже. fuenfundachtzig 7 лет назад 0
2
Marcus Yoo

Я использовал одно и то же редактирование, чтобы сетевые обновления обновлялись ежедневно или еженедельно. Добавлены (60 * 24) и (60 * 24 * 7) в список. Но вам не нужно беспокоиться о распаковке и перепаковке xpi-файла. Просто узнайте, где живет ваше приложение / расширение. На моем Mac он находится в каталоге ~ / Library / Thunderbird / Profiles / ... somepath ... / chrome / calendar / content / calendar. Там отредактируйте файл calendar-properties-dialog.js, как описано выше. Затем все, что вам нужно сделать, это перезапустить Thunderbird, и вы увидите новые настройки интервала.

У меня есть календари для моей работы, личных, праздничных дней и т. Д. У меня также есть все расписания спортивных команд (NFL / MLB / NBA / NHL) для моих команд. Эти графики действительно не меняются, поэтому я обновляю их еженедельно. Работает действительно хорошо. И я всегда могу вручную синхронизировать при необходимости.

Намного проще попасть туда, спасибо! fuenfundachtzig 7 лет назад 0