//.pragma library .import QtQuick.LocalStorage 2.0 as Sql .import "qrc:/js/helper.js" as Helperjs .import "qrc:/js/news.js" as Newsjs // IMAGE FUNCTIONS function requestList(login,database,rootwindow,callback) { //get list of own images and call download function Helperjs.friendicaRequest(login,"/api/friendica/photos/list", rootwindow,function (helperobject){ //print("return"+helperobject); var obj=JSON.parse(helperobject); Helperjs.readField("id",database,"imageData",login.username,function(AllStoredImages){ if (AllStoredImages.length>0){ for(var i=0;i< AllStoredImages.length;i++){ var position=Helperjs.inArray(obj,"resourceID",AllStoredImages[i]); if (position>-1){obj.splice(position,1)} //obj.splice(obj.indexOf(AllStoredImages[i]),1);// list of objects instead of list!!! }} callback(obj) }) })} function dataRequest(login,photoID,database,rootwindow) { // check if image exist and call download function Helperjs.friendicaRequest(login,"/api/friendica/photo?photo_id="+photoID, rootwindow, function (image){ try{ if(image==""){currentimageno=currentimageno+1}else{ var obj = JSON.parse(image); var helpfilename=obj.filename.substring(0,obj.filename.lastIndexOf(".")); var filesuffix=""; if (obj.type=="image/jpeg"){filesuffix=".jpg"} else if (obj.type=="image/png"){filesuffix=".png"} else {filesuffix=""} if (helpfilename==""){// check if file has any filename obj.filename=obj["id"]+filesuffix; } else{obj.filename=helpfilename+filesuffix} var link=""; if(obj["link"][0]){link=obj["link"][0]} else{link=obj["link"]["4"]} xhr.setUrl(Qt.resolvedUrl(link)); xhr.setFilename(login.imagestore+'albums/'+obj.album+"/"+obj["filename"]); xhr.setDownloadtype("picture"); xhr.download(); var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) { var result = tx.executeSql('SELECT * from imageData where id = "'+obj["id"]+'"'); if(result.rows.length === 1) {// use update result = tx.executeSql('UPDATE imageData SET username ="' +login.username+ '",id="'+obj.id+'", created="'+obj.created+'", edited="'+obj.edited+'", profile="'+obj.profile+'", link="'+obj["link"]["4"]+'", filename="'+obj.filename+'",title="'+obj.title+'", desc="'+obj.desc+'", type="'+obj.type+'", width="'+obj.width+'", height="'+obj.height+'", album="'+obj.album+'", location="file://'+login.imagestore+'albums/'+obj.album+'/" where id="'+obj["id"]+'"'); } else {// use insert print('... does not exists, create it') result = tx.executeSql('INSERT INTO imageData VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,obj.id,obj.created,obj.edited, obj.title, obj.desc, obj.album, obj.filename, obj.type, obj.height, obj.width,obj. profile,obj["link"]["4"],'file://'+login.imagestore+'albums/'+obj.album+"/"]); } })}} catch (e){print("Data retrieval failure! "+ e+obj);} })} function deleteImage(database,login,type,location,rootwindow,callback) { // delete image locally and on server var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); //print(' delete Image Data() for ' + location) var rsfilename=location.substring(location.lastIndexOf("/")+1,location.length); var rslocation=location.substring(0,location.lastIndexOf("/")+1); print(type+" Name "+ rsfilename+" Location: "+rslocation) db.transaction( function(tx) { if (type=='image'){ var rs= tx.executeSql('SELECT * FROM imageData WHERE filename="'+rsfilename+'" AND location="'+rslocation+'"') print(rs.rows.item(0).id) //); var imageId=rs.rows.item(0).id; Helperjs.friendicaPostRequest(login,"/api/friendica/photo/delete?photo_id="+imageId,"","DELETE",rootwindow, function (obj){ var deletereturn = JSON.parse(obj); print(obj); if (deletereturn.result=="deleted"){ db.transaction( function(tx) { var deleters=tx.executeSql('DELETE FROM imageData WHERE location="'+rslocation+'" AND filename="'+rsfilename+'"'); }); filesystem.Directory=rslocation.substring(7,rslocation.length-1); filesystem.rmFile(rsfilename) }}) } else{ Helperjs.friendicaPostRequest(login,"/api/friendica/photoalbum/delete?album="+rsfilename,"","DELETE",rootwindow, function (obj){ print(" Return "+ obj); var deletereturn = JSON.parse(obj); if (deletereturn.result=="deleted"){ db.transaction( function(tx) { var rs= tx.executeSql('SELECT DISTINCT location FROM imageData WHERE album="'+rsfilename+'" AND username="'+login.username+'"'); var locationstring=rs.rows.item(0).location; filesystem.Directory=locationstring.substring(7,locationstring.length-1); filesystem.rmDir(); var deleters=tx.executeSql('DELETE FROM imageData WHERE album="'+location+'"'); }) } }) } callback(location) }) } function deleteContacts(database,user,callback) { // does nothing useful at the moment var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); //print(' delete Image Data() for ' + field +"="+selection) db.transaction( function(tx) { result1= tx.executeSql('SELECT * FROM contacts a LEFT OUTER JOIN news b ON a.url==b.uid'); result2= tx.executeSql('SELECT * FROM contacts a LEFT OUTER JOIN news b ON a.url==b.uid'); callback(result)}) } function requestFriendsAlbumPictures(login,friend,rootwindow,callback){ // screenscraping of albums page of contact without user and password Helperjs.friendicaWebRequest(friend.url.replace("profile","photos"),rootwindow,function(photohtml){ //print(photohtml); var photoarray=[]; var arr = photohtml.split("sidebar-photos-albums-li"); for (var i=2;i')-1); var album={'link':albumlink,'name':albumname} photoarray.push(album); } callback(photoarray) }) } function requestFriendsPictures(link,rootwindow,callback){ // screenscraping of pictures page for given album Helperjs.friendicaWebRequest(link,rootwindow,function(photohtml){ var photoarray=[]; var basehtml=photohtml.substring(photohtml.indexOf('',photohtml.indexOf('-1){ //theme 1 var arr = photohtml.split("photo-album-image-wrapper-end");} // other themes if (photohtml.indexOf("photo-album-wrapper")>-1){ //theme 2 var photoarea=photohtml.substring(photohtml.indexOf("photo-album-wrapper"),photohtml.indexOf("photo-album-end")) var arr = photoarea.split("");} for (var i=0;i","");newperms="["+newperms+"]"; var newpermArray=JSON.parse(newperms); return (newpermArray) } function getEvents(database,login,rootwindow,callback){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); Helperjs.friendicaWebRequest(login.server+"/cal/"+login.username+"/json",rootwindow,function(obj){ var events = JSON.parse(obj); db.transaction( function(tx) { for (var i=0;i0){ for(var i = 0; i < rs.rows.length; i++) { rsArray.push(rs.rows.item(i)) } var rsObject={server:rsArray[0].server,username:rsArray[0].username, password:rsArray[0].password,imagestore:rsArray[0].imagestore,maxnews:rsArray[0].maxnews,isActive:rsArray[0].isActive,timerInterval:rsArray[0].timerInterval, newsViewType:rsArray[0].newsViewType,permissions:JSON.parse(rsArray[0].permissions),maxContactAge:rsArray[0].maxContactAge,APIVersion:rsArray[0].APIVersion,addons:rsArray[0].addons}; } else {var rsObject=""} callback(rsObject)}} ) } function readActiveConfig(database){ var obj; readConfig(database,function(config){obj=config},"isActive", 0); return obj; } function deleteConfig(database,userobj,callback) { // delete user data from DB if (userobj){var where = " WHERE username='"+ userobj.username+"' and server='"+userobj.server+"'";} else { return "no user selected!";} var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); if(!db) { return; } db.transaction( function(tx) { var rs = tx.executeSql('delete from config'+where); callback(rs); }) } function cleanNews(database,callback){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) { var maxnewsrs = tx.executeSql("SELECT DISTINCT maxnews FROM config"); var maxnews=maxnewsrs.rows.item(0).maxnews; var newscountrs = tx.executeSql('SELECT COUNT(*) from news'); var newscount = newscountrs.rows.item(0)["COUNT(*)"]; if (newscount>maxnews){ var lastvalidtimers= tx.executeSql('SELECT DISTINCT created_at FROM news ORDER BY created_at ASC LIMIT ' +(newscount-maxnews)); var lastvalidtime=lastvalidtimers.rows.item(newscount-maxnews-1).created_at; var deleters = tx.executeSql('DELETE from news WHERE created_at<='+lastvalidtime)} callback() }) } function cleanContacts(login,database,callback){ var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); db.transaction( function(tx) { var oldestnewsrs= tx.executeSql('SELECT created_at FROM news WHERE username="'+login.username+'" AND messagetype=0 ORDER BY created_at ASC LIMIT 1'); var oldestnewsTime=oldestnewsrs.rows.item(0).created_at- 604800000; //contacts can be 7 days old print(login.username+" älteste news: "+ oldestnewsTime); var result = tx.executeSql('SELECT * from contacts WHERE username="'+login.username+'" AND isFriend=0 AND imageAge<'+oldestnewsTime); // check for friends for (var i=0;icurrentts) || (image_timestamp==0)){ xhr.setUrl(Qt.resolvedUrl(contact.profile_image_url)); xhr.setFilename(imagename); xhr.setDownloadtype("contact"); xhr.download(); } var result; result = tx.executeSql('SELECT * from contacts where username="'+login.username+'" AND url = "'+contact.url+'"'); // check for news url if(result.rows.length === 1) {// use update result = tx.executeSql('UPDATE contacts SET id='+contact.id+', name="'+Qt.btoa(contact.name)+'", screen_name="'+contact.screen_name+'", location="'+contact.location+'",imageAge='+currentTime+', profile_image_url="'+contact.profile_image_url+'", description="'+Qt.btoa(contact.description)+'", profile_image="'+imagename+'", protected="'+contact.protected+'", followers_count='+contact.followers_count+', friends_count='+contact.friends_count+', created_at="'+ Date.parse(Newsjs.cleanDate(contact.created_at))+'", favourites_count="'+contact.favorites_count+'", utc_offset="'+contact.utc_offset+'", time_zone="'+contact.time_zone+'", statuses_count='+contact.statuses_count+', following="'+contact.following+'", verified ="'+contact.verified+'", statusnet_blocking="'+contact.statusnet_blocking+'", notifications="'+contact.notifictions+'", statusnet_profile_url="'+contact.statusnet_profile_url+'", cid='+contact.cid+', network="'+contact.network+'", isFriend='+isFriend+', timestamp='+ image_timestamp+' where username="'+login.username+'" AND url="'+contact.url+'"'); } else {// use insert result = tx.executeSql('INSERT INTO contacts VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,contact.id,Qt.btoa(contact.name),contact.screen_name,contact.location,currentTime,contact.profile_image_url, Qt.btoa(contact.description),imagename,contact.url,contact.protected,contact.followers_count, contact.friends_count,Date.parse(Newsjs.cleanDate(contact.created_at)),contact.favorites_count,contact.utc_offset,contact.time_zone,contact.statuses_count,contact.following,contact.verfied,contact.statusnet_blocking,contact.notifications,contact.statusnet_profile_url,contact.cid,contact.network,isFriend,image_timestamp]);} }); }}