From 5a0be3b0bd050f65aad63570adffeaeb8974c8dc Mon Sep 17 00:00:00 2001 From: anekos Date: Sat, 18 Sep 2010 23:46:22 +0000 Subject: 複数のストリームで同じツイートがでてこないようにした git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@38491 d0d07461-0603-4401-acd4-de1884942a52 --- twittperator.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/twittperator.js b/twittperator.js index 7acc1f7..6f97018 100755 --- a/twittperator.js +++ b/twittperator.js @@ -1230,6 +1230,16 @@ let PLUGIN_INFO = let restartCount = 0; let startTime; + // 極めて適当につくってます。 + // ステータスに対してユニークな文字列を返せばよい + // XXX s.id でも良い? + function getStatusHash(s) { + let result = ''; + for (let [k, v] in Iterator(s)) + result += k + '\t' + (v && typeof v === 'object' ? getStatusHash(v) : v) + '\n'; + return result; + } + function restart() { stop(); @@ -1318,7 +1328,6 @@ let PLUGIN_INFO = restartCount = 0; let data = sis.read(len); - liberator.log(name + ':\n' + data); let lines = data.split(/\r\n|[\r\n]/); if (lines.length >= 2) { lines[0] = buf + lines[0]; @@ -1351,6 +1360,14 @@ let PLUGIN_INFO = } function onMsg(msg, raw) { + let hash = getStatusHash(msg) + if (recentTweets.some(function (it) it === hash)) + return false; + + recentTweets.unshift(hash); + if (recentTweets.length > 10) + recentTweetsistory.splice(10); + listeners.forEach(function(listener) liberator.trapErrors(function() listener(msg, raw))); if (msg.text) @@ -2029,6 +2046,7 @@ let PLUGIN_INFO = trackWords: gv.twittperator_track_words, }); + let recentTweets = []; // 複数の Stream で同じものが出現するのを防ぐもの let statusRefreshTimer; let expiredStatus = true; -- cgit v1.2.3