desknet's

desknet's

[3] Desknet's は、グループウェアです。

[1] 研究上、やむを得ず身に付いていくIT関連技術 ( ( 版)) <http://www.cbrc.jp/~tominaga/tips/>

[2] >>1 の i2d (iCalDesknet's) だと微妙にうまく動かなかったので差分:

--- i2d.orig    2004-02-12 20:01:59.000000000 +0900
+++ i2d.pl      2005-09-10 20:33:52.000000000 +0900
@@ -1,5 +1,6 @@
 #!/usr/local/bin/perl
-$iCalCalendar = "Library/Calendars/official.ics"; # $HOME 以下の場所
+my $iCalCalendar = shift;
+#$iCalCalendar = "Library/Calendars/official.ics"; # $HOME 以下の場所
 #
 # iCal (by Apple, Sep. 2002) の出力(vCalendar形式)をNeoJapanのDesknet'sが使う
 # CSVの形式に変換するフィルタ
@@ -71,6 +72,8 @@
 # とりあえず全部読み込んで、Unicode にして配列 @reserved に入れておく
 # 1行目は各フィールドの説明、2行目にだけユーザーIDとユーザー名が書いてある

+=pod
+
 $dnetCalendar = $ARGV[0]; # 第一引数で指定されていなければならない。

 if (open(DNET, $dnetCalendar)) {
@@ -88,13 +91,15 @@
   chop($UserSystemID); chop($UserName);
 }

+=cut
+
 # iCal Calendar からのイベント情報抽出と整形 ##################################
 # イベント抽出、イベント整形を1セットにして繰り返す
 # 抽出したイベント情報は、desknet's の形式にして1イベント1行にまとめて、
 # @events に入れる

 # iCal のカレンダーファイルをまずオープン。ここから読みとる。
-$iCalCalendar = $ENV{'HOME'} . "/" . $iCalCalendar;
+#$iCalCalendar = $ENV{'HOME'} . "/" . $iCalCalendar;
 open(ICAL, $iCalCalendar) || die("iCal calendar? ->" . $iCalCalendar . "\n");

 while (<ICAL>) {
@@ -102,7 +107,7 @@
     $content = $sdate = $edate = $comment = "";
     # まずイベント抽出(イベントの内容を変数に格納する)
     while (<ICAL>) {
-      s|\n$||;                       # 入力行の行末の改行を削除
+      tr|\x0D\x0A||d;                       # 入力行の行末の改行を削除

       # 入力行のチェック
       if (/^END:VEVENT/) { last; }   # イベント定義終了、次のイベント定義を探す
@@ -135,7 +140,7 @@
     $sdate =~ /^[0-9]{4}([0-9]{2})/; $m = $1;  # 月の抽出 20020920 -> 09
     $sdate =~ /^[0-9]{6}([0-9]{2})/; $d = $1;  # 日の抽出 20020920 -> 20
     # 時刻の指定があった場合
-    if ($sdate =~ /T([0-9]{2})([0-9]{2})..$/) { $stime = $1.":".$2; }
+    if ($sdate =~ /T([0-9]{2})([0-9])[0-9]..$/) { $stime = $1.":".$2."0"; }
     else                                      { $stime = ""; }
     $sdate = $y . "/" . $m . "/" . $d;          # -> 2002/09/20

@@ -143,7 +148,7 @@
     $edate =~ /^([0-9]{4})/;         $y = $1;
     $edate =~ /^[0-9]{4}([0-9]{2})/; $m = $1;
     $edate =~ /^[0-9]{6}([0-9]{2})/; $d = $1;
-    if ($edate =~ /T([0-9]{2})([0-9]{2})..$/) { $etime = $1.":".$2; }
+    if ($edate =~ /T([0-9]{2})([0-9]{2})..$/) { $etime = $1.":".sprintf("%02d",
int($2 * 0.1)*10); }
     else                                      { $etime = ""; }
     # 終日イベントの処理
     if ($stime eq "") { $edate = $sdate; }     # 時刻の指定がないとき
@@ -242,6 +247,7 @@
   $comstr = "";
   @clist = split(m|\\n|, $comment);  # 文字列 \n で分割
   foreach (@clist) {
+    tr/\x0D\x0A//d;
     s|\n$||;                         # 行末の改行を削除
     if (/^$/)  { next; }             # 元々空行のところだったらスキップ
     s|\\"|"|g;                       # \" をただの " に置き換え