おれとz3plusとmortscriptとnpopとtmailとメール着信とLEDとバイブとお前と大五郎 _

おれのアドエス(w-zero3, advanced es, ws011sh)にて、IrisBrowserとQMAIL3の相性が悪いので、nPOPとTMAILでADesのバイブ・LED点灯消灯連携をmortscriptでがんばってみた。

まぁnPOPというか、nPOPuk。こっちのほうが手が加えられていてよい。

未読状況については、外部から読み書きできるメールボックスへの実ファイルへnPOP終了後に反映される。だもんでメールボックスのファイルのタイムスタンプをnPOP終了まで2秒おきにチェック。タイムスタンプに変化、つまり終了後に、メールボックスファイルを1回スキャンして各X-Status行の16桁目が1かどうかチェックして終了する。全て既読ならLED消灯などする。未読を残したままnPOPを終了したときのことは放置。

(編集:20090406-0030)

# 受信時にnPOPをkick&LED点灯から未読完了時のLED消灯まで面倒見るmortscript

#install:
#nPOPと同じフォルダにでもコピー。
#んで各pathとOptionを環境に合わせて見直しとくれ。

#define:
#nPOP本体
file_exe_npop = "\Program Files\nPOPs\nPOPuk.exe"

#tmail本体
file_exe_tmail = "\Program Files\YUUKI\TMAIL\Core.exe"
file_exe_tmail_opt0 = "/ControlTest1" #着信時鳴動用オプション
file_exe_tmail_opt1 = "/ResetLED:A" #未読完了時LED消灯用オプション

#z3plus本体
file_exe_z3plus = "\Program Files\YUUKI\Z3Plus\Z3Plus.exe"
file_exe_z3plus_opt0 = "/Reset" #未読完了時アイコンリセット用オプション

#nPOPのメールボックス本体
file_mailbox="\Application Data\nPOP\MailBox1.dat"

#デバッグ用ステータス窓
StatusMessage( "Step 1", ST_LIST, TRUE )
StatusShow()

#nPopをKickする
ts_mailbox = FileModifyTime( file_mailbox )
Run( file_exe_npop )
StatusMessage('boot npop')

# 未読を保存箱に書き込んだかどうか2秒間隔で20回までチェック
chkloop=20
waittime=2000
While(chkloop > 0)
    #メールチェック時に保存箱へのコピーとしてファイルのタイムスタンプを更新しているかどうか
    If( ts_mailbox <> FileModifyTime( file_mailbox ) )
        StatusMessage('mailbox updated.')
        boxstat=0
        #mailboxをスキャンする
        line =ReadLine( file_mailbox )
        While(NOT IsEmpty( line ))
            #未読を探す #X-Status: xxxx11
            f0 = Find( line, "X-Status:", 0 )
            f1 = Find( line, "1", 16 )
            boxstat = boxstat + f0 * f1
            StatusMessage('mb unread found')
            line =ReadLine( file_mailbox )
        EndWhile
        chkloop=0
    Else
        #まつ
        chkloop=chkloop-1
        StatusMessage('mbchk loop sleep:' & chkloop )
        sleep( waittime )
    EndIf
EndWhile

StatusMessage('mailchk done')

If(boxstat > 0)
  #未読があればLED,Vibe
  Run( file_exe_tmail, file_exe_tmail_opt0 )
  StatusMessage('ring ring')
  chkloop=1
Else
  #なければ消灯
  chkloop=0
  StatusMessage('no new mail')
  Run( file_exe_z3plus, file_exe_z3plus_opt0 )
  Run( file_exe_tmail, file_exe_tmail_opt1 )
EndIf

# nPOP終了時に未読完了→LED消灯まで面倒を見る
# 未読をほったらかしたままnPOP終了してるなら知らん。
waittime=2000
While(chkloop = 1)
    #nPOP終了時にファイルのタイムスタンプを更新しているかどうか
    If( ts_mailbox <> FileModifyTime( file_mailbox ) )
        StatusMessage('npop exited')
        boxstat=0
        #mailboxをスキャンする
        line =ReadLine( file_mailbox )
        While(NOT IsEmpty( line ))
            #未読を探す #X-Status: xxxx11
            f0 = Find( line, "X-Status:", 0 )
            f1 = Find( line, "1", 16 )
            boxstat = boxstat + f0 * f1
            StatusMessage('exite with unread msg')
            line =ReadLine( file_mailbox )
        EndWhile
        chkloop=0
    Else
        #まつ
        StatusMessage('npop exit wait:' & chkloop )
        sleep( waittime )
    EndIf
EndWhile

#未読が見つからなかったら消灯
If(boxstat = 0)
    StatusMessage('no unread')
    Run( file_exe_z3plus, file_exe_z3plus_opt0 )
    Run( file_exe_tmail, file_exe_tmail_opt1 )
EndIf

それなりに動いた。nPOPを終了させるまでLEDつきっぱなしってどうよとも思うけど。笑い

こういうのを書きながら、やっぱPDAアプリは他のツールと連携しやすいようにコマンドラインオプションによるメソッドやプロパティへのアクセス、起動コマンド関連付けができるイベントを豊富に用意しておくべきだなーと思った。svn coしてきたnPOPukをeVC4でいじくる勇気を。

iPhoneアプリでも「バックグラウンド動作は要らない。各アプリ間が適切にメッセージをやり取りできれば済む話だ」というのもそういう話だね。まーアプリ間API整備どうすんの、AppStoreよろしくまた開発者同士で空気の読みあいさせるの?ってのは思うけど。


[戻る]