web-dev-qa-db-ja.com

Thunderbird / Lightningのカレンダーの更新間隔をデフォルトより長くする

Thunderbird/Lightningは、「毎分」と「毎60分」の間で、リモートカレンダーを更新するための5つの異なる時間間隔を提供します。

しかし、私の仕事では、12を超えるリモートカレンダーが必要であり、そのほとんどは週に1〜2回以上頻繁に変更されることはありません。その結果、更新間隔が最も長い場合でも、Thunderbirdは更新する必要のないカレンダーデータの再ダウンロードと更新に多くの時間を費やし、更新中はクロールが遅くなります。

Lightningを微調整/調整して、デフォルトで許可されているよりも長い更新時間を設定することは可能ですか(たとえば、1日1回)?

enter image description here

5
anschauung

更新間隔はLightning拡張機能のソースコードで静的に指定されますが、Thunderbird拡張機能コードはすべてJavascriptであり、Geckoがユーザーインターフェイスを指定するために使用するXML方言であるため、必要な間隔を追加することは特に難しくありません。その方法は次のとおりです。

まず、便利なものがまだない場合は、Lightningインストールパッケージの コピーをダウンロード する必要があります。 (以下はLightning 1.9.1を想定しています。関心のあるポイントは、おそらくいくつかのバージョンであまり変更されていませんが、最良の結果を得るには、それが使用しているバージョンであることを確認してください。)

.xpiファイルを入手したら、それを解凍するのに便利な、そうでなければ空のディレクトリを見つけます。XPIインストーラは名前が変更されたZipファイルなので、unzip、WinZip、WinRarなどです。 、&​​c。、すべてがそれを処理できます。 (最初に「.xpi.Zip」に名前を変更するか、右クリックして「プログラムから開く...」に変更する必要がある場合があります。)ディレクトリを保持しながら、内部にあるすべてのファイルを抽出します。

一般に、特定のダイアログまたはその他のUI機能を処理するコードは、そこに表示される文字列を探すことで見つけることができます。この場合、「リマインダーを表示」を検索しました。

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として参照しているということです。実際のコードで何を探すべきかがわかったので、これは便利です。その参照のインスタンスが少なくとも1つあり、そのインスタンスは、関心のあるドロップダウンに関係するものに非常に近いものになります。

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=はUIコントロールのラベル属性のように見えます。これは、[カレンダーの編集]ダイアログのコードが見つかったことを意味します。後のドロップダウンは、ダイアログの[リマインダーを表示]チェックボックスの直前に表示されるので、ソース内で同様に並置されることは間違いありません。実際、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ハッカーに伝える必要はないでしょう。とは言うものの、それはあまり複雑になるべきではありません。これで、ドロップダウンメニューのIDが得られました。これは、ドロップダウンを埋めるコードでほぼ確実に参照されます。

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"

3番目の一致は、すでに知っている.xulファイルを指しており、無視できます。最初の一致は、ドロップダウンの現在選択されている値を取得しているコードを指しているため、無視できます。一方、secondの一致は、ドロップダウン全体への参照を取ります。これがおそらく必要なことです。実際、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として追加することもできますが、インタープリターに作業を任せてみませんか?プログラマーの時間を節約するためにCPU時間を費やしてください。これは、新しいカレンダーを開いてカレンダーを編集したときにのみ評価されます。ダイアログなので、コンピュータが行う作業はそれほど多くありません。)

変更を保存してファイルを閉じたら、あとは更新されたLightningコードを再パッケージ化してThunderbirdにインストールするだけです。それは非常に簡単です:

me@box [lightning] $ Zip -r lightning-1.9.1-me.xpi *

(または、WinZip、WinRARなどを使用します。重要な点は、完成したZipファイルはディレクトリ構造を保持する必要があり、ファイル名は.xpiで終わる必要があることです。解凍手順と同様に次のようになります。必要に応じて、作成後に名前を変更しました。)

次に、Thunderbirdアドオンと同じように、新しく作成したXPIファイルをインストールします。これを実行してTbirdを再起動したら、[カレンダーの編集]ドロップダウンを開くと、次のようになります。

Modified 'Edit Calendar' dialog, showing newly added intervals

完全を期すために、カレンダーが指定された間隔で実際に更新されることを確認するために実際にテストしていないことに言及する必要があります。これは、まだ修正していないため、で[拡張機能]タブを選択したときにThunderbirdが例外をスローするためです。アドオンマネージャー-新しいTbirdプロファイルを作成し、そこに変更されたLightningアドオンをインストールして、上記のスクリーンショットを作成しました。

とはいえ、間隔の長さのオプションが指定されているのはコード内の1つの場所だけなので、問題があると疑う理由はありません。ダイアログで設定すると、Thunderbirdの構成データとともに保存されます。

これがポイントをもたらします。更新間隔をカスタマイズするカレンダーのGUIDがわかっている場合は、Thunderbirdの[設定]ダイアログの[詳細設定]タブにある[構成エディター](つまり、about:config)で行うことができます。 calendar.registry.[guid].refreshintervalの値を好きなだけ分に変更します。

そのためには、カレンダーのGUIDを名前にマップできる必要があります。これは、about:configで非常に簡単に実行できます。検索ボックスに.nameと入力すると、多くの結果が表示されますが、calendar.registryグループに属する結果はごくわずかであり、デフォルトでは表示されないため、すべて太字にする必要があります。サンダーバードで;これらの各値はカレンダー名であり、プロパティ名にカレンダーGUIDを含む各結果を使用すると、名前とGUIDの間のマッピングを簡単に作成できます。次に.[guid].refreshintervalを入力します。検索ボックスで値をカスタマイズすれば完了です。

しかし、処理するカレンダーがたくさんある場合、それは首の痛みです。スクリーンショットの背景にあるリストの表示内容から判断すると、この変更を適用するカレンダーの数はかなり多くなります。その場合、ダイアログの変更により、より簡単に操作できるようになると思います。

特に、この投稿で説明されている変更を含むバージョンのLightningをダウンロードできるため、 ここ

7
Aaron Miller

私は同じ編集を使用して、ネットワークICSを毎日または毎週更新できるようにしています。リストに(60 * 24)と(60 * 24 * 7)を追加しました。ただし、xpiファイルの解凍と再パックを気にする必要はありません。アプリケーション/拡張機能がどこにあるかを調べてください。私のMacでは、たまたま〜/ Library/Thunderbird/Profiles/... somepath .../chrome/calendar/content/calendarディレクトリにあります。そこで、上記のようにファイルcalendar-properties-dialog.jsを編集します。次に、Thunderbirdを再起動するだけで、新しい間隔設定が表示されます。

私のリギングには、仕事、個人、休日などのカレンダーがあります。また、チームのすべてのスポーツ(NFL/MLB/NBA/NHL)チームのスケジュールもあります。これらのスケジュールは実際には変更されないので、毎週更新しています。本当にいいです。また、必要に応じていつでも手動で同期できます。

2
Marcus Yoo