4

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

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

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

2 ответа2

6

Интервалы обновления статически указываются в исходном коде расширения 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, содержащую модификации, описанные в этом посте, здесь !

2

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .