handle group/{id}/id urls, always cache user array headers, window.following as object with local id as key (instead of array) for easier lookup by id

This commit is contained in:
Hannes Mannerheim 2015-09-18 03:04:28 +02:00
parent df99f9bbaa
commit 1ba3c6bd29
5 changed files with 39 additions and 39 deletions

View File

@ -147,11 +147,9 @@ function getFromAPI(stream, actionOnSuccess) {
displayOrHideUnreadNotifications(request.getResponseHeader('Qvitter-Notifications')); displayOrHideUnreadNotifications(request.getResponseHeader('Qvitter-Notifications'));
// profile card from user array, also cache it // parse and cache any user arrays in header
var userArray = false;
if(request.getResponseHeader('Qvitter-User-Array') !== null) { if(request.getResponseHeader('Qvitter-User-Array') !== null) {
// while waiting for this data user might have changed stream, so only proceed if current stream still is this one
if(window.currentStream == stream) {
var qvitterUserArrayHeader = request.getResponseHeader('Qvitter-User-Array'); var qvitterUserArrayHeader = request.getResponseHeader('Qvitter-User-Array');
// quitter.se fix // quitter.se fix
@ -159,17 +157,15 @@ function getFromAPI(stream, actionOnSuccess) {
qvitterUserArrayHeader = qvitterUserArrayHeader.replace(new RegExp('http:\\\\/\\\\/' + window.siteRootDomain, 'g'), 'https:\/\/' + window.siteRootDomain); qvitterUserArrayHeader = qvitterUserArrayHeader.replace(new RegExp('http:\\\\/\\\\/' + window.siteRootDomain, 'g'), 'https:\/\/' + window.siteRootDomain);
} }
var userArray = iterateRecursiveReplaceHtmlSpecialChars($.parseJSON(qvitterUserArrayHeader)); userArray = iterateRecursiveReplaceHtmlSpecialChars($.parseJSON(qvitterUserArrayHeader));
userArrayCacheStore(userArray); userArrayCacheStore(userArray);
addProfileCardToDOM(buildProfileCard(userArray));
}
} }
data = convertEmptyObjectToEmptyArray(data); data = convertEmptyObjectToEmptyArray(data);
data = iterateRecursiveReplaceHtmlSpecialChars(data); data = iterateRecursiveReplaceHtmlSpecialChars(data);
searchForUserDataToCache(data); searchForUserDataToCache(data);
actionOnSuccess(data); actionOnSuccess(data, userArray);
}, },
error: function(data) { error: function(data) {
actionOnSuccess(false); actionOnSuccess(false);

View File

@ -562,11 +562,16 @@ function setNewCurrentStream(streamObject,setLocation,actionOnSuccess) {
} }
// get stream // get stream
getFromAPI(streamObject.stream, function(queet_data){ getFromAPI(streamObject.stream, function(queet_data, userArray){
if(queet_data) { if(queet_data) {
// while waiting for this data user might have changed stream, so only proceed if current stream still is this one // while waiting for this data user might have changed stream, so only proceed if current stream still is this one
if(window.currentStream == streamObject.stream) { if(window.currentStream == streamObject.stream) {
// profile card from user array
if(userArray) {
addProfileCardToDOM(buildProfileCard(userArray));
}
// show group profile card if this is a group stream // show group profile card if this is a group stream
if(streamObject.name == 'group notice stream' if(streamObject.name == 'group notice stream'
|| streamObject.name == 'group member list' || streamObject.name == 'group member list'

View File

@ -548,14 +548,7 @@ function searchForUserDataToCache(obj) {
function appendUserToMentionsSuggestionsArray(user) { function appendUserToMentionsSuggestionsArray(user) {
var userAlreadyExist = false; if(typeof window.following[user.id] == 'undefined') {
$.each(window.following, function(){
if(user.id == this.id) {
userAlreadyExist = true;
}
});
if(!userAlreadyExist) {
// in the window.following array, we use "false" as url if it's a user from this instance // in the window.following array, we use "false" as url if it's a user from this instance
if(user.is_local) { if(user.is_local) {
@ -565,14 +558,15 @@ function appendUserToMentionsSuggestionsArray(user) {
var url = guessInstanceUrlWithoutProtocolFromProfileUrlAndNickname(user.statusnet_profile_url,user.screen_name); var url = guessInstanceUrlWithoutProtocolFromProfileUrlAndNickname(user.statusnet_profile_url,user.screen_name);
} }
var userToAdd = Object(); var userToAdd = {
userToAdd.avatar = user.profile_image_url; avatar: user.profile_image_url,
userToAdd.id = user.id; id: user.id,
userToAdd.name = user.name; name: user.name,
userToAdd.url = url; url: url,
userToAdd.username = user.screen_name; username: user.screen_name
};
window.following.push(userToAdd); window.following[user.id] = userToAdd;
} }
} }

View File

@ -819,14 +819,13 @@ function doLogin(streamObjectToSet) {
} }
// get all users i'm following for autosuggestion // get all users i'm following for autosuggestion
window.following = new Array(); window.following = new Object();
window.groupMemberships = new Array(); window.groupMemberships = new Object();
window.groupNicknamesAndLocalAliases = new Array(); window.groupNicknamesAndLocalAliases = new Array();
getFromAPI('qvitter/allfollowing/' + window.loggedIn.screen_name + '.json',function(data){ getFromAPI('qvitter/allfollowing/' + window.loggedIn.screen_name + '.json',function(data){
if(data.users) { if(data.users) {
var i=0;
$.each(data.users,function(k,v){ $.each(data.users,function(k,v){
if(v[2] === false) { var avatar = window.defaultAvatarStreamSize; } if(v[2] === false) { var avatar = window.defaultAvatarStreamSize; }
else { var avatar = v[2]; } else { var avatar = v[2]; }
@ -835,13 +834,11 @@ function doLogin(streamObjectToSet) {
v[3] = v[3].substring(v[3].indexOf('://')+3,v[3].lastIndexOf(v[1])-1); v[3] = v[3].substring(v[3].indexOf('://')+3,v[3].lastIndexOf(v[1])-1);
} }
v[0] = v[0] || v[1]; // if name is null we go with username there too v[0] = v[0] || v[1]; // if name is null we go with username there too
window.following[i] = { 'id': k,'name': v[0], 'username': v[1],'avatar': avatar, 'url':v[3] }; window.following[k] = { 'id': k,'name': v[0], 'username': v[1],'avatar': avatar, 'url':v[3] };
i++;
}); });
} }
if(data.groups) { if(data.groups) {
var i=0;
$.each(data.groups,function(k,v){ $.each(data.groups,function(k,v){
if(v[2] === false || v[2] === null) { var avatar = window.defaultAvatarStreamSize; } if(v[2] === false || v[2] === null) { var avatar = window.defaultAvatarStreamSize; }
else { var avatar = v[2]; } else { var avatar = v[2]; }
@ -851,9 +848,8 @@ function doLogin(streamObjectToSet) {
v[3] = v[3].substring(0, v[3].indexOf('/')); v[3] = v[3].substring(0, v[3].indexOf('/'));
} }
v[0] = v[0] || v[1]; // if name is null we go with username there too v[0] = v[0] || v[1]; // if name is null we go with username there too
window.groupMemberships[i] = { 'id': k,'name': v[0], 'username': v[1],'avatar': avatar, 'url':v[3] }; window.groupMemberships[k] = { 'id': k,'name': v[0], 'username': v[1],'avatar': avatar, 'url':v[3] };
window.groupNicknamesAndLocalAliases[i] = v[1]; window.groupNicknamesAndLocalAliases[k] = v[1];
i++;
}); });
} }

View File

@ -217,6 +217,15 @@ function pathToStreamRouter(path) {
return streamObject; return streamObject;
} }
// group/{id }/id
if(pathSplit.length == 3 && pathSplit[0] == 'group' && /^[0-9]+$/.test(pathSplit[1]) && pathSplit[2] == 'id') {
streamObject.name = 'group notice stream by id';
streamObject.id = pathSplit[1];
streamObject.streamHeader = replaceHtmlSpecialChars(path);
streamObject.stream = 'statusnet/groups/timeline/' + streamObject.id + '.json';
return streamObject;
}
// group/{group_nickname}/members // group/{group_nickname}/members
if(pathSplit.length == 3 && pathSplit[0] == 'group' && /^[a-zA-Z0-9]+$/.test(pathSplit[1]) && pathSplit[2] == 'members') { if(pathSplit.length == 3 && pathSplit[0] == 'group' && /^[a-zA-Z0-9]+$/.test(pathSplit[1]) && pathSplit[2] == 'members') {
streamObject.name = 'group member list'; streamObject.name = 'group member list';