Curl Global Community
実行されているアプレットが最新かどうかを判断するには - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: 実行されているアプレットが最新かどうかを判断するには (/showthread.php?tid=1028)



実行されているアプレットが最新かどうかを判断するには - umemura - 01-14-2014

Curlアプレットを実行した際に、そのアプレットが最新のソースと同期が取れているかどうかを確認したいのですが、
どのような方法があるのでしょうか。


RE: 実行されているアプレットが最新かどうかを判断するには? - umemura - 01-14-2014

process-resync-as-of が返す値の内容を理解できていないのが悪いのかもしれませんが、
manifest.mcurl のヘッダ情報(HttpResponseHeaders)を取得するようにしてみました。
アプレット起動後に、マニフェストファイルを取得する、というのが美しくありませんが・・・。

Code:
||対象URLの最終更新日時を取得する
{define-proc public {get-url-last-modified-time
                        u:#Url,
                        ||タイムゾーン
                        ||GMT で取得された更新日時をローカル(日本)時間に変換する
                        zone:DateTimeZone = DateTimeZone.local,
                        ||レスポンスヘッダーの「最終更新日時」のキー値
                        ||※サーバによって異なる?
                        last-modified-key-name:String = "Last-Modified"
                    }:#DateTime

    let dt:#DateTime = null

    {type-switch  {u.resolve}

    case lf:LocalFile do
        ||ローカルから取得された場合(file://)
        set dt = lf.when-last-modified

    case hf:HttpFile do
        ||ウェブから取得された場合(http://)

        let tis:#HttpByteInputStream  = null
        {try
            set  tis =  {hf.http-read-open-byte}
            def headers =tis.response-headers
            {for k in {headers.keys-to-Iterator} do
                {if k == last-modified-key-name then
                    set dt =  {HttpHeaders.http-header-string-to-date-time
                                  headers[k]
                              }
                }
            }
         finally
            {if-non-null tis then {tis.close} }
        }
    }
    ||タイムゾーンを設定
    {if-non-null dt then
        set dt.zone = zone
    }
    {return dt}
}

{CommandButton
    label = "マニフェストファイルの最終更新日時",
    {on Action do
        ||マニフェストの取得
        def m = {get-current-manifest}
        {if-non-null dt = {get-url-last-modified-time m.source-url} then
            {popup-message dt}
        }
    }
}

もっと良い方法をご存知の方がいらっしゃいましたら
教えていただけるとありがたいです。