// This file is part of Friendiqa // https://github.com/lubuwest/Friendiqa // Copyright (C) 2017 Marco R. <thomasschmidt45@gmx.net> // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // In addition, as a special exception, the copyright holders give // permission to link the code of portions of this program with the // OpenSSL library under certain conditions as described in each // individual source file, and distribute linked combinations including // the two. // // You must obey the GNU General Public License in all respects for all // of the code used other than OpenSSL. If you modify file(s) with this // exception, you may extend this exception to your version of the // file(s), but you are not obligated to do so. If you do not wish to do // so, delete this exception statement from your version. If you delete // this exception statement from all source files in the program, then // also delete it here. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. .pragma library .import QtQuick.LocalStorage 2.0 as Sql .import "qrc:/js/helper.js" as Helperjs function requestFriends(login,database,rootwindow,callback){ // return array of friends var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) { var result = tx.executeSql('UPDATE contacts SET isFriend=0 where username="'+login.username+'"')}); // clean old friends Helperjs.friendicaRequest(login,"/api/statuses/friends?count=9999", rootwindow,function (obj){ var friends=JSON.parse(obj); for (var i=0;i<friends.length;i++){ friends[i].isFriend=1} //try{requestProfile(login,friends,rootwindow,function(friends_profile){callback(friends_profile)})} //catch(e){ callback(friends)//} }); } function requestGroups(login,database,rootwindow,callback){ // retrieve, save and return groups. Other features currently not implemented var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); Helperjs.friendicaRequest(login,"/api/friendica/group_show",rootwindow, function (obj){ var groups=JSON.parse(obj); db.transaction( function(tx) { var result = tx.executeSql('DELETE from groups where username="'+login.username+'"'); // clean old groups for (var i=0;i<groups.length;i++){ var memberarray=[]; for (var user in groups[i].user){memberarray.push(parseInt(groups[i].user[user].id))} //print("Members: "+groups[i].user) var result2 = tx.executeSql('INSERT INTO groups VALUES (?,?,?,?)', [login.username,groups[i].name,groups[i].gid,JSON.stringify(memberarray)])} callback() }); })} function listFriends(login,database,callback){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) { var result = tx.executeSql('SELECT * from contacts WHERE username="'+login.username+'" AND isFriend>0'); // check for friends var contactlist=[]; for (var i=0;i<result.rows.length;i++){ contactlist.push(result.rows.item(i)) } callback(contactlist) }); } function deleteGroup(login,database,rootwindow,group, callback){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); Helperjs.friendicaPostRequest(login,"/api/friendica/group_delete?gid="+group.gid+"&name="+group.groupname,"","POST",rootwindow, function (obj){ var deletereturn=JSON.parse(obj); if(deletereturn.success){ db.transaction( function(tx) { var result = tx.executeSql('DELETE from groups where username="'+login.username+'" AND groupname="'+group.name+'"'); // delete group callback() }); }})} function getFriendsTimeline(login,database,contacts,onlynew,rootwindow,callback){ // retrieve and return timeline since last news, return contacts which are not friends and older than 2 days for update (friends can be updated in Contactstab) var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); var parameter = "?count=50"; if(onlynew){db.transaction( function(tx) { var result = tx.executeSql('SELECT status_id from news WHERE username="'+login.username+'" AND messagetype=0 ORDER BY status_id DESC LIMIT 1'); // check for last news id try{parameter=parameter+"&since_id="+result.rows.item(0).status_id;}catch(e){};})} var newContacts=[]; Helperjs.friendicaRequest(login,"/api/statuses/friends_timeline"+parameter, rootwindow,function (obj){ var news=JSON.parse(obj); if (news.hasOwnProperty('status')){ Helperjs.showMessage(qsTr("Error"),"API:\n" +login.server+"/api/statuses/friends_timeline"+parameter+"\n Return: \n"+obj,rootwindow) } var newContacts=findNewContacts(news,contacts); callback(news,newContacts) })} function getCurrentContacts(login,database,callback){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); var contactlist=[]; db.transaction( function(tx) { var result = tx.executeSql('SELECT url from contacts WHERE username="'+login.username+'" AND isFriend=1'); // check for friends for (var i=0;i<result.rows.length;i++){ contactlist.push(result.rows.item(i).url ) //print(result.rows.item(i).url) } var lastDate=Date.now()-604800000;// 7 days old //print('SELECT url from contacts WHERE username="'+login.username+'" AND isFriend=0 AND imageAge>'+lastDate); var result2 = tx.executeSql('SELECT url from contacts WHERE username="'+login.username+'" AND isFriend=0 AND imageAge > '+lastDate); for (var j=0;j<result2.rows.length;j++){ contactlist.push(result2.rows.item(j).url ) } }) callback(contactlist) } function findNewContacts(news,contacts){ var newContacts=[]; for (var i=0;i<news.length;i++){ var url=news[i].user.url; if(contacts.indexOf(url)==-1 && !(inArray(newContacts,"url",url))){ news[i].user.isFriend=0; newContacts.push(news[i].user); } if (news[i].friendica_activities.like.length>0){ for (var j=0;j<news[i].friendica_activities.like.length;j++){ var like_url=news[i].friendica_activities.like[j].url; if(contacts.indexOf(like_url)==-1 && !(inArray(newContacts,"url",like_url))){ news[i].friendica_activities.like[j].isFriend=0; newContacts.push(news[i].friendica_activities.like[j]); } } } if (news[i].friendica_activities.dislike.length>0){ for (var k=0;j<news[k].friendica_activities.dislike.length;k++){ var dislike_url=news[i].friendica_activities.dislike[k].url; if(contacts.indexOf(dislike_url)==-1 && !(inArray(newContacts,"url",dislike_url))){ news[i].friendica_activities.dislike[k].isFriend=0; newContacts.push(news[i].friendica_activities.dislike[k]); } } } var owner_url=news[i].friendica_owner.url; if(contacts.indexOf(owner_url)==-1 && !(inArray(newContacts,"url",owner_url))){ news[i].friendica_owner.isFriend=0; newContacts.push(news[i].friendica_owner); } } return newContacts } function storeNews(login,database,news,rootwindow,callback){ // save news after contacts download, call next function var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); for (var i=0;i<news.length;i++){ //print('store news data for ' + news[i].id+JSON.stringify(news[i].friendica_activities)); //var ausdruck=news[i]; var likearray=[]; for (var user in news[i].friendica_activities.like){likearray.push(news[i].friendica_activities.like[user].url)} var dislikearray=[]; for (var user in news[i].friendica_activities.dislike){dislikearray.push(news[i].friendica_activities.dislike[user].url)} var attendyesarray=[]; for (var user in news[i].friendica_activities.attendyes){attendyesarray.push(news[i].friendica_activities.attendyes[user].url)} var attendnoarray=[]; for (var user in news[i].friendica_activities.attendno){attendnoarray.push(news[i].friendica_activities.attendno[user].url)} var attendmaybearray=[]; for (var user in news[i].friendica_activities.attendmaybe){attendmaybearray.push(news[i].friendica_activities.attendmaybe[user].url)} var friendica_activities=[likearray,dislikearray,attendyesarray,attendnoarray,attendmaybearray] var attachments="";if (news[i].attachments){attachments=Qt.btoa(JSON.stringify(news[i].attachments))} db.transaction( function(tx) { var result = tx.executeSql('SELECT * from news where username="'+login.username+'" AND status_id = "'+news[i].id+'" AND messagetype=0'); // check for news id if(result.rows.length === 1) {// use update //print(news[i].id +' news exists, update it'+'UPDATE news SET username="'+login.username+'", messagetype=0, text="'+Qt.btoa(news[i].text)+'", created_at="'+Date.parse(cleanDate(news[i].created_at))+'", in_reply_to_status_id="'+news[i].in_reply_to_status_id+'", source="'+news[i].source+'", status_id="'+news[i].id+'", in_reply_to_user_id="'+news[i].in_reply_to_user_id+'", geo="'+news[i].geo+'", favorited="'+news[i].favorited+'", uid="'+news[i].user.id+'", statusnet_html="'+Qt.btoa(news[i].status_html)+'", statusnet_conversation_id="'+news[i].statusnet_conversation_id+'",friendica_activities="'+Qt.btoa(JSON.stringify(friendica_activities))+'",attachments="'+attachments+'",friendica_owner="'+news[i].friendica_owner.url+'" where username="'+login.username+'" AND status_id="'+news[i].status_id+'" AND messagetype=0') result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=0, text="'+Qt.btoa(news[i].text)+'", created_at="'+Date.parse(cleanDate(news[i].created_at))+'", in_reply_to_status_id="'+news[i].in_reply_to_status_id+'", source="'+news[i].source+'", status_id="'+news[i].id+'", in_reply_to_user_id="'+news[i].in_reply_to_user_id+'", geo="'+news[i].geo+'", favorited="'+news[i].favorited+'", uid="'+news[i].user.id+'", statusnet_html="'+Qt.btoa(news[i].status_html)+'", statusnet_conversation_id="'+news[i].statusnet_conversation_id+'",friendica_activities="'+Qt.btoa(JSON.stringify(friendica_activities))+'",attachments="'+attachments+'",friendica_owner="'+news[i].friendica_owner.url+'" where username="'+login.username+'" AND status_id="'+news[i].status_id+'" AND messagetype=0'); } else {// use insert result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,in_reply_to_status_id,source,status_id,in_reply_to_user_id,geo,favorited,uid,statusnet_html,statusnet_conversation_id,friendica_activities,friendica_activities_self,attachments,friendica_owner) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,0,Qt.btoa(news[i].text),Date.parse(cleanDate(news[i].created_at)), news[i].in_reply_to_status_id, news[i].source, news[i].id,news[i].in_reply_to_user_id,news[i].geo,news[i].favorited, news[i].user.id,Qt.btoa(news[i].statusnet_html),news[i].statusnet_conversation_id, Qt.btoa(JSON.stringify(friendica_activities)),"[]",attachments,news[i].friendica_owner.url])}}) } getDirectMessage(login,database,rootwindow,callback) } function getDirectMessage(login,database,rootwindow,callback){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); var parameter = ""; db.transaction( function(tx) { var result = tx.executeSql('SELECT status_id from news WHERE username="'+login.username+'" AND messagetype=1 ORDER BY status_id DESC LIMIT 1'); // check for last news id try{parameter="&since_id="+result.rows.item(0).status_id;}catch(e){};}) Helperjs.friendicaRequest(login,"/api/direct_messages/all"+parameter,rootwindow, function (obj){ var messages=JSON.parse(obj); for (var i=0;i<messages.length;i++){ //print('store message data for '+JSON.stringify(messages[i])); db.transaction( function(tx) { var result = tx.executeSql('SELECT * from news where username= "'+login.username+'" AND status_id = "'+messages[i].id+'" AND messagetype=1'); // check for news id if(result.rows.length === 1) {// use update print(messages[i].id +' directmessage exists, update it') result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=1, text="'+Qt.btoa(messages[i].text)+'", created_at="'+Date.parse(cleanDate(messages[i].created_at))+'", source="Friendica", status_id="'+messages[i].id+'", uid="'+messages[i].sender.id+'", statusnet_html="'+Qt.btoa(messages[i].text)+'", statusnet_conversation_id="'+messages[i].friendica_parent_uri+'" where username="'+login.username+'" AND status_id="'+messages[i].status_id+'" AND messagetype=1'); } else {// use insert result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,source,status_id,uid,statusnet_html,statusnet_conversation_id) VALUES (?,?,?,?,?,?,?,?,?)', [login.username,1,Qt.btoa(messages[i].text),Date.parse(cleanDate(messages[i].created_at)), "Friendica", messages[i].id, messages[i].sender.id,Qt.btoa(messages[i].text),messages[i].friendica_parent_uri])} }); } }) callback() // if(login.newsViewType=="Timeline"){newsfromdb(database,login.username,callback)} // else{chatsfromdb(database,login.username,callback)} } function getNotifications(login,database,rootwindow,callback){ Helperjs.friendicaRequest(login,"/api/friendica/notifications", rootwindow,function (obj){ var messages=JSON.parse(obj); var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); for (var i=0;i<messages.length;i++){ //print('store message data for '+JSON.stringify(messages[i])); db.transaction( function(tx) { var result = tx.executeSql('SELECT * from news where username="'+login.username+'" AND status_id = "'+messages[i].id+'" AND messagetype=2'); // check for news id if(result.rows.length === 1) {// use update print(messages[i].id +' Notification exists, update it') result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=2, text="'+Qt.btoa(messages[i].msg_html)+'", created_at="'+Date.parse(messages[i].date)+'", source="Friendica", status_id="'+messages[i].id+'", uid="'+messages[i].uid+'", statusnet_html="'+Qt.btoa(messages[i].msg_html)+'", statusnet_conversation_id="'+messages[i].parent+'" where username="'+login.username+'" AND status_id="'+messages[i].id+'" AND messagetype=2'); } else {// use insert result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,source,status_id, uid,statusnet_html,statusnet_conversation_id) VALUES (?,?,?,?,?,?,?,?,?)', [login.username,2,Qt.btoa(messages[i].msg_html),Date.parse(messages[i].date),"Friendica", messages[i].id, messages[i].uid,Qt.btoa(messages[i].msg_html),messages[i].parent])} }); } db.transaction( function(tx) { var newsrs=tx.executeSql('select * from news WHERE username="'+login.username+'" AND messagetype=2 ORDER BY status_id DESC LIMIT 20'); var newsArray=[]; for(var j = 0; j < newsrs.rows.length; j++) { newsArray.push(newsrs.rows.item(j)); callback(newsArray); } }) })} function getActivitiesUserData(database,username,allcontacts,userUrlArray){//print(JSON.stringify(userUrlArray)); var helpArray=[]; for (var i=0;i<userUrlArray.length;i++){ helpArray.push(objFromArray(allcontacts,"url",userUrlArray[i])); // Helperjs.readData(database,"contacts",username,function(userdata){ // helpArray.push(userdata[0]); // },"url",userUrlArray[i]); } return helpArray } function newsfromdb(database,username,callback,contact,stop_time){ // return news before stop_time (used by More button), in brackets of 20 entries, or by specified contact var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) { if (!stop_time){var stop=""; try{var rs = tx.executeSql('select created_at from news WHERE username="'+username+'" ORDER BY created_at DESC LIMIT 1'); stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}} else{var stop="<"+stop_time} var contactfilter="";if(contact){contactfilter=" AND (uid='"+contact+"' OR friendica_owner='"+contact+"')"} //print('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20'); var newsrs=tx.executeSql('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20'); var newsArray=[]; var allcontacts=[]; Helperjs.readData(database,"contacts",username,function(obj){allcontacts=obj}); for(var i = 0; i < newsrs.rows.length; i++) { newsArray.push(newsrs.rows.item(i)); newsArray[i]=fetchUsersForNews(database,username,newsArray[i],allcontacts) } callback(newsArray)}); } function fetchUsersForNews(database,username,news,allcontacts){//print(JSON.stringify(news)) news.user=objFromArray(allcontacts,"id",news.uid); if(news.in_reply_to_user_id){news.reply_user=objFromArray(allcontacts,"id",news.in_reply_to_user_id)} news.friendica_owner_object=objFromArray(allcontacts,"url",news.friendica_owner); // Helperjs.readData(database,"contacts",username,function(userdata){ // news.user=userdata[0]; // //print("Fetch user"+JSON.stringify(news.user)); // },"id",news.uid); // if(news.in_reply_to_user_id){ // Helperjs.readData(database,"contacts",username,function(replytodata){ // news.reply_user=replytodata[0]; // //print("Fetch reply to"+JSON.stringify(news.reply_user)); // },"id",news.in_reply_to_user_id); // } if (news.messagetype==0){ for(var j=0;j<news.friendica_activities.length;j++) {var friendicaArray=JSON.parse(Qt.atob(news.friendica_activities)); // print("Array: "+friendicaArray[1]); news.like=getActivitiesUserData(database,username,allcontacts,friendicaArray[0]); news.dislike=getActivitiesUserData(database,username,allcontacts,friendicaArray[1]); news.attendyes=getActivitiesUserData(database,username,allcontacts,friendicaArray[2]); news.attendno=getActivitiesUserData(database,username,allcontacts,friendicaArray[3]); news.attendmaybe=getActivitiesUserData(database,username,allcontacts,friendicaArray[4]); } // Helperjs.readData(database,"contacts",username,function(friendica_owner_data){ // news.friendica_owner_object=friendica_owner_data[0]; // //print("Fetch friendica_owner"+JSON.stringify(news.friendica_owner)); // },"url",news.friendica_owner); } return news } function deleteNews(login,database,newsid,messagetype,rootwindow,callback){ var api="" ; if (messagetype==0){ api="/api/statuses/destroy?id="} else if (messagetype==1){ api="/api/direct_messages/destroy?id="} else if (messagetype==2){ api="/api/friendica/notifications/seen?id="} Helperjs.friendicaPostRequest(login,api+newsid,"","POST", rootwindow,function (obj){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) {var result = tx.executeSql('DELETE from news where username="'+login.username+'" AND messagetype='+messagetype+' AND status_id ='+newsid); // delete news id callback(obj) }); })} function retweetNews(login,database,newsid,rootwindow,callback){ Helperjs.friendicaPostRequest(login,"/api/statuses/retweet?id="+newsid,"","POST", rootwindow,function (obj){ var answer=JSON.parse(obj); if(answer.hasOwnProperty('status'))//('error' in answer.status) {Helperjs.showMessage("Repost",answer.status.code,rootwindow);} else{Helperjs.showMessage("Repost",answer.text,rootwindow)} }) } function favorite(login,favorite,newsid,rootwindow){ // toggle favorites if(favorite){ Helperjs.friendicaPostRequest(login,"/api/favorites/create?id="+newsid,"","POST", rootwindow,function (obj){ })} else {Helperjs.friendicaPostRequest(login,"/api/favorites/destroy?id="+newsid, "POST",rootwindow,function (obj){ })} } function likerequest(login,database,verb,newsid,rootwindow){ Helperjs.friendicaPostRequest(login,"/api/friendica/activity/"+verb+"?id="+newsid, "","POST",rootwindow,function (obj){ if (obj=='"ok"'){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) { var currentActivities_rs=tx.executeSql('select friendica_activities_self from news WHERE username="'+login.username+'" AND status_id='+newsid) ; var currentActivities=JSON.parse(currentActivities_rs.rows.item(0).friendica_activities_self); //print(verb+"currentActivities "+JSON.stringify(currentActivities)); if ((verb=="like")&&(currentActivities.indexOf(1)==-1)){ currentActivities.push(1); if (currentActivities.indexOf(2)!=-1){currentActivities.splice(currentActivities.indexOf(2),1)} } if ((verb=="dislike")&&(currentActivities.indexOf(2)==-1)){ currentActivities.push(2); if (currentActivities.indexOf(1)!=-1){currentActivities.splice(currentActivities.indexOf(1),1)} } if (verb=="unlike"){ if (currentActivities.indexOf(1)!=-1){currentActivities.splice(currentActivities.indexOf(1),1)}} if (verb=="undislike"){ if (currentActivities.indexOf(2)!=-1){currentActivities.splice(currentActivities.indexOf(2),1)}} //print(JSON.stringify(currentActivities)); var result = tx.executeSql('UPDATE news SET friendica_activities_self ="'+JSON.stringify(currentActivities)+'" where username="'+login.username+'" AND status_id ='+newsid); })} else{}}) } function like(login,database,toggle,verb,newsid,rootwindow){ if(verb=="like"&& toggle==1){likerequest(login,database,"like",newsid,rootwindow); } if(verb=="dislike"&& toggle==1){likerequest(login,database,"dislike",newsid,rootwindow); } if(toggle==0){ likerequest(login,database,"un"+verb,newsid,rootwindow);} } function attend(login,database,attend,newsid,rootwindow,callback){ Helperjs.friendicaPostRequest(login,"/api/friendica/activity/attend"+attend+"?id="+newsid, "","POST",rootwindow,function (obj){ //print("attend: "+attend+obj); if (obj=='"ok"') var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) { var currentActivities_rs=tx.executeSql('select friendica_activities_self from news WHERE username="'+login.username+'" AND status_id='+newsid) ; var currentActivities=JSON.parse(currentActivities_rs.rows.item(0).friendica_activities_self); if ((attend=="yes")&&(currentActivities.indexOf(3)==-1)){ currentActivities.push(3); if (currentActivities.indexOf(4)!=-1){currentActivities.splice(currentActivities.indexOf(4),1)} if (currentActivities.indexOf(5)!=-1){currentActivities.splice(currentActivities.indexOf(5),1)} //print(JSON.stringify(currentActivities)); } if ((attend=="no")&&(currentActivities.indexOf(4)==-1)){ currentActivities.push(4); if (currentActivities.indexOf(3)!=-1){currentActivities.splice(currentActivities.indexOf(3),1)} if (currentActivities.indexOf(5)!=-1){currentActivities.splice(currentActivities.indexOf(5),1)} } if ((attend=="maybe")&&(currentActivities.indexOf(5)==-1)){ currentActivities.push(5); if (currentActivities.indexOf(3)!=-1){currentActivities.splice(currentActivities.indexOf(3),1)} if (currentActivities.indexOf(4)!=-1){currentActivities.splice(currentActivities.indexOf(4),1)} } var result = tx.executeSql('UPDATE news SET friendica_activities_self ="'+JSON.stringify(currentActivities)+'" where username="'+login.username+'" AND status_id ='+newsid); callback(); })})} function requestConversation(login,database,newsid,contacts,rootwindow,callback){ Helperjs.friendicaRequest(login,"/api/conversation/show?id="+newsid,rootwindow, function (obj){ var news=JSON.parse(obj); var newContacts=findNewContacts(news,contacts); // storeNews(login,database,news,rootwindow,callback) callback(news,newContacts) })} function conversationfromdb(database,user,conversationId,callback){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) { var newsrs=tx.executeSql('select * from news WHERE username="'+user+'" AND statusnet_conversation_id="'+conversationId+'" ORDER BY created_at ASC'); var newsArray=[]; var allcontacts=[]; Helperjs.readData(database,"contacts",user,function(obj){allcontacts=obj}); for(var i = 0; i < newsrs.rows.length; i++) { newsArray.push(newsrs.rows.item(i)); newsArray[i]=fetchUsersForNews(database,user,newsArray[i],allcontacts) } callback(newsArray)}) } function requestFavorites(login,database,contacts,rootwindow,callback){ Helperjs.friendicaRequest(login,"/api/favorites",rootwindow, function (obj){ //print(obj+JSON.stringify(obj)); var news=JSON.parse(obj); var newContacts=findNewContacts(news,contacts); // storeNews(login,database,news,rootwindow,callback) callback(news,newContacts) })} function favoritesfromdb(database,user,callback){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) { //print('select * from news WHERE username="'+user+'" AND favorited=1 ORDER BY status_id DESC'); var newsrs=tx.executeSql('select * from news WHERE username="'+user+'" AND favorited=1 ORDER BY status_id DESC'); var newsArray=[]; var allcontacts=[]; Helperjs.readData(database,"contacts",user,function(obj){allcontacts=obj}); for(var i = 0; i < newsrs.rows.length; i++) { newsArray.push(newsrs.rows.item(i)); newsArray[i]=fetchUsersForNews(database,user,newsArray[i],allcontacts); callback(newsArray); }})} function chatsfromdb(database,user,callback,stop_time){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) { if (!stop_time){var stop=""; try{var rs = tx.executeSql('select created_at from news WHERE username="'+username+'" ORDER BY created_at DESC LIMIT 1'); stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}} else{var stop="<"+stop_time} var conversationsrs=tx.executeSql('select DISTINCT statusnet_conversation_id from news WHERE username="'+user+'" AND created_at'+stop+' ORDER BY created_at DESC LIMIT 20'); //+' ORDER BY created_at DESC LIMIT 20'); var conversations=[]; for(var i = 0; i < conversationsrs.rows.length; i++) { conversations.push(conversationsrs.rows.item(i).statusnet_conversation_id); } var newsArray=[]; var allcontacts=[]; Helperjs.readData(database,"contacts",user,function(obj){allcontacts=obj}); for(var j = 0; j< conversations.length; j++) { var newsrs=tx.executeSql('select * from news WHERE username="'+user+'" AND statusnet_conversation_id="'+conversations[j] +'" ORDER BY created_at ASC'); var helpernews=newsrs.rows.item(0); helpernews.newscount=newsrs.rows.length; helpernews=fetchUsersForNews(database,user,helpernews,allcontacts); //var chatArray=[]; // for (var k=0;k<newsrs.rows.length;k++){ // var helperchat=newsrs.rows.item(k); // helperchat=fetchUsersForNews(database,user,helperchat); // chatArray.push(helperchat) //} //helpernews.chatArray=chatArray; newsArray.push(helpernews); } callback(newsArray); })} function inArray(list, prop, val) { if (list.length > 0 ) { for (var i in list) {if (list[i][prop] == val) { return true; } } } return false; } function objFromArray(list, prop, val) { if (list.length > 0 ) { for (var i in list) {if (list[i][prop] == val) { return list[i]; } } } return false; } function cleanDate(date){ var cleanedDate= date.slice(0,3)+", "+date.slice(8,11)+date.slice(4,7)+date.slice(25,30)+date.slice(10,25); return cleanedDate }