2009年4月29日水曜日

自動インストールプラグインバージョン更新メッセージ表示

- 追記 -
えぇっと・・・この記事間違ってたようです。
改めて職場で実験したら見事にXSIが立ち上がるたびにポップアップウインドウが表示されてしまいました・・・
むぅ・・・やはり外部にファイルを置くしかないのか・・・。orz


最近仕事でバリバリと自動インストールプラグインを作成しております。
お陰でだいぶ慣れてきました。
半年にくらべてかなり上達したんじゃぁないだろうか??ヽ(´ー`)ノ

半年前に作ったプラグインの中身なんて見た日にゃ、目も開けられない状態なのです。w|;゚ロ゚|w ヌォオオオオ!!
つい最近も半年ほど前に作ったプラグインの修正要望が来たついでに、
良くしようと思ったらフルスクラッチになってしまったという…

それはそうと、プラグインを大量に作るようになって、更新の際に関係者に告知をするのが面倒になってきました。
告知時に関係者が全員いないこともあるわけで…。
なので、ここはプラグインが更新されたら自動的にポップアップウインドウを出して告知しようと思いました。

今まで職場で使われてきた方法は

  1. バージョン情報を別ファイルに記録
  2. プラグイン更新時に別ファイル内のバージョンと見比べて更新されているか判断
  3. 更新されていたら告知

でした。
でもそれってスマートじゃない!!
別ファイルだったら消されちゃった日にゃ泣くしかないじゃん!!
…と思ったので別手口を模索。

プラグインの更新を行うコマンド Application.UpdatePlugins(); ってのがあるんですが、
これって更新されたかどうかスクリプトログには出力されるのに、なんにも返してくれないんです。
使えねぇやつめ…。ヽ( ・∀・)ノ┌┛ガッΣ(ノ`Д´)ノ

そこで XSILoadPluginコールバックに注目。
XSILoadPluginコールバックはプラグインがロードされたら呼ばれる関数です。
なのでここでポップアップウインドウ出せばいいのでは!!
ということで試してみました。


////////////////////////////////////////////////////////////////////////
function XSILoadPlugin( in_reg )
{
in_reg.Author = "mochio";
in_reg.Name = "hogehoge";
in_reg.Email = "";
in_reg.URL = "";
in_reg.Major = 1;
in_reg.Minor = 0;

//コマンド登録
in_reg.RegisterCommand(hogehoge,hogehoge);
var msg = "\n" +
"■更新情報■\n"+
"いろいろと新しい昨日盛り込んでみました。\n" +
"詳しくはヘルプドキュメントをご覧下さい。";

XSIUIToolkit.MsgBox("――― Plugin " + in_reg.Name + "が更新されました。――――\n" + msg,siMsgOkOnly,"更新情報");

return true;
}
////////////////////////////////////////////////////////////////////////


  1.  プラグインファイルを更新
  2.  XSIでプラグインの更新をポチっとな
  3.  ポップアップウインドウが表示される。
  4.  もう一回XSIでプラグインの更新をポチっとな。
  5.  ポップアップウインドウは表示されず。

おぉ!!これいいのでは!?
しかし…
  1.  XSIを立ち上げる
  2.  かならずポップアップウインドウが表示される。∑ヾ( ̄0 ̄;ノ オーット!
という罠が…。
というのもXSIを立ち上げたときにもすべてのプラグインがロードされてるからですね。
そりゃそうか。ε=( ̄。 ̄;A フゥ…

まぁいっか~と放置して数日。
また気になり始めたので再度挑戦。

今度はXSILoadPluginコールバック内で、バージョン等を記述している点に注目。
ってことはその記述よりも前にバージョンを取得して、後に再度取得すればバージョンの比較ができんじゃねぇだろうか??
ということで試してみたのがρ( ̄∇ ̄o) コレ

////////////////////////////////////////////////////////////////////////
function XSILoadPlugin( in_reg )
{
//旧プラグインバージョンの確認(文字列なのはわざとよ~)
var Old_Plugin_Version = in_reg.Major + "." + in_reg.Minor;

in_reg.Author = "
mochio";
in_reg.Name = "hogehoge";
in_reg.Email = "";
in_reg.URL = "";
in_reg.Major = 1;
in_reg.Minor = 0;

//新プラグインバージョンの確認
var New_Plugin_Version = in_reg.Major + "." + in_reg.Minor;

//コマンド登録
in_reg.RegisterCommand(hogehoge,hogehoge);

if(Old_Plugin_Version != New_Plugin_Version){
var msg = "\n" +
"■バージョン情報■\n"+
Old_Plugin_Version + " >> "+ New_Plugin_Version + " \n\n" +
"■更新情報■\n"+
"いろいろと新しい昨日盛り込んでみました。\n" +
"詳しくはヘルプドキュメントをご覧下さい。";

XSIUIToolkit.MsgBox("――― Plugin " + in_reg.Name + "が更新されました。――――\n" + msg,siMsgOkOnly,"更新情報");

}

return true;
}
////////////////////////////////////////////////////////////////////////


こんどこそ出来た~~!!d(>_< )Good!!
これで更新情報を告知したいときはバージョン情報を書き換えればOKだわ~~!
一応個人的要件は満たしてるから満足。

…でももっと簡単な方法あったりします??
だれか知ってたら教えて下さいーー (;^_^A アセアセ・・・



拍手する