mouseoverDictionaryのfirefox3用パッチ

MouseoverDictionary

fx3b3で入れてみた。install.rdfにもmax3.0って書いてあるのでいけると思ったんだけど、辞書を読み込むときに200,000を越えたところで

[Exception... "Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [mozIStorageStatement.bindUTF8StringParameter]" nsresult: "0x8000ffff (NS_ERROR_UNEXPECTED)" location: "JS frame :: chrome://mouseoverdictionary/content/options.js :: dict_loader :: line 95" data: no]

という例外が出まくって動かなかった。なんで200,000を越えたときに出始めるのか不明。
と書いておいたら直ってるのに期待するメソッド。

自分で直した

nsIFile.targetがfx3でNOT_IMPLEMENTEDらしいのと、あと自分の持ってるファイルがPDICテキスト1行形式じゃないっぽいのと。あとその持ってるデータだとkeyに重複があってそこでexceptionが出るのでcatchしまくってる。データはもっかいダウンロードしたりできないらしい。代替品があったら乗り換えたい...

--- options.orig.js	2006-08-21 21:37:52.000000000 +0900
+++ options.js	2008-03-05 23:08:46.000000000 +0900
@@ -56,7 +56,7 @@
 	}else{
 		stat.value  = "現在のデータ数:"+num_of_record+"項目\n"
 					+ "辞書を変更する場合,いったんFirefoxを完全に閉じて,\n"
-					+ file.target+"\n"
+					+ file.path +"\n"
 					+ "を削除してから,再度この画面で登録を行ってください.";
 		var loadbtn=document.getElementById('load');
 		loadbtn.disabled=true;
@@ -79,8 +79,10 @@
 	var temp = [];
 	var stat=document.getElementById('stat');
  
+ 
 	for(i=0;i<1000;i++)
 	{
+try {
 		if(!is.readLine(line)){
 			statement.reset();
 			is.close();
@@ -90,14 +92,28 @@
 			window.close();
 			return;
 		}
-		temp=line.value.split(" /// ");
-		statement.bindUTF8StringParameter(0, temp[0]);
-		statement.bindUTF8StringParameter(1, temp[1]);
+		//temp=line.value.split(" /// ");
+		temp=line.value.split(/ : /);
+		var k = temp.shift();
+		k = k.replace(/^■/, '')
+		var v = temp.join(" : ");
+		statement.bindUTF8StringParameter(0, k);
+		statement.bindUTF8StringParameter(1, v);
 		statement.execute();
+
+} catch(e) {
+	window.opener.opener.Firebug.Console.log([e, k, v]);
+		statement.reset();
+		mDBConn.executeSimpleSQL("END TRANSACTION");
+		mDBConn.executeSimpleSQL("BEGIN TRANSACTION");
+		statement = mDBConn.createStatement("INSERT INTO dict VALUES (?1,?2)");
+}
+
 	}
 	cnt+=1000;
 	stat.value=stat_prev+cnt+"個のデータを登録しました.";
 	setTimeout('dict_loader();',1);
+
 	return;
 }
 


どうでもいいけどFirefoxはFFって略すのがbugzilla.mozilla.orgとかgreasemonkey devとかみてて英語圏でもふつうみたいなのでそうしたほうがいいんだろうなとおもいつつ日本人的にはちょっとFFはなーとおもってそのままに。