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 ) {
// 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" , rootwindow , function ( obj ) {
var friends = JSON . parse ( obj ) ;
for ( var i = 0 ; i < friends . length ; i ++ ) { friends [ i ] . isFriend = 1 }
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 ( )
} ) ;
} ) }
2017-11-07 21:57:40 +01:00
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=1' ) ; // 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 ( )
} ) ;
} } ) }
2017-01-26 21:55:31 +01: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 ] ) ;
2017-05-11 22:15:34 +02:00
var parameter = "?count=50" ;
2017-01-26 21:55:31 +01:00
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
2017-05-11 22:15:34 +02:00
try { parameter = parameter + "&since_id=" + result . rows . item ( 0 ) . status _id ; } catch ( e ) { } ; } ) }
2017-01-26 21:55:31 +01:00
var newContacts = [ ] ;
2017-11-07 21:57:40 +01:00
Helperjs . friendicaRequest ( login , "/api/statuses/friends_timeline" + parameter , rootwindow , function ( obj ) { //print("newsjs "+JSON.stringify(contacts));
2017-01-26 21:55:31 +01:00
var news = JSON . parse ( obj ) ;
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 ) {
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 ++ ) {
2017-03-25 23:36:14 +01:00
contactlist . push ( result . rows . item ( i ) . url )
//print(result.rows.item(i).url)
2017-01-26 21:55:31 +01:00
}
2017-05-11 22:15:34 +02:00
var lastDate = Date . now ( ) - 604800000 ; // 7 days old
2017-03-25 23:36:14 +01:00
//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 ) ;
2017-01-26 21:55:31 +01:00
for ( var j = 0 ; j < result2 . rows . length ; j ++ ) {
2017-03-25 23:36:14 +01:00
contactlist . push ( result2 . rows . item ( j ) . url )
2017-01-26 21:55:31 +01:00
}
} )
callback ( contactlist )
}
2017-11-07 21:57:40 +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 ) ;
}
if ( news [ i ] . friendica _activities . like . length > 0 ) {
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 ] ) ;
}
}
2017-03-25 23:36:14 +01:00
}
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 ;
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 ;
2017-01-26 21:55:31 +01:00
newContacts . push ( news [ i ] . friendica _activities . dislike [ k ] ) ;
}
}
2017-03-25 23:36:14 +01:00
}
2017-11-07 21:57:40 +01:00
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 ) ;
}
2017-01-26 21:55:31 +01:00
}
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));
2017-03-25 23:36:14 +01:00
//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 ) }
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 ) ) }
2017-01-26 21:55:31 +01:00
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
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')
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' ) ;
2017-01-26 21:55:31 +01:00
} else { // use insert
2017-03-25 23:36:14 +01: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 , 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 ] ) } } )
2017-01-26 21:55:31 +01:00
}
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 ] ) }
} ) ;
}
} )
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 ) ;
}
} )
} ) }
2017-03-25 23:36:14 +01:00
function getActivitiesUserData ( database , username , 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 ++ ) {
2017-01-26 21:55:31 +01:00
Helperjs . readData ( database , "contacts" , username , function ( userdata ) {
helpArray . push ( userdata [ 0 ] ) ;
2017-03-25 23:36:14 +01:00
} , "url" , userUrlArray [ i ] ) ;
2017-01-26 21:55:31 +01:00
}
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 + "'" }
2017-03-25 23:36:14 +01:00
//print('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
2017-01-26 21:55:31 +01:00
var newsrs = tx . executeSql ( 'select * from news WHERE username="' + username + '" AND created_at' + stop + contactfilter + ' ORDER BY created_at DESC LIMIT 20' ) ;
var newsArray = [ ] ;
for ( var i = 0 ; i < newsrs . rows . length ; i ++ ) {
newsArray . push ( newsrs . rows . item ( i ) ) ;
2017-03-25 23:36:14 +01:00
newsArray [ i ] = fetchUsersForNews ( database , username , newsArray [ i ] )
2017-01-26 21:55:31 +01:00
}
callback ( newsArray ) } ) ;
}
2017-03-25 23:36:14 +01:00
function fetchUsersForNews ( database , username , news ) { //print(JSON.stringify(news))
2017-01-26 21:55:31 +01:00
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 ++ )
2017-03-25 23:36:14 +01:00
{ var friendicaArray = JSON . parse ( Qt . atob ( news . friendica _activities ) ) ;
2017-01-26 21:55:31 +01:00
// print("Array: "+friendicaArray[1]);
news . like = getActivitiesUserData ( database , username , friendicaArray [ 0 ] ) ;
news . dislike = getActivitiesUserData ( database , username , friendicaArray [ 1 ] ) ;
news . attendyes = getActivitiesUserData ( database , username , friendicaArray [ 2 ] ) ;
news . attendno = getActivitiesUserData ( database , username , friendicaArray [ 3 ] ) ;
news . attendmaybe = getActivitiesUserData ( database , username , friendicaArray [ 4 ] ) ;
}
2017-03-25 23:36:14 +01:00
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 ) ;
2017-01-26 21:55:31 +01:00
}
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=" }
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 ] ) ;
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 ) {
2017-11-07 21:57:40 +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 ) ;
if ( answer . status . error ) { Helperjs . showMessage ( "Repost" , answer . status . code , rootwindow ) ; }
else { Helperjs . showMessage ( "Repost" , obj , rootwindow ) }
} ) }
function favorite ( login , favorite , newsid , rootwindow ) {
// toggle favorites
2017-11-07 21:57:40 +01:00
if ( favorite ) { Helperjs . friendicaPostRequest ( login , "/api/favorites/create?id=" + newsid , "" , "POST" , rootwindow , function ( obj ) {
2017-01-26 21:55:31 +01:00
} ) }
2017-11-07 21:57:40 +01:00
else { Helperjs . friendicaPostRequest ( login , "/api/favorites/destroy?id=" + newsid , "POST" , rootwindow , function ( obj ) {
2017-01-26 21:55:31 +01:00
} ) }
}
function likerequest ( login , database , verb , newsid , rootwindow ) {
2017-11-07 21:57:40 +01:00
Helperjs . friendicaPostRequest ( login , "/api/friendica/activity/" + verb + "?id=" + newsid , "" , "POST" , rootwindow , function ( obj ) {
2017-01-26 21:55:31 +01:00
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 ) ;
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 ) ;
} ) }
else { print ( "likerequest" + obj ) } } )
}
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 ) {
2017-11-07 21:57:40 +01:00
Helperjs . friendicaPostRequest ( login , "/api/friendica/activity/attend" + attend + "?id=" + newsid , "" , "POST" , rootwindow , function ( obj ) {
2017-01-29 17:26:09 +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 ) }
2017-03-25 23:36:14 +01:00
//print(JSON.stringify(currentActivities));
2017-01-26 21:55:31 +01:00
}
2017-01-29 17:26:09 +01:00
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 ) }
2017-01-26 21:55:31 +01:00
}
2017-01-29 17:26:09 +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 ) }
2017-01-26 21:55:31 +01:00
}
2017-01-29 17:26:09 +01:00
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 ) ;
callback ( ) ;
2017-01-29 17:26:09 +01:00
} ) } ) }
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 ) {
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 = [ ] ;
for ( var i = 0 ; i < newsrs . rows . length ; i ++ ) {
newsArray . push ( newsrs . rows . item ( i ) ) ;
newsArray [ i ] = fetchUsersForNews ( database , user , newsArray [ i ] )
}
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 ) {
2017-05-11 22:15:34 +02:00
//print('select * from news WHERE username="'+user+'" AND favorited=1 ORDER BY status_id DESC');
2017-01-26 21:55:31 +01:00
var newsrs = tx . executeSql ( 'select * from news WHERE username="' + user + '" AND favorited=1 ORDER BY status_id DESC' ) ;
var newsArray = [ ] ;
for ( var i = 0 ; i < newsrs . rows . length ; i ++ ) {
newsArray . push ( newsrs . rows . item ( i ) ) ;
newsArray [ i ] = fetchUsersForNews ( database , user , newsArray [ i ] ) ;
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 }
2017-11-07 21:57:40 +01:00
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');
2017-01-26 21:55:31 +01:00
var conversations = [ ] ;
for ( var i = 0 ; i < conversationsrs . rows . length ; i ++ ) {
conversations . push ( conversationsrs . rows . item ( i ) . statusnet _conversation _id ) ;
}
var newsArray = [ ] ;
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' ) ;
2017-11-07 21:57:40 +01:00
var helpernews = newsrs . rows . item ( 0 ) ;
helpernews . newscount = newsrs . rows . length ;
helpernews = fetchUsersForNews ( database , user , helpernews ) ;
//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 ) ;
} ) }
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 ;
}
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
}