2008/06/01

todo.shをGoogle Talk経由で使う

※ 最新情報はこちら もうTODO管理なんてテキストファイルでいいじゃん、て思いつつもこっちの使い方でRTMも併用してて、でもそういえばtodo.shとか昔あったなとふいに思い出したので、IM(メッセンジャー)経由で使えるようにしてみた。使えるかは微妙。
設定ID: gttodo@gmail.com
もちろんGoogleTalkだけじゃなくiChatやJabberクライアント経由でも使えるはず。一応マルチユーザ対応。コマンドライン引数をそのまま渡して結果を受けとるだけ、という恐しい仕様なのでいたずら禁止、自己責任で。
Junji: -h
gttodo: Usage: todo.sh [-fhpqvV] [-d todo_config] action [task_number] [task_description]

Actions:
add "THING I NEED TO DO p:project @context"
a "THING I NEED TO DO p:project @context"
Adds TODO ITEM to your todo.txt.
...(そのまんまやん)
Junji: a 暇になったらリマインダー機能をつける @gttodo
gttodo: ok
Junji: a 時計の再修理の為、東急ハンズに行く
gttodo: ok
Junji: a 月末の経費精算がまだだ。。。
gttodo: ok
Junji: ls
gttodo: 02 時計の再修理の為、東急ハンズに行く
01 暇になったらリマインダー機能をつける @gttodo
03 月末の経費精算がまだだ。。。
--
TODO: 3 tasks in junji.shiokawa@gmail.com.todo.
Junji: pri 3 A
gttodo: ok
Junji: do 2
gttodo: 時計の再修理の為、東急ハンズに行く
Junji: lsa
gttodo: 003 (A) 月末の経費精算がまだだ。。。
002 x 2008-06-01 時計の再修理の為、東急ハンズに行く
001 暇になったらリマインダー機能をつける @gttodo
Junji: archive
gttodo: ok
Junji: ls
gttodo: 02 (A) 月末の経費精算がまだだ。。。
01 暇になったらリマインダー機能をつける @gttodo
--
TODO: 2 tasks in junji.shiokawa@gmail.com.todo.
Junji: ls gttodo
gttodo: 01 暇になったらリマインダー機能をつける @gttodo
自分だけの環境で使いたい場合は下記のソースでどうぞ(Python使える人はこっちにもっとまともな実装がある)。
<?php
require("class.jabber.php");
define('ME','junji.shiokawa@gmail.com');
$j = new Jabber();
$j->server = 'gmail.com';
$j->connect_server = 'talk.google.com';
$j->port = 5222;
$j->username = 'gttodo';
$j->password = '*****';
$j->resource = 'fork';
$j->log_filename = 'php://stdout';
$j->enable_logging = true;
$j->Connect();
$j->SendAuth();
$j->RosterUpdate();
$j->SendPresence();
chat(ME,'up');
while(1){
    if($j->connected == FALSE){
        $j->Disconnect();
        exit;
    }
    $j->CruiseControl(300);
 }

function Handler_message_chat($p) {
 global $j;
 $e = email($j->GetInfoFromMessageFrom($p));
 $b = body($j->GetInfoFromMessageBody($p));
    
 if ( $e == ME && $b == "kill" ) {
        chat($e,'ok');
        $j->Disconnect();
        exit;
    }else{

        $c="/bin/bash /mnt/supervise/gttodo/todo.sh -f -d /mnt/supervise/gttodo/data/$e.cfg ". ecmd($b) ." 2>&1";
        $p=popen($c, "r");
        while (!feof($p)) {
            $m.=fgets($p, 1024);
        }
        pclose($p);
        if(!trim($m)){
            $m='ok';
        }
        chat($e,$m);
    }
    
}

function Handler_presence_subscribe($p) {
    global $j;
    $f = $j->GetInfoFromPresenceFrom($p);
    $j->SubscriptionAcceptRequest($f);
    $j->RosterUpdate();
}

function Handler_presence_available($p) {
    global $j;
    $e = email($j->GetInfoFromPresenceFrom($p));
    exec("echo 'TODO_DIR=/mnt/supervise/gttodo/data
TODO_FILE=$e.todo
DONE_FILE=$e.done
REPORT_FILE=$e.report
TMP_FILE=$e.tmp
' > /mnt/supervise/gttodo/data/$e.cfg");
}

function chat($e,$m) {
    global $j;
    $j->SendMessage($e, "chat", NULL, array("body" =>$m));
}

function email($f) {
    return strtolower(array_shift(explode('/',$f)));
}

function body ($b) {
    return trim(mb_convert_kana($b,'KVas','UTF-8'));
}

function ecmd ($c) {
    $c=preg_replace('/-f|-d/','',$c);
    $c=preg_replace('/([#&;\|`<>\^\(\)\[\]\{\}\$\\\])/','\\\$1',$c);
    return $c;
}

?>
※IM系のネタではこっちgtgchat@gmail.comを登録すると使えるグループチャットもどきもつくってみた。

0 コメント: