2016-05-19 5 views
0

数年前、私はサブスクリプションに関するpaypal電子メールを自動的に処理するプライベートThunderbirdプラグインを作成しました。ユーザーは特定のフォルダ「PaypalMsgs」にペイパル電子メールを入れなければなりません。プラグインはそれらを1つずつ読み込み、支払かキャンセルかを見つけ出し、その中のその人の「その他」フィールドを更新します。住所録。TBを38.7.2から45.1.0に更新した後のプラグインエラー

Thunderbirdの最近のアップデートで、プラグインが破損しました。これは、もうPaypalMsgsというフォルダが見つからないためです。

これはフォルダ見つけるためのコードである:

// determine the local root folder 
var localRootFolder = Components 
    .classes["@mozilla.org/messenger/account-manager;1"] 
    .getService(Components.interfaces.nsIMsgAccountManager) 
    .localFoldersServer 
    .rootFolder; 
// start with root folder to find folder with given name 
this.ppPaypalFldr = this.findFldrDeep(localRootFolder, "PaypalMsgs"); 

// recursive function to find a folder fldr with the name fldrName 
findFldrDeep: function(fldr, fldrName) { 
if(fldr.name == fldrName) { 
    return fldr; 
} else { 
    if(fldr.hasSubFolders) { 
     var fldrEnum = fldr.subFolders; 
     while(fldrEnum.hasMoreElements()) { 
      var sfldr = fldrEnum.getNext(); 
      var result = this.findFldrDeep(sfldr, fldrName); 
      if(result) { 
       return result; 
      } 
     } 
    } else { 
     return null; 
    } 
} 

を}、

実行何も起こらないとTBのエラーコンソールは示しています。ここで第1の位置で

Error: TypeError: this.ppPaypalFldr undefined

をthis.ppPaypalFldrが使用される

nsIMsgAccountManagerのサービスの定義が変更されたか、フォルダの種類が突然異なる機能を持つようなことは簡単なことかもしれませんが、信頼できる文書やTB 45のソースを見つけるのは本当に苦労します。

何かヒントやサポートをありがとう!

答えて

0

はもっとさがす、デバッグと考えて(!原文のまま)した後、私は問題を発見:ラインで

var sfldr = fldrEnum.getNext(); 

インターフェースが欠落しているとTB45に何かが、インターフェイスが自動的にではありませんので、変更されているように見えますどこからでも取り出された(約4〜5年後にこのインターフェースなしで動作したソフトウェア)。

だから、正しいラインは次のとおりです。

var sfldr = fldrEnum.getNext().QueryInterface(Components.interfaces.nsIMsgFolder); 

私もプラグインのすべてをチェックし、すべてのインタフェースを追加しました - 今、それは魔法のように動作します。

ここだけで問題を書くことは、解決策を見つけるのに大いに役立ちました;-)

関連する問題