//.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 deleteImageData(database,user,field,selection,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) { result = tx.executeSql('UPDATE imageData SET data="" where '+ field +'="'+selection+'"'); 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 processNews(callback){ // Newsjs.getCurrentContacts(login,db,function(contacts){ // contactlist=contacts}); if (contactLoadType=="news"){ if(root.news.length==0){} else{// show news Newsjs.storeNews(login,db,news,root,function(dbnews){ root.newsSignal(dbnews); newstab.newstabstatus=login.newsViewType })} } else if (contactLoadType=="friends"){// show friends root.friendsSignal(login.username); Newsjs.getCurrentContacts(login,db,function(contacts){ contactlist=contacts; })} else if (contactLoadType=="conversation"){ var conversationid=news[0].statusnet_conversation_id if (!isNaN(parseInt(conversationid))){//no directmessage conversation Newsjs.storeNews(root.login,root.db,news,root,function(){ Newsjs.conversationfromdb(db,root.login.username,conversationid, function(newsarray){ newstab.conversation=newsarray; }) })} else {newstab.conversation=news}//only DM conversations from database } else if (contactLoadType=="favorites"){//show favorited news Newsjs.storeNews(root.login,root.db,news,root,function(){ Newsjs.favoritesfromdb(db,login.username,function(newsarray){ root.newsSignal(newsarray); newstab.newstabstatus="Favorites"; }) })} callback() } function updateContactInDB(login,database,isFriend,contact){// for newstab and friendstab // var suffix=contact.profile_image_url.substring(contact.profile_image_url.lastIndexOf("."), contact.profile_image_url.length); // var imagename=login.imagestore+"contacts/"+contact.screen_name.trim()+suffix; var imagename=""; contacttimer.restart(); var currentTime=Date.now(); if(contact.profile_image_url==""){root.currentContact=root.currentContact+1 } else{//print(JSON.stringify(contact)) imagename=login.imagestore+"contacts/"+contact.screen_name+"-"+contact.profile_image_url.substring(contact.profile_image_url.lastIndexOf("/")+1, contact.profile_image_url.length); xhr.setUrl(Qt.resolvedUrl(contact.profile_image_url)); xhr.setFilename(imagename); xhr.setDownloadtype("contact"); xhr.download();} var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); var result; db.transaction( function(tx) { 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+' 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]);} }); }