2018-02-19 22:36:00 +01:00
// This file is part of Friendiqa
2018-11-09 22:06:13 +01:00
// https://git.friendi.ca/lubuwest/Friendiqa
2020-05-24 21:14:23 +02:00
// Copyright (C) 2020 Marco R. <thomasschmidt45@gmx.net>
2018-02-19 22:36:00 +01:00
//
// 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/>.
2017-01-26 21:55:31 +01:00
. pragma library
. import QtQuick . LocalStorage 2.0 as Sql
. import "qrc:/js/helper.js" as Helperjs
function requestFriends ( login , database , rootwindow , callback ) {
2022-03-01 21:59:21 +01:00
// return array of friends
2017-01-26 21:55:31 +01:00
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
db . transaction ( function ( tx ) {
2022-03-01 21:59:21 +01:00
var result = tx . executeSql ( 'UPDATE contacts SET isFriend=0 where username="' + login . username + '"' ) ; // clean old friends
var result2 = tx . executeSql ( 'DELETE from groups where username="' + login . username + '"' ) ; // clean old groups
} )
// /api/statuses/friends not working in Friendica 2/2022 , switching to api/v1/lists and download of all list members
// Helperjs.friendicaRequest(login,"/api/statuses/friends?count=9999", rootwindow,function (obj){
var allfriends = [ ] ;
Helperjs . friendicaRequest ( login , "/api/v1/lists" , rootwindow , function ( listsobj ) {
var lists = JSON . parse ( listsobj )
for ( var list in lists ) {
Helperjs . friendicaRequest ( login , "/api/v1/lists/" + lists [ list ] . id + "/accounts?limit=0" , rootwindow , function ( obj ) {
var friends = JSON . parse ( obj ) ;
var memberarray = [ ] ;
for ( var i = 0 ; i < friends . length ; i ++ ) {
if ( friends [ i ] . note != null ) {
friends [ i ] . description = friends [ i ] . note ; }
else { friends [ i ] . description = "" }
friends [ i ] . name = friends [ i ] . display _name ;
friends [ i ] . screen _name = friends [ i ] . acct ;
friends [ i ] . location = "" ;
friends [ i ] . profile _image = friends [ i ] . avatar _static ;
friends [ i ] . profile _image _url = friends [ i ] . avatar ;
friends [ i ] . protected = false ;
friends [ i ] . friends _count = friends [ i ] . following _count ;
friends [ i ] . created _at = Date . parse ( friends [ i ] . created _at ) ;
friends [ i ] . favorites _count = 0 ;
friends [ i ] . utc _offset = 0 ;
friends [ i ] . isFriend = 1
friends [ i ] . cid = 0
friends [ i ] . following = true
memberarray . push ( parseInt ( friends [ i ] . id ) )
}
//requestGroups() not working with Friendica 02/2022
db . transaction ( function ( tx ) {
var result3 = tx . executeSql ( 'INSERT INTO groups VALUES (?,?,?,?)' , [ login . username , lists [ list ] . title , lists [ list ] . id , JSON . stringify ( memberarray ) ] )
} )
callback ( friends )
} ) } ;
2017-01-26 21:55:31 +01:00
} ) ;
}
2022-03-01 21:59:21 +01:00
2017-01-26 21:55:31 +01:00
function requestGroups ( login , database , rootwindow , callback ) {
2022-03-01 21:59:21 +01:00
// retrieve, save and return groups. Other features currently not implemented
2017-01-26 21:55:31 +01:00
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
2018-02-19 22:36:00 +01:00
Helperjs . friendicaRequest ( login , "/api/friendica/group_show" , rootwindow , function ( obj ) {
2022-03-01 21:59:21 +01:00
var groups = JSON . parse ( obj ) ;
2017-01-26 21:55:31 +01:00
db . transaction ( function ( tx ) {
2022-03-01 21:59:21 +01:00
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 ( )
2017-01-26 21:55:31 +01:00
} ) ;
2022-03-01 21:59:21 +01:00
} ) }
2017-01-26 21:55:31 +01:00
2022-03-01 21:59:21 +01:00
function listFriends ( login , database , callback , filter , isFriend = 0 ) {
2017-11-07 21:57:40 +01:00
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
2019-06-25 20:59:10 +02:00
var filtertext = '' ;
2022-03-01 21:59:21 +01:00
if ( filter != null ) { var filtertext = new RegExp ( ".*" + filter . toLowerCase ( ) + ".*" ) } else { var filtertext = new RegExp ( ".*" ) }
2019-06-25 20:59:10 +02:00
db . transaction ( function ( tx ) {
2022-03-01 21:59:21 +01:00
var result = tx . executeSql ( 'SELECT * from contacts WHERE username="' + login . username + '" AND isFriend>' + isFriend + ' ORDER BY screen_name' ) ;
2019-06-25 20:59:10 +02:00
// check for friends
var contactlist = [ ] ;
for ( var i = 0 ; i < result . rows . length ; i ++ ) {
2019-12-10 21:12:32 +01:00
var contact = result . rows . item ( i )
contact . name = Qt . atob ( contact . name ) ;
2022-03-01 21:59:21 +01:00
if ( contact . screen _name == null ) { contact . screen _name = "" }
2019-12-10 21:12:32 +01:00
if ( filtertext . test ( contact . name . toLowerCase ( ) ) || filtertext . test ( contact . screen _name . toLowerCase ( ) ) ) {
contactlist . push ( contact ) }
2019-06-25 20:59:10 +02:00
}
callback ( contactlist )
} ) ;
2017-11-07 21:57:40 +01:00
}
2020-11-25 21:40:17 +01:00
function listHashtags ( 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 hashtags WHERE username="' + login . username + '" ORDER BY date DESC LIMIT 50' ) ;
// check for friends
var taglist = [ ] ;
for ( var i = 0 ; i < result . rows . length ; i ++ ) {
var tag = result . rows . item ( i ) . tag ;
tag = Qt . atob ( tag ) ;
taglist . push ( tag ) }
callback ( taglist )
} ) ;
}
function storeHashtags ( login , database , newstext , rootwindow ) {
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
var curDate = Date . now ( ) ;
var hashtags = [ ] ;
hashtags = findTags ( newstext ) ;
for ( var tag in hashtags ) {
db . transaction ( function ( tx ) {
var result = tx . executeSql ( 'SELECT * from hashtags where username="' + login . username + '" AND tag = "' + Qt . btoa ( tag ) + '"' ) ; // check for tag
2022-03-01 21:59:21 +01:00
if ( result . rows . length > 0 ) { // use update
2020-11-25 21:40:17 +01:00
result = tx . executeSql ( 'UPDATE hashtags SET tag="' + '", date=' + curDate + ', ownership=0 where username="' + login . username + '" AND tag="' + Qt . btoa ( hashtags [ tag ] ) + '"' ) ;
} else { // use insert
result = tx . executeSql ( 'INSERT INTO hashtags (username,tag,date,statuses,ownership) VALUES (?,?,?,?,?)' , [ login . username , Qt . btoa ( hashtags [ tag ] ) , curDate , "[]" , 0 ] )
}
} )
}
}
2017-11-07 21:57:40 +01:00
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 ) {
2022-03-01 21:59:21 +01:00
db . transaction ( function ( tx ) {
var result = tx . executeSql ( 'DELETE from groups where username="' + login . username + '" AND groupname="' + group . name + '"' ) ; // delete group
callback ( )
} ) ;
} } ) }
2017-11-07 21:57:40 +01:00
2019-06-25 20:59:10 +02:00
function getLastNews ( login , database , callback ) {
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
var lastnewsid = 0 ;
db . transaction ( function ( tx ) {
2022-03-01 21:59:21 +01:00
var result = tx . executeSql ( 'SELECT status_id from news WHERE username="' + login . username + '" AND messagetype=0 ORDER BY status_id DESC LIMIT 1' ) ;
try { lastnewsid = result . rows . item ( 0 ) . status _id ; } catch ( e ) { lastnewsid = 0 } ;
callback ( lastnewsid )
} )
2018-07-01 15:09:21 +02:00
}
2017-11-07 21:57:40 +01:00
2018-07-01 15:09:21 +02:00
//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)
//})}
2017-01-26 21:55:31 +01:00
function getCurrentContacts ( login , database , callback ) {
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
var contactlist = [ ] ;
db . transaction ( function ( tx ) {
2017-03-25 23:36:14 +01:00
var result = tx . executeSql ( 'SELECT url from contacts WHERE username="' + login . username + '" AND isFriend=1' ) ; // check for friends
2017-01-26 21:55:31 +01:00
for ( var i = 0 ; i < result . rows . length ; i ++ ) {
2022-03-01 21:59:21 +01:00
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 )
}
2017-01-26 21:55:31 +01:00
} )
2018-07-01 15:09:21 +02:00
callback ( contactlist )
2017-01-26 21:55:31 +01:00
}
2018-02-19 22:36:00 +01:00
function findNewContacts ( news , contacts ) {
2017-01-26 21:55:31 +01:00
var newContacts = [ ] ;
for ( var i = 0 ; i < news . length ; i ++ ) {
2017-03-25 23:36:14 +01:00
var url = news [ i ] . user . url ;
2017-05-11 22:15:34 +02:00
if ( contacts . indexOf ( url ) == - 1 && ! ( inArray ( newContacts , "url" , url ) ) ) {
2017-01-26 21:55:31 +01:00
news [ i ] . user . isFriend = 0 ;
newContacts . push ( news [ i ] . user ) ;
2022-03-01 21:59:21 +01:00
}
2018-07-01 15:09:21 +02:00
if ( news [ i ] . hasOwnProperty ( 'friendica_activities' ) && news [ i ] . friendica _activities . like . length > 0 ) {
2017-01-26 21:55:31 +01:00
for ( var j = 0 ; j < news [ i ] . friendica _activities . like . length ; j ++ ) {
2017-03-25 23:36:14 +01:00
var like _url = news [ i ] . friendica _activities . like [ j ] . url ;
2017-05-11 22:15:34 +02:00
if ( contacts . indexOf ( like _url ) == - 1 && ! ( inArray ( newContacts , "url" , like _url ) ) ) {
2017-01-26 21:55:31 +01:00
news [ i ] . friendica _activities . like [ j ] . isFriend = 0 ;
newContacts . push ( news [ i ] . friendica _activities . like [ j ] ) ;
}
}
2022-03-01 21:59:21 +01:00
}
if ( news [ i ] . hasOwnProperty ( 'friendica_activities' ) && news [ i ] . friendica _activities . dislike . length > 0 ) {
2017-03-25 23:36:14 +01:00
for ( var k = 0 ; j < news [ k ] . friendica _activities . dislike . length ; k ++ ) {
var dislike _url = news [ i ] . friendica _activities . dislike [ k ] . url ;
2017-05-11 22:15:34 +02:00
if ( contacts . indexOf ( dislike _url ) == - 1 && ! ( inArray ( newContacts , "url" , dislike _url ) ) ) {
2017-03-25 23:36:14 +01:00
news [ i ] . friendica _activities . dislike [ k ] . isFriend = 0 ;
2022-03-01 21:59:21 +01:00
newContacts . push ( news [ i ] . friendica _activities . dislike [ k ] ) ;
2017-01-26 21:55:31 +01:00
}
}
2022-03-01 21:59:21 +01:00
}
if ( news [ i ] . hasOwnProperty ( 'friendica_author' ) ) {
var owner _url = news [ i ] . friendica _author . url ;
if ( contacts . indexOf ( owner _url ) == - 1 && ! ( inArray ( newContacts , "url" , owner _url ) ) ) {
news [ i ] . friendica _author . isFriend = 0 ;
newContacts . push ( news [ i ] . friendica _author ) ;
}
}
2017-01-26 21:55:31 +01:00
}
return newContacts
}
2018-07-01 15:09:21 +02:00
function storeNews ( login , database , news , rootwindow ) {
2022-03-01 21:59:21 +01:00
// save news after contacts download, call next function
2017-01-26 21:55:31 +01:00
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
for ( var i = 0 ; i < news . length ; i ++ ) {
2020-01-27 21:53:51 +01:00
//print('store news data for ' + login.username+news[i].messagetype+Qt.btoa(news[i].text)+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_author.url);
2017-03-25 23:36:14 +01:00
//var ausdruck=news[i];
2018-07-01 15:09:21 +02:00
var likearray = [ ] ; var dislikearray = [ ] ; var attendyesarray = [ ] ; var attendnoarray = [ ] ; var attendmaybearray = [ ] ;
if ( news [ i ] . hasOwnProperty ( 'friendica_activities' ) ) {
2022-03-01 21:59:21 +01:00
for ( var user in news [ i ] . friendica _activities . like ) { likearray . push ( news [ i ] . friendica _activities . like [ user ] . url ) }
for ( var user in news [ i ] . friendica _activities . dislike ) { dislikearray . push ( news [ i ] . friendica _activities . dislike [ user ] . url ) }
for ( var user in news [ i ] . friendica _activities . attendyes ) { attendyesarray . push ( news [ i ] . friendica _activities . attendyes [ user ] . url ) }
for ( var user in news [ i ] . friendica _activities . attendno ) { attendnoarray . push ( news [ i ] . friendica _activities . attendno [ user ] . url ) }
for ( var user in news [ i ] . friendica _activities . attendmaybe ) { attendmaybearray . push ( news [ i ] . friendica _activities . attendmaybe [ user ] . url ) }
2018-07-01 15:09:21 +02:00
}
2017-01-26 21:55:31 +01:00
var friendica _activities = [ likearray , dislikearray , attendyesarray , attendnoarray , attendmaybearray ]
2017-05-11 22:15:34 +02:00
var attachments = "" ; if ( news [ i ] . attachments ) { attachments = Qt . btoa ( JSON . stringify ( news [ i ] . attachments ) ) }
2020-11-25 21:40:17 +01:00
2022-03-01 21:59:21 +01:00
//if (news[i].friendica_title!="") {news[i].statusnet_html="<b>"+news[i].friendica_title +"</b><br><br>"+news[i].friendica_html;}
//else{
news [ i ] . statusnet _html = news [ i ] . friendica _html //}
2020-11-25 21:40:17 +01:00
2017-01-26 21:55:31 +01:00
db . transaction ( function ( tx ) {
2019-06-25 20:59:10 +02:00
var result = tx . executeSql ( 'SELECT * from news where username="' + login . username + '" AND status_id = "' + news [ i ] . id + '" AND messagetype=' + news [ i ] . messagetype ) ; // check for news id
2017-01-26 21:55:31 +01:00
if ( result . rows . length === 1 ) { // use update
2017-03-25 23:36:14 +01:00
//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')
2020-11-25 21:40:17 +01:00
result = tx . executeSql ( 'UPDATE news SET username="' + login . username + '", messagetype=' + news [ i ] . messagetype + ', text="' + Qt . btoa ( news [ i ] . text ) + '", created_at="' + 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 ] . statusnet _html ) + '", statusnet_conversation_id="' + news [ i ] . statusnet _conversation _id + '",friendica_activities="' + Qt . btoa ( JSON . stringify ( friendica _activities ) ) + '",attachments="' + attachments + '",friendica_owner="' + news [ i ] . friendica _author . url + '" where username="' + login . username + '" AND status_id="' + news [ i ] . status _id + '" AND messagetype=0' ) ;
2017-01-26 21:55:31 +01:00
} else { // use insert
2019-06-25 20:59:10 +02:00
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 , news [ i ] . messagetype , Qt . btoa ( news [ i ] . text ) , 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 _author . url ] ) } } )
2022-03-01 21:59:21 +01:00
}
2017-01-26 21:55:31 +01:00
}
2018-07-01 15:09:21 +02:00
function getActivitiesUserData ( allcontacts , userUrlArray ) { //print(JSON.stringify(userUrlArray));
2017-01-26 21:55:31 +01:00
var helpArray = [ ] ;
2017-03-25 23:36:14 +01:00
for ( var i = 0 ; i < userUrlArray . length ; i ++ ) {
2022-03-01 21:59:21 +01:00
helpArray . push ( objFromArray ( allcontacts , "url" , userUrlArray [ i ] ) ) ;
2017-01-26 21:55:31 +01:00
}
return helpArray
}
2019-06-25 20:59:10 +02:00
function newsfromdb ( database , login , messagetype , callback , contact , stop _time ) {
2022-03-01 21:59:21 +01:00
// return news before stop_time (used by More button), in brackets of 20 entries, or by specified contact
2017-01-26 21:55:31 +01:00
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
db . transaction ( function ( tx ) {
2019-06-25 20:59:10 +02:00
var result = tx . executeSql ( 'SELECT status_id from news WHERE username="' + login . username + '" AND messagetype=0 ORDER BY status_id DESC LIMIT 1' ) ;
try { var lastid = result . rows . item ( 0 ) . status _id ; } catch ( e ) { var lastid = 0 } ;
if ( ! stop _time ) { var stop = "" ;
try { var rs = tx . executeSql ( 'select created_at from news WHERE username="' + login . username + '" AND messagetype="' + messagetype + '" ORDER BY created_at DESC LIMIT 1' ) ;
2022-03-01 21:59:21 +01:00
stop = "<=" + rs . rows . item ( 0 ) . created _at } catch ( e ) { stop = "<99999999999999" } }
2019-06-25 20:59:10 +02:00
else { var stop = "<" + stop _time }
var contactfilter = "" ; if ( contact ) { contactfilter = " AND (uid='" + contact + "' OR friendica_owner='" + contact + "')" }
2022-03-01 21:59:21 +01:00
if ( messagetype == "0" ) { messagetype = "0,5" }
2019-12-10 21:12:32 +01:00
//print('select * from news WHERE username="'+login.username+'" AND messagetype IN ( '+messagetype+' ) AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
var newsrs = tx . executeSql ( 'select * from news WHERE username="' + login . username + '" AND messagetype IN ( ' + messagetype + ' ) AND created_at' + stop + contactfilter + ' ORDER BY created_at DESC LIMIT 20' ) ;
2019-06-25 20:59:10 +02:00
var newsArray = [ ] ;
var allcontacts = getAllContacts ( database , login . username ) ;
for ( var i = 0 ; i < newsrs . rows . length ; i ++ ) {
newsArray . push ( newsrs . rows . item ( i ) ) ;
newsArray [ i ] . statusnet _html = Qt . atob ( newsArray [ i ] . statusnet _html ) ;
newsArray [ i ] . text = Qt . atob ( newsArray [ i ] . text ) ;
newsArray [ i ] . id = newsArray [ i ] . status _id ;
2020-05-24 21:14:23 +02:00
newsArray [ i ] . friendica _author = objFromArray ( allcontacts , "url" , newsArray [ i ] . friendica _owner )
2019-06-25 20:59:10 +02:00
newsArray [ i ] = fetchUsersForNews ( database , login . username , newsArray [ i ] , allcontacts ) ;
if ( newsArray [ i ] . attachments != "" && newsArray [ i ] . attachments !== null ) { newsArray [ i ] . attachments = JSON . parse ( Qt . atob ( newsArray [ i ] . attachments ) ) } ;
}
2022-03-01 21:59:21 +01:00
callback ( newsArray , lastid ) } ) ;
2017-01-26 21:55:31 +01:00
}
2019-06-25 20:59:10 +02:00
function fetchUsersForNews ( database , username , news , allcontacts ) { //print("fetchusers "+JSON.stringify(news))
2018-02-19 22:36:00 +01:00
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 ) }
2018-07-01 15:09:21 +02:00
//news.friendica_owner_object=objFromArray(allcontacts,"url",news.friendica_owner);
2019-06-25 20:59:10 +02:00
news . friendica _author = objFromArray ( allcontacts , "url" , news . friendica _author ) ;
2018-07-01 15:09:21 +02:00
if ( news . messagetype == 0 ) {
2022-03-01 21:59:21 +01:00
var friendicaArray = JSON . parse ( Qt . atob ( news . friendica _activities ) ) ;
2018-07-01 15:09:21 +02:00
delete news . friendica _activities ;
news . friendica _activities = { } ;
2022-03-01 21:59:21 +01:00
//for(var j=0;j<friendicaArray.length;j++){
news . friendica _activities . like = getActivitiesUserData ( allcontacts , friendicaArray [ 0 ] ) ;
news . friendica _activities . dislike = getActivitiesUserData ( allcontacts , friendicaArray [ 1 ] ) ;
news . friendica _activities . attendyes = getActivitiesUserData ( allcontacts , friendicaArray [ 2 ] ) ;
news . friendica _activities . attendno = getActivitiesUserData ( allcontacts , friendicaArray [ 3 ] ) ;
news . friendica _activities . attendmaybe = getActivitiesUserData ( allcontacts , friendicaArray [ 4 ] ) ;
//}
2018-07-01 15:09:21 +02:00
}
return news
2017-01-26 21:55:31 +01:00
}
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=" }
2017-11-07 21:57:40 +01:00
Helperjs . friendicaPostRequest ( login , api + newsid , "" , "POST" , rootwindow , function ( obj ) {
2017-01-26 21:55:31 +01:00
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
2022-03-01 21:59:21 +01:00
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 )
} ) ;
} ) }
2017-01-26 21:55:31 +01:00
function retweetNews ( login , database , newsid , rootwindow , callback ) {
2018-02-19 22:36:00 +01:00
Helperjs . friendicaPostRequest ( login , "/api/statuses/retweet?id=" + newsid , "" , "POST" , rootwindow , function ( obj ) {
2017-01-26 21:55:31 +01:00
var answer = JSON . parse ( obj ) ;
2018-02-19 22:36:00 +01:00
if ( answer . hasOwnProperty ( 'status' ) ) //('error' in answer.status)
2022-03-01 21:59:21 +01:00
{ Helperjs . showMessage ( "Repost" , answer . status . code , rootwindow ) ; }
2018-02-19 22:36:00 +01:00
else { Helperjs . showMessage ( "Repost" , answer . text , rootwindow ) }
} )
}
2017-01-26 21:55:31 +01:00
2020-11-25 21:40:17 +01:00
function favorite ( login , favorited , newsid , rootwindow ) {
2022-03-01 21:59:21 +01:00
// toggle favorites
if ( favorited ) { Helperjs . friendicaPostRequest ( login , "/api/favorites/create?id=" + newsid , "" , "POST" , rootwindow , function ( obj ) {
} ) }
2018-07-20 21:15:54 +02:00
else { Helperjs . friendicaPostRequest ( login , "/api/favorites/destroy?id=" + newsid , "" , "POST" , rootwindow , function ( obj ) {
2022-03-01 21:59:21 +01:00
} ) }
2017-01-26 21:55:31 +01:00
}
function likerequest ( login , database , verb , newsid , rootwindow ) {
2021-08-03 21:19:53 +02:00
Helperjs . friendicaPostRequest ( login , "/api/friendica/activity/" + verb + "?id=" + newsid , "" , "POST" , rootwindow , function ( obj ) {
2022-03-01 21:59:21 +01:00
if ( obj == '"ok"' ) {
2017-01-26 21:55:31 +01:00
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 ) ;
2017-05-11 22:15:34 +02:00
//print(verb+"currentActivities "+JSON.stringify(currentActivities));
2017-01-26 21:55:31 +01:00
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 ) } }
2017-03-25 23:36:14 +01:00
//print(JSON.stringify(currentActivities));
2017-01-26 21:55:31 +01:00
var result = tx . executeSql ( 'UPDATE news SET friendica_activities_self ="' + JSON . stringify ( currentActivities ) + '" where username="' + login . username + '" AND status_id =' + newsid ) ;
2022-03-01 21:59:21 +01:00
} ) }
else { } } )
2017-01-26 21:55:31 +01:00
}
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 ) {
2022-03-01 21:59:21 +01:00
likerequest ( login , database , "un" + verb , newsid , rootwindow ) ; }
2017-01-26 21:55:31 +01:00
}
function attend ( login , database , attend , newsid , rootwindow , callback ) {
2017-11-07 21:57:40 +01:00
Helperjs . friendicaPostRequest ( login , "/api/friendica/activity/attend" + attend + "?id=" + newsid , "" , "POST" , rootwindow , function ( obj ) {
2022-03-01 21:59:21 +01:00
//print("attend: "+attend+obj);
if ( obj == '"ok"' )
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
2017-01-26 21:55:31 +01:00
db . transaction ( function ( tx ) {
var currentActivities _rs = tx . executeSql ( 'select friendica_activities_self from news WHERE username="' + login . username + '" AND status_id=' + newsid ) ;
2017-01-29 17:26:09 +01:00
var currentActivities = JSON . parse ( currentActivities _rs . rows . item ( 0 ) . friendica _activities _self ) ;
if ( ( attend == "yes" ) && ( currentActivities . indexOf ( 3 ) == - 1 ) ) {
2017-01-26 21:55:31 +01:00
currentActivities . push ( 3 ) ;
2017-01-29 17:26:09 +01:00
if ( currentActivities . indexOf ( 4 ) != - 1 ) { currentActivities . splice ( currentActivities . indexOf ( 4 ) , 1 ) }
if ( currentActivities . indexOf ( 5 ) != - 1 ) { currentActivities . splice ( currentActivities . indexOf ( 5 ) , 1 ) }
2022-03-01 21:59:21 +01:00
//print(JSON.stringify(currentActivities));
}
if ( ( attend == "no" ) && ( currentActivities . indexOf ( 4 ) == - 1 ) ) {
2017-01-26 21:55:31 +01:00
currentActivities . push ( 4 ) ;
2017-01-29 17:26:09 +01:00
if ( currentActivities . indexOf ( 3 ) != - 1 ) { currentActivities . splice ( currentActivities . indexOf ( 3 ) , 1 ) }
if ( currentActivities . indexOf ( 5 ) != - 1 ) { currentActivities . splice ( currentActivities . indexOf ( 5 ) , 1 ) }
2022-03-01 21:59:21 +01:00
}
if ( ( attend == "maybe" ) && ( currentActivities . indexOf ( 5 ) == - 1 ) ) {
2017-01-26 21:55:31 +01:00
currentActivities . push ( 5 ) ;
2017-01-29 17:26:09 +01:00
if ( currentActivities . indexOf ( 3 ) != - 1 ) { currentActivities . splice ( currentActivities . indexOf ( 3 ) , 1 ) }
if ( currentActivities . indexOf ( 4 ) != - 1 ) { currentActivities . splice ( currentActivities . indexOf ( 4 ) , 1 ) }
2022-03-01 21:59:21 +01:00
}
2017-01-29 17:26:09 +01:00
2022-03-01 21:59:21 +01:00
var result = tx . executeSql ( 'UPDATE news SET friendica_activities_self ="' + JSON . stringify ( currentActivities ) + '" where username="' + login . username + '" AND status_id =' + newsid ) ;
callback ( ) ;
} ) } ) }
2017-01-26 21:55:31 +01:00
function requestConversation ( login , database , newsid , contacts , rootwindow , callback ) {
Helperjs . friendicaRequest ( login , "/api/conversation/show?id=" + newsid , rootwindow , function ( obj ) {
2022-03-01 21:59:21 +01:00
var news = JSON . parse ( obj ) ;
var newContacts = findNewContacts ( news , contacts ) ;
// storeNews(login,database,news,rootwindow,callback)
callback ( news , newContacts )
} ) }
2017-01-26 21:55:31 +01:00
2021-06-21 21:56:32 +02:00
//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=getAllContacts(database,user);
// for(var i = 0; i < newsrs.rows.length; i++) {
// newsArray.push(newsrs.rows.item(i));
// newsArray[i].statusnet_html=Qt.atob(newsArray[i].statusnet_html);
// newsArray[i].text=Qt.atob(newsArray[i].text);
// newsArray[i].id=newsArray[i].status_id;
// newsArray[i]=fetchUsersForNews(database,user,newsArray[i],allcontacts);
// if (helpernews.attachments!="" && newsArray[i].attachments!==null){newsArray[i].attachments=JSON.parse(Qt.atob(newsArray[i].attachments))};
// }
// callback(newsArray)})
//}
2017-01-26 21:55:31 +01:00
function requestFavorites ( login , database , contacts , rootwindow , callback ) {
Helperjs . friendicaRequest ( login , "/api/favorites" , rootwindow , function ( obj ) {
2022-03-01 21:59:21 +01:00
//print(obj+JSON.stringify(obj));
var news = JSON . parse ( obj ) ;
var newContacts = findNewContacts ( news , contacts ) ;
// storeNews(login,database,news,rootwindow,callback)
callback ( news , newContacts )
} ) }
2017-01-26 21:55:31 +01:00
2022-03-01 21:59:21 +01:00
function chatsfromdb ( database , login , messagetype , currentconversations , callback , stop _id ) {
2019-06-25 20:59:10 +02:00
2017-01-26 21:55:31 +01:00
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
db . transaction ( function ( tx ) {
2022-03-01 21:59:21 +01:00
if ( ! stop _id ) { var stop = "" ;
try { var rs = tx . executeSql ( 'select status_id from news WHERE username="' + login . username + '" AND messagetype="' + messagetype + '" ORDER BY status_id DESC LIMIT 1' ) ;
stop = "<=" + rs . rows . item ( 0 ) . status _id } catch ( e ) { stop = "<99999999999999" } }
else { var stop = "<" + stop _id }
if ( messagetype == "1" ) { messagetype = "1,5" }
let conversationfilter = "" ;
if ( currentconversations . length > 0 ) { conversationfilter = "AND statusnet_conversation_id NOT IN (" + currentconversations . toString ( ) + ") " }
var conversationsrs = tx . executeSql ( 'select DISTINCT statusnet_conversation_id from news WHERE username="' + login . username + '" AND status_id' + stop + ' AND messagetype IN ( "' + messagetype + '" ) ' + conversationfilter + 'ORDER BY created_at DESC LIMIT 20' ) ; //+' ORDER BY created_at DESC LIMIT 20');
var result = tx . executeSql ( 'SELECT status_id from news WHERE username="' + login . username + '" AND messagetype=0 ORDER BY status_id DESC LIMIT 1' ) ;
try { var lastid = result . rows . item ( 0 ) . status _id ; } catch ( e ) { var lastid = 0 } ;
var conversations = [ ] ;
for ( var i = 0 ; i < conversationsrs . rows . length ; i ++ ) {
conversations . push ( conversationsrs . rows . item ( i ) . statusnet _conversation _id ) ;
2020-01-27 21:53:51 +01:00
}
2022-03-01 21:59:21 +01:00
var newsArray = [ ] ;
var allcontacts = getAllContacts ( database , login . username ) ;
2021-06-21 21:56:32 +02:00
2022-03-01 21:59:21 +01:00
for ( var j = 0 ; j < conversations . length ; j ++ ) {
var newsrs = tx . executeSql ( 'select * from news WHERE username="' + login . username + '" AND statusnet_conversation_id="' + conversations [ j ] + '" AND messagetype="' + messagetype + '" ORDER BY created_at ASC' ) ;
//print(JSON.stringify(newsrs.rows.item(0))+JSON.stringify(newsrs.rows.item(1)))
var helpernews = newsrs . rows . item ( 0 ) ;
helpernews = cleanhelpernews ( database , login . username , helpernews , allcontacts )
helpernews . currentconversation = [ ] ;
for ( var h = 0 ; h < newsrs . rows . length ; h ++ ) {
var helpernews2 = newsrs . rows . item ( h ) ;
if ( helpernews . id != helpernews2 . status _id ) {
helpernews2 . newscount = 0 ;
helpernews2 = cleanhelpernews ( database , login . username , helpernews2 , allcontacts )
helpernews . currentconversation . push ( helpernews2 )
}
}
helpernews . newscount = newsrs . rows . length ;
newsArray . push ( helpernews ) ;
}
callback ( newsArray , lastid ) ;
} ) }
2017-01-26 21:55:31 +01:00
2018-07-01 15:09:21 +02:00
function allchatsfromdb ( database , user , callback ) {
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
db . transaction ( function ( tx ) {
2022-03-01 21:59:21 +01:00
// 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 + '" ORDER BY created_at DESC' ) ; //+' ORDER BY created_at DESC LIMIT 20');
var conversationIds = [ ] ;
for ( var i = 0 ; i < conversationsrs . rows . length ; i ++ ) {
conversationIds . push ( conversationsrs . rows . item ( i ) . statusnet _conversation _id ) ;
2021-06-21 21:56:32 +02:00
}
2022-03-01 21:59:21 +01:00
var newsArray = [ ] ;
var countArray = [ ] ;
var allcontacts = getAllContacts ( database , user ) ;
for ( var j = 0 ; j < conversationIds . length ; j ++ ) {
var newsrs = tx . executeSql ( 'select * from news WHERE username="' + user + '" AND statusnet_conversation_id="' + conversationIds [ j ] + '" ORDER BY created_at ASC' ) ;
var helpernews = newsrs . rows . item ( 0 ) ;
var helpernews = cleanhelpernews ( database , user , helpernews , allcontacts )
helpernews . currentconversation = [ ] ;
for ( var h = 0 ; h < newsrs . rows . length ; h ++ ) {
var helpernews2 = newsrs . rows . item ( h ) ;
if ( helpernews . id != helpernews2 . status _id ) {
helpernews2 . newscount = 0 ;
helpernews2 = cleanhelpernews ( database , user , helpernews2 , allcontacts )
helpernews . currentconversation . push ( helpernews2 )
}
}
2021-06-21 21:56:32 +02:00
2022-03-01 21:59:21 +01:00
newsArray . push ( helpernews ) ;
countArray . push ( newsrs . rows . length )
}
var conversationsobject = ( { } ) ;
2018-07-01 15:09:21 +02:00
2022-03-01 21:59:21 +01:00
conversationsobject . conversationIds = conversationIds ;
conversationsobject . newsArray = newsArray ;
conversationsobject . countArray = countArray ;
callback ( conversationsobject ) ;
} ) }
2018-07-01 15:09:21 +02:00
function oldchatfromdb ( database , user , conversationId , lastpost , allcontacts , callback ) {
var db = Sql . LocalStorage . openDatabaseSync ( database [ 0 ] , database [ 1 ] , database [ 2 ] , database [ 3 ] ) ;
db . transaction ( function ( tx ) {
2022-03-01 21:59:21 +01:00
// var newsArray=[];
// var countArray=[];
//var allcontacts=getAllContacts(database,user);
var newsrs = tx . executeSql ( 'select * from news WHERE username="' + user + '" AND statusnet_conversation_id="' + conversationId + '" AND status_id<' + lastpost + ' ORDER BY created_at ASC' ) ;
let conversation = [ ] ;
var helpernews = { currentconversation : conversation }
if ( newsrs . rows . length > 0 ) {
//helpernews=newsrs.rows.item(0);
//helpernews=cleanhelpernews(database,user,helpernews,allcontacts)
//helpernews.currentconversation=[];
for ( var h = 0 ; h < newsrs . rows . length ; h ++ ) {
var helpernews2 = newsrs . rows . item ( h ) ;
if ( helpernews . id != helpernews2 . status _id ) {
helpernews2 . newscount = 0 ;
helpernews2 = cleanhelpernews ( database , user , helpernews2 , allcontacts )
//print(" helpernews "+JSON.stringify(helpernews.currentconversation))
helpernews . currentconversation . push ( helpernews2 )
2021-06-21 21:56:32 +02:00
}
2022-03-01 21:59:21 +01:00
}
}
var newscount = newsrs . rows . length ;
callback ( helpernews , newscount ) ;
// var conversationobject={news:helpernews,newscount:newscount};
// return conversationobject;
} )
}
2018-07-01 15:09:21 +02:00
2021-06-21 21:56:32 +02:00
function cleanhelpernews ( database , user , helpernews , allcontacts ) {
helpernews = fetchUsersForNews ( database , user , helpernews , allcontacts ) ;
helpernews . statusnet _html = Qt . atob ( helpernews . statusnet _html ) ;
helpernews . text = Qt . atob ( helpernews . text ) ;
helpernews . id = helpernews . status _id ;
helpernews . friendica _author = objFromArray ( allcontacts , "url" , helpernews . friendica _owner ) ;
if ( helpernews . attachments != "" && helpernews . attachments !== null ) { helpernews . attachments = JSON . parse ( Qt . atob ( helpernews . attachments ) ) } ;
return helpernews
}
2018-07-01 15:09:21 +02:00
function getAllContacts ( database , user ) {
var allcontacts = [ ] ;
Helperjs . readData ( database , "contacts" , user , function ( obj ) {
allcontacts = obj ;
for ( var n in allcontacts ) {
allcontacts [ n ] . name = Qt . atob ( allcontacts [ n ] . name ) ;
allcontacts [ n ] . description = Qt . atob ( allcontacts [ n ] . description )
}
} ) ;
return allcontacts ;
}
2017-01-26 21:55:31 +01:00
function inArray ( list , prop , val ) {
if ( list . length > 0 ) {
for ( var i in list ) { if ( list [ i ] [ prop ] == val ) {
return true ;
}
}
} return false ;
}
2018-02-19 22:36:00 +01:00
function objFromArray ( list , prop , val ) {
if ( list . length > 0 ) {
for ( var i in list ) { if ( list [ i ] [ prop ] == val ) {
return list [ i ] ;
}
}
} return false ;
}
2017-01-26 21:55:31 +01:00
function cleanDate ( date ) {
2018-02-19 22:36:00 +01:00
var cleanedDate = date . slice ( 0 , 3 ) + ", " + date . slice ( 8 , 11 ) + date . slice ( 4 , 7 ) + date . slice ( 25 , 30 ) + date . slice ( 10 , 25 ) ;
return cleanedDate
2017-01-26 21:55:31 +01:00
}
2020-11-25 21:40:17 +01:00
function findTags ( fulltext ) {
2022-03-01 21:59:21 +01:00
return fulltext . match ( /\s+[#]+[A-Za-z0-9-_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]+/g )
2020-11-25 21:40:17 +01:00
}