Version 0.003
This commit is contained in:
parent
9f9a9f618c
commit
10dccdcdbb
572 changed files with 3711 additions and 13631 deletions
12
source-android/js/friendworker.js
Normal file
12
source-android/js/friendworker.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
WorkerScript.onMessage = function(msg) {
|
||||
msg.model.clear();
|
||||
for (var j=0;j<msg.albums.length;j++){
|
||||
if (msg.albums[j]) {
|
||||
var albumobject=msg.albums[j];
|
||||
var data=({"albumobject": albumobject,"foreignPicture": msg.foreignPicture})}
|
||||
// print("Albums:"+j+msg.albums.length+JSON.stringify(data));
|
||||
msg.model.append(data);}
|
||||
if (j==msg.albums.length){
|
||||
msg.model.sync()
|
||||
};
|
||||
}
|
132
source-android/js/helper.js
Normal file
132
source-android/js/helper.js
Normal file
|
@ -0,0 +1,132 @@
|
|||
.pragma library
|
||||
.import QtQuick.LocalStorage 2.0 as Sql
|
||||
|
||||
function friendicaRequest(login,api,rootwindow,callback) {
|
||||
var xhrequest= new XMLHttpRequest();
|
||||
xhrequest.onreadystatechange = function() {
|
||||
//print(api+JSON.stringify(login));
|
||||
if(xhrequest.readyState === XMLHttpRequest.DONE) {
|
||||
try{ if (xhrequest.status=200){ //if (xhrequest.responseText!=""){
|
||||
callback(xhrequest.responseText)
|
||||
}else{
|
||||
showMessage("Error","API:" +api+"\n NO RESPONSE"+xhrequest.statusText,rootwindow);
|
||||
callback(xhrequest.responseText)
|
||||
}
|
||||
}
|
||||
catch (e){
|
||||
showMessage("Error", api+" "+e+" "+xhrequest.statusText,rootwindow)
|
||||
}
|
||||
}
|
||||
}
|
||||
xhrequest.open("GET", login.server+api,true,login.username,Qt.atob(login.password));
|
||||
xhrequest.send();
|
||||
}
|
||||
|
||||
function friendicaPostRequest(login,api,rootwindow,callback) {
|
||||
var xhrequest= new XMLHttpRequest();
|
||||
xhrequest.onreadystatechange = function() {
|
||||
//print(api+JSON.stringify(login)+Qt.atob(login.password));
|
||||
if (xhrequest.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
|
||||
} else if(xhrequest.readyState === XMLHttpRequest.DONE) {
|
||||
try{ if (xhrequest.responseText!=""){
|
||||
callback(xhrequest.responseText)
|
||||
}else{
|
||||
showMessage("Error",api+" NO RESPONSE",rootwindow)
|
||||
callback(xhrequest.responseText)
|
||||
}
|
||||
}
|
||||
catch (e){
|
||||
showMessage("Error", api+" "+e,rootwindow)
|
||||
}
|
||||
}
|
||||
}
|
||||
xhrequest.open("POST", login.server+api,true,login.username,Qt.atob(login.password));
|
||||
xhrequest.send();
|
||||
}
|
||||
function getCount(database,login,table,field,countvalue){
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
var count=0;
|
||||
db.transaction( function(tx) {
|
||||
var countrs = tx.executeSql('SELECT COUNT(*) from '+table+' WHERE username= "'+ login.username +'" AND '+field+' = "'+countvalue+'"');
|
||||
count = parseInt(countrs.rows.item(0)["COUNT(*)"])
|
||||
})
|
||||
return count
|
||||
}
|
||||
|
||||
function friendicaWebRequest(url,rootwindow,callback) {
|
||||
var xhrequest = new XMLHttpRequest();
|
||||
xhrequest.onreadystatechange = function() {
|
||||
if (xhrequest.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
|
||||
} else if(xhrequest.readyState === XMLHttpRequest.DONE) {
|
||||
try{ callback(xhrequest.responseText);
|
||||
}
|
||||
catch (e){
|
||||
showMessage("Error",url+" "+e, rootwindow)
|
||||
}
|
||||
}
|
||||
}
|
||||
xhrequest.open("GET", url,true);
|
||||
xhrequest.send();
|
||||
}
|
||||
|
||||
function readData(database,table,username,callback,filter,filtervalue, sort) { // reads and applies data from DB
|
||||
if (filter){
|
||||
var where = " AND "+ filter +" = '" + filtervalue+"'";
|
||||
} else { var where="";}
|
||||
if (username){
|
||||
var user = ' where username= "'+ username +'"';
|
||||
} else { var user='';}
|
||||
|
||||
if (sort){
|
||||
var sortparam = " ORDER BY "+ sort;
|
||||
} else { var sortparam="";}
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
if(!db) { return; }
|
||||
db.transaction( function(tx) {
|
||||
//print('select * from '+table+user+where+sortparam);
|
||||
var rsArray=[];
|
||||
var rs = tx.executeSql('select * from '+table+user+where+sortparam);
|
||||
for(var i = 0; i < rs.rows.length; i++) {
|
||||
rsArray.push(rs.rows.item(i))
|
||||
}
|
||||
callback(rsArray);
|
||||
});
|
||||
}
|
||||
|
||||
function readField(field,database,table, username, callback,filter,filtervalue) { // reads and applies data from DB
|
||||
if (filter){
|
||||
var where = " AND "+ filter +" = '" + filtervalue+"'";
|
||||
} else { var where="";}
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
if(!db) { return; }
|
||||
db.transaction( function(tx) {
|
||||
//print('... read from database ' + field)
|
||||
var rsArray=[];
|
||||
//print('select DISTINCT '+field+' from '+table+' WHERE username="'+username+'"'+where+' ORDER BY '+field+' ASC');
|
||||
var rs = tx.executeSql('select DISTINCT '+field+' from '+table+' WHERE username="'+username+'"'+where+' ORDER BY '+field+' ASC');
|
||||
for(var i = 0; i < rs.rows.length; i++) {
|
||||
rsArray.push(rs.rows.item(i)[field])
|
||||
}
|
||||
callback(rsArray);
|
||||
});
|
||||
}
|
||||
|
||||
function showMessage(header,message,rootwindow){print("message: "+message);
|
||||
var cleanmessage=message.replace(/"/g,"-");
|
||||
var messageString='import QtQuick 2.0; import QtQuick.Dialogs 1.2; MessageDialog{ visible: true; title:"'+header+'";standardButtons: StandardButton.Ok; text:" '+cleanmessage+'"}';
|
||||
var messageObject=Qt.createQmlObject(messageString,rootwindow,"messageOutput");
|
||||
}
|
||||
|
||||
function inArray(list, prop, val) {
|
||||
if (list.length > 0 ) {
|
||||
for (var i in list) { if (list[i][prop] == val) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
} return -1;
|
||||
}
|
||||
function cleanArray(array) {
|
||||
var arraystring=JSON.stringify(array);
|
||||
arraystring=arraystring.replace(/[\[\]]/g , '');
|
||||
return arraystring;
|
||||
}
|
44
source-android/js/layout.js
Normal file
44
source-android/js/layout.js
Normal file
|
@ -0,0 +1,44 @@
|
|||
function showFriends(db) {
|
||||
Service.readActiveConfig(db,function(login){
|
||||
Service.requestFriends(login.url,login.user,login.password,displayFriends);
|
||||
});
|
||||
}
|
||||
function displayFriends(obj){
|
||||
for (var i=0; i<obj.length; i++){
|
||||
print(obj[i]);
|
||||
if (obj[i]) {friendsModel.append({"friendName": obj[i]});
|
||||
};
|
||||
|
||||
}}
|
||||
|
||||
function ensureVisibility(c,f)
|
||||
{
|
||||
if (f.contentX >= c.x)
|
||||
f.contentX = c.x;
|
||||
else if (f.contentX+f.width <= c.x+c.width)
|
||||
f.contentX = c.x+c.width-f.width;
|
||||
if (f.contentY >= c.y)
|
||||
f.contentY = c.y;
|
||||
else if (f.contentY+f.height <= c.y+c.height)
|
||||
f.contentY = c.y+c.height-f.height;
|
||||
}
|
||||
|
||||
function createObject(objectQml,qmlParameters,parentitem,callback) {
|
||||
var component = Qt.createComponent(objectQml);
|
||||
if (component.status === Component.Ready || component.status === Component.Error)
|
||||
finishCreation(component,qmlParameters,parentitem,callback);
|
||||
else
|
||||
component.statusChanged.connect(finishCreation(qmlParameters));
|
||||
}
|
||||
|
||||
function finishCreation(component,qmlParameters,parentitem,callback) {
|
||||
if (component.status === Component.Ready) {
|
||||
var createdObject = component.createObject(parentitem, qmlParameters);
|
||||
if (createdObject === null)
|
||||
print("Error creating image"); }
|
||||
else if (component.status === Component.Error)
|
||||
print("Error loading component:"+component.errorString());
|
||||
else {print("created")}
|
||||
//callback(createdObject);
|
||||
}
|
||||
|
398
source-android/js/news.js
Normal file
398
source-android/js/news.js
Normal file
|
@ -0,0 +1,398 @@
|
|||
.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()
|
||||
});
|
||||
})}
|
||||
|
||||
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 = "";
|
||||
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="&since_id="+result.rows.item(0).status_id;}catch(e){};})}
|
||||
var newContacts=[];
|
||||
//print("/api/statuses/friends_timeline"+parameter);
|
||||
Helperjs.friendicaRequest(login,"/api/statuses/friends_timeline"+parameter, rootwindow,function (obj){
|
||||
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) {
|
||||
var result = tx.executeSql('SELECT url from contacts WHERE username="'+login.username+'" AND isFriend=1'); // check for friends
|
||||
for (var i=0;i<result.rows.length;i++){
|
||||
contactlist.push(result.rows.item(i).url )
|
||||
//print(result.rows.item(i).url)
|
||||
}
|
||||
var lastDate=Date.now()-172800000;// 2 days old
|
||||
//print('SELECT url from contacts WHERE username="'+login.username+'" AND isFriend=0 AND imageAge>'+lastDate);
|
||||
var result2 = tx.executeSql('SELECT url from contacts WHERE username="'+login.username+'" AND isFriend=0 AND imageAge > '+lastDate);
|
||||
for (var j=0;j<result2.rows.length;j++){
|
||||
contactlist.push(result2.rows.item(j).url )
|
||||
}
|
||||
})
|
||||
callback(contactlist)
|
||||
}
|
||||
|
||||
function findNewContacts(news,contacts){//print("contacts: "+JSON.stringify(contacts))
|
||||
var newContacts=[];
|
||||
for (var i=0;i<news.length;i++){
|
||||
var url=news[i].user.url;
|
||||
if(contacts.indexOf(url)==-1 && !(inArray(newContacts,"url",url))){print("new contact "+JSON.stringify(news[i].user));
|
||||
news[i].user.isFriend=0;
|
||||
newContacts.push(news[i].user);
|
||||
}
|
||||
if (news[i].friendica_activities.like.length>0){
|
||||
for (var j=0;j<news[i].friendica_activities.like.length;j++){
|
||||
var like_url=news[i].friendica_activities.like[j].url;
|
||||
if(contacts.indexOf(like_url)==-1 && !(inArray(newContacts,"url",like_url))){print("new like contact "+JSON.stringify(news[i].friendica_activities.like[j]));
|
||||
news[i].friendica_activities.like[j].isFriend=0;
|
||||
newContacts.push(news[i].friendica_activities.like[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (news[i].friendica_activities.dislike.length>0){
|
||||
for (var k=0;j<news[k].friendica_activities.dislike.length;k++){
|
||||
var dislike_url=news[i].friendica_activities.dislike[k].url;
|
||||
if(contacts.indexOf(dislike_url)==-1 && !(inArray(newContacts,"url",dislike_url))){print("new dislike contact "+JSON.stringify(news[i].friendica_activities.dislike[k]));
|
||||
news[i].friendica_activities.dislike[k].isFriend=0;
|
||||
newContacts.push(news[i].friendica_activities.dislike[k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// var owner_id=parseInt(news[i].friendica_owner.id);
|
||||
// if(contacts.indexOf(owner_id)==-1 && !(inArray(newContacts,"id",owner_id))){
|
||||
// news[i].friendica_owner.isFriend=0;
|
||||
// newContacts.push(news[i].friendica_owner);
|
||||
// }
|
||||
}
|
||||
return newContacts
|
||||
}
|
||||
|
||||
function storeNews(login,database,news,rootwindow,callback){
|
||||
// save news after contacts download, call next function
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
for (var i=0;i<news.length;i++){
|
||||
//print('store news data for ' + news[i].id+JSON.stringify(news[i].friendica_activities));
|
||||
//var ausdruck=news[i];
|
||||
var likearray=[]; for (var user in news[i].friendica_activities.like){likearray.push(news[i].friendica_activities.like[user].url)}
|
||||
var dislikearray=[]; for (var user in news[i].friendica_activities.dislike){dislikearray.push(news[i].friendica_activities.dislike[user].url)}
|
||||
var attendyesarray=[]; for (var user in news[i].friendica_activities.attendyes){attendyesarray.push(news[i].friendica_activities.attendyes[user].url)}
|
||||
var attendnoarray=[]; for (var user in news[i].friendica_activities.attendno){attendnoarray.push(news[i].friendica_activities.attendno[user].url)}
|
||||
var attendmaybearray=[]; for (var user in news[i].friendica_activities.attendmaybe){attendmaybearray.push(news[i].friendica_activities.attendmaybe[user].url)}
|
||||
var friendica_activities=[likearray,dislikearray,attendyesarray,attendnoarray,attendmaybearray]
|
||||
var attachments="";if (news[i].attachments){attachments=Qt.btoa(JSON.stringify(news[i].attachments))}print(attachments)
|
||||
db.transaction( function(tx) {
|
||||
var result = tx.executeSql('SELECT * from news where username="'+login.username+'" AND status_id = "'+news[i].id+'" AND messagetype=0'); // check for news id
|
||||
if(result.rows.length === 1) {// use update
|
||||
//print(news[i].id +' news exists, update it'+'UPDATE news SET username="'+login.username+'", messagetype=0, text="'+Qt.btoa(news[i].text)+'", created_at="'+Date.parse(cleanDate(news[i].created_at))+'", in_reply_to_status_id="'+news[i].in_reply_to_status_id+'", source="'+news[i].source+'", status_id="'+news[i].id+'", in_reply_to_user_id="'+news[i].in_reply_to_user_id+'", geo="'+news[i].geo+'", favorited="'+news[i].favorited+'", uid="'+news[i].user.id+'", statusnet_html="'+Qt.btoa(news[i].status_html)+'", statusnet_conversation_id="'+news[i].statusnet_conversation_id+'",friendica_activities="'+Qt.btoa(JSON.stringify(friendica_activities))+'",attachments="'+attachments+'",friendica_owner="'+news[i].friendica_owner.url+'" where username="'+login.username+'" AND status_id="'+news[i].status_id+'" AND messagetype=0')
|
||||
result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=0, text="'+Qt.btoa(news[i].text)+'", created_at="'+Date.parse(cleanDate(news[i].created_at))+'", in_reply_to_status_id="'+news[i].in_reply_to_status_id+'", source="'+news[i].source+'", status_id="'+news[i].id+'", in_reply_to_user_id="'+news[i].in_reply_to_user_id+'", geo="'+news[i].geo+'", favorited="'+news[i].favorited+'", uid="'+news[i].user.id+'", statusnet_html="'+Qt.btoa(news[i].status_html)+'", statusnet_conversation_id="'+news[i].statusnet_conversation_id+'",friendica_activities="'+Qt.btoa(JSON.stringify(friendica_activities))+'",attachments="'+attachments+'",friendica_owner="'+news[i].friendica_owner.url+'" where username="'+login.username+'" AND status_id="'+news[i].status_id+'" AND messagetype=0');
|
||||
} else {// use insert
|
||||
result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,in_reply_to_status_id,source,status_id,in_reply_to_user_id,geo,favorited,uid,statusnet_html,statusnet_conversation_id,friendica_activities,friendica_activities_self,attachments,friendica_owner) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,0,Qt.btoa(news[i].text),Date.parse(cleanDate(news[i].created_at)), news[i].in_reply_to_status_id, news[i].source, news[i].id,news[i].in_reply_to_user_id,news[i].geo,news[i].favorited, news[i].user.id,Qt.btoa(news[i].statusnet_html),news[i].statusnet_conversation_id, Qt.btoa(JSON.stringify(friendica_activities)),"[]",attachments,news[i].friendica_owner.url])}})
|
||||
}
|
||||
getDirectMessage(login,database,rootwindow,callback)
|
||||
}
|
||||
|
||||
function getDirectMessage(login,database,rootwindow,callback){
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
var parameter = "";
|
||||
db.transaction( function(tx) {
|
||||
var result = tx.executeSql('SELECT status_id from news WHERE username="'+login.username+'" AND messagetype=1 ORDER BY status_id DESC LIMIT 1'); // check for last news id
|
||||
try{parameter="&since_id="+result.rows.item(0).status_id;}catch(e){};})
|
||||
Helperjs.friendicaRequest(login,"/api/direct_messages/all"+parameter,rootwindow, function (obj){
|
||||
var messages=JSON.parse(obj);
|
||||
for (var i=0;i<messages.length;i++){
|
||||
//print('store message data for '+JSON.stringify(messages[i]));
|
||||
db.transaction( function(tx) {
|
||||
var result = tx.executeSql('SELECT * from news where username= "'+login.username+'" AND status_id = "'+messages[i].id+'" AND messagetype=1'); // check for news id
|
||||
if(result.rows.length === 1) {// use update
|
||||
print(messages[i].id +' directmessage exists, update it')
|
||||
result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=1, text="'+Qt.btoa(messages[i].text)+'", created_at="'+Date.parse(cleanDate(messages[i].created_at))+'", source="Friendica", status_id="'+messages[i].id+'", uid="'+messages[i].sender.id+'", statusnet_html="'+Qt.btoa(messages[i].text)+'", statusnet_conversation_id="'+messages[i].friendica_parent_uri+'" where username="'+login.username+'" AND status_id="'+messages[i].status_id+'" AND messagetype=1');
|
||||
} else {// use insert
|
||||
result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,source,status_id,uid,statusnet_html,statusnet_conversation_id) VALUES (?,?,?,?,?,?,?,?,?)', [login.username,1,Qt.btoa(messages[i].text),Date.parse(cleanDate(messages[i].created_at)), "Friendica", messages[i].id, messages[i].sender.id,Qt.btoa(messages[i].text),messages[i].friendica_parent_uri])}
|
||||
});
|
||||
}
|
||||
})
|
||||
if(login.newsViewType=="Timeline"){newsfromdb(database,login.username,callback)}
|
||||
else{chatsfromdb(database,login.username,callback)}
|
||||
}
|
||||
|
||||
function getNotifications(login,database,rootwindow,callback){
|
||||
Helperjs.friendicaRequest(login,"/api/friendica/notifications", rootwindow,function (obj){
|
||||
var messages=JSON.parse(obj);
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
for (var i=0;i<messages.length;i++){
|
||||
//print('store message data for '+JSON.stringify(messages[i]));
|
||||
db.transaction( function(tx) {
|
||||
var result = tx.executeSql('SELECT * from news where username="'+login.username+'" AND status_id = "'+messages[i].id+'" AND messagetype=2'); // check for news id
|
||||
if(result.rows.length === 1) {// use update
|
||||
print(messages[i].id +' Notification exists, update it')
|
||||
result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=2, text="'+Qt.btoa(messages[i].msg_html)+'", created_at="'+Date.parse(messages[i].date)+'", source="Friendica", status_id="'+messages[i].id+'", uid="'+messages[i].uid+'", statusnet_html="'+Qt.btoa(messages[i].msg_html)+'", statusnet_conversation_id="'+messages[i].parent+'" where username="'+login.username+'" AND status_id="'+messages[i].id+'" AND messagetype=2');
|
||||
} else {// use insert
|
||||
result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,source,status_id, uid,statusnet_html,statusnet_conversation_id) VALUES (?,?,?,?,?,?,?,?,?)', [login.username,2,Qt.btoa(messages[i].msg_html),Date.parse(messages[i].date),"Friendica", messages[i].id, messages[i].uid,Qt.btoa(messages[i].msg_html),messages[i].parent])}
|
||||
});
|
||||
}
|
||||
db.transaction( function(tx) {
|
||||
var newsrs=tx.executeSql('select * from news WHERE username="'+login.username+'" AND messagetype=2 ORDER BY status_id DESC LIMIT 20');
|
||||
var newsArray=[];
|
||||
for(var j = 0; j < newsrs.rows.length; j++) {
|
||||
newsArray.push(newsrs.rows.item(j));
|
||||
callback(newsArray);
|
||||
}
|
||||
})
|
||||
})}
|
||||
|
||||
function getActivitiesUserData(database,username,userUrlArray){//print(JSON.stringify(userUrlArray));
|
||||
var helpArray=[];
|
||||
for (var i=0;i<userUrlArray.length;i++){
|
||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
||||
helpArray.push(userdata[0]);
|
||||
},"url",userUrlArray[i]);
|
||||
}
|
||||
return helpArray
|
||||
}
|
||||
|
||||
function newsfromdb(database,username,callback,contact,stop_time){
|
||||
// return news before stop_time (used by More button), in brackets of 20 entries, or by specified contact
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
db.transaction( function(tx) {
|
||||
if (!stop_time){var stop="";
|
||||
try{var rs = tx.executeSql('select created_at from news WHERE username="'+username+'" ORDER BY created_at DESC LIMIT 1');
|
||||
stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}}
|
||||
else{var stop="<"+stop_time}
|
||||
var contactfilter="";if(contact){contactfilter=" AND uid='"+contact+"'"}
|
||||
//print('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
|
||||
var newsrs=tx.executeSql('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
|
||||
var newsArray=[];
|
||||
for(var i = 0; i < newsrs.rows.length; i++) {
|
||||
newsArray.push(newsrs.rows.item(i));
|
||||
newsArray[i]=fetchUsersForNews(database,username,newsArray[i])
|
||||
}
|
||||
callback(newsArray)});
|
||||
}
|
||||
|
||||
function fetchUsersForNews(database,username,news){//print(JSON.stringify(news))
|
||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
||||
news.user=userdata[0];
|
||||
//print("Fetch user"+JSON.stringify(news.user));
|
||||
},"id",news.uid);
|
||||
if(news.in_reply_to_user_id){
|
||||
Helperjs.readData(database,"contacts",username,function(replytodata){
|
||||
news.reply_user=replytodata[0];
|
||||
//print("Fetch reply to"+JSON.stringify(news.reply_user));
|
||||
},"id",news.in_reply_to_user_id);
|
||||
}
|
||||
if (news.messagetype==0){
|
||||
for(var j=0;j<news.friendica_activities.length;j++)
|
||||
{var friendicaArray=JSON.parse(Qt.atob(news.friendica_activities));
|
||||
// print("Array: "+friendicaArray[1]);
|
||||
news.like=getActivitiesUserData(database,username,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]);
|
||||
}
|
||||
Helperjs.readData(database,"contacts",username,function(friendica_owner_data){
|
||||
news.friendica_owner_object=friendica_owner_data[0];
|
||||
//print("Fetch friendica_owner"+JSON.stringify(news.friendica_owner));
|
||||
},"url",news.friendica_owner);
|
||||
}
|
||||
return news
|
||||
}
|
||||
|
||||
function deleteNews(login,database,newsid,messagetype,rootwindow,callback){
|
||||
var api="" ;
|
||||
if (messagetype==0){ api="/api/statuses/destroy?id="}
|
||||
else if (messagetype==1){ api="/api/direct_messages/destroy?id="}
|
||||
else if (messagetype==2){ api="/api/friendica/notifications/seen?id="}
|
||||
Helperjs.friendicaPostRequest(login,api+newsid, rootwindow,function (obj){
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
db.transaction( function(tx) {var result = tx.executeSql('DELETE from news where username="'+login.username+'" AND messagetype='+messagetype+' AND status_id ='+newsid); // delete news id
|
||||
callback(obj)
|
||||
});
|
||||
})}
|
||||
|
||||
function retweetNews(login,database,newsid,rootwindow,callback){
|
||||
Helperjs.friendicaPostRequest(login,"/api/statuses/retweet?id="+newsid, rootwindow,function (obj){
|
||||
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
|
||||
if(favorite){ Helperjs.friendicaPostRequest(login,"/api/favorites/create?id="+newsid, rootwindow,function (obj){
|
||||
print("Favorite "+obj);
|
||||
})}
|
||||
else {Helperjs.friendicaPostRequest(login,"/api/favorites/destroy?id="+newsid, rootwindow,function (obj){
|
||||
print("Favorite destroyed "+obj);
|
||||
})}
|
||||
}
|
||||
|
||||
function likerequest(login,database,verb,newsid,rootwindow){
|
||||
Helperjs.friendicaPostRequest(login,"/api/friendica/activity/"+verb+"?id="+newsid, rootwindow,function (obj){
|
||||
if (obj=='"ok"'){
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
db.transaction( function(tx) {
|
||||
var currentActivities_rs=tx.executeSql('select friendica_activities_self from news WHERE username="'+login.username+'" AND status_id='+newsid) ;
|
||||
var currentActivities=JSON.parse(currentActivities_rs.rows.item(0).friendica_activities_self);
|
||||
print(verb+"currentActivities "+JSON.stringify(currentActivities));
|
||||
if ((verb=="like")&&(currentActivities.indexOf(1)==-1)){ currentActivities.push(1);
|
||||
if (currentActivities.indexOf(2)!=-1){currentActivities.splice(currentActivities.indexOf(2),1)}
|
||||
}
|
||||
if ((verb=="dislike")&&(currentActivities.indexOf(2)==-1)){ currentActivities.push(2);
|
||||
if (currentActivities.indexOf(1)!=-1){currentActivities.splice(currentActivities.indexOf(1),1)}
|
||||
}
|
||||
if (verb=="unlike"){ if (currentActivities.indexOf(1)!=-1){currentActivities.splice(currentActivities.indexOf(1),1)}}
|
||||
if (verb=="undislike"){ if (currentActivities.indexOf(2)!=-1){currentActivities.splice(currentActivities.indexOf(2),1)}}
|
||||
//print(JSON.stringify(currentActivities));
|
||||
var result = tx.executeSql('UPDATE news SET friendica_activities_self ="'+JSON.stringify(currentActivities)+'" where username="'+login.username+'" AND status_id ='+newsid);
|
||||
})}
|
||||
else{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){
|
||||
Helperjs.friendicaPostRequest(login,"/api/friendica/activity/attend"+attend+"?id="+newsid, rootwindow,function (obj){
|
||||
//print("attend: "+attend+obj);
|
||||
if (obj=='"ok"')
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
db.transaction( function(tx) {
|
||||
var currentActivities_rs=tx.executeSql('select friendica_activities_self from news WHERE username="'+login.username+'" AND status_id='+newsid) ;
|
||||
var currentActivities=JSON.parse(currentActivities_rs.rows.item(0).friendica_activities_self);
|
||||
if ((attend=="yes")&&(currentActivities.indexOf(3)==-1)){
|
||||
currentActivities.push(3);
|
||||
if (currentActivities.indexOf(4)!=-1){currentActivities.splice(currentActivities.indexOf(4),1)}
|
||||
if (currentActivities.indexOf(5)!=-1){currentActivities.splice(currentActivities.indexOf(5),1)}
|
||||
//print(JSON.stringify(currentActivities));
|
||||
}
|
||||
if ((attend=="no")&&(currentActivities.indexOf(4)==-1)){
|
||||
currentActivities.push(4);
|
||||
if (currentActivities.indexOf(3)!=-1){currentActivities.splice(currentActivities.indexOf(3),1)}
|
||||
if (currentActivities.indexOf(5)!=-1){currentActivities.splice(currentActivities.indexOf(5),1)}
|
||||
}
|
||||
if ((attend=="maybe")&&(currentActivities.indexOf(5)==-1)){
|
||||
currentActivities.push(5);
|
||||
if (currentActivities.indexOf(3)!=-1){currentActivities.splice(currentActivities.indexOf(3),1)}
|
||||
if (currentActivities.indexOf(4)!=-1){currentActivities.splice(currentActivities.indexOf(4),1)}
|
||||
}
|
||||
|
||||
var result = tx.executeSql('UPDATE news SET friendica_activities_self ="'+JSON.stringify(currentActivities)+'" where username="'+login.username+'" AND status_id ='+newsid);
|
||||
callback();
|
||||
})})}
|
||||
|
||||
function requestConversation(login,database,newsid,contacts,rootwindow,callback){
|
||||
Helperjs.friendicaRequest(login,"/api/conversation/show?id="+newsid,rootwindow, function (obj){
|
||||
var news=JSON.parse(obj);
|
||||
var newContacts=findNewContacts(news,contacts);
|
||||
// storeNews(login,database,news,rootwindow,callback)
|
||||
callback(news,newContacts)
|
||||
})}
|
||||
|
||||
function conversationfromdb(database,user,conversationId,callback){
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
db.transaction( function(tx) {
|
||||
var newsrs=tx.executeSql('select * from news WHERE username="'+user+'" AND statusnet_conversation_id="'+conversationId+'" ORDER BY created_at ASC');
|
||||
var newsArray=[];
|
||||
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) {
|
||||
print('select * from news WHERE username="'+user+'" AND favorited=1 ORDER BY status_id DESC');
|
||||
var newsrs=tx.executeSql('select * from news WHERE username="'+user+'" AND favorited=1 ORDER BY status_id DESC');
|
||||
var newsArray=[];
|
||||
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}
|
||||
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');
|
||||
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');
|
||||
// if(newsrs.rows.length>1){
|
||||
var helpernews=newsrs.rows.item(0);
|
||||
helpernews.newscount=newsrs.rows.length;
|
||||
helpernews=fetchUsersForNews(database,user,helpernews)
|
||||
newsArray.push(helpernews);
|
||||
//}
|
||||
}
|
||||
callback(newsArray);
|
||||
})}
|
||||
|
||||
function inArray(list, prop, val) {
|
||||
if (list.length > 0 ) {
|
||||
for (var i in list) {if (list[i][prop] == val) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} return false;
|
||||
}
|
||||
|
||||
function 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
|
||||
}
|
64
source-android/js/newsworker.js
Normal file
64
source-android/js/newsworker.js
Normal file
|
@ -0,0 +1,64 @@
|
|||
WorkerScript.onMessage = function(msg) {
|
||||
if(msg.appendnews!==true){ msg.model.clear()};
|
||||
|
||||
for (var j=0;j<msg.news.length;j++){
|
||||
if (msg.news[j]) {
|
||||
var newsitemobject=msg.news[j];
|
||||
//print("Newsitem"+JSON.stringify(newsitemobject.friendica_owner+" userid: "+newsitemobject.user.id));
|
||||
if (newsitemobject.messagetype==2){
|
||||
newsitemobject.user={};
|
||||
newsitemobject.user.profile_image="";
|
||||
newsitemobject.user.profile_image_url="";
|
||||
newsitemobject.user.name="";
|
||||
}
|
||||
//var forumname="";if (newsitemobject.messagetype==0&&(parseInt(newsitemobject.friendica_owner)!=parseInt(newsitemobject.user.id))){forumname=" via "+newsitemobject.friendica_owner_object.name}
|
||||
var likeText="";var dislikeText="";var attendyesText="";var attendnoText="";var attendmaybeText=""; var self={};
|
||||
if (newsitemobject.messagetype==0){
|
||||
if (newsitemobject.like.length>0){
|
||||
if (newsitemobject.like.length==1){likeText= Qt.atob(newsitemobject.like[0].name)+" "+ qsTr("likes this.")}
|
||||
else {likeText= newsitemobject.like.length+" "+ qsTr("like this.")}
|
||||
}
|
||||
if (newsitemobject.dislike.length>0){
|
||||
if (newsitemobject.dislike.length==1){dislikeText= QT.atob(newsitemobject.dislike[0].name)+" "+ qsTr("doesn't like this.")}
|
||||
else {dislikeText= newsitemobject.dislike.length+" "+ qsTr("don't like this.")}
|
||||
}
|
||||
if (newsitemobject.attendyes.length>0){
|
||||
if (newsitemobject.attendyes.length==1){attendyesText= Qt.atob(newsitemobject.attendyes[0].name)+" "+ qsTr("will attend.")}
|
||||
else {attendyesText= newsitemobject.attendyes.length+" "+ qsTr("persons will attend.")}
|
||||
}
|
||||
if (newsitemobject.attendno.length>0){
|
||||
if (newsitemobject.attendno.length==1){attendnoText= Qt.atob(newsitemobject.attendno[0].name)+" "+ qsTr("will not attend.")}
|
||||
else {attendnoText= newsitemobject.attendno.length+" "+ qsTr("persons will not attend.")}
|
||||
}
|
||||
if (newsitemobject.attendmaybe.length>0){
|
||||
if (newsitemobject.attendmaybe.length==1){attendmaybeText= Qt.atob(newsitemobject.attendmaybe[0].name)+" "+ qsTr("may attend.")}
|
||||
else {attendmaybeText= newsitemobject.attendmaybe.length+" "+ qsTr("persons may attend.")}
|
||||
}
|
||||
//var friendica_activities_self=JSON.parse(newsitemobject.friendica_activities_self);
|
||||
if (newsitemobject.friendica_activities_self.indexOf(3)!=-1){self.attending=qsTr("yes")}
|
||||
if (newsitemobject.friendica_activities_self.indexOf(4)!=-1){self.attending=qsTr("no")}
|
||||
if (newsitemobject.friendica_activities_self.indexOf(5)!=-1){self.attending=qsTr("maybe")}
|
||||
if (newsitemobject.friendica_activities_self.indexOf(1)!=-1){self.liked=1}
|
||||
if (newsitemobject.friendica_activities_self.indexOf(2)!=-1){self.disliked=1}
|
||||
}
|
||||
var friendica_activities={likeText:likeText,dislikeText:dislikeText,attendyesText:attendyesText,attendnoText:attendnoText,attendmaybeText:attendmaybeText,self:self}
|
||||
//print(JSON.stringify(friendica_activities) ) ;
|
||||
var seconds=(msg.currentTime-newsitemobject.created_at)/1000;
|
||||
var timestring="";
|
||||
if (seconds<60) {timestring=seconds+" "+qsTr("seconds") +" "+qsTr("ago");}
|
||||
else if (seconds<90){timestring=Math.round(seconds/60)+" "+qsTr("minute") +" "+qsTr("ago");}
|
||||
else if (seconds<3600){timestring=Math.round(seconds/60)+" "+qsTr("minutes") +" "+qsTr("ago");}
|
||||
else if (seconds<5400){timestring=Math.round(seconds/3600)+" "+qsTr("hour") +" "+qsTr("ago");}
|
||||
else if (seconds<86400){timestring=Math.round(seconds/3600)+" "+qsTr("hours") +" "+qsTr("ago");}
|
||||
else if (seconds<129600){timestring=Math.round(seconds/86400)+" "+qsTr("day") +" "+qsTr("ago");}
|
||||
else if (seconds<3888000){timestring=Math.round(seconds/86400)+" "+qsTr("days") +" "+qsTr("ago");}
|
||||
else if (seconds<5832000){timestring=Math.round(seconds/3888000)+" "+qsTr("month") +" "+qsTr("ago");}
|
||||
else if (seconds<69984000){timestring=Math.round(seconds/3888000)+" "+qsTr("months") +" "+qsTr("ago");}
|
||||
else {timestring=Math.round(seconds/69984000)+" "+qsTr("years") +" "+qsTr("ago");}
|
||||
var data=({"newsitemobject": newsitemobject,"dateDiff":timestring,"friendica_activities":friendica_activities})}
|
||||
//print("News:"+j+msg.news.length+JSON.stringify(data));
|
||||
msg.model.append(data);}
|
||||
if (j==msg.news.length){
|
||||
msg.model.sync()
|
||||
};
|
||||
}
|
15
source-android/js/photoworker.js
Normal file
15
source-android/js/photoworker.js
Normal file
|
@ -0,0 +1,15 @@
|
|||
WorkerScript.onMessage = function(msg) {
|
||||
if (msg.firstalbum==0){msg.model.clear();}
|
||||
var limit=0; if (msg.albums.length-msg.firstalbum<20){limit=msg.albums.length} else{limit=msg.firstalbum+20}
|
||||
for (var j=msg.firstalbum;j<limit;j++){
|
||||
if (msg.albums[msg.firstalbum]) {
|
||||
// print("album"+msg.albums[j].name);
|
||||
if(msg.foreignPicture){
|
||||
var albumname=msg.albums[j].name.trim();var albumlink=msg.albums[j].link
|
||||
}else{
|
||||
var albumname=msg.albums[j].toString();var albumlink=""}
|
||||
msg.model.append({"albumlink":albumlink,"foreignPicture":msg.foreignPicture,"albumname":albumname});
|
||||
msg.model.sync()
|
||||
};
|
||||
}
|
||||
}
|
279
source-android/js/service.js
Normal file
279
source-android/js/service.js
Normal file
|
@ -0,0 +1,279 @@
|
|||
//.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<arr.length;i++){
|
||||
var albumlink = arr[i].substring(arr[i].indexOf('http'),arr[i].indexOf('class')-2);
|
||||
var albumname=arr[i].substring(arr[i].indexOf('/span')+6,arr[i].indexOf('</a>')-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('<base')+12,photohtml.indexOf('/>',photohtml.indexOf('<base'))-2);
|
||||
|
||||
// old theme
|
||||
if (photohtml.indexOf("photo-album-image-wrapper-end")>-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("</a>");}
|
||||
|
||||
for (var i=0;i<arr.length-1;i++){
|
||||
var photoname=arr[i].substring(arr[i].lastIndexOf('alt')+5,arr[i].lastIndexOf('title')-2);
|
||||
var thumblink=arr[i].substring(arr[i].lastIndexOf('<img')+10,arr[i].lastIndexOf('alt')-2);
|
||||
|
||||
var imagetype=thumblink.substring(thumblink.lastIndexOf("."));
|
||||
var photolink=thumblink.substring(0,thumblink.length-imagetype.length-2)+"-0"+imagetype
|
||||
if(thumblink.substring(0,4)!=="http"){thumblink=basehtml+thumblink}
|
||||
if(photolink.substring(0,4)!=="http"){photolink=basehtml+photolink}
|
||||
var photo={'link':photolink,'name':photoname,'thumb':thumblink}
|
||||
photoarray.push(photo);
|
||||
}
|
||||
callback(photoarray)
|
||||
})
|
||||
}
|
||||
|
||||
// CONFIG FUNCTIONS
|
||||
|
||||
function initDatabase(database) { // initialize the database object
|
||||
var db =Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
print('initDatabase()'+database[0]+database[1]+database[2]+database[3])
|
||||
db.transaction( function(tx) {
|
||||
tx.executeSql('CREATE TABLE IF NOT EXISTS imageData(username TEXT,id INT, created TEXT,edited TEXT, title TEXT, desc TEXT, album TEXT,filename TEXT, type TEXT, height INT, width INT, profile INT, link TEXT,location TEXT)');
|
||||
tx.executeSql('CREATE TABLE IF NOT EXISTS config(server TEXT, username TEXT, password TEXT, imagestore TEXT, maxnews INT, timerInterval INT, newsViewType TEXT,isActive INT, permissions TEXT,maxContactAge INT,APIVersion TEXT,layout TEXT, addons TEXT)');
|
||||
tx.executeSql('CREATE TABLE IF NOT EXISTS news(username TEXT, messagetype INT, text TEXT, created_at INT, in_reply_to_status_id INT, source TEXT, status_id INT, in_reply_to_user_id INT, geo TEXT,favorited TEXT, uid INT, statusnet_html TEXT, statusnet_conversation_id TEXT,friendica_activities TEXT, friendica_activities_self TEXT, attachments TEXT, friendica_owner INT)');
|
||||
tx.executeSql('CREATE TABLE IF NOT EXISTS contacts(username TEXT, id INT, name TEXT, screen_name TEXT, location TEXT,imageAge INT, profile_image_url TEXT, description TEXT, profile_image BLOB, url TEXT, protected TEXT, followers_count INT, friends_count INT, created_at INT, favourites_count TEXT, utc_offset TEXT, time_zone TEXT, statuses_count INT, following TEXT, verified TEXT, statusnet_blocking TEXT, notifications TEXT, statusnet_profile_url TEXT, cid INT, network TEXT, isFriend INT)');
|
||||
tx.executeSql('CREATE TABLE IF NOT EXISTS groups(username TEXT, groupname TEXT, gid INT, members TEXT)');
|
||||
})}
|
||||
|
||||
function savePermissions(database,obj) { // stores config to DB
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
var permissions=JSON.stringify(obj)
|
||||
db.transaction( function(tx) {
|
||||
var result = tx.executeSql( 'UPDATE config SET permissions="'+permissions+'" WHERE username="'+obj.username +'"');
|
||||
})
|
||||
}
|
||||
|
||||
function storeConfig(database,obj) { // stores config to DB
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
db.transaction( function(tx) {
|
||||
//print(JSON.stringify(obj));
|
||||
var result = tx.executeSql('SELECT * from config WHERE username="'+obj.username+'"');
|
||||
if(result.rows.length === 1) {// use update
|
||||
var result2 = tx.executeSql('UPDATE config SET server="'+obj.server+'",password="'+obj.password+'", imagestore="'+obj.imagestore+'", maxnews='+obj.maxnews+', timerInterval='+obj.interval+', newsViewType="'+obj.newsViewType+'", isActive=0 WHERE username="'+obj.username +'"');
|
||||
var result3 = tx.executeSql('UPDATE config SET isActive=1 WHERE username !="'+obj.username +'"');
|
||||
var result4 = tx.executeSql('UPDATE config SET maxnews='+obj.maxnews);
|
||||
} else {// use insert print('... does not exists, create it')
|
||||
var result2 = tx.executeSql('INSERT INTO config VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)', [obj.server, obj.username, obj.password, obj.imagestore, obj.maxnews, obj.interval,obj.newsViewType,0,"[[],[],[],[]]",0,"","",""]);
|
||||
var result3 = tx.executeSql('UPDATE config SET isActive=1 WHERE username !="'+obj.username +'"');
|
||||
var result4 = tx.executeSql('UPDATE config SET maxnews='+obj.maxnews);
|
||||
}
|
||||
})}
|
||||
|
||||
function getServerConfig(database,login,rootwindow,callback){
|
||||
// check server with given credentials
|
||||
try {Helperjs.friendicaRequest(login,"/api/statusnet/config",rootwindow, function (obj){
|
||||
var serverconfig = JSON.parse(obj);
|
||||
var serverconfigString="import QtQuick 2.0; import QtQuick.Dialogs 1.2; MessageDialog{ visible: true; title:'Server';standardButtons: StandardButton.Ok;text: 'SUCCESS! \nName: "+serverconfig.site.name+"\nLanguage: "+serverconfig.site.language+
|
||||
"\nEmail: "+serverconfig.site.email+"\nTimezone: "+serverconfig.site.timezone+"\nClosed: "+serverconfig.site.closed+
|
||||
"\nText limit: "+serverconfig.site.textlimit+"\nShort Url length: "+serverconfig.site.shorturllength+
|
||||
"\nFriendica version: "+serverconfig.site.friendica.FRIENDICA_VERSION+"\nDFRN version: "+serverconfig.site.friendica.DFRN_PROTOCOL_VERSION +
|
||||
"\nDB Update version: "+serverconfig.site.friendica.DB_UPDATE_VERSION+"'}";
|
||||
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||
db.transaction( function(tx) {
|
||||
var result = tx.executeSql('UPDATE config SET APIVersion="'+ serverconfig.site.friendica.FRIENDICA_VERSION+'" WHERE username="'+login.username +'"')})
|
||||
|
||||
Helperjs.friendicaRequest(login,"/friendica/json",rootwindow, function (obj){
|
||||
var serverData = JSON.parse(obj);var serverAddons=JSON.stringify(serverData.plugins).replace(/"/g,"");
|
||||
db.transaction( function(tx) {
|
||||
var result = tx.executeSql('UPDATE config SET addons="'+ serverAddons+'" WHERE username="'+login.username +'"')})
|
||||
|
||||
callback(serverconfigString);
|
||||
})})}
|
||||
catch (e){callback (e);
|
||||
}}
|
||||
|
||||
function readConfig(database,callback,filter,filtervalue) { // reads config
|
||||
if (filter){var where = " WHERE "+ filter +" = '" + filtervalue+"'"} else { var where=""}
|
||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3],initDatabase(database));
|
||||
db.transaction( function(tx) {
|
||||
var tables = tx.executeSql("SELECT * FROM sqlite_master WHERE type='table'");
|
||||
if (tables.rows.length==0){print("no database");callback("")} else {
|
||||
var rs = tx.executeSql('select * from config'+where);
|
||||
var rsArray=[];
|
||||
if (rs.rows.length>0){
|
||||
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 created_at from news ORDER BY created_at DESC LIMIT ' +(newscount-maxnews));
|
||||
var lastvalidtime=lastvalidtimers.rows.item(maxnews).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=login.imagestore+"contacts/"+contact.screen_name+"-"+contact.profile_image_url.substring(contact.profile_image_url.lastIndexOf("/")+1, contact.profile_image_url.length);
|
||||
contacttimer.restart();
|
||||
var currentTime=Date.now();
|
||||
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]);}
|
||||
});
|
||||
}
|
553
source-android/js/smiley.js
Normal file
553
source-android/js/smiley.js
Normal file
|
@ -0,0 +1,553 @@
|
|||
|
||||
var core=[
|
||||
{name:'<3',url:
|
||||
'qrc:///images/smileys/core/smiley-heart.gif'},
|
||||
|
||||
{name:'</3',url:
|
||||
'qrc:///images/smileys/core/smiley-brokenheart.gif'},
|
||||
|
||||
{name:':-)',url:
|
||||
'qrc:///images/smileys/core/smiley-smile.gif'},
|
||||
|
||||
{name:';-)',url:
|
||||
'qrc:///images/smileys/core/smiley-wink.gif'},
|
||||
|
||||
{name:':-(',url:
|
||||
'qrc:///images/smileys/core/smiley-frown.gif'},
|
||||
|
||||
{name:':-P',url:
|
||||
'qrc:///images/smileys/core/smiley-tongue-out.gif'},
|
||||
|
||||
{name:':-X',url:
|
||||
'qrc:///images/smileys/core/smiley-kiss.gif'},
|
||||
|
||||
{name:':-D',url:
|
||||
'qrc:///images/smileys/core/smiley-laughing.gif'},
|
||||
|
||||
{name:':-O',url:
|
||||
'qrc:///images/smileys/core/smiley-surprised.gif'},
|
||||
|
||||
{name:'\\o/',url:
|
||||
'qrc:///images/smileys/core/smiley-thumbsup.gif'},
|
||||
|
||||
{name:'o.O',url:
|
||||
'qrc:///images/smileys/core/smiley-Oo.gif'},
|
||||
|
||||
{name:":'(",url:
|
||||
'qrc:///images/smileys/core/smiley-cry.gif'},
|
||||
|
||||
{name:":-!",url:
|
||||
'qrc:///images/smileys/core/smiley-foot-in-mouth.gif'},
|
||||
|
||||
{name:":-/",url:
|
||||
'qrc:///images/smileys/core/smiley-undecided.gif'},
|
||||
|
||||
{name:":-[",url:
|
||||
'qrc:///images/smileys/core/smiley-embarassed.gif'},
|
||||
|
||||
{name:"8-)",url:
|
||||
'qrc:///images/smileys/core/smiley-cool.gif'},
|
||||
|
||||
{name:':beer',url:
|
||||
'qrc:///images/smileys/core/beer_mug.gif'},
|
||||
|
||||
{name:':coffee',url:
|
||||
'qrc:///images/smileys/core/coffee.gif'},
|
||||
|
||||
{name:':facepalm',url:
|
||||
'qrc:///images/smileys/core/smiley-facepalm.gif'},
|
||||
|
||||
{name:':like',url:
|
||||
'qrc:///images/smileys/core/like.gif'},
|
||||
|
||||
{name:':dislike',url:
|
||||
'qrc:///images/smileys/core/dislike.gif'},
|
||||
|
||||
{name:'~friendica',url:
|
||||
'qrc:///images/smileys/core/friendica-16.png'},
|
||||
|
||||
{name:'red#',url:
|
||||
'qrc:///images/smileys/core/rm-16.png'}
|
||||
]
|
||||
|
||||
|
||||
var addon=[
|
||||
{name:':bunnyflowers',url:
|
||||
'qrc:///images/smileys/animals/bunnyflowers.gif'},
|
||||
|
||||
{name:':chick',url:
|
||||
'qrc:///images/smileys/animals/chick.gif'},
|
||||
|
||||
{name:':bumblebee',url:
|
||||
'qrc:///images/smileys/animals/bee.gif'},
|
||||
|
||||
{name:':ladybird',url:
|
||||
'qrc:///images/smileys/animals/ladybird.gif'},
|
||||
|
||||
{name:':bigspider',url:
|
||||
'qrc:///images/smileys/animals/bigspider.gif' },
|
||||
|
||||
{name:':cat',url:
|
||||
'qrc:///images/smileys/animals/cat.gif'},
|
||||
|
||||
{name:':bunny',url:
|
||||
'qrc:///images/smileys/animals/bunny.gif' },
|
||||
|
||||
{name:':cow',url:
|
||||
'qrc:///images/smileys/animals/cow.gif' },
|
||||
|
||||
{name:':crab',url:
|
||||
'qrc:///images/smileys/animals/crab.gif' },
|
||||
|
||||
{name:':dolphin',url:
|
||||
'qrc:///images/smileys/animals/dolphin.gif' },
|
||||
|
||||
{name:':dragonfly',url:
|
||||
'qrc:///images/smileys/animals/dragonfly.gif' },
|
||||
|
||||
{name:':frog',url:
|
||||
'qrc:///images/smileys/animals/frog.gif'},
|
||||
|
||||
{name:':hamster',url:
|
||||
'qrc:///images/smileys/animals/hamster.gif' },
|
||||
|
||||
{name:':monkey',url:
|
||||
'qrc:///images/smileys/animals/monkey.gif' },
|
||||
|
||||
{name:':horse',url:
|
||||
'qrc:///images/smileys/animals/horse.gif' },
|
||||
|
||||
{name:':parrot',url:
|
||||
'qrc:///images/smileys/animals/parrot.gif' },
|
||||
|
||||
{name:':tux',url:
|
||||
'qrc:///images/smileys/animals/tux.gif' },
|
||||
|
||||
{name:':snail',url:
|
||||
'qrc:///images/smileys/animals/snail.gif' },
|
||||
|
||||
{name:':sheep',url:
|
||||
'qrc:///images/smileys/animals/sheep.gif' },
|
||||
|
||||
{name:':dog',url:
|
||||
'qrc:///images/smileys/animals/dog.gif'},
|
||||
|
||||
{name:':elephant',url:
|
||||
'qrc:///images/smileys/animals/elephant.gif' },
|
||||
|
||||
{name:':fish',url:
|
||||
'qrc:///images/smileys/animals/fish.gif' },
|
||||
|
||||
{name:':giraffe',url:
|
||||
'qrc:///images/smileys/animals/giraffe.gif' },
|
||||
|
||||
{name:':pig',url:
|
||||
'qrc:///images/smileys/animals/pig.gif'},
|
||||
|
||||
//Baby
|
||||
|
||||
{name:':baby',url:
|
||||
'qrc:///images/smileys/babies/baby.gif' },
|
||||
|
||||
{name:':babycot',url:
|
||||
'qrc:///images/smileys/babies/babycot.gif' },
|
||||
|
||||
|
||||
{name:':pregnant',url:
|
||||
'qrc:///images/smileys/babies/pregnant.gif' },
|
||||
|
||||
{name:':stork',url:
|
||||
'qrc:///images/smileys/babies/stork.gif' },
|
||||
|
||||
|
||||
//Confused
|
||||
{name:':confused',url:
|
||||
'qrc:///images/smileys/confused/confused.gif' },
|
||||
|
||||
{name:':shrug',url:
|
||||
'qrc:///images/smileys/confused/shrug.gif' },
|
||||
|
||||
{name:':stupid',url:
|
||||
'qrc:///images/smileys/confused/stupid.gif' },
|
||||
|
||||
{name:':dazed',url:
|
||||
'qrc:///images/smileys/confused/dazed.gif' },
|
||||
//Cool 'qrc:///images/smileys
|
||||
|
||||
{name:':affro',url:
|
||||
'qrc:///images/smileys/cool/affro.gif'},
|
||||
|
||||
//Devil/Angel
|
||||
|
||||
{name:':angel',url:
|
||||
'qrc:///images/smileys/devilangel/angel.gif'},
|
||||
|
||||
{name:':cherub',url:
|
||||
'qrc:///images/smileys/devilangel/cherub.gif'},
|
||||
|
||||
{name:':devilangel',url:
|
||||
'qrc:///images/smileys/devilangel/blondedevil.gif' },
|
||||
{name:':catdevil',url:
|
||||
'qrc:///images/smileys/devilangel/catdevil.gif'},
|
||||
|
||||
{name:':devillish',url:
|
||||
'qrc:///images/smileys/devilangel/devil.gif'},
|
||||
|
||||
{name:':daseesaw',url:
|
||||
'qrc:///images/smileys/devilangel/daseesaw.gif'},
|
||||
|
||||
{name:':turnevil',url:
|
||||
'qrc:///images/smileys/devilangel/turnevil.gif' },
|
||||
|
||||
{name:':saint',url:
|
||||
'qrc:///images/smileys/devilangel/saint.gif'},
|
||||
|
||||
{name:':graveside',url:
|
||||
'qrc:///images/smileys/devilangel/graveside.gif'},
|
||||
|
||||
//Unpleasent
|
||||
|
||||
{name:':toilet',url:
|
||||
'qrc:///images/smileys/disgust/toilet.gif'},
|
||||
|
||||
{name:':fartinbed',url:
|
||||
'qrc:///images/smileys/disgust/fartinbed.gif' },
|
||||
|
||||
{name:':fartblush',url:
|
||||
'qrc:///images/smileys/disgust/fartblush.gif' },
|
||||
|
||||
//Drinks
|
||||
|
||||
{name:':tea',url:
|
||||
'qrc:///images/smileys/drink/tea.gif' },
|
||||
|
||||
{name:':drool',url:
|
||||
'qrc:///images/smileys/drool/drool.gif'},
|
||||
|
||||
//Sad
|
||||
|
||||
{name:':crying',url:
|
||||
'qrc:///images/smileys/sad/crying.png'},
|
||||
|
||||
{name:':prisoner',url:
|
||||
'qrc:///images/smileys/sad/prisoner.gif' },
|
||||
|
||||
{name:':sigh',url:
|
||||
'qrc:///images/smileys/sad/sigh.gif'},
|
||||
|
||||
//Smoking - only one smiley in here, maybe it needs moving elsewhere?
|
||||
|
||||
{name:':smoking',url:
|
||||
'qrc:///images/smileys/smoking/smoking.gif'},
|
||||
|
||||
//Sport
|
||||
|
||||
{name:':basketball',url:
|
||||
'qrc:///images/smileys/sport/basketball.gif'},
|
||||
|
||||
{name:':bowling',url:
|
||||
'qrc:///images/smileys/sport/bowling.gif'},
|
||||
|
||||
{name:':cycling',url:
|
||||
'qrc:///images/smileys/sport/cycling.gif'},
|
||||
|
||||
{name:':darts',url:
|
||||
'qrc:///images/smileys/sport/darts.gif'},
|
||||
|
||||
{name:':fencing',url:
|
||||
'qrc:///images/smileys/sport/fencing.gif' },
|
||||
|
||||
{name:':juggling',url:
|
||||
'qrc:///images/smileys/sport/juggling.gif'},
|
||||
|
||||
{name:':skipping',url:
|
||||
'qrc:///images/smileys/sport/skipping.gif'},
|
||||
|
||||
{name:':archery',url:
|
||||
'qrc:///images/smileys/sport/archery.gif'},
|
||||
|
||||
{name:':surfing',url:
|
||||
'qrc:///images/smileys/sport/surfing.gif' },
|
||||
|
||||
{name:':snooker',url:
|
||||
'qrc:///images/smileys/sport/snooker.gif' },
|
||||
|
||||
{name:':horseriding',url:
|
||||
'qrc:///images/smileys/sport/horseriding.gif'},
|
||||
|
||||
//Love
|
||||
|
||||
{name:':iloveyou',url:
|
||||
'qrc:///images/smileys/love/iloveyou.gif'},
|
||||
|
||||
{name:':inlove',url:
|
||||
'qrc:///images/smileys/love/inlove.gif'},
|
||||
|
||||
{name:':~love',url:
|
||||
'qrc:///images/smileys/love/love.gif' },
|
||||
|
||||
{name:':lovebear',url:
|
||||
'qrc:///images/smileys/love/lovebear.gif'},
|
||||
|
||||
{name:':lovebed',url:
|
||||
'qrc:///images/smileys/love/lovebed.gif' },
|
||||
|
||||
{name:':loveheart',url:
|
||||
'qrc:///images/smileys/love/loveheart.gif' },
|
||||
|
||||
//Tired/Sleep
|
||||
|
||||
{name:':countsheep',url:
|
||||
'qrc:///images/smileys/tired/countsheep.gif' },
|
||||
|
||||
{name:':hammock',url:
|
||||
'qrc:///images/smileys/tired/hammock.gif'},
|
||||
|
||||
{name:':pillow',url:
|
||||
'qrc:///images/smileys/tired/pillow.gif' },
|
||||
|
||||
{name:':yawn',url:
|
||||
'qrc:///images/smileys/tired/yawn.gif'},
|
||||
|
||||
//Fight/Flame/Violent
|
||||
|
||||
{name:':2guns',url:
|
||||
'qrc:///images/smileys/fight/2guns.gif' },
|
||||
|
||||
{name:':alienfight',url:
|
||||
'qrc:///images/smileys/fight/alienfight.gif' },
|
||||
|
||||
{name:':army',url:
|
||||
'qrc:///images/smileys/fight/army.gif'},
|
||||
|
||||
{name:':arrowhead',url:
|
||||
'qrc:///images/smileys/fight/arrowhead.gif'},
|
||||
|
||||
{name:':bfg',url:
|
||||
'qrc:///images/smileys/fight/bfg.gif' },
|
||||
|
||||
{name:':bowman',url:
|
||||
'qrc:///images/smileys/fight/bowman.gif' },
|
||||
|
||||
{name:':chainsaw',url:
|
||||
'qrc:///images/smileys/fight/chainsaw.gif'},
|
||||
|
||||
{name:':crossbow',url:
|
||||
'qrc:///images/smileys/fight/crossbow.gif'},
|
||||
|
||||
{name:':crusader',url:
|
||||
'qrc:///images/smileys/fight/crusader.gif' },
|
||||
|
||||
{name:':dead',url:
|
||||
'qrc:///images/smileys/fight/dead.gif' },
|
||||
|
||||
{name:':hammersplat',url:
|
||||
'qrc:///images/smileys/fight/hammersplat.gif' },
|
||||
|
||||
{name:':lasergun',url:
|
||||
'qrc:///images/smileys/fight/lasergun.gif' },
|
||||
|
||||
{name:':machinegun',url:
|
||||
'qrc:///images/smileys/fight/machinegun.gif' },
|
||||
|
||||
{name:':acid',url:
|
||||
'qrc:///images/smileys/fight/acid.gif' },
|
||||
|
||||
//Fantasy - monsters and dragons fantasy. The other type of fantasy belongs in adult
|
||||
|
||||
{name:':alienmonster',url:
|
||||
'qrc:///images/smileys/fantasy/alienmonster.gif' },
|
||||
|
||||
{name:':barbarian',url:
|
||||
'qrc:///images/smileys/fantasy/barbarian.gif' },
|
||||
|
||||
{name:':dinosaur',url:
|
||||
'qrc:///images/smileys/fantasy/dinosaur.gif'},
|
||||
|
||||
{name:':dragon',url:
|
||||
'qrc:///images/smileys/fantasy/dragon.gif'},
|
||||
|
||||
{name:':draco',url:
|
||||
'qrc:///images/smileys/fantasy/dragonwhelp.gif'},
|
||||
|
||||
{name:':ghost',url:
|
||||
'qrc:///images/smileys/fantasy/ghost.gif'},
|
||||
|
||||
{name:':mummy',url:
|
||||
'qrc:///images/smileys/fantasy/mummy.gif'},
|
||||
|
||||
//Food
|
||||
|
||||
{name:':apple',url:
|
||||
'qrc:///images/smileys/food/apple.gif' },
|
||||
|
||||
{name:':broccoli',url:
|
||||
'qrc:///images/smileys/food/broccoli.gif' },
|
||||
|
||||
{name:':cake',url:
|
||||
'qrc:///images/smileys/food/cake.gif'},
|
||||
|
||||
{name:':carrot',url:
|
||||
'qrc:///images/smileys/food/carrot.gif' },
|
||||
|
||||
{name:':popcorn',url:
|
||||
'qrc:///images/smileys/food/popcorn.gif'},
|
||||
|
||||
{name:':tomato',url:
|
||||
'qrc:///images/smileys/food/tomato.gif'},
|
||||
|
||||
{name:':banana',url:
|
||||
'qrc:///images/smileys/food/banana.gif'},
|
||||
|
||||
{name:':cooking',url:
|
||||
'qrc:///images/smileys/food/cooking.gif'},
|
||||
|
||||
{name:':fryegg',url:
|
||||
'qrc:///images/smileys/food/fryegg.gif'},
|
||||
|
||||
{name:':birthdaycake',url:
|
||||
'qrc:///images/smileys/food/birthdaycake.gif'},
|
||||
|
||||
//Happy
|
||||
|
||||
{name:':cloud9',url:
|
||||
'qrc:///images/smileys/happy/cloud9.gif'},
|
||||
|
||||
{name:':tearsofjoy',url:
|
||||
'qrc:///images/smileys/happy/tearsofjoy.gif' },
|
||||
|
||||
//Repsect
|
||||
|
||||
{name:':bow',url:
|
||||
'qrc:///images/smileys/respect/bow.gif'},
|
||||
|
||||
{name:':bravo',url:
|
||||
'qrc:///images/smileys/respect/bravo.gif'},
|
||||
|
||||
{name:':hailking',url:
|
||||
'qrc:///images/smileys/respect/hailking.gif'},
|
||||
|
||||
{name:':number1',url:
|
||||
'qrc:///images/smileys/respect/number1.gif' },
|
||||
|
||||
//Laugh
|
||||
|
||||
{name:':hahaha',url:
|
||||
'qrc:///images/smileys/laugh/hahaha.gif'},
|
||||
|
||||
{name:':loltv',url:
|
||||
'qrc:///images/smileys/laugh/loltv.gif' },
|
||||
|
||||
{name:':rofl',url:
|
||||
'qrc:///images/smileys/laugh/rofl.gif'},
|
||||
|
||||
//Music
|
||||
|
||||
{name:':drums',url:
|
||||
'qrc:///images/smileys/music/drums.gif'},
|
||||
|
||||
|
||||
{name:':guitar',url:
|
||||
'qrc:///images/smileys/music/guitar.gif'},
|
||||
|
||||
{name:':trumpet',url:
|
||||
'qrc:///images/smileys/music/trumpet.gif' },
|
||||
|
||||
//smileys that used to be in core
|
||||
|
||||
{name:':headbang',url:
|
||||
'qrc:///images/smileys/oldcore/headbang.gif'},
|
||||
|
||||
{name:':beard',url:
|
||||
'qrc:///images/smileys/oldcore/beard.png'},
|
||||
|
||||
{name:':whitebeard',url:
|
||||
'qrc:///images/smileys/oldcore/whitebeard.png'},
|
||||
|
||||
{name:':shaka',url:
|
||||
'qrc:///images/smileys/oldcore/shaka.gif'},
|
||||
|
||||
{name:':\\.../',url:
|
||||
'qrc:///images/smileys/oldcore/shaka.gif'},
|
||||
|
||||
{name:':\\ooo/',url:
|
||||
'qrc:///images/smileys/oldcore/shaka.gif' },
|
||||
|
||||
{name:':headdesk',url:
|
||||
'qrc:///images/smileys/oldcore/headbang.gif' },
|
||||
|
||||
//These two are still in core, so oldcore isn't strictly right, but we don't want too many directories
|
||||
|
||||
{name:':-d',url:
|
||||
'qrc:///images/smileys/oldcore/laughing.gif'},
|
||||
|
||||
{name:':-o',url:
|
||||
'qrc:///images/smileys/oldcore/surprised.gif' },
|
||||
|
||||
// Regex killers - stick these at the bottom so they appear at the end of the English and
|
||||
// at the start of $OtherLanguage.
|
||||
|
||||
{name:':cool',url:
|
||||
'qrc:///images/smileys/cool/cool.gif' },
|
||||
|
||||
{name:':vomit',url:
|
||||
'qrc:///images/smileys/disgust/vomit.gif' },
|
||||
|
||||
{name:':golf',url:
|
||||
'qrc:///images/smileys/sport/golf.gif' },
|
||||
|
||||
{name:':football',url:
|
||||
'qrc:///images/smileys/sport/football.gif'},
|
||||
|
||||
{name:':tennis',url:
|
||||
'qrc:///images/smileys/sport/tennis.gif' },
|
||||
|
||||
{name:':alpha',url:
|
||||
'qrc:///images/smileys/fight/alpha.png' },
|
||||
|
||||
{name:':marine',url:
|
||||
'qrc:///images/smileys/fight/marine.gif' },
|
||||
|
||||
{name:':sabre',url:
|
||||
'qrc:///images/smileys/fight/sabre.gif' },
|
||||
|
||||
{name:':tank',url:
|
||||
'qrc:///images/smileys/fight/tank.gif' },
|
||||
|
||||
{name:':viking',url:
|
||||
'qrc:///images/smileys/fight/viking.gif' },
|
||||
|
||||
{name:':gangs',url:
|
||||
'qrc:///images/smileys/fight/gangs.gif' },
|
||||
|
||||
{name:':dj',url:
|
||||
'qrc:///images/smileys/music/dj.gif'},
|
||||
|
||||
{name:':elvis',url:
|
||||
'qrc:///images/smileys/music/elvis.gif'},
|
||||
|
||||
{name:':violin',url:
|
||||
'qrc:///images/smileys/music/violin.gif'},
|
||||
]
|
||||
|
||||
|
||||
var adult=[
|
||||
{
|
||||
name:'(o)(o) ',url:
|
||||
'qrc:///images/smileys/adult/tits.gif'},
|
||||
|
||||
{name:'(.)(.) ',url:
|
||||
'qrc:///images/smileys/adult/tits.gif'},
|
||||
|
||||
{name:':bong',url:
|
||||
'qrc:///images/smileys/adult/bong.gif'},
|
||||
|
||||
{name:':sperm',url:
|
||||
'qrc:///images/smileys/adult/sperm.gif'},
|
||||
|
||||
{name:':drunk',url:
|
||||
'qrc:///images/smileys/adult/drunk.gif'},
|
||||
|
||||
{name:':finger',url:
|
||||
'qrc:///images/smileys/adult/finger.gif'}
|
||||
]
|
Loading…
Add table
Add a link
Reference in a new issue