:subsub (更新チェックされないフィードを検出) コマンドの修正

id:reinyannyan:20060530:p2 で、登録したもののフィード一覧に出てこないフィードを検出するコマンド (:subsub) を作りました。


最近の LDR のアップデートにより、このコマンドで表示されたフィードを開くことが出来なくなったため、修正したいと思います。

// ==UserScript==
// @name          LDR Command ":subsub"
// @namespace     http://d.hatena.ne.jp/reinyannyan/20060914/p1
// @include       http://reader.livedoor.com/reader/*
// ==/UserScript==

(function() {with (unsafeWindow) {
    Hook.extend({
        remove: function(f) {
            this.callbacks = this.callbacks.remove(f);
        }
    });

    function filter_all_subs(params) {
        message(params.message);

        var showall = Config.show_all;
        if (!showall) Config.show_all = true;
        subs.filter = function(model){return model.filter(params.filter)};
        subs.update(true);

        // Add a cleanup hook
        after_subs_load.add(function() {
            subs.filter = null;
            Config.show_all = showall;
            params.onload && params.onload();
            after_subs_load.remove(arguments.callee);
        });
    }

    register_command("subsub", function() {
        filter_all_subs({
            filter: function(item) {
                return !(item.modified_on && item.subscribers_count);
            },
            message: '\u6c88\u3093\u3067\u308b\u30d5\u30a3\u30fc\u30c9\u3092'+
                     '\u63a2\u3057\u4e2d...'
        });
    });
}})();

(未テストです。不具合がありましたらお知らせください)

汎用的な部分を別関数として切り分け、フィルター関数を個別に設定することにより、独自の vi コマンドを作りやすいようにしています。

全フィードを表示するのはイヤだけれど、特定の条件 (フォルダ、レート、タイトル等等) に当てはまるものだけ、既読分も含めて表示したい、という要求を実現することができます。


今回の :subsub に関しては、更新時刻が記録されていないもの (更新が 44xヶ月前と表示されてしまうもの) に加え、購読者数が 0 のものも検出するようにしました。

購読者が 0 のフィードというのは、他に購読者がいない時に稀に発生することがあるものです。ping により手動で更新取得することは可能なんですが、クローラーによる更新チェックは行われず、1 に修正されることも無いように思います。

現状では手で購読解除 -> 再登録するしかない、やっかいなフィードです。


追記 [20060915]:
スコープの関数の "()" を忘れてました。これでは実行されません。大変失礼しました