Browse Source

cache your own mentions locally. much better user experience imho (the old thing was annoying me!). please test.

master
Miguel Freitas 11 years ago committed by toyg
parent
commit
3ef824d6e9
  1. 2
      interface_common.js
  2. 4
      tmobile.js
  3. 28
      twister_newmsgs.js

2
interface_common.js

@ -181,6 +181,8 @@ function openMentionsModal(e)
//título do modal //título do modal
$( "."+hashtagModalClass + " h3" ).text( polyglot.t("users_mentions", { username: username }) ); $( "."+hashtagModalClass + " h3" ).text( polyglot.t("users_mentions", { username: username }) );
// obtain already cached mention posts from twister_newmsgs.js
processHashtag(hashtagModalContent.find(".postboard-posts"), defaultScreenName, getMentionsData() );
resetMentionsCount(); resetMentionsCount();
} }

4
tmobile.js

@ -530,6 +530,10 @@ function setupHashtagOrMention( ulElem, tag, res) {
$.MAL.setPostTemplate( $("#post-template-home") ); $.MAL.setPostTemplate( $("#post-template-home") );
$.mobile.showPageLoadingMsg(); $.mobile.showPageLoadingMsg();
clearHashtagProcessed(); clearHashtagProcessed();
if( tag == defaultScreenName && res == "mention" ) {
// obtain already cached mention posts from twister_newmsgs.js
processHashtag(hashtag_elem, defaultScreenName, getMentionsData() );
}
requestHashtag(hashtag_elem,hashtag_tag,hashtag_res); requestHashtag(hashtag_elem,hashtag_tag,hashtag_res);
} }

28
twister_newmsgs.js

@ -9,31 +9,33 @@
var _knownMentions = {} var _knownMentions = {}
var _lastMentionTime = 0; var _lastMentionTime = 0;
var _newMentions = 0; var _newMentions = 0;
var PURGE_OLD_MENTIONS_TIMEOUT = 3600 * 24 * 30; // one month
// process a mention received to check if it is really new // process a mention received to check if it is really new
function processMention(user, mentionTime) { function processMention(user, mentionTime, data) {
var key = user + ";" + mentionTime; var key = user + ";" + mentionTime;
var curTime = new Date().getTime() / 1000; var curTime = new Date().getTime() / 1000;
if( mentionTime > curTime + 3600 ) { if( mentionTime > curTime + 3600 ) {
console.log("mention from the future will be ignored"); console.log("mention from the future will be ignored");
} else { } else {
// mention must be somewhat newer compared to last known one to be considered
if( mentionTime + 3600 > _lastMentionTime ) {
if( !(key in _knownMentions) ) { if( !(key in _knownMentions) ) {
_knownMentions[key] = mentionTime; // mention must be somewhat recent compared to last known one to be considered new
_lastMentionTime = mentionTime; if( mentionTime + 3600 > _lastMentionTime ) {
_newMentions++; _newMentions++;
_lastMentionTime = mentionTime;
}
_knownMentions[key] = {mentionTime:mentionTime, data:data};
purgeOldMentions(); purgeOldMentions();
saveMentionsToStorage(); saveMentionsToStorage();
} }
} }
}
} }
function purgeOldMentions() { function purgeOldMentions() {
for( var key in _knownMentions ) { for( var key in _knownMentions ) {
if( _knownMentions.hasOwnProperty(key) ) { if( _knownMentions.hasOwnProperty(key) ) {
if( _knownMentions[key] + 3600 < _lastMentionTime ) { if( !_knownMentions[key].mentionTime || !_knownMentions[key].data ||
_knownMentions[key].mentionTime + PURGE_OLD_MENTIONS_TIMEOUT < _lastMentionTime ) {
delete _knownMentions[key]; delete _knownMentions[key];
} }
} }
@ -63,7 +65,7 @@ function requestMentionsCount() {
if( data ) { if( data ) {
for( var i = 0; i < data.length; i++ ) { for( var i = 0; i < data.length; i++ ) {
var userpost = data[i]["userpost"]; var userpost = data[i]["userpost"];
processMention( userpost["n"], userpost["time"]); processMention( userpost["n"], userpost["time"], data[i]);
} }
$.MAL.updateNewMentionsUI(_newMentions); $.MAL.updateNewMentionsUI(_newMentions);
} }
@ -84,6 +86,16 @@ function initMentionsCount() {
setInterval("requestMentionsCount()", 10000); setInterval("requestMentionsCount()", 10000);
} }
function getMentionsData() {
mentions = []
for( var key in _knownMentions ) {
if( _knownMentions.hasOwnProperty(key) && _knownMentions[key].data ) {
mentions.push(_knownMentions[key].data);
}
}
return mentions;
}
// --- direct messages --- // --- direct messages ---
var _lastDMIdPerUser = {}; var _lastDMIdPerUser = {};

Loading…
Cancel
Save