Skip to content

Commit

Permalink
Merge pull request miguelfreitas#370 from miguelfreitas/blaster
Browse files Browse the repository at this point in the history
sync with blaster
  • Loading branch information
miguelfreitas committed Aug 8, 2017
2 parents 9c46573 + a9b3bf0 commit 43d3169
Show file tree
Hide file tree
Showing 14 changed files with 1,375 additions and 316 deletions.
1 change: 1 addition & 0 deletions home.html
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
<script src="js/interface_common.js"></script>
<script src="js/interface_home.js"></script>
<script src="js/jquery.textcomplete.min.js"></script>
<script src="js/twister-crypto-bundle.js"></script>

<link rel="shortcut icon" type="image/png" href="img/twister_mini.png" />
</head>
Expand Down
15 changes: 4 additions & 11 deletions js/interface_common.js
Original file line number Diff line number Diff line change
Expand Up @@ -672,17 +672,10 @@ function openMentionsModalHandler(peerAlias) {
});

var req = queryStart(modal.content.find('.postboard-posts'), peerAlias, 'mention');
modal.content.find('.postboard-news')
.on('click',
{req: req, cbFunc: (peerAlias === defaultScreenName) ? resetMentionsCount : ''},
handleClickDisplayPendingTwists
)
;
modal.content.find('.postboard-news').on('click', {req: req}, handleClickDisplayPendingTwists);

if (peerAlias === defaultScreenName) {
if (peerAlias === defaultScreenName)
modal.content.on('scroll', handleMentionsModalScroll);
resetMentionsCount();
}
}

function openFollowersModal(peerAlias) {
Expand Down Expand Up @@ -943,9 +936,9 @@ function addToCommonDMsList(list, targetAlias, message) {
getFullname(targetAlias, item.find('a.post-info-name'));
}

if (_newDMsPerUser[targetAlias] > 0)
if (twister.DMs[targetAlias].lengthNew > 0)
item.addClass('new')
.find('.messages-qtd').text(_newDMsPerUser[targetAlias]).show();
.find('.messages-qtd').text(twister.DMs[targetAlias].lengthNew).show();

var items = list.children();
for (var i = 0; i < items.length; i++) {
Expand Down
799 changes: 785 additions & 14 deletions js/interface_localization.js

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions js/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,10 @@ function twisterOptions() {
name: 'dmCopySelf',
valDefault: 'enable'
});
this.add({
name: 'dmEncryptCache',
valDefault: 'enable'
});
this.add({
name: 'hideReplies',
valDefault: 'following'
Expand Down
60 changes: 34 additions & 26 deletions js/tmobile.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,23 +273,37 @@ var router=new $.mobile.Router(
$.mobile.showPageLoadingMsg();
initializeTwister( true, true, function() {
$.mobile.showPageLoadingMsg();
requestDMsnippetList($('#directmsg .direct-messages-list'));
modalDMsSummaryDraw($('#directmsg .direct-messages-list'));
});
},
dmchat: function(type,match,ui) {
var params=router.getParams(match[1]);
$.mobile.showPageLoadingMsg();
initializeTwister( true, true, function() {
var user = params.user;
var dmConvo = $('#dmchat .direct-messages-thread');
$("#dmchat .rtitle").text("Chat @" + user);
var peerAlias = params.user;
var board = $('#dmchat .direct-messages-thread').empty();

$('#dmchat .rtitle').text('Chat @' + peerAlias);
$("#dmchat textarea").val("");
dmConvo.html("");
installDMSendClick();
installDMSendClick(peerAlias);

$.mobile.showPageLoadingMsg();
dmChatUser = user;
requestDmConversation(dmConvo,user);

tmobileQueryReq = queryStart(board, peerAlias, 'direct', undefined, 2000, {
boardAutoAppend: true,
lastId: 0,
lengthNew: 0,
ready: function (req, peerAlias) {
twister.DMs[peerAlias] = twister.res[req];
},
readyReq: peerAlias,
drawFinish: function (req) {
setTimeout($.MAL.dmConversationLoaded, 200, twister.res[req].board);
},
skidoo: function (req) {
return $.mobile.activePage.attr('id') !== 'dmchat' || req !== tmobileQueryReq;
}
});
});
},
search: function(type,match,ui) {
Expand Down Expand Up @@ -390,23 +404,21 @@ function installSubmitClick() {
});
}

function installDMSendClick() {
var $postSubmit = $(".dm-submit");
$postSubmit.unbind('click').click(function(e){
e.stopPropagation();
e.preventDefault();
var $this = $( this );
var $replyText = $this.closest(".post-area-new").find("textarea");
function installDMSendClick(peerAlias) {
$('.dm-submit').off('click').on('click', {peerAlias: peerAlias},
function (event) {
muteEvent(event, true);

var $dmConversation = $(".directMessages");
var elemTextArea = $(event.target).closest('.post-area-new').find('textarea');
if (!elemTextArea.val())
return;

var s = encode_utf8($replyText.val());
newDirectMsg(s, dmChatUser);
$replyText.val("");
});
newDirectMsg(encode_utf8(elemTextArea.val()), event.data.peerAlias);
elemTextArea.val('');
}
);
}


function installRetransmitConfirmClick() {
var $postConfirmRt = $(".retransmit-confirm");
$postConfirmRt.unbind('click').click(function(e){
Expand Down Expand Up @@ -535,15 +547,13 @@ function setupHashtagOrMention(board, query, resource) {
$.mobile.showPageLoadingMsg();
board.empty();

var req = queryStart(board, query, resource, undefined, undefined, {
tmobileQueryReq = queryStart(board, query, resource, undefined, undefined, {
boardAutoAppend: true,
skidoo: function (req) {
var curPage = $.mobile.activePage.attr('id');
return (curPage !== 'mentions' && curPage !== 'hashtag') || req !== tmobileQueryReq;
}
});

tmobileQueryReq = req;
}

// every 2 seconds do something page specific.
Expand All @@ -565,8 +575,6 @@ function tmobileTick() {
}
}, {} );
}
if (curPage === 'dmchat')
requestDmConversation($('#dmchat .direct-messages-thread'), dmChatUser);
}

$(document).bind('mobileinit', function () {
Expand Down
135 changes: 123 additions & 12 deletions js/twister_actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,24 @@ function updateProfilePosts(postsView, username, useGetposts) {
});
}

function queryCreateRes(query, resource, extra) {
var req = query + '@' + resource;
twister.res[req] = {
query: query,
resource: resource,
lengthCached: 0,
twists: {
cached: {},
pending: []
}
};
if (extra)
for (i in extra)
twister.res[req][i] = extra[i];

return twister.res[req];
}

function queryStart(board, query, resource, timeoutArgs, intervalTimeout, extra) {
var req = query + '@' + resource;

Expand All @@ -444,6 +462,7 @@ function queryStart(board, query, resource, timeoutArgs, intervalTimeout, extra)
board: board,
query: query,
resource: resource,
lengthCached: 0,
twists: {
cached: {},
pending: []
Expand All @@ -462,6 +481,15 @@ function queryStart(board, query, resource, timeoutArgs, intervalTimeout, extra)
if (twister.res[req].twists.pending.indexOf(i) === -1)
twister.res[req].twists.pending.push(i);

if (extra) {
if (typeof extra.drawFinish === 'function') {
twister.res[req].drawFinish = extra.drawFinish;
twister.res[req].drawFinishReq = extra.drawFinishReq;
}
if (typeof extra.skidoo === 'function')
twister.res[req].skidoo = extra.skidoo;
}

queryPendingDraw(req);
}

Expand Down Expand Up @@ -510,27 +538,45 @@ function queryRequest(req) {
} else if (twister.res[req].resource === 'fav')
twisterRpc('getfavs', [twister.res[req].query, 1000],
queryProcess, req);
else
else if (twister.res[req].resource === 'direct') {
var lengthStandard = 100; // FIXME there may be the gap between .lastId and the lesser twist.id in response greater than 100 (very rare case)
if (twister.res[req].lengthCached < Math.min(twister.res[req].lastId, lengthStandard)
&& !twister.res[req].triedToReCache) {
twister.res[req].triedToReCache = true;
var length = Math.min(twister.res[req].lastId + 1, lengthStandard);
var query = [{username: twister.res[req].query, max_id: twister.res[req].lastId}];
} else
var length = lengthStandard, query = [{username: twister.res[req].query, since_id: twister.res[req].lastId}];

twisterRpc('getdirectmsgs', [defaultScreenName, length, query],
queryProcess, req,
function (req, res) {
console.warn(polyglot.t('ajax_error', {error: (res && res.message) ? res.message : res}));
}
);
} else
dhtget(twister.res[req].query, twister.res[req].resource, 'm',
queryProcess, req, twister.res[req].timeoutArgs);
}

function queryProcess(req, twists) {
if (!req || !twister.res[req] || !twists || !twists.length)
function queryProcess(req, res) {
if (!req || !twister.res[req] || typeof res !== 'object' || $.isEmptyObject(res))
return;

var lengthNew = 0;
var lengthPending = twister.res[req].twists.pending.length;

if (twister.res[req].resource === 'mention' && twister.res[req].query === defaultScreenName)
lengthNew = queryPendingPushMentions(req, twists);
lengthNew = queryPendingPushMentions(req, res);
else if (twister.res[req].resource === 'direct')
lengthNew = queryPendingPushDMs(res);
else
lengthNew = queryPendingPush(req, twists);
lengthNew = queryPendingPush(req, res);

if (typeof twister.res[req].skidoo === 'function' && twister.res[req].skidoo(req))
return;

if (lengthNew)
if (lengthNew) {
if (twister.res[req].resource === 'mention' && twister.res[req].query === defaultScreenName) {
$.MAL.updateNewMentionsUI(twister.res[req].lengthNew);
$.MAL.soundNotifyMentions();
Expand All @@ -550,6 +596,25 @@ function queryProcess(req, twists) {
$.MAL.showMentions(defaultScreenName);
}).bind({req: req})
});
} else if (twister.res[req].resource === 'direct') {
if (twister.res[req].query[0] !== '*')
$.MAL.updateNewDMsUI(getNewDMsCount());
else
$.MAL.updateNewGroupDMsUI(getNewGroupDMsCount());

$.MAL.soundNotifyDM();
if (!$.mobile && $.Options.showDesktopNotifDMs.val === 'enable')
$.MAL.showDesktopNotification({
body: twister.res[req].query[0] === '*' ?
polyglot.t('You got') + ' ' + polyglot.t('new_group_messages', getNewGroupDMsCount()) + '.'
: polyglot.t('You got') + ' ' + polyglot.t('new_direct_messages', getNewDMsCount()) + '.',
tag: 'twister_notification_new_DMs',
timeout: $.Options.showDesktopNotifDMsTimer.val,
funcClick: (function () {
focusModalWithElement(twister.res[this.req].board);
}).bind({req: req})
});
// TODO new DMs counters on minimized modals'
} else if (!$.mobile && $.Options.showDesktopNotifPostsModal.val === 'enable'
&& (twister.res[req].resource !== 'mention' || twister.res[req].query !== defaultScreenName)
&& twister.res[req].board && isModalWithElemExists(twister.res[req].board)
Expand All @@ -559,7 +624,7 @@ function queryProcess(req, twists) {
+ polyglot.t('in search result') + '.',
tag: 'twister_notification_new_posts_modal',
timeout: $.Options.showDesktopNotifPostsModalTimer.val,
funcClick: (function() {
funcClick: (function () {
focusModalWithElement(twister.res[this.req].board,
function (req) {
twister.res[req].board.closest('.postboard')
Expand All @@ -569,6 +634,7 @@ function queryProcess(req, twists) {
);
}).bind({req: req})
});
}

if (twister.res[req].twists.pending.length > lengthPending) { // there is some twists may be which are not considered new so lengthNew equals zero (mentions thing)
if (!twister.res[req].board || (!$.mobile && !isModalWithElemExists(twister.res[req].board)))
Expand Down Expand Up @@ -619,6 +685,7 @@ function queryPendingPush(req, twists) {

lengthNew++;
twister.res[req].twists.cached[j] = twists[i];
twister.res[req].lengthCached++;
twister.res[req].twists.pending.push(j);
}
}
Expand All @@ -627,13 +694,57 @@ function queryPendingPush(req, twists) {
}

function queryPendingDraw(req) {
var twists = [];
for (var i = 0; i < twister.res[req].twists.pending.length; i++)
twists.push(twister.res[req].twists.cached[twister.res[req].twists.pending[i]]);
var twists = [], length = 0;

if (twister.res[req].resource === 'direct') {
for (var j = 0; j < twister.res[req].twists.pending.length; j++) {
var twist = twister.res[req].twists.cached[twister.res[req].twists.pending[j]];
for (var i = 0; i < length; i++)
if (twist.id < twists[i].id) {
twists.splice(i, 0, twist);
break;
}

if (length === twists.length)
twists.push(twist);

length++;
}
attachPostsToStream(twister.res[req].board, twists, false,
function (twist, req) {
return {item: postToElemDM(twist, req.peerAliasLocal, req.peerAliasRemote)
.attr('data-id', twist.id), time: twist.time};
},
{peerAliasLocal: defaultScreenName, peerAliasRemote: twister.res[req].query}
);
resetNewDMsCountForPeer(twister.res[req].query);
} else {
for (var j = 0; j < twister.res[req].twists.pending.length; j++) {
var twist = twister.res[req].twists.cached[twister.res[req].twists.pending[j]];
for (var i = 0; i < length; i++)
if (twist.userpost.time > twists[i].userpost.time) {
twists.splice(i, 0, twist);
break;
}

if (length === twists.length)
twists.push(twist);

attachPostsToStream(twister.res[req].board, twists, false);
length++;
}
attachPostsToStream(twister.res[req].board, twists, true,
function (twist) {
return {item: postToElem(twist, 'original'), time: twist.userpost.time};
}
);
if (twister.res[req].resource === 'mention' && twister.res[req].query === defaultScreenName)
resetMentionsCount();
}

queryPendingClear(req);

$.MAL.postboardLoaded();
if (typeof twister.res[req].drawFinish === 'function')
twister.res[req].drawFinish(req, twister.res[req].drawFinishReq);
else
$.MAL.postboardLoaded();
}
Loading

0 comments on commit 43d3169

Please sign in to comment.