微妙に現れる不具合やパフォーマンスの低下を何とかしようと、ここの所SuperSwiki の日本語化問題に取り組んでいる。これは長くて苦しい茨の道である。しかしなんとなく道筋が分かってきたので書いておく。プロジェクトの保存は、Project>>storeOnServerShowProgressOn:forgetURL: から処理が始まる。しかしあわててここからデバッグしたりベンチマークを取ろうとするとドツボにはまる。プロジェクト保存時にモーダルダイアログを表示するため、相当トリッキーな処理をしているため、全くデバッグを寄せ付けない。そういうややこしい所を抜かして本質的なコードから入らなくてはならない。様々な準備を含め、デバッグに参考になるコードは以下のようになる。
"プロジェクトの準備、保存サーバやプロジェクト名を設定しておく" Project current storeNewPrimaryURL: 'http://languagegame.no-ip.com/super/SuperSwikiProj/'. projectName _ '実験です'. Project current renameTo: projectName. World setProperty: #ProjectDetails toValue: (Dictionary new add: 'projectname' -> projectName; yourself). CurrentProjectRefactoring xxxCurrent flapsSuppressed: true. "フラップが邪魔" Project current storeOnServerWithProgressInfo. "実際の保存処理" CurrentProjectRefactoring xxxCurrent flapsSuppressed: false. "フラップを戻す"
実際にはプロジェクト保存のメインルーチンとでも言える箇所は Project >> storeOnServerInnards になる。ここで、以下のような順序で保存/アップロード処理が行われる。
- バージョン番号の決定
- ローカルへの保存 (Project >> exportSegmentFileName:directory:)
- サーバにアップロード (Project >> writeFileNamed:fromDirectory:toServer:)
なんでこんな長いメソッドを書くのだ。。。