ももらぼっ!にっき


2003年05月07日

_ [tDiary][Becky] tDiaryをBeckyで更新するPluginを微調整。

エラーを適当にrescueしてあげたり、URIクラスを使うことでX-tDiary-Hogeの数を減らしたりするようにした。なんか使うライブラリが増えて遅くなってしまった気がするが気のせいということにしておこう。

class CallbackTDiary
  # tDiaryメールのアドレス
  TDiaryAddres = 'tDiary'
 
  def on_send(msg)
    begin
      # tDiaryメールを取得
      require 'tmail'
      mail = TMail::Mail.parse(msg)
      return 0 if !mail.to.include?(TDiaryAddres)
 
      # パラメータの解釈
      require 'uri'
      time = parse_date(mail.subject.untaint)
      uri = get_header(mail, 'X-tDiary-URI')
      raise "X-tDiary-URI ヘッダを指定していない。" if uri.nil?
      uri = URI::parse(uri)
      proxy_host = get_header(mail, 'X-tDiary-Proxy')
      proxy_host, proxy_port, = proxy_host.split(':') unless proxy_host.nil?
 
      # 送信データ作成
      require 'kconv'
      require 'cgi'
      body = mail.body.tosjis.untaint
      data = "year=#{time.year}&month=#{time.month}&day=#{time.day}&title=&body=#{CGI::escape(mail.body.tosjis)}&append=#{CGI::escape(' 追加 ')}"
 
      # 送信
      begin
        require 'net/http'
        Net::HTTP.start( uri.host, uri.port, proxy_host, proxy_port ) do |http|
          response = http.post( uri.request_uri, data, 'Authorization' => 'Basic ' + ["#{uri.user}:#{uri.password}"].pack('m').strip )
        end
      rescue Exception
        raise "送信できない:#{$!}"
      end
 
      return Becky::ONSEND_PROCESSED
    rescue
      messageBox($!.to_s, "tDiary失敗")
      return Becky::ONSEND_ERROR
    end
  end
 
private
  # Timeオブジェクトを生成
  def parse_date(d)
    case d.downcase
      when 'now', 'today'
        time = Time::now
      else
        require 'parsedate'
        time = Time::local *(ParseDate::parsedate(d))[0..-3]
    end
  end
 
  # TMail::Mailよりuntaintしたヘッダを取得
  def get_header(mail, header)
    h = mail[header]
    h = h.to_s.untaint unless h.nil?
    return h
  end
 
  # メッセージボックス表示
  def messageBox(msg, title)
    require 'Win32API'
    messagebox = Win32API.new('user32', 'MessageBox', %w(p p p i), 'i')
    messagebox.call(0, msg, title, 0)
  end
end
 
Becky.add_callback CallbackTDiary.new

_ [V友] ふとももを久しぶりに使ってみた。

めちゃくちゃ久しぶりに、ふとももを使ってみたんだけど。結構ちゃんと作りこんでいたんだねぇ。我ながらちょっと感心。データもまっさらだから速いし。

で。なんか、「スレッド表示するとROOTの投稿以外は未読の*が太字にならない」とか「Alt+TabしたときのアイコンがVBのデフォルトのまま」とか「クエリー検索ダイアログで右側のリストからD&Dしたときは[Table名].[Field名]の方がいいかも」とか「クエリー検索ダイアログが出てるときはAlt+Tabのリストに出てこない」とかなんか細かい問題(?)をいろいろ見つけてしまった。

・・・修正したほうが良い?(汗)

_ [V友] ふとももの続き。

さらに、「関連検索で、ROOTが同一IDの別掲示板の投稿も表示されてしまう(ことがある?)」問題も発見。ただしいまいち再現手順がつかめず・・・。

_ [TTBase] オープンソース化。

された。原作者(既にそんな呼び方でいいのか?(汗))であるK2さんは、TTBaseに時間を割けなくなってしまっているようで、それならば、とオープンソース化を提案してくださった。そんでまー、一応プラグインを(多分)一番大量に公開してしまっている身としては、役に立たねばならんだろうとゆーことで、Delphi書けないくせにsourceforge.jpのプロジェクト管理者に名乗りをあげてしまったのであった。

まぁ、TTBaseに実装して欲しかった機能があったりしていたので、願ったりかなったりなのかもしれない。まずは、Delphiになれないといけないのかな。

とりあえずはわかるところから、ということでプロジェクトホームページにPukiWikiを立ててみたんだけど、やっぱりWiKiは便利だね。でも、プラグインのアップ場所として使うって利用法は思いつかなかった。いい案かもしれない。UPできる体裁を整えてみようか。