forked from lubuwest/Friendiqa
Version 0.002 with working Favorite Combobox
This commit is contained in:
parent
42de63fe63
commit
571c9046d0
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.001" android:versionCode="1" android:installLocation="auto">
|
<manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.002" android:versionCode="2" android:installLocation="auto">
|
||||||
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="Friendiqa" android:icon="@drawable/icon">
|
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="Friendiqa" android:icon="@drawable/icon">
|
||||||
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="Friendiqa" android:screenOrientation="unspecified" android:launchMode="singleTop">
|
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="Friendiqa" android:screenOrientation="unspecified" android:launchMode="singleTop">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
|
@ -3,7 +3,6 @@
|
||||||
<file>js/layout.js</file>
|
<file>js/layout.js</file>
|
||||||
<file>js/photoworker.js</file>
|
<file>js/photoworker.js</file>
|
||||||
<file>js/service.js</file>
|
<file>js/service.js</file>
|
||||||
<file>qml/FriendComponent.qml</file>
|
|
||||||
<file>qml/MessageSend.qml</file>
|
<file>qml/MessageSend.qml</file>
|
||||||
<file>qml/Newsitem.qml</file>
|
<file>qml/Newsitem.qml</file>
|
||||||
<file>qml/PhotoComponent.qml</file>
|
<file>qml/PhotoComponent.qml</file>
|
||||||
|
@ -20,5 +19,7 @@
|
||||||
<file>images/defaultcontact.jpg</file>
|
<file>images/defaultcontact.jpg</file>
|
||||||
<file>qml/InfoBox.qml</file>
|
<file>qml/InfoBox.qml</file>
|
||||||
<file>qml/GroupComponent.qml</file>
|
<file>qml/GroupComponent.qml</file>
|
||||||
|
<file>qml/ContactComponent.qml</file>
|
||||||
|
<file>qml/PermissionDialog.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -13,7 +13,7 @@ int main(int argc, char *argv[]) {
|
||||||
view.rootContext()->setContextProperty("xhr", xhr);
|
view.rootContext()->setContextProperty("xhr", xhr);
|
||||||
FILESYSTEM* filesystem = FILESYSTEM::instance();
|
FILESYSTEM* filesystem = FILESYSTEM::instance();
|
||||||
view.rootContext()->setContextProperty("filesystem", filesystem);
|
view.rootContext()->setContextProperty("filesystem", filesystem);
|
||||||
view.setSource(QUrl("qrc:/qml/friendiqa.qml"));
|
view.setSource(QUrl("qrc:/qml/friendiqa.qml"));
|
||||||
view.show();
|
view.show();
|
||||||
view.connect(view.rootContext()->engine(), SIGNAL(quit()), &app, SLOT(quit()));
|
view.connect(view.rootContext()->engine(), SIGNAL(quit()), &app, SLOT(quit()));
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "xhr.h"
|
#include "xhr.h"
|
||||||
|
|
||||||
#include <QHttpPart>
|
#include <QHttpPart>
|
||||||
#include <QTextCodec>
|
#include <QTextCodec>
|
||||||
|
@ -14,7 +14,7 @@ XHR *XHR::instance()
|
||||||
|
|
||||||
XHR::XHR(QObject *parent) : QObject(parent)
|
XHR::XHR(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
|
// request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
|
||||||
}
|
}
|
||||||
|
|
||||||
void XHR::setUrl(QString url)
|
void XHR::setUrl(QString url)
|
||||||
|
@ -32,6 +32,15 @@ void XHR::setLogin(QString login)
|
||||||
emit loginChanged();
|
emit loginChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XHR::setFilename(QString filename)
|
||||||
|
{
|
||||||
|
if (filename!=m_filename) {
|
||||||
|
m_filename = filename;
|
||||||
|
emit filenameChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QString XHR::url() const
|
QString XHR::url() const
|
||||||
{
|
{
|
||||||
return m_url;
|
return m_url;
|
||||||
|
@ -42,6 +51,11 @@ QString XHR::login() const
|
||||||
return m_login;
|
return m_login;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString XHR::filename() const
|
||||||
|
{
|
||||||
|
return m_filename;
|
||||||
|
}
|
||||||
|
|
||||||
void XHR::setParam(QString name, QString value)
|
void XHR::setParam(QString name, QString value)
|
||||||
{
|
{
|
||||||
params.insert(name, value);
|
params.insert(name, value);
|
||||||
|
@ -58,6 +72,21 @@ void XHR::clearParams()
|
||||||
params.clear();
|
params.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XHR::download()
|
||||||
|
{
|
||||||
|
QUrl requrl(m_url);
|
||||||
|
// qDebug() << "start download of " << requrl;
|
||||||
|
request.setUrl(requrl);
|
||||||
|
reply = manager.get(request);
|
||||||
|
// qDebug() << "reply " << reply->header(QNetworkRequest::LocationHeader)<<reply->header(QNetworkRequest::LastModifiedHeader);
|
||||||
|
// qDebug() << "request " << request.url();
|
||||||
|
// qDebug() << "error " << reply->error();
|
||||||
|
// reply->ignoreSslErrors();
|
||||||
|
connect(reply, &QNetworkReply::readyRead,this, &XHR::onRequestFinished);
|
||||||
|
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
|
||||||
|
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
||||||
|
}
|
||||||
|
|
||||||
void XHR::get()
|
void XHR::get()
|
||||||
{
|
{
|
||||||
QUrlQuery query;
|
QUrlQuery query;
|
||||||
|
@ -82,7 +111,7 @@ void XHR::get()
|
||||||
connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess);
|
connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess);
|
||||||
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
||||||
connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead);
|
connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead);
|
||||||
|
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
|
||||||
}
|
}
|
||||||
|
|
||||||
void XHR::post()
|
void XHR::post()
|
||||||
|
@ -145,6 +174,22 @@ void XHR::onReplySuccess()
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XHR::onRequestFinished()
|
||||||
|
{
|
||||||
|
// Save the file here
|
||||||
|
QByteArray b = reply->readAll();
|
||||||
|
QImage image = QImage::fromData(b);
|
||||||
|
if (image.isNull()){qDebug() << "Image empty"<<m_url;}
|
||||||
|
QFile file(m_filename);
|
||||||
|
file.open(QIODevice::WriteOnly);
|
||||||
|
image.save(&file, "JPG");
|
||||||
|
b.clear();
|
||||||
|
file.close();
|
||||||
|
// qDebug() << m_url << "File downloaded "<<file.fileName();
|
||||||
|
emit this->downloaded();
|
||||||
|
reply->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
void XHR::onReadyRead()
|
void XHR::onReadyRead()
|
||||||
{
|
{
|
||||||
qDebug() << ".";
|
qDebug() << ".";
|
||||||
|
|
|
@ -11,35 +11,43 @@ class XHR : public QObject
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(QString url READ url WRITE setUrl NOTIFY urlChanged)
|
Q_PROPERTY(QString url READ url WRITE setUrl NOTIFY urlChanged)
|
||||||
Q_PROPERTY(QString login READ login WRITE setLogin NOTIFY loginChanged)
|
Q_PROPERTY(QString login READ login WRITE setLogin NOTIFY loginChanged)
|
||||||
|
Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged)
|
||||||
public:
|
public:
|
||||||
static XHR *instance();
|
static XHR *instance();
|
||||||
|
|
||||||
explicit XHR(QObject *parent = 0);
|
explicit XHR(QObject *parent = 0);
|
||||||
|
|
||||||
void setUrl(QString url);
|
|
||||||
// void setLogin(QString login);
|
// void setLogin(QString login);
|
||||||
|
|
||||||
QString url() const;
|
QString url() const;
|
||||||
QString login() const;
|
QString login() const;
|
||||||
|
QString filename() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void urlChanged();
|
void urlChanged();
|
||||||
void loginChanged();
|
void loginChanged();
|
||||||
|
void filenameChanged();
|
||||||
|
void downloaded();
|
||||||
void success(QString data);
|
void success(QString data);
|
||||||
void error(QString data, int code);
|
void error(QString data, int code);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
void setUrl(QString url);
|
||||||
void setLogin(QString login);
|
void setLogin(QString login);
|
||||||
|
void setFilename(QString filename);
|
||||||
void setParam(QString name, QString value);
|
void setParam(QString name, QString value);
|
||||||
void setImageFileParam(QString name, QString url);
|
void setImageFileParam(QString name, QString url);
|
||||||
void clearParams();
|
void clearParams();
|
||||||
void post();
|
void post();
|
||||||
void get();
|
void get();
|
||||||
|
void download();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onReplyError(QNetworkReply::NetworkError code);
|
void onReplyError(QNetworkReply::NetworkError code);
|
||||||
void onReplySuccess();
|
void onReplySuccess();
|
||||||
|
void onRequestFinished();
|
||||||
|
//void onFileWritten();
|
||||||
void onReadyRead();
|
void onReadyRead();
|
||||||
void onSSLError(const QList<QSslError> &errors);
|
void onSSLError(const QList<QSslError> &errors);
|
||||||
|
|
||||||
|
@ -47,6 +55,7 @@ private:
|
||||||
QByteArray buffer;
|
QByteArray buffer;
|
||||||
QString m_url;
|
QString m_url;
|
||||||
QString m_login;
|
QString m_login;
|
||||||
|
QString m_filename;
|
||||||
QHash<QString, QString> params;
|
QHash<QString, QString> params;
|
||||||
QHash<QString, QString> files;
|
QHash<QString, QString> files;
|
||||||
|
|
||||||
|
|
|
@ -4,18 +4,19 @@
|
||||||
function friendicaRequest(login,api,rootwindow,callback) {
|
function friendicaRequest(login,api,rootwindow,callback) {
|
||||||
var xhrequest= new XMLHttpRequest();
|
var xhrequest= new XMLHttpRequest();
|
||||||
xhrequest.onreadystatechange = function() {
|
xhrequest.onreadystatechange = function() {
|
||||||
if (xhrequest.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
|
// if (xhrequest.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
|
||||||
} else if(xhrequest.readyState === XMLHttpRequest.DONE) {
|
// } else
|
||||||
|
if(xhrequest.readyState === XMLHttpRequest.DONE) {
|
||||||
try{ if (xhrequest.responseText!=""){
|
try{ if (xhrequest.responseText!=""){
|
||||||
callback(xhrequest.responseText)
|
callback(xhrequest.responseText)
|
||||||
}else{
|
}else{
|
||||||
showMessage("Error",api+" NO RESPONSE",rootwindow)
|
showMessage("Error",api+" NO RESPONSE",rootwindow);
|
||||||
callback(xhrequest.responseText)
|
callback(xhrequest.responseText)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (e){
|
catch (e){
|
||||||
showMessage("Error", api+" "+e,rootwindow)
|
showMessage("Error", api+" "+e,rootwindow)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xhrequest.open("GET", login.server+api,true,login.username,Qt.atob(login.password));
|
xhrequest.open("GET", login.server+api,true,login.username,Qt.atob(login.password));
|
||||||
|
@ -65,12 +66,15 @@ function readData(database,table,username,callback,filter,filtervalue) { // read
|
||||||
if (filter){
|
if (filter){
|
||||||
var where = " AND "+ filter +" = '" + filtervalue+"'";
|
var where = " AND "+ filter +" = '" + filtervalue+"'";
|
||||||
} else { var where="";}
|
} else { var where="";}
|
||||||
|
if (username){
|
||||||
|
var user = ' where username= "'+ username +'"';
|
||||||
|
} else { var user='';}
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
if(!db) { return; }
|
if(!db) { return; }
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
// print('select * from '+table'+where username= "'+username+'"'+'where);
|
//print('select * from '+table+user+where);
|
||||||
var rsArray=[];
|
var rsArray=[];
|
||||||
var rs = tx.executeSql('select * from '+table+' where username= "'+username+'"'+where);
|
var rs = tx.executeSql('select * from '+table+user+where);
|
||||||
for(var i = 0; i < rs.rows.length; i++) {
|
for(var i = 0; i < rs.rows.length; i++) {
|
||||||
rsArray.push(rs.rows.item(i))
|
rsArray.push(rs.rows.item(i))
|
||||||
}
|
}
|
||||||
|
@ -85,19 +89,20 @@ var where = " AND "+ filter +" = '" + filtervalue+"'";
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
if(!db) { return; }
|
if(!db) { return; }
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
// print('... read from database ' + field)
|
//print('... read from database ' + field)
|
||||||
var rsArray=[];
|
var rsArray=[];
|
||||||
print('select DISTINCT '+field+' from '+table+' WHERE username="'+username+'"'+where+' ORDER BY '+field+' ASC');
|
//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');
|
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++) {
|
for(var i = 0; i < rs.rows.length; i++) {
|
||||||
rsArray.push(rs.rows.item(i)[field])
|
rsArray.push(rs.rows.item(i)[field])
|
||||||
}
|
}
|
||||||
callback(rsArray);
|
callback(rsArray);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function showMessage(header,message,rootwindow){
|
function showMessage(header,message,rootwindow){
|
||||||
var messageString='import QtQuick 2.0; import QtQuick.Dialogs 1.2; MessageDialog{ visible: true; title:"'+header+'";standardButtons: StandardButton.Ok; text:" '+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");
|
var messageObject=Qt.createQmlObject(messageString,rootwindow,"messageOutput");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,35 +40,66 @@ function getFriendsTimeline(login,database,contacts,rootwindow,callback){// retr
|
||||||
var result = tx.executeSql('SELECT status_id from news WHERE username="'+login.username+'" ORDER BY status_id DESC LIMIT 1'); // check for last news id
|
var result = tx.executeSql('SELECT status_id from news WHERE username="'+login.username+'" ORDER BY status_id DESC LIMIT 1'); // check for last news id
|
||||||
try{parameter="&since_id="+result.rows.item(0).status_id;}catch(e){};})
|
try{parameter="&since_id="+result.rows.item(0).status_id;}catch(e){};})
|
||||||
var newContacts=[];
|
var newContacts=[];
|
||||||
|
//print(JSON.stringify("Contacts "+contacts));
|
||||||
Helperjs.friendicaRequest(login,"/api/statuses/friends_timeline"+parameter, rootwindow,function (obj){
|
Helperjs.friendicaRequest(login,"/api/statuses/friends_timeline"+parameter, rootwindow,function (obj){
|
||||||
var news=JSON.parse(obj);
|
var news=JSON.parse(obj);
|
||||||
for (var i=0;i<news.length;i++){
|
var newContacts=findNewContacts(news,contacts);
|
||||||
if(contacts.indexOf(news[i].user.id)==-1 && !(inArray(newContacts,"id",news[i].user.id))){
|
// for (var i=0;i<news.length;i++){
|
||||||
news[i].user.isFriend=0;
|
// if(contacts.indexOf(news[i].user.id)==-1 && !(inArray(newContacts,"id",news[i].user.id))){
|
||||||
newContacts.push(news[i].user);
|
// news[i].user.isFriend=0;
|
||||||
}
|
// newContacts.push(news[i].user);
|
||||||
if (news[i].friendica_activities.like.length>0){
|
// }
|
||||||
print("Like Contact"+JSON.stringify(news[i].friendica_activities.like));
|
// if (news[i].friendica_activities.like.length>0){
|
||||||
for (var j=0;j<news[i].friendica_activities.like.length;j++){
|
// // print("Like Contact"+JSON.stringify(news[i].friendica_activities.like));
|
||||||
if(contacts.indexOf(news[i].friendica_activities.like[j].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activities.like[j].id))){
|
// for (var j=0;j<news[i].friendica_activities.like.length;j++){
|
||||||
news[i].friendica_activities.like[j].isFriend=0;
|
// if(contacts.indexOf(news[i].friendica_activities.like[j].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activities.like[j].id))){
|
||||||
newContacts.push(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){
|
// }
|
||||||
print("DisLike Contact"+JSON.stringify(news[i].friendica_activities.dislike));
|
// if (news[i].friendica_activities.dislike.length>0){
|
||||||
for (var k=0;j<news[k].friendica_activities.dislike.length;k++){
|
// //print("DisLike Contact"+JSON.stringify(news[i].friendica_activities.dislike));
|
||||||
if(contacts.indexOf(news[i].friendica_activities.dislike[k].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activties.dislike[k].id))){
|
// for (var k=0;j<news[k].friendica_activities.dislike.length;k++){
|
||||||
news[i].friendica_activities.dislike[k].isFriend=0;
|
// if(contacts.indexOf(news[i].friendica_activities.dislike[k].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activties.dislike[k].id))){
|
||||||
newContacts.push(news[i].friendica_activities.dislike[k]);
|
// news[i].friendica_activities.dislike[k].isFriend=0;
|
||||||
}
|
// newContacts.push(news[i].friendica_activities.dislike[k]);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
callback(news,newContacts)
|
callback(news,newContacts)
|
||||||
})}
|
})}
|
||||||
|
|
||||||
|
function findNewContacts(news,contacts){
|
||||||
|
var newContacts=[];
|
||||||
|
for (var i=0;i<news.length;i++){
|
||||||
|
if(contacts.indexOf(news[i].user.id)==-1 && !(inArray(newContacts,"id",news[i].user.id))){
|
||||||
|
news[i].user.isFriend=0;
|
||||||
|
newContacts.push(news[i].user);
|
||||||
|
}
|
||||||
|
if (news[i].friendica_activities.like.length>0){
|
||||||
|
// print("Like Contact"+JSON.stringify(news[i].friendica_activities.like));
|
||||||
|
for (var j=0;j<news[i].friendica_activities.like.length;j++){
|
||||||
|
if(contacts.indexOf(news[i].friendica_activities.like[j].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activities.like[j].id))){
|
||||||
|
news[i].friendica_activities.like[j].isFriend=0;
|
||||||
|
newContacts.push(news[i].friendica_activities.like[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (news[i].friendica_activities.dislike.length>0){
|
||||||
|
//print("DisLike Contact"+JSON.stringify(news[i].friendica_activities.dislike));
|
||||||
|
for (var k=0;j<news[k].friendica_activities.dislike.length;k++){
|
||||||
|
if(contacts.indexOf(news[i].friendica_activities.dislike[k].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activties.dislike[k].id))){
|
||||||
|
news[i].friendica_activities.dislike[k].isFriend=0;
|
||||||
|
newContacts.push(news[i].friendica_activities.dislike[k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newContacts
|
||||||
|
}
|
||||||
|
|
||||||
function storeNews(login,database,news,rootwindow,callback){
|
function storeNews(login,database,news,rootwindow,callback){
|
||||||
// save news after contacts download, call next function
|
// save news after contacts download, call next function
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
|
@ -80,14 +111,14 @@ function storeNews(login,database,news,rootwindow,callback){
|
||||||
var attendyesarray=[]; for (var user in news[i].friendica_activities.attendyes){attendyesarray.push(parseInt(news[i].friendica_activities.attendyes[user].id))}
|
var attendyesarray=[]; for (var user in news[i].friendica_activities.attendyes){attendyesarray.push(parseInt(news[i].friendica_activities.attendyes[user].id))}
|
||||||
var attendnoarray=[]; for (var user in news[i].friendica_activities.attendno){attendnoarray.push(parseInt(news[i].friendica_activities.attendno[user].id))}
|
var attendnoarray=[]; for (var user in news[i].friendica_activities.attendno){attendnoarray.push(parseInt(news[i].friendica_activities.attendno[user].id))}
|
||||||
var attendmaybearray=[]; for (var user in news[i].friendica_activities.attendmaybe){attendmaybearray.push(parseInt(news[i].friendica_activities.attendmaybe[user].id))}
|
var attendmaybearray=[]; for (var user in news[i].friendica_activities.attendmaybe){attendmaybearray.push(parseInt(news[i].friendica_activities.attendmaybe[user].id))}
|
||||||
|
var friendica_activities=[likearray,dislikearray,attendyesarray,attendnoarray,attendmaybearray]
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
var result = tx.executeSql('SELECT * from news where status_id = "'+news[i].id+'"'); // check for news id
|
var result = tx.executeSql('SELECT * from news where status_id = "'+news[i].id+'"'); // check for news id
|
||||||
if(result.rows.length === 1) {// use update
|
if(result.rows.length === 1) {// use update
|
||||||
print(news[i].id +' exists, update it')
|
print(news[i].id +' exists, update it')
|
||||||
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+'",like="'+JSON.stringify(likearray)+'", dislike="'+JSON.stringify(dislikearray)+'", attendyes="'+JSON.stringify(attendyesarray)+'",attendno="'+JSON.stringify(attendnoarray)+'",attendmaybe="'+JSON.stringify(attendmaybearray)+'" where status_id="'+news[i].status_id+'"');
|
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="'+JSON.stringify(friendica_activities)+'" where status_id="'+news[i].status_id+'"');
|
||||||
} else {// use insert
|
} 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,like,dislike,attendyes,attendno,attendmaybe) 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, JSON.stringify(likearray),JSON.stringify(dislikearray),JSON.stringify(attendyesarray),JSON.stringify(attendnoarray),JSON.stringify(attendmaybearray)])}})
|
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) 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, JSON.stringify(friendica_activities),"[]"])}})
|
||||||
}
|
}
|
||||||
getDirectMessage(login,database,rootwindow,callback)
|
getDirectMessage(login,database,rootwindow,callback)
|
||||||
}
|
}
|
||||||
|
@ -102,9 +133,9 @@ function getDirectMessage(login,database,rootwindow,callback){
|
||||||
var result = tx.executeSql('SELECT * from news where status_id = "'+messages[i].id+'"'); // check for news id
|
var result = tx.executeSql('SELECT * from news where status_id = "'+messages[i].id+'"'); // check for news id
|
||||||
if(result.rows.length === 1) {// use update
|
if(result.rows.length === 1) {// use update
|
||||||
print(messages[i].id +' exists, update it')
|
print(messages[i].id +' 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)+'" where status_id="'+messages[i].status_id+'"');
|
result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=1, text="'+Qt.btoa(messages[i].text)+'", created_at="'+Date.parse(messages[i].created_at)+'", source="Friendica", status_id="'+messages[i].id+'", uid="'+messages[i].sender.id+'", statusnet_html="'+Qt.btoa(messages[i].text)+'" where status_id="'+messages[i].status_id+'"');
|
||||||
} else {// use insert
|
} else {// use insert
|
||||||
result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,source,status_id,uid,statusnet_html) 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)])}
|
result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,source,status_id,uid,statusnet_html) VALUES (?,?,?,?,?,?,?,?)', [login.username,1,Qt.btoa(messages[i].text),Date.parse(messages[i].created_at), "Friendica", messages[i].id, messages[i].sender.id,Qt.btoa(messages[i].text)])}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -121,15 +152,25 @@ function getNotifications(login,database,rootwindow,callback){
|
||||||
var result = tx.executeSql('SELECT * from news where status_id = "'+messages[i].id+'"'); // check for news id
|
var result = tx.executeSql('SELECT * from news where status_id = "'+messages[i].id+'"'); // check for news id
|
||||||
if(result.rows.length === 1) {// use update
|
if(result.rows.length === 1) {// use update
|
||||||
print(messages[i].id +' exists, update it')
|
print(messages[i].id +' exists, update it')
|
||||||
result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=2, text="'+Qt.btoa(messages[i].msg_html)+'", created_at="'+messages[i].timestamp+'", 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 status_id="'+messages[i].id+'"');
|
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 status_id="'+messages[i].id+'"');
|
||||||
} else {// use insert
|
} 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),messages[i].timestamp,"Friendica", messages[i].id, messages[i].uid,Qt.btoa(messages[i].msg_html),messages[i].parent])}
|
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])}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
newsfromdb(database,login.username,callback)
|
newsfromdb(database,login.username,callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getActivitiesUserData(database,username,useridArray){
|
||||||
|
var helpArray=[];
|
||||||
|
for (var i=0;i<useridArray.length;i++){
|
||||||
|
Helperjs.readData(database,"contacts",username,function(userdata){
|
||||||
|
helpArray.push(userdata[0]);
|
||||||
|
},"id",useridArray[i]);
|
||||||
|
}
|
||||||
|
return helpArray
|
||||||
|
}
|
||||||
|
|
||||||
function newsfromdb(database,username,callback,contact,stop_time){
|
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
|
// 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]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
|
@ -139,6 +180,7 @@ db.transaction( function(tx) {
|
||||||
stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}}
|
stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}}
|
||||||
else{var stop="<"+stop_time}
|
else{var stop="<"+stop_time}
|
||||||
var contactfilter="";if(contact){contactfilter=" AND uid='"+contact+"'"}
|
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 newsrs=tx.executeSql('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
|
||||||
var newsArray=[];
|
var newsArray=[];
|
||||||
for(var i = 0; i < newsrs.rows.length; i++) {
|
for(var i = 0; i < newsrs.rows.length; i++) {
|
||||||
|
@ -152,57 +194,45 @@ db.transaction( function(tx) {
|
||||||
},"id",newsArray[i].in_reply_to_user_id);
|
},"id",newsArray[i].in_reply_to_user_id);
|
||||||
}
|
}
|
||||||
if (newsArray[i].messagetype==0){
|
if (newsArray[i].messagetype==0){
|
||||||
//userdata for likes
|
for(var j=0;j<newsArray[i].friendica_activities.length;j++)
|
||||||
var likeArray=JSON.parse(newsArray[i].like);
|
{var friendicaArray=JSON.parse(newsArray[i].friendica_activities);
|
||||||
var likeHelper=[];
|
// print("Array: "+friendicaArray[1]);
|
||||||
for (var j=0;j<likeArray.length;j++){
|
newsArray[i].like=getActivitiesUserData(database,username,friendicaArray[0]);
|
||||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
newsArray[i].dislike=getActivitiesUserData(database,username,friendicaArray[1]);
|
||||||
likeHelper[j]=userdata[0];
|
newsArray[i].attendyes=getActivitiesUserData(database,username,friendicaArray[2]);
|
||||||
},"id",likeArray[j]);
|
newsArray[i].attendno=getActivitiesUserData(database,username,friendicaArray[3]);
|
||||||
}
|
newsArray[i].attendmaybe=getActivitiesUserData(database,username,friendicaArray[4]);
|
||||||
newsArray[i].like=likeHelper;
|
}
|
||||||
//userdata for dislikes
|
|
||||||
var dislikeArray=JSON.parse(newsArray[i].dislike);
|
|
||||||
var dislikeHelper=[];
|
|
||||||
for (var k=0;k<dislikeArray.length;k++){
|
|
||||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
|
||||||
dislikeHelper[j]=userdata[0];
|
|
||||||
},"id",dislikeArray[k]);
|
|
||||||
}
|
|
||||||
newsArray[i].dislike=dislikeHelper;
|
|
||||||
//userdata for attendyes
|
|
||||||
var attendyesArray=JSON.parse(newsArray[i].attendyes);
|
|
||||||
var attendyesHelper=[];
|
|
||||||
for (var l=0;l<attendyesArray.length;l++){
|
|
||||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
|
||||||
attendyesHelper[j]=userdata[0];
|
|
||||||
},"id",attendyesArray[l]);
|
|
||||||
}
|
|
||||||
newsArray[i].attendyes=attendyesHelper;
|
|
||||||
//userdata for attendno
|
|
||||||
var attendnoArray=JSON.parse(newsArray[i].attendno);
|
|
||||||
var attendnoHelper=[];
|
|
||||||
for (var m=0;m<attendnoArray.length;m++){
|
|
||||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
|
||||||
attendnoHelper[j]=userdata[0];
|
|
||||||
},"id",attendnoArray[m]);
|
|
||||||
}
|
|
||||||
newsArray[i].attendno=attendnoHelper;
|
|
||||||
|
|
||||||
//userdata for attendmaybe
|
|
||||||
var attendmaybeArray=JSON.parse(newsArray[i].attendmaybe);
|
|
||||||
var attendmaybeHelper=[];
|
|
||||||
for (var n=0;n<attendmaybeArray.length;n++){
|
|
||||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
|
||||||
attendmaybeHelper[j]=userdata[0];
|
|
||||||
},"id",attendmaybeArray[l]);
|
|
||||||
}
|
|
||||||
newsArray[i].attendmaybe=attendmaybeHelper;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
callback(newsArray)});
|
callback(newsArray)});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fetchUsersForNews(database,username,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(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]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return news
|
||||||
|
}
|
||||||
|
|
||||||
function deleteNews(login,database,newsid,rootwindow,callback){
|
function deleteNews(login,database,newsid,rootwindow,callback){
|
||||||
Helperjs.friendicaPostRequest(login,"/api/statuses/destroy?id="+newsid, rootwindow,function (obj){
|
Helperjs.friendicaPostRequest(login,"/api/statuses/destroy?id="+newsid, rootwindow,function (obj){
|
||||||
print("Delete "+obj);
|
print("Delete "+obj);
|
||||||
|
@ -228,73 +258,105 @@ function favorite(login,favorite,newsid,rootwindow){
|
||||||
})}
|
})}
|
||||||
}
|
}
|
||||||
|
|
||||||
function likerequest(login,database,toggle,verb,newsid,rootwindow){
|
function likerequest(login,database,verb,newsid,rootwindow){
|
||||||
Helperjs.friendicaPostRequest(login,"/api/friendica/activity/"+verb+"?id="+newsid, rootwindow,function (obj){
|
Helperjs.friendicaPostRequest(login,"/api/friendica/activity/"+verb+"?id="+newsid, rootwindow,function (obj){
|
||||||
print("likereturn "+obj);
|
|
||||||
if (obj=='"ok"'){
|
if (obj=='"ok"'){
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
db.transaction( function(tx) {var result = tx.executeSql('UPDATE news SET '+verb+'d ='+toggle+' where status_id ='+newsid);
|
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("currentActivities "+JSON.stringify(currentActivities));
|
||||||
|
if ((verb=="like")&&(currentActivities.indexOf(1)==-1)){ currentActivities.push(1);
|
||||||
|
currentActivities.splice(currentActivities.indexOf(2),1)
|
||||||
|
}
|
||||||
|
if ((verb=="dislike")&&(currentActivities.indexOf(2)==-1)){ currentActivities.push(2);
|
||||||
|
currentActivities.splice(currentActivities.indexOf(1),1)
|
||||||
|
}
|
||||||
|
if (verb=="unlike"){ try{currentActivities.splice(currentActivities.indexOf(1),1)}catch(e){}}
|
||||||
|
if (verb=="undislike"){ try{currentActivities.splice(currentActivities.indexOf(2),1)}catch(e){}}
|
||||||
|
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){
|
function like(login,database,toggle,verb,newsid,rootwindow){
|
||||||
if(verb=="like"&& toggle==1){
|
if(verb=="like"&& toggle==1){likerequest(login,database,"like",newsid,rootwindow);
|
||||||
likerequest(login,database,1,"like",newsid,rootwindow);
|
}
|
||||||
likerequest(login,database,0,"undislike",newsid,rootwindow);}
|
if(verb=="dislike"&& toggle==1){likerequest(login,database,"dislike",newsid,rootwindow);
|
||||||
if(verb=="dislike"&& toggle==1){
|
}
|
||||||
likerequest(login,database,1,"dislike",newsid,rootwindow);
|
if(toggle==0){
|
||||||
likerequest(login,database,0,"unlike",newsid,rootwindow);}
|
likerequest(login,database,"un"+verb,newsid,rootwindow);}
|
||||||
if(toggle==0){
|
|
||||||
likerequest(login,database,0,"un"+verb,newsid,rootwindow);}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function attend(login,database,attend,newsid,rootwindow,callback){
|
function attend(login,database,attend,newsid,rootwindow,callback){
|
||||||
Helperjs.friendicaPostRequest(login,"/api/friendica/activity/attend"+attend+"?id="+newsid, rootwindow,function (obj){
|
Helperjs.friendicaPostRequest(login,"/api/friendica/activity/attend"+attend+"?id="+newsid, rootwindow,function (obj){
|
||||||
var attendReturn=JSON.parse(obj);
|
var attendReturn=JSON.parse(obj);
|
||||||
// print("attend: "+obj);
|
// print("attend: "+obj);
|
||||||
//if (attendReturn=="OK")
|
if (attendReturn=="OK")
|
||||||
{
|
{var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
db.transaction( function(tx) {
|
||||||
db.transaction( function(tx) {var result = tx.executeSql('UPDATE news SET attend="+attend+" where status_id ='+newsid);
|
var currentActivities_rs=tx.executeSql('select friendica_activities_self from news WHERE username="'+login.username+'" AND status_id='+newsid) ;
|
||||||
callback();
|
var currentActivities=JSON.parse(currentActivities_rs.rows.item(0));
|
||||||
|
print("currentActivities "+JSON.stringify(currentActivities));
|
||||||
|
if ((attend=="attendyes")&&(currentActivities.indexOf(3)==-1)){
|
||||||
|
currentActivities.push(3);
|
||||||
|
currentActivities.splice(currentActivities.indexOf(4),1)
|
||||||
|
currentActivities.splice(currentActivities.indexOf(5),1)
|
||||||
|
}
|
||||||
|
if ((attend=="attendno")&&(currentActivities.indexOf(4)==-1)){
|
||||||
|
currentActivities.push(4);
|
||||||
|
currentActivities.splice(currentActivities.indexOf(3),1)
|
||||||
|
currentActivities.splice(currentActivities.indexOf(5),1)
|
||||||
|
}
|
||||||
|
if ((attend=="attendmaybe")&&(currentActivities.indexOf(5)==-1)){
|
||||||
|
currentActivities.push(5);
|
||||||
|
currentActivities.splice(currentActivities.indexOf(3),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,rootwindow,callback){
|
function requestConversation(login,database,newsid,contacts,rootwindow,callback){
|
||||||
Helperjs.friendicaRequest(login,"/api/conversation/show?id="+newsid,rootwindow, function (obj){
|
Helperjs.friendicaRequest(login,"/api/conversation/show?id="+newsid,rootwindow, function (obj){
|
||||||
print(obj+JSON.stringify(obj));
|
|
||||||
var news=JSON.parse(obj);
|
var news=JSON.parse(obj);
|
||||||
for (var i=0;i<news.length;i++){
|
var newContacts=findNewContacts(news,contacts);
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
// storeNews(login,database,news,rootwindow,callback)
|
||||||
print('store news data for ' + news[i].id);
|
callback(news,newContacts)
|
||||||
db.transaction( function(tx) {
|
})}
|
||||||
var result = tx.executeSql('SELECT * from news where status_id = "'+news[i].id+'"'); // check for news id
|
|
||||||
if(result.rows.length === 1) {// use update
|
|
||||||
print(news[i].id +' exists, update it')
|
|
||||||
result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=0, text="'+Qt.btoa(news[i].text)+'", truncated="'+news[i].truncated+'", 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+'", attachments="'+news[i].attachments+'" where status_id="'+news[i].status_id+'"');
|
|
||||||
} else {// use insert
|
|
||||||
result = tx.executeSql('INSERT INTO news VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,0,Qt.btoa(news[i].text),news[i].truncated,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, news[i].attachments,0,0,0]);
|
|
||||||
}});
|
|
||||||
if(news[i].user.following!=true){
|
|
||||||
updateContactInDB(login,database,rootwindow,news[i].user)}
|
|
||||||
}
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
);}
|
|
||||||
|
|
||||||
function conversationfromdb(database,user,conversationId,callback){
|
function conversationfromdb(database,user,conversationId,callback){
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
print('select * from news WHERE statusnet_conversation_id='+conversationId+' ORDER BY status_id DESC');
|
print('select * from news WHERE statusnet_conversation_id='+conversationId+' ORDER BY status_id DESC');
|
||||||
var newsrs=tx.executeSql('select * from news WHERE statusnet_conversation_id='+conversationId+' ORDER BY status_id DESC');
|
var newsrs=tx.executeSql('select * from news WHERE statusnet_conversation_id='+conversationId+' ORDER BY status_id DESC');
|
||||||
var newsArray=[];
|
var newsArray=[];
|
||||||
for(var i = 0; i < newsrs.rows.length; i++) {
|
for(var i = 0; i < newsrs.rows.length; i++) {
|
||||||
newsArray.push(newsrs.rows.item(i))
|
newsArray.push(newsrs.rows.item(i));
|
||||||
Helperjs.readData(database,"contacts",function(userdata){
|
newsArray[i]=fetchUsersForNews(database,user,newsArray[i]);
|
||||||
newsArray[i].user=userdata[0];
|
|
||||||
},"id",newsArray[i].uid);
|
|
||||||
}
|
|
||||||
callback(newsArray);
|
callback(newsArray);
|
||||||
});}
|
}})}
|
||||||
|
|
||||||
|
function requestFavorites(login,database,rootwindow,callback){
|
||||||
|
Helperjs.friendicaRequest(login,"/api/favorites",rootwindow, function (obj){
|
||||||
|
//print(obj+JSON.stringify(obj));
|
||||||
|
var news=JSON.parse(obj);
|
||||||
|
// storeNews(login,database,news,rootwindow,callback)
|
||||||
|
callback(news)
|
||||||
|
})}
|
||||||
|
|
||||||
|
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 inArray(list, prop, val) {
|
function inArray(list, prop, val) {
|
||||||
if (list.length > 0 ) {
|
if (list.length > 0 ) {
|
||||||
|
|
|
@ -1,35 +1,50 @@
|
||||||
WorkerScript.onMessage = function(msg) {
|
WorkerScript.onMessage = function(msg) {
|
||||||
if(msg.appendnews!==true){ msg.model.clear()};
|
if(msg.appendnews!==true){ msg.model.clear()};
|
||||||
|
|
||||||
for (var j=0;j<msg.news.length;j++){
|
for (var j=0;j<msg.news.length;j++){
|
||||||
if (msg.news[j]) {
|
if (msg.news[j]) {
|
||||||
var newsitemobject=msg.news[j];
|
var newsitemobject=msg.news[j];
|
||||||
var likeText="";var dislikeText="";var attendyesText="";var attendnoText="";var attendmaybeText="";
|
//print("Newsitem"+JSON.stringify(newsitemobject));
|
||||||
if (newsitemobject.messagetype==0){
|
if (newsitemobject.messagetype==2){
|
||||||
if (msg.news[j].like.length>0){
|
newsitemobject.user={};
|
||||||
if (msg.news[j].like.length==1){likeText= Qt.atob(msg.news[j].like[0].name)+" "+ qsTr("likes this.")}
|
newsitemobject.user.profile_image="qrc:/images/defaultcontact.jpg";
|
||||||
else {likeText= msg.news[j].like.length+" "+ qsTr("like this.")}
|
newsitemobject.user.profile_image_url="qrc:/images/defaultcontact.jpg";
|
||||||
|
newsitemobject.user.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 (msg.news[j].dislike.length>0){
|
if (newsitemobject.dislike.length>0){
|
||||||
if (msg.news[j].dislike.length==1){dislikeText= QT.atob(msg.news[j].dislike[0].name)+" "+ qsTr("doesn't like this.")}
|
if (newsitemobject.dislike.length==1){dislikeText= QT.atob(newsitemobject.dislike[0].name)+" "+ qsTr("doesn't like this.")}
|
||||||
else {dislikeText= msg.news[j].dislike.length+" "+ qsTr("don't like this.")}
|
else {dislikeText= newsitemobject.dislike.length+" "+ qsTr("don't like this.")}
|
||||||
}
|
}
|
||||||
if (msg.news[j].attendyes.length>0){
|
if (newsitemobject.attendyes.length>0){
|
||||||
if (msg.news[j].attendyes.length==1){attendyesText= Qt.atob(msg.news[j].attendyes[0].name)+" "+ qsTr("will attend.")}
|
if (newsitemobject.attendyes.length==1){attendyesText= Qt.atob(newsitemobject.attendyes[0].name)+" "+ qsTr("will attend.")}
|
||||||
else {attendyesText= msg.news[j].attendyes.length+" "+ qsTr("persons will attend.")}
|
else {attendyesText= newsitemobject.attendyes.length+" "+ qsTr("persons will attend.")}
|
||||||
}
|
}
|
||||||
if (msg.news[j].attendno.length>0){
|
if (newsitemobject.attendno.length>0){
|
||||||
if (msg.news[j].attendno.length==1){attendnoText= Qt.atob(msg.news[j].attendno[0].name)+" "+ qsTr("will not attend.")}
|
if (newsitemobject.attendno.length==1){attendnoText= Qt.atob(newsitemobject.attendno[0].name)+" "+ qsTr("will not attend.")}
|
||||||
else {attendnoText= msg.news[j].attendno.length+" "+ qsTr("persons will not attend.")}
|
else {attendnoText= newsitemobject.attendno.length+" "+ qsTr("persons will not attend.")}
|
||||||
}
|
}
|
||||||
if (msg.news[j].attendmaybe.length>0){
|
if (newsitemobject.attendmaybe.length>0){
|
||||||
if (msg.news[j].attendmaybe.length==1){attendmaybeText= Qt.atob(msg.news[j].attendmaybe[0].name)+" "+ qsTr("may attend.")}
|
if (newsitemobject.attendmaybe.length==1){attendmaybeText= Qt.atob(newsitemobject.attendmaybe[0].name)+" "+ qsTr("may attend.")}
|
||||||
else {attendmaybeText= msg.news[j].attendmaybe.length+" "+ qsTr("persons may attend.")}
|
else {attendmaybeText= newsitemobject.attendmaybe.length+" "+ qsTr("persons may attend.")}
|
||||||
}
|
}
|
||||||
|
var friendica_activities_self=JSON.parse(newsitemobject.friendica_activities_self);
|
||||||
|
if (friendica_activities_self.indexOf(3)!=-1){self.attending=qsTr("yes")}
|
||||||
|
if (friendica_activities_self.indexOf(4)!=-1){self.attending=qsTr("no")}
|
||||||
|
if (friendica_activities_self.indexOf(5)!=-1){self.attending=qsTr("maybe")}
|
||||||
|
if (friendica_activities_self.indexOf(1)!=-1){self.liked=1}
|
||||||
|
if (friendica_activities_self.indexOf(2)!=-1){self.disliked=1}
|
||||||
}
|
}
|
||||||
var friendica_activities={likeText:likeText,dislikeText:dislikeText,attendyesText:attendyesText,attendnoText:attendnoText,attendmaybeText:attendmaybeText}
|
var friendica_activities={likeText:likeText,dislikeText:dislikeText,attendyesText:attendyesText,attendnoText:attendnoText,attendmaybeText:attendmaybeText,self:self}
|
||||||
var seconds=(msg.currentTime-newsitemobject.created_at)/1000;
|
//print(JSON.stringify(friendica_activities) ) ;
|
||||||
var timestring="";
|
var seconds=(msg.currentTime-newsitemobject.created_at)/1000;
|
||||||
if (seconds<60) {timestring=seconds+" "+qsTr("seconds") +" "+qsTr("ago");}
|
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<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<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<5400){timestring=Math.round(seconds/3600)+" "+qsTr("hour") +" "+qsTr("ago");}
|
||||||
|
@ -40,7 +55,7 @@ WorkerScript.onMessage = function(msg) {
|
||||||
else if (seconds<69984000){timestring=Math.round(seconds/3888000)+" "+qsTr("months") +" "+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");}
|
else {timestring=Math.round(seconds/69984000)+" "+qsTr("years") +" "+qsTr("ago");}
|
||||||
var data=({"newsitemobject": newsitemobject,"dateDiff":timestring,"friendica_activities":friendica_activities})}
|
var data=({"newsitemobject": newsitemobject,"dateDiff":timestring,"friendica_activities":friendica_activities})}
|
||||||
// print("News:"+j+msg.news.length+JSON.stringify(data));
|
//print("News:"+j+msg.news.length+JSON.stringify(data));
|
||||||
msg.model.append(data);}
|
msg.model.append(data);}
|
||||||
if (j==msg.news.length){
|
if (j==msg.news.length){
|
||||||
msg.model.sync()
|
msg.model.sync()
|
||||||
|
|
|
@ -24,13 +24,13 @@ function requestList(login,database,rootwindow,callback) {
|
||||||
|
|
||||||
function dataRequest(login,photoID,database,rootwindow) {
|
function dataRequest(login,photoID,database,rootwindow) {
|
||||||
// check if image exist and call download function
|
// check if image exist and call download function
|
||||||
Helperjs.friendicaRequest(login,"/api/friendica/photo?photo_id="+photoID, rootwindow, function (obj){
|
Helperjs.friendicaRequest(login,"/api/friendica/photo?photo_id="+photoID, rootwindow, function (image){
|
||||||
try{ if(obj==""){currentImageNo=currentImageNo+1}else{
|
try{ if(image==""){currentImageNo=currentImageNo+1}else{
|
||||||
var image = JSON.parse(obj);
|
var obj = JSON.parse(image);
|
||||||
print('storeData() for ' + JSON.stringify(obj));
|
print('storeData() for ' + JSON.stringify(obj));
|
||||||
try{sprite.destroy();}catch(e){}
|
// try{sprite.destroy();}catch(e){}
|
||||||
if (obj["link"]["0"]){var source=obj["link"]["0"]} else {var source=obj["link"]["4"]}//source for profile picture or original size
|
// if (obj["link"]["0"]){var source=obj["link"]["0"]} else {var source=obj["link"]["4"]}//source for profile picture or original size
|
||||||
print("Source"+obj["link"]["0"]+source)
|
// print("Source"+source);
|
||||||
obj["source"]=source;
|
obj["source"]=source;
|
||||||
var filename=obj.filename;
|
var filename=obj.filename;
|
||||||
if (filename==""){// check if file as any filename
|
if (filename==""){// check if file as any filename
|
||||||
|
@ -45,7 +45,7 @@ function dataRequest(login,photoID,database,rootwindow) {
|
||||||
}
|
}
|
||||||
print("obj.Filename: "+obj["filename"]+" filename: "+filename)
|
print("obj.Filename: "+obj["filename"]+" filename: "+filename)
|
||||||
}
|
}
|
||||||
saveImage(obj,login.imagestore,function(obj,sprite){
|
saveImage(obj,login.imagestore+'albums/'+obj.album,function(obj,sprite){
|
||||||
//sprite.destroy(500);
|
//sprite.destroy(500);
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
|
@ -53,9 +53,9 @@ function dataRequest(login,photoID,database,rootwindow) {
|
||||||
var result = tx.executeSql('SELECT * from imageData where id = "'+obj["id"]+'"');
|
var result = tx.executeSql('SELECT * from imageData where id = "'+obj["id"]+'"');
|
||||||
if(result.rows.length === 1) {// use update
|
if(result.rows.length === 1) {// use update
|
||||||
print(obj["id"] +' exists, update it')
|
print(obj["id"] +' exists, update it')
|
||||||
result = tx.executeSql('UPDATE imageData SET username ="' +login.username+ '",id="'+obj.id+'", created="'+obj.created+'", edited="'+obj.edited+'", profile="'+obj.profile+'", link="'+obj.source+'", 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+'" where id="'+obj["id"]+'"');
|
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')
|
} 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.source,'file://'+login.imagestore]);
|
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+"/"]);
|
||||||
print("Inserted");}
|
print("Inserted");}
|
||||||
})})}}
|
})})}}
|
||||||
catch (e){print("Data retrieval failure! "+ e+obj);}
|
catch (e){print("Data retrieval failure! "+ e+obj);}
|
||||||
|
@ -63,18 +63,17 @@ function dataRequest(login,photoID,database,rootwindow) {
|
||||||
|
|
||||||
function saveImage(obj,storagedirectory,callback) {
|
function saveImage(obj,storagedirectory,callback) {
|
||||||
// create image component from base64 code and save it
|
// create image component from base64 code and save it
|
||||||
print("Storing "+storagedirectory+obj.filename+obj.width+"x"+obj.height);
|
print("Storing "+storagedirectory+"/"+obj.filename+obj.width+"x"+obj.height);
|
||||||
var maxSize=Math.max(fotostab.width,fotostab.height);
|
var maxSize=Math.max(fotostab.width,fotostab.height);
|
||||||
var helpwidth=(obj.width<maxSize)?obj.width:maxSize;
|
var helpwidth=(obj.width<maxSize)?obj.width:maxSize;
|
||||||
var helpheight=(obj.height<maxSize)?obj.height:maxSize;
|
var helpheight=(obj.height<maxSize)?obj.height:maxSize;
|
||||||
|
|
||||||
if (obj.width>obj.height){ //landscape
|
if (obj.width>obj.height){ //landscape
|
||||||
helpheight=helpwidth*obj.height/obj.width
|
helpheight=helpwidth*obj.height/obj.width
|
||||||
} else { //portrait
|
} else { //portrait
|
||||||
helpwidth=helpheight*obj.width/obj.height
|
helpwidth=helpheight*obj.width/obj.height
|
||||||
}
|
}
|
||||||
var component=Qt.createComponent("qrc:/qml/PhotoPlaceholder.qml");
|
var component=Qt.createComponent("qrc:/qml/PhotoPlaceholder.qml");
|
||||||
var sprite = component.createObject(fotostab, {"x":0,"y":0,"imageName":storagedirectory+obj.filename ,"width":helpwidth,"height":helpheight,"source": obj.source,"downloadtype":"picture"});
|
var sprite = component.createObject(fotostab, {"x":0,"y":0,"imageName":storagedirectory+"/"+obj.filename ,"width":helpwidth,"height":helpheight,"source": obj["link"]["4"],"downloadtype":"picture"});
|
||||||
callback(obj,sprite)
|
callback(obj,sprite)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,8 +140,8 @@ function initDatabase(database) { // initialize the database object
|
||||||
print('... create table')
|
print('... create table')
|
||||||
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 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)');
|
tx.executeSql('CREATE TABLE IF NOT EXISTS config(server TEXT, username TEXT, password TEXT, imagestore TEXT, maxnews INT, timerInterval INT, newsViewType TEXT,isActive INT)');
|
||||||
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,like TEXT, dislike TEXT, attendyes TEXT,attendno TEXT, attendmaybe 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)');
|
||||||
tx.executeSql('CREATE TABLE IF NOT EXISTS contacts(username TEXT, id INT, name TEXT, screen_name TEXT, location TEXT,description TEXT, profile_image BLOB, url TEXT, protected TEXT, followers_count INT, friends_count INT, created_at TEXT, 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 contacts(username TEXT, id INT, name TEXT, screen_name TEXT, location TEXT,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)');
|
tx.executeSql('CREATE TABLE IF NOT EXISTS groups(username TEXT, groupname TEXT, gid INT, members TEXT)');
|
||||||
})}
|
})}
|
||||||
|
|
||||||
|
|
0
v0.002/Develop/source-android/qml/BlueButton.qml
Normal file
0
v0.002/Develop/source-android/qml/BlueButton.qml
Normal file
|
@ -187,7 +187,8 @@ onCurrentIndexChanged:{
|
||||||
if (errormessage=="") {
|
if (errormessage=="") {
|
||||||
filesystem.Directory=userconfig.imagestore;
|
filesystem.Directory=userconfig.imagestore;
|
||||||
filesystem.makeDir("contacts");
|
filesystem.makeDir("contacts");
|
||||||
Service.storeConfig(db,userconfig);
|
filesystem.makeDir("albums");
|
||||||
|
Service.storeConfig(db,userconfig);
|
||||||
Service.readConfig(db,function(userconfig){Service.getServerConfig(userconfig,configBackground, function(obj){
|
Service.readConfig(db,function(userconfig){Service.getServerConfig(userconfig,configBackground, function(obj){
|
||||||
var serverString=obj;
|
var serverString=obj;
|
||||||
var serverconfigObject=Qt.createQmlObject(serverString,configBackground,"serverconfigOutput");
|
var serverconfigObject=Qt.createQmlObject(serverString,configBackground,"serverconfigOutput");
|
||||||
|
@ -236,13 +237,14 @@ onCurrentIndexChanged:{
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
try{Helperjs.readData(db,"config",root.login.username,function(users){
|
try{print("get users");
|
||||||
|
Helperjs.readData(db,"config","",function(users){
|
||||||
users.sort(function(obj1, obj2) {
|
users.sort(function(obj1, obj2) {
|
||||||
return obj1.isActive - obj2.isActive;
|
return obj1.isActive - obj2.isActive;
|
||||||
});
|
});
|
||||||
for (var i=0; i<users.length;i++){
|
for (var i=0; i<users.length;i++){
|
||||||
if (users[i]) {usermodel.append({text:users[i].username});};
|
if (users[i]) {usermodel.append({text:users[i].username});};
|
||||||
};})}
|
}})}
|
||||||
catch (e){print(e)}
|
catch (e){print(e)}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
137
v0.002/Develop/source-android/qml/ContactComponent.qml
Normal file
137
v0.002/Develop/source-android/qml/ContactComponent.qml
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Controls 1.3
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: contactComponent
|
||||||
|
property var createdAtDate: new Date(contact.created_at)
|
||||||
|
property var linkUrl: contact.network!=="dfrn"?contact.url:contact.url.replace("profile","dfrn_request")
|
||||||
|
Rectangle {
|
||||||
|
id: wrapper
|
||||||
|
width: 16*mm
|
||||||
|
height: 15*mm
|
||||||
|
border.color: "grey"
|
||||||
|
color:"white"
|
||||||
|
Image {
|
||||||
|
id: photoImage
|
||||||
|
x:1
|
||||||
|
y:1
|
||||||
|
width: 10*mm
|
||||||
|
height:10*mm
|
||||||
|
source:(contact.isFriend==1)? "file://"+contact.profile_image :contact.profile_image_url
|
||||||
|
onStatusChanged: if (photoImage.status == Image.Error) {source="qrc:/images/defaultcontact.jpg"}
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: namelabel
|
||||||
|
x: 1
|
||||||
|
width: wrapper.width-4
|
||||||
|
height: 3*mm
|
||||||
|
text: contact.screen_name
|
||||||
|
elide:Text.ElideRight
|
||||||
|
anchors.topMargin: 0
|
||||||
|
anchors.left: photoImage.left
|
||||||
|
color: "#303030"
|
||||||
|
font.pixelSize: 3*mm
|
||||||
|
anchors.top: photoImage.bottom
|
||||||
|
}
|
||||||
|
Button{
|
||||||
|
id:infobutton
|
||||||
|
width: 5*mm
|
||||||
|
height: 5*mm
|
||||||
|
text:"?"
|
||||||
|
anchors.left: photoImage.right
|
||||||
|
anchors.leftMargin: 3
|
||||||
|
anchors.topMargin: 3
|
||||||
|
anchors.top: parent.top
|
||||||
|
onClicked:{
|
||||||
|
//print("State: "+ friendComponent.state);
|
||||||
|
contactComponent.state="large"}
|
||||||
|
}
|
||||||
|
Rectangle{
|
||||||
|
id: detailsrectangle
|
||||||
|
anchors.top: namelabel.bottom
|
||||||
|
anchors.topMargin: 2*mm
|
||||||
|
opacity: 0
|
||||||
|
|
||||||
|
Flickable{
|
||||||
|
id:namelabelflickable
|
||||||
|
width: root.width-10*mm
|
||||||
|
height:friendsTabView.height-55*mm
|
||||||
|
boundsBehavior:Flickable.StopAtBounds
|
||||||
|
flickableDirection:Flickable.VerticalFlick
|
||||||
|
contentWidth:width
|
||||||
|
contentHeight: namelabeltext.height
|
||||||
|
clip:true
|
||||||
|
Text{
|
||||||
|
id:namelabeltext
|
||||||
|
//anchors.top: parent.top
|
||||||
|
width: namelabelflickable.width
|
||||||
|
height: implicitHeight
|
||||||
|
font.pixelSize: 3*mm
|
||||||
|
textFormat:Text.RichText
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
text:"<b>"+qsTr("Description")+": </b> "+Qt.atob(contact.description)+"<br> <b>"+qsTr("Server Type")+":</b> "+contact.location+"<br> <b>"+qsTr("Posts")+":</b> "+contact.statuses_count+
|
||||||
|
"<br> <b>"+qsTr("URL")+":</b> <a href='"+ linkUrl+"'>"+linkUrl+"</a><br> <b>"+
|
||||||
|
qsTr("Created at")+":</b> "+createdAtDate.toLocaleString(Qt.locale())
|
||||||
|
onLinkActivated: {
|
||||||
|
Qt.openUrlExternally(link)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Row{
|
||||||
|
anchors.top: namelabelflickable.bottom
|
||||||
|
anchors.topMargin: 2*mm
|
||||||
|
spacing:4
|
||||||
|
|
||||||
|
Button{
|
||||||
|
id:photobutton
|
||||||
|
text:"Photos"
|
||||||
|
visible:contact.location=="Friendica"? 1:0
|
||||||
|
onClicked:{contactComponent.state="";
|
||||||
|
root.currentIndex=2;
|
||||||
|
fotostab.active=true;
|
||||||
|
root.fotoSignal(contact) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button{
|
||||||
|
id:messagebutton
|
||||||
|
text:"Messages"
|
||||||
|
onClicked:{contactComponent.state="";
|
||||||
|
root.currentIndex=0;
|
||||||
|
newstab.active=true;
|
||||||
|
root.messageSignal(contact.id) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button{
|
||||||
|
id:dmbutton
|
||||||
|
visible: contact.following=="true"?true:false
|
||||||
|
text: "DM"
|
||||||
|
onClicked:{contactComponent.state="";
|
||||||
|
root.currentIndex=0;
|
||||||
|
newstab.active=true;
|
||||||
|
root.directmessageSignal(contact.screen_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button{
|
||||||
|
id: closeButton
|
||||||
|
text: "close"
|
||||||
|
onClicked:{contactComponent.state=""}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
states: [
|
||||||
|
State {
|
||||||
|
name: "large"
|
||||||
|
PropertyChanges { target: namelabel; font.pixelSize: 4*mm; width:friendsTabView.width-4*mm; text:Qt.atob(contact.name)+" (@"+contact.screen_name+")"}
|
||||||
|
PropertyChanges { target: contactComponent; z: 2 }
|
||||||
|
PropertyChanges { target: wrapper; width:friendsTabView.width-3*mm;height:friendsTabView.height-20*mm}
|
||||||
|
PropertyChanges { target: photoImage; width:15*mm;height:15*mm }
|
||||||
|
PropertyChanges { target:contactComponent.GridView.view;contentY:contactComponent.y;contentX:contactComponent.x;interactive:false}
|
||||||
|
PropertyChanges { target: detailsrectangle; opacity:1 }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import QtQuick.Dialogs 1.2
|
import QtQuick.Dialogs 1.2
|
||||||
import QtQuick.Controls 1.2
|
import QtQuick.Controls 1.2
|
||||||
|
import QtQuick.Controls.Styles 1.4
|
||||||
import "qrc:/js/service.js" as Service
|
import "qrc:/js/service.js" as Service
|
||||||
import "qrc:/js/helper.js" as Helperjs
|
import "qrc:/js/helper.js" as Helperjs
|
||||||
import "qrc:/js/news.js" as Newsjs
|
import "qrc:/js/news.js" as Newsjs
|
||||||
|
@ -17,17 +18,35 @@ Rectangle {
|
||||||
tabPosition: Qt.TopEdge
|
tabPosition: Qt.TopEdge
|
||||||
x:mm
|
x:mm
|
||||||
y:mm
|
y:mm
|
||||||
width: root.width-5*mm
|
width: root.width-2*mm
|
||||||
height: root.height-10*mm
|
height: root.height-10*mm
|
||||||
currentIndex: 0
|
currentIndex: 0
|
||||||
signal friendsSignal(var username)
|
|
||||||
signal contactsSignal(var username)
|
signal contactsSignal(var username)
|
||||||
signal groupsSignal(var username)
|
signal groupsSignal(var username)
|
||||||
onCurrentIndexChanged:{
|
onCurrentIndexChanged:{
|
||||||
if (currentIndex==0){friendsSignal(root.login.username)}
|
if (currentIndex==0){root.friendsSignal(root.login.username)}
|
||||||
else if (currentIndex==1){contactsSignal(root.login.username)}
|
else if (currentIndex==1){contactsSignal(root.login.username)}
|
||||||
else if (currentIndex==2){groupsSignal(root.login.username)}
|
else if (currentIndex==2){groupsSignal(root.login.username)}
|
||||||
}
|
}
|
||||||
|
style: TabViewStyle {
|
||||||
|
frameOverlap: 1
|
||||||
|
tab: Rectangle {
|
||||||
|
color: "white"
|
||||||
|
//border.color: "light grey"
|
||||||
|
implicitWidth: root.width/3-2*mm
|
||||||
|
implicitHeight: 4*mm
|
||||||
|
Text { id: text
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: styleData.title
|
||||||
|
color: "dark grey"
|
||||||
|
font.pixelSize:2.5*mm
|
||||||
|
font.bold: styleData.selected
|
||||||
|
}
|
||||||
|
}
|
||||||
|
frame: Rectangle { color: "light grey" }
|
||||||
|
tabsAlignment:Qt.AlignHCenter
|
||||||
|
}
|
||||||
|
|
||||||
Tab{
|
Tab{
|
||||||
title: qsTr("Friends")
|
title: qsTr("Friends")
|
||||||
|
@ -35,15 +54,16 @@ Rectangle {
|
||||||
id: friendsGridTab
|
id: friendsGridTab
|
||||||
function showFriends(username){
|
function showFriends(username){
|
||||||
try {friendsModel.clear()} catch(e){print(e)};
|
try {friendsModel.clear()} catch(e){print(e)};
|
||||||
Helperjs.readData(db,"contacts",username,function(friends){
|
Helperjs.readData(db,"contacts",username,function(friendsobject){
|
||||||
for (var i=0;i<friends.length;i++){
|
for (var i=0;i<friendsobject.length;i++){
|
||||||
friendsModel.append({"friend":friends[i]});
|
friendsModel.append({"contact":friendsobject[i]});
|
||||||
}},"isFriend",1)
|
}},"isFriend",1)
|
||||||
}
|
}
|
||||||
Button {
|
Button {
|
||||||
id: updateFriendsButton
|
id: updateFriendsButton
|
||||||
text: qsTr("Update")
|
text: qsTr("Update")
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
|
anchors.topMargin: mm
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
onClicked: {
|
onClicked: {
|
||||||
try {friendsModel.clear()} catch(e){print(e)};
|
try {friendsModel.clear()} catch(e){print(e)};
|
||||||
|
@ -67,7 +87,7 @@ Rectangle {
|
||||||
GridView {
|
GridView {
|
||||||
id: friendsView
|
id: friendsView
|
||||||
x:mm
|
x:mm
|
||||||
y:updateFriendsButton.height+mm
|
y:updateFriendsButton.height+2*mm
|
||||||
width:friendsGridTab.width-2*mm
|
width:friendsGridTab.width-2*mm
|
||||||
height:friendsGridTab.height-updateFriendsButton.height-2*mm
|
height:friendsGridTab.height-updateFriendsButton.height-2*mm
|
||||||
clip: true
|
clip: true
|
||||||
|
@ -77,7 +97,7 @@ Rectangle {
|
||||||
NumberAnimation { properties: "x,y"; from: 300; duration: 1000 }
|
NumberAnimation { properties: "x,y"; from: 300; duration: 1000 }
|
||||||
}
|
}
|
||||||
model: friendsModel
|
model: friendsModel
|
||||||
delegate: FriendComponent { }
|
delegate: ContactComponent { }
|
||||||
}
|
}
|
||||||
|
|
||||||
ListModel{id:friendsModel}
|
ListModel{id:friendsModel}
|
||||||
|
@ -85,7 +105,7 @@ Rectangle {
|
||||||
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
friendsTabView.friendsSignal.connect(showFriends);
|
root.friendsSignal.connect(showFriends);
|
||||||
showFriends(root.login.username)
|
showFriends(root.login.username)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -98,16 +118,16 @@ Rectangle {
|
||||||
id: contactsGridTab
|
id: contactsGridTab
|
||||||
function showContacts(username){
|
function showContacts(username){
|
||||||
try {contactsModel.clear()} catch(e){print(e)};
|
try {contactsModel.clear()} catch(e){print(e)};
|
||||||
Helperjs.readData(db, "contacts",root.login.username,function(friendsobject){
|
Helperjs.readData(db, "contacts",root.login.username,function(contactsobject){
|
||||||
for (var j=0;j<friendsobject.length;j++){
|
for (var j=0;j<contactsobject.length;j++){
|
||||||
contactsModel.append({"friend":friendsobject[j]});
|
contactsModel.append({"contact":contactsobject[j]});
|
||||||
}
|
}
|
||||||
},"isFriend",0)}
|
},"isFriend",0)}
|
||||||
|
|
||||||
GridView {
|
GridView {
|
||||||
id: contactsView
|
id: contactsView
|
||||||
x:mm
|
x:mm
|
||||||
y:mm
|
y:2*mm
|
||||||
width:contactsGridTab.width-2*mm
|
width:contactsGridTab.width-2*mm
|
||||||
height:contactsGridTab.height-2*mm
|
height:contactsGridTab.height-2*mm
|
||||||
clip: true
|
clip: true
|
||||||
|
@ -117,7 +137,7 @@ Rectangle {
|
||||||
NumberAnimation { properties: "x,y"; from: 300; duration: 1000 }
|
NumberAnimation { properties: "x,y"; from: 300; duration: 1000 }
|
||||||
}
|
}
|
||||||
model: contactsModel
|
model: contactsModel
|
||||||
delegate: FriendComponent { }
|
delegate: ContactComponent { }
|
||||||
}
|
}
|
||||||
|
|
||||||
ListModel{id: contactsModel}
|
ListModel{id: contactsModel}
|
||||||
|
@ -132,7 +152,6 @@ Rectangle {
|
||||||
id: groupsGridTab
|
id: groupsGridTab
|
||||||
function showGroups(username){
|
function showGroups(username){
|
||||||
try {groupsModel.clear()} catch(e){print(e)};
|
try {groupsModel.clear()} catch(e){print(e)};
|
||||||
print("showGroups"+username);
|
|
||||||
Helperjs.readData(db, "groups",root.login.username,function(groupsobject){
|
Helperjs.readData(db, "groups",root.login.username,function(groupsobject){
|
||||||
for (var j=0;j<groupsobject.length;j++){
|
for (var j=0;j<groupsobject.length;j++){
|
||||||
groupsModel.append({"group":groupsobject[j]});
|
groupsModel.append({"group":groupsobject[j]});
|
||||||
|
@ -141,6 +160,7 @@ Rectangle {
|
||||||
id: updateGroupsButton
|
id: updateGroupsButton
|
||||||
text: qsTr("Update")
|
text: qsTr("Update")
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
|
anchors.topMargin: mm
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
onClicked: {
|
onClicked: {
|
||||||
print("Update groups");
|
print("Update groups");
|
||||||
|
@ -150,7 +170,7 @@ Rectangle {
|
||||||
GridView {
|
GridView {
|
||||||
id: groupsView
|
id: groupsView
|
||||||
x:mm
|
x:mm
|
||||||
y:updateGroupsButton.height+mm
|
y:updateGroupsButton.height+2*mm
|
||||||
width:groupsGridTab.width-2*mm
|
width:groupsGridTab.width-2*mm
|
||||||
height:groupsGridTab.height-updateGroupsButton.height-2*mm
|
height:groupsGridTab.height-updateGroupsButton.height-2*mm
|
||||||
clip: true
|
clip: true
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import QtQuick.Controls 1.3
|
import QtQuick.Controls 1.3
|
||||||
import "qrc:/js/service.js" as Service
|
import "qrc:/js/helper.js" as Helperjs
|
||||||
import "qrc:/js/layout.js" as Layoutjs
|
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: groupComponent
|
id: groupComponent
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: wrapper
|
id: wrapper
|
||||||
width: 16*mm
|
width: 16*mm
|
||||||
|
@ -13,6 +10,14 @@ import "qrc:/js/layout.js" as Layoutjs
|
||||||
border.color: "grey"
|
border.color: "grey"
|
||||||
color:"white"
|
color:"white"
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: photoImage
|
||||||
|
x:1
|
||||||
|
y:1
|
||||||
|
width: 10*mm
|
||||||
|
height:10*mm
|
||||||
|
source:"qrc:/images/defaultcontact.jpg"
|
||||||
|
}
|
||||||
Label {
|
Label {
|
||||||
id: namelabel
|
id: namelabel
|
||||||
x: 1
|
x: 1
|
||||||
|
@ -22,127 +27,92 @@ import "qrc:/js/layout.js" as Layoutjs
|
||||||
|
|
||||||
color: "#303030"
|
color: "#303030"
|
||||||
font.pixelSize: 3*mm
|
font.pixelSize: 3*mm
|
||||||
anchors.centerIn:parent
|
anchors.top: photoImage.bottom
|
||||||
}
|
}
|
||||||
Button{
|
Button{
|
||||||
id:infobutton
|
id:infobutton
|
||||||
width: 5*mm
|
width: 5*mm
|
||||||
height: 5*mm
|
height: 5*mm
|
||||||
text:"?"
|
text:"?"
|
||||||
anchors.top: namelabel.bottom;anchors.topMargin: 3
|
anchors.left: photoImage.right
|
||||||
|
anchors.leftMargin: 3
|
||||||
|
anchors.topMargin: 3
|
||||||
|
anchors.top: parent.top
|
||||||
onClicked:{
|
onClicked:{
|
||||||
print("State: "+ groupComponent.state+groupView.contentY);
|
Helperjs.readField("members",root.db,"groups",root.login.username,function(groups){
|
||||||
|
try {groupModel.clear()}catch (e){print(e)}
|
||||||
|
var groupmembers=JSON.parse(groups);
|
||||||
|
for (var user in groupmembers){
|
||||||
|
Helperjs.readData(root.db,"contacts",root.login.username,function(userdata){
|
||||||
|
groupModel.append({"groupmember":userdata[0]});
|
||||||
|
},"id",groupmembers[user])}
|
||||||
|
},"groupname",group.groupname);
|
||||||
groupComponent.state="large"}
|
groupComponent.state="large"}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Rectangle{
|
Rectangle{
|
||||||
id: detailsrectangle
|
id: detailsrectangle
|
||||||
anchors.top: infobutton.bottom
|
anchors.top: namelabel.bottom
|
||||||
anchors.topMargin: 2*mm
|
anchors.topMargin: 2*mm
|
||||||
opacity: 0
|
opacity: 0
|
||||||
|
|
||||||
Component { id:footerComponent
|
|
||||||
Rectangle{
|
|
||||||
border.color: "#EEEEEE"
|
|
||||||
border.width: 1
|
|
||||||
width:parent.width
|
|
||||||
height:6*mm
|
|
||||||
Text{
|
|
||||||
font.pixelSize: 3*mm
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text:qsTr("+")
|
|
||||||
}
|
|
||||||
MouseArea{anchors.fill:parent
|
|
||||||
onClicked:{var contactitems="";
|
|
||||||
readData(db,"contacts",root.login.username, function(contacts){for (var i=0;i<contacts.length;i++){
|
|
||||||
contactitems=contactitems+"MenuItem{text:'"+contacts[i].screen_name+"'; onTriggered: groupModel.append(' @"+contacts[i]+"')}"
|
|
||||||
}},"isFriend",0)
|
|
||||||
var menuString="import QtQuick.Controls 1.4; Menu {"+contactitems+"}";
|
|
||||||
print("menustring: "+menuString);
|
|
||||||
var contactlistObject=Qt.createQmlObject(menuString,messageSend,"contactmenuOutput");
|
|
||||||
contactlistObject.popup();
|
|
||||||
Newsjs.addToGroup
|
|
||||||
}}}}
|
|
||||||
|
|
||||||
Component { id:groupMember
|
Component { id:groupMember
|
||||||
Rectangle{
|
Rectangle{
|
||||||
border.color: "#EEEEEE"
|
border.color: "#EEEEEE"
|
||||||
border.width: 1
|
border.width: 1
|
||||||
width:parent.width
|
width:parent.width
|
||||||
height:6*mm
|
height:6*mm
|
||||||
|
Image {
|
||||||
|
id: memberImage
|
||||||
|
x:1
|
||||||
|
y:1
|
||||||
|
width: 5*mm
|
||||||
|
height:5*mm
|
||||||
|
source:(groupmember.isFriend==1)? "file://"+groupmember.profile_image :groupmember.profile_image_url
|
||||||
|
onStatusChanged: if (photoImage.status == Image.Error) {source="qrc:/images/defaultcontact.jpg"}
|
||||||
|
}
|
||||||
Text{
|
Text{
|
||||||
font.pixelSize: 3*mm
|
font.pixelSize: 3*mm
|
||||||
anchors.left: parent.left
|
anchors.left: memberImage.right
|
||||||
text:groupmember.screen_name
|
anchors.margins: 1*mm
|
||||||
|
text:Qt.atob(groupmember.name)
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
|
||||||
ListView{
|
ListView{
|
||||||
id:namelabeltext
|
id: groupListView
|
||||||
anchors.top: parent.top
|
x:1
|
||||||
|
//anchors.top: parent.top
|
||||||
width: root.width-10*mm
|
width: root.width-10*mm
|
||||||
height:wrapper.height-20*mm
|
height:groupsView.height -28*mm
|
||||||
clip: true
|
clip: true
|
||||||
spacing: 0
|
spacing: 2
|
||||||
footer: footerComponent
|
|
||||||
model: groupModel
|
model: groupModel
|
||||||
delegate: groupMember
|
delegate: groupMember
|
||||||
}
|
}
|
||||||
|
|
||||||
ListModel{id: groupModel}
|
ListModel{id: groupModel}
|
||||||
|
|
||||||
}
|
Button{
|
||||||
|
id: closeButton
|
||||||
Row{
|
anchors.top: groupListView.bottom
|
||||||
anchors.top: namelabeltext.bottom
|
x:1
|
||||||
anchors.topMargin: 2*mm
|
text: "close"
|
||||||
spacing:4
|
onClicked:{groupComponent.state=""}
|
||||||
|
|
||||||
Button{
|
|
||||||
id:photobutton
|
|
||||||
text:"Photos"
|
|
||||||
visible:friend.location=="Friendica"? 1:0
|
|
||||||
onClicked:{root.currentIndex=2;
|
|
||||||
fotostab.active=true;
|
|
||||||
root.fotoSignal(friend) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Button{
|
|
||||||
id:messagebutton
|
|
||||||
text:"Messages"
|
|
||||||
onClicked:{root.currentIndex=0;
|
|
||||||
newstab.active=true;
|
|
||||||
root.messageSignal(friend.id) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Button{id:dmbutton
|
|
||||||
visible: friend.following=="true"?true:false
|
|
||||||
text: "DM"
|
|
||||||
onClicked:{root.currentIndex=0;
|
|
||||||
newstab.active=true;
|
|
||||||
root.directmessageSignal(friend.screen_name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Button{
|
|
||||||
id: closeButton
|
|
||||||
text: "close"
|
|
||||||
onClicked:{friendComponent.state=""}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
states: [
|
states: [
|
||||||
State {
|
State {
|
||||||
name: "large"
|
name: "large"
|
||||||
PropertyChanges { target: namelabel; font.pixelSize: 4*mm; width:friendsView.width; text:Qt.atob(friend.name)+" (@"+friend.screen_name+")"}
|
PropertyChanges { target: namelabel; font.pixelSize: 4*mm; width:groupsView.width}
|
||||||
PropertyChanges { target: friendComponent; z: 2 }
|
PropertyChanges { target: groupComponent; z: 2 }
|
||||||
PropertyChanges { target: wrapper; width:friendsView.width;height:friendsView.height -2*mm-1}
|
PropertyChanges { target: wrapper; width:groupsView.width;height:groupsView.height -2*mm-1}
|
||||||
PropertyChanges { target: photoImage; width:15*mm;height:15*mm }
|
PropertyChanges { target: photoImage; width:15*mm;height:15*mm }
|
||||||
PropertyChanges { target:friendComponent.GridView.view ;contentY:friendComponent.y;contentX:friendComponent.x;interactive:false}
|
PropertyChanges { target:groupComponent.GridView.view ;contentY:groupComponent.y;contentX:groupComponent.x;interactive:false}
|
||||||
PropertyChanges { target: detailsrectangle; opacity:1 }
|
PropertyChanges { target: detailsrectangle; opacity:1 }
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ Rectangle{
|
||||||
Text{id:infoBoxText
|
Text{id:infoBoxText
|
||||||
textFormat: Text.RichText
|
textFormat: Text.RichText
|
||||||
wrapMode: Text.Wrap
|
wrapMode: Text.Wrap
|
||||||
text: "<b>Friendiqa v0.001 </b><br>Licensed under GPL 3<br> "+
|
text: "<b>Friendiqa v0.002 </b><br>Licensed under GPL 3<br> "+
|
||||||
"Sourcecode: <a href='https://github.com/LubuWest/Friendiqa'>https://github.com/LubuWest/Friendica</a><br>"+
|
"Sourcecode: <a href='https://github.com/LubuWest/Friendiqa'>https://github.com/LubuWest/Friendica</a><br>"+
|
||||||
"C++ code by <a href='https://kirgroup.com/profile/fabrixxm'>Fabio</a><br>"+
|
"C++ code by <a href='https://kirgroup.com/profile/fabrixxm'>Fabio</a><br>"+
|
||||||
"QML and Javascript code by <a href='https://freunde.ma-nic.de/profile/marco'>Marco</a>"
|
"QML and Javascript code by <a href='https://freunde.ma-nic.de/profile/marco'>Marco</a>"
|
||||||
|
|
|
@ -5,18 +5,22 @@ import QtQml 2.2
|
||||||
import QtQuick.Controls 1.3
|
import QtQuick.Controls 1.3
|
||||||
import QtQuick.Dialogs 1.2
|
import QtQuick.Dialogs 1.2
|
||||||
import QtQuick.LocalStorage 2.0
|
import QtQuick.LocalStorage 2.0
|
||||||
//import "../qml"
|
import "qrc:/js/helper.js" as Helperjs
|
||||||
import "qrc:/js/service.js" as Service
|
import "qrc:/js/service.js" as Servicejs
|
||||||
|
|
||||||
Item{
|
Item{
|
||||||
id:messageSend
|
id:messageSend
|
||||||
property var login
|
property var login
|
||||||
property string parentId: ""
|
property string parentId: ""
|
||||||
property string reply_to_user:""
|
property string reply_to_user:""
|
||||||
property string attachImageURL: "";
|
property string attachImageURL: "";
|
||||||
property int directmessage: 0;
|
property int directmessage: 0;
|
||||||
property var contacts: []
|
property var contacts: []
|
||||||
// title: parentId !== "" ? qsTr("Reply to "+reply_to_user) : qsTr("New post")
|
property var groups: []
|
||||||
|
property string contact_allow:""
|
||||||
|
property string contact_deny:""
|
||||||
|
property string group_allow:""
|
||||||
|
property string group_deny:""
|
||||||
|
|
||||||
function statusUpdate(title,status,in_reply_to_status_id,attachImageURL) {
|
function statusUpdate(title,status,in_reply_to_status_id,attachImageURL) {
|
||||||
xhr.url= login.server + "/api/statuses/update.xml";
|
xhr.url= login.server + "/api/statuses/update.xml";
|
||||||
|
@ -46,7 +50,7 @@ Item{
|
||||||
Column {
|
Column {
|
||||||
id:messageColumn
|
id:messageColumn
|
||||||
spacing: 2
|
spacing: 2
|
||||||
|
width: parent.width
|
||||||
TextField {
|
TextField {
|
||||||
id: titleField
|
id: titleField
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
@ -59,8 +63,13 @@ Item{
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: 30*mm
|
height: 30*mm
|
||||||
wrapMode: TextEdit.Wrap
|
wrapMode: TextEdit.Wrap
|
||||||
|
textFormat: TextEdit.RichText
|
||||||
}
|
}
|
||||||
CheckBox{
|
|
||||||
|
Row{
|
||||||
|
|
||||||
|
spacing: 2
|
||||||
|
CheckBox{
|
||||||
id:dmCheckbox
|
id:dmCheckbox
|
||||||
text:"DM"
|
text:"DM"
|
||||||
enabled: false
|
enabled: false
|
||||||
|
@ -70,18 +79,59 @@ CheckBox{
|
||||||
else if(dmCheckbox.checkedState==Qt.Unchecked){directmessage=0}
|
else if(dmCheckbox.checkedState==Qt.Unchecked){directmessage=0}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Button{
|
||||||
|
text:qsTr("Url")
|
||||||
|
onClicked: {
|
||||||
|
if(bodyField.selectedText==""){Helperjs.showMessage("Error","No text selected",messageSend)}
|
||||||
|
else{urlTextEdit.text="";
|
||||||
|
urlRectangle.visible=true}}
|
||||||
|
}
|
||||||
|
Rectangle{
|
||||||
|
id:urlRectangle
|
||||||
|
height:parent.height
|
||||||
|
width:37*mm
|
||||||
|
visible:false
|
||||||
|
TextField{
|
||||||
|
id:urlTextEdit
|
||||||
|
width:30*mm
|
||||||
|
height:parent.height
|
||||||
|
}
|
||||||
|
Button{
|
||||||
|
anchors.left:urlTextEdit.right
|
||||||
|
anchors.leftMargin:mm
|
||||||
|
text:qsTr("\u2713")
|
||||||
|
onClicked: {
|
||||||
|
var start = bodyField.selectionStart;
|
||||||
|
var end = bodyField.selectionEnd;
|
||||||
|
var text = bodyField.getText(start,end);
|
||||||
|
text = "<a href='"+urlTextEdit.text+"'>" + text + "</a>";
|
||||||
|
bodyField.remove(start,end);
|
||||||
|
bodyField.insert(start,text);
|
||||||
|
urlRectangle.visible=false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Row{
|
Row{
|
||||||
spacing:2
|
spacing:2
|
||||||
Button {
|
Button{
|
||||||
id: cancelButton
|
text:qsTr("Permissions")
|
||||||
text: qsTr("Cancel")
|
onClicked: {
|
||||||
onClicked: {newsStack.pop()}
|
var component = Qt.createComponent("qrc:/qml/PermissionDialog.qml");
|
||||||
}
|
var sprite = component.createObject(messageColumn);
|
||||||
|
if (sprite == null) { // Error Handling
|
||||||
|
console.log("Error creating object"); }
|
||||||
|
}}
|
||||||
Button {
|
Button {
|
||||||
id: attachButton
|
id: attachButton
|
||||||
text: qsTr("Attach")
|
text: qsTr("Attach")
|
||||||
onClicked: {imageAttachmentDialog.open()}
|
onClicked: {
|
||||||
|
try{imageAttachment.visible=false;
|
||||||
|
imageAttachment.opacity=0;imageAttachment.destroy()}catch(e){}
|
||||||
|
imageAttachmentDialog.open()}
|
||||||
}
|
}
|
||||||
Button{
|
Button{
|
||||||
id:contactButton
|
id:contactButton
|
||||||
|
@ -90,43 +140,49 @@ CheckBox{
|
||||||
onClicked:{
|
onClicked:{
|
||||||
var contactitems="";
|
var contactitems="";
|
||||||
for (var i=0;i<contacts.length;i++){
|
for (var i=0;i<contacts.length;i++){
|
||||||
contactitems=contactitems+"MenuItem{text:'"+contacts[i]+"'; onTriggered: bodyField.append(' @"+contacts[i]+"')}"
|
contactitems=contactitems+"MenuItem{text:'"+contacts[i].screen_name+"'; onTriggered: bodyField.append(' @"+contacts[i].screen_name+"')}"
|
||||||
}
|
}
|
||||||
var menuString="import QtQuick.Controls 1.4; Menu {"+contactitems+"}";
|
var menuString="import QtQuick.Controls 1.4; Menu {"+contactitems+"}";
|
||||||
// print(menuString);
|
|
||||||
var contactlistObject=Qt.createQmlObject(menuString,messageSend,"contactmenuOutput")
|
var contactlistObject=Qt.createQmlObject(menuString,messageSend,"contactmenuOutput")
|
||||||
contactlistObject.popup() }
|
contactlistObject.popup() }
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
|
||||||
id: sendButton
|
|
||||||
text: qsTr("Send")
|
|
||||||
onClicked: {
|
|
||||||
print("login: "+login.server+login.username);
|
|
||||||
if (directmessage==0){
|
|
||||||
statusUpdate(titleField.text,bodyField.text,messageSend.parentId,attachImageURL.toString());}
|
|
||||||
else {dmUpdate( titleField.text,bodyField.text,"",messageSend.reply_to_user) }
|
|
||||||
newsStack.pop()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
Row{
|
||||||
|
spacing:2
|
||||||
|
Button {
|
||||||
|
id: cancelButton
|
||||||
|
text: qsTr("Cancel")
|
||||||
|
onClicked: {newsStack.pop()}
|
||||||
|
}
|
||||||
|
Button {
|
||||||
|
id: sendButton
|
||||||
|
text: qsTr("Send")
|
||||||
|
onClicked: {
|
||||||
|
//print("login: "+login.server+login.username);
|
||||||
|
var title=titleField.text.replace("\"","\'");
|
||||||
|
var body=bodyField.getText(0,bodyField.length);
|
||||||
|
if (directmessage==0){
|
||||||
|
statusUpdate(title,body,messageSend.parentId,attachImageURL.toString())}
|
||||||
|
else {dmUpdate( title,body,"",messageSend.reply_to_user) }
|
||||||
|
newsStack.pop()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FileDialog {
|
FileDialog {
|
||||||
id: imageAttachmentDialog
|
id: imageAttachmentDialog
|
||||||
title: "Please choose a picture"
|
title: "Please choose a picture"
|
||||||
folder: shortcuts.pictures
|
folder: shortcuts.pictures
|
||||||
selectFolder: false
|
selectFolder: false
|
||||||
onAccepted: {
|
onAccepted: {
|
||||||
attachImageURL=imageAttachmentDialog.fileUrl;
|
attachImageURL=imageAttachmentDialog.fileUrl;
|
||||||
var imageAttachementObject=Qt.createQmlObject('import QtQuick 2.0; Image {source:"'+attachImageURL.toString()+'"; width: 30*mm; height: 30*mm;fillMode: Image.PreserveAspectFit}',messageColumn,"attachedImage");
|
var imageAttachmentObject=Qt.createQmlObject('import QtQuick 2.0; Image {id:imageAttachment;source:"'+attachImageURL.toString()+'"; width: 15*mm; height: 15*mm;fillMode: Image.PreserveAspectFit}',messageColumn,"attachedImage");
|
||||||
console.log("You chose: " + attachImageURL)
|
//console.log("You chose: " + attachImageURL)
|
||||||
|
|
||||||
}
|
}
|
||||||
onRejected: {
|
onRejected: {
|
||||||
console.log("Canceled")
|
//console.log("Canceled")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ Item {
|
||||||
}
|
}
|
||||||
|
|
||||||
function onDirectMessage(friend){
|
function onDirectMessage(friend){
|
||||||
|
print(root.login.server);
|
||||||
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"reply_to_user": friend,"directmessage":1,"login":root.login}});
|
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"reply_to_user": friend,"directmessage":1,"login":root.login}});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,13 +52,43 @@ Item {
|
||||||
width:root.width-2*mm
|
width:root.width-2*mm
|
||||||
height:root.height-8*mm
|
height:root.height-8*mm
|
||||||
|
|
||||||
|
ComboBox{
|
||||||
|
y:mm
|
||||||
|
width: 8*mm
|
||||||
|
model: ListModel{
|
||||||
|
id: cbModel
|
||||||
|
ListElement{text: qsTr("News")}
|
||||||
|
ListElement{text: qsTr("Favorites")}
|
||||||
|
}
|
||||||
|
onCurrentIndexChanged:{
|
||||||
|
if (currentIndex==0){newsModel.clear();
|
||||||
|
Newsjs.newsfromdb(root.db,root.login.username, function(dbnews){
|
||||||
|
showNews(dbnews)
|
||||||
|
})}
|
||||||
|
else if (currentIndex==1){
|
||||||
|
newsBusy.running=true;
|
||||||
|
Newsjs.requestFavorites(root.login,db,root,function(news){
|
||||||
|
JSON.stringify("Favorites: "+news);
|
||||||
|
Newsjs.storeNews(root.login,root.db,news,root,function(){
|
||||||
|
Newsjs.favoritesfromdb(db,root.login.username,function(newsarray){
|
||||||
|
JSON.stringify("FavoritesArray: "+newsarray);showNews(newsarray)
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
)})
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
id: newMessageButton
|
id: newMessageButton
|
||||||
text: qsTr("+")
|
text: qsTr("+")
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
onClicked: {
|
onClicked: {
|
||||||
Helperjs.readField("screen_name",root.db,"contacts",root.login.username,function(friends){
|
var groups=[];
|
||||||
|
Helperjs.readData(root.db,"groups",root.login.username,function(groupobject){
|
||||||
|
groups=groupobject});
|
||||||
|
Helperjs.readData(root.db,"contacts",root.login.username,function(friends){
|
||||||
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"contacts": friends,"login":root.login}})
|
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"contacts": friends,"login":root.login}})
|
||||||
},"isFriend",1);
|
},"isFriend",1);
|
||||||
}
|
}
|
||||||
|
@ -150,6 +181,6 @@ Item {
|
||||||
showNews(dbnews)
|
showNews(dbnews)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,15 +3,13 @@ import QtQuick.LocalStorage 2.0
|
||||||
import QtQuick.Controls 1.4
|
import QtQuick.Controls 1.4
|
||||||
import QtQuick.Controls.Styles 1.4
|
import QtQuick.Controls.Styles 1.4
|
||||||
import "qrc:/js/news.js" as Newsjs
|
import "qrc:/js/news.js" as Newsjs
|
||||||
import "qrc:/js/layout.js" as Layoutjs
|
|
||||||
|
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: newsitem
|
id: newsitem
|
||||||
width: newsView.width
|
width: newsView.width
|
||||||
height:Math.max((itemMessage.height+createdAtLabel.height+friendicaActivities.height+4*mm),profileImage.height+user_name.height+mm)
|
height:Math.max((itemMessage.height+topFlow.height+friendicaActivities.height+4*mm),profileImage.height+user_name.height+mm)
|
||||||
|
|
||||||
// property var friendica_activities
|
|
||||||
property string conversation_id: ""
|
property string conversation_id: ""
|
||||||
property string attending: ""
|
property string attending: ""
|
||||||
onAttendingChanged: {attendLabel.visible=true;
|
onAttendingChanged: {attendLabel.visible=true;
|
||||||
|
@ -23,7 +21,7 @@ Item {
|
||||||
Rectangle{
|
Rectangle{
|
||||||
width:newsitem.width
|
width:newsitem.width
|
||||||
height:newsitem.height-1
|
height:newsitem.height-1
|
||||||
color: (newsitemobject.directmessage)?"#ffe6e6" : "white"
|
color: (newsitemobject.messagetype==1)?"#ffe6e6" : "white"
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: authorcolumn
|
id: authorcolumn
|
||||||
|
@ -31,7 +29,7 @@ Item {
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id:profileImage
|
id:profileImage
|
||||||
source: "file://"+newsitemobject.user.profile_image
|
source:(newsitemobject.user.isFriend==1)? "file://"+newsitemobject.user.profile_image : newsitemobject.user.profile_image_url
|
||||||
x:1
|
x:1
|
||||||
width: 7*mm
|
width: 7*mm
|
||||||
height: 7*mm
|
height: 7*mm
|
||||||
|
@ -53,10 +51,13 @@ Item {
|
||||||
}
|
}
|
||||||
Column {
|
Column {
|
||||||
id:newscolumn
|
id:newscolumn
|
||||||
|
width: newsitem.width-8*mm
|
||||||
anchors.left: authorcolumn.right
|
anchors.left: authorcolumn.right
|
||||||
|
|
||||||
Row{
|
Flow{
|
||||||
spacing: 5*mm
|
id:topFlow
|
||||||
|
spacing: 2*mm
|
||||||
|
width:parent.width
|
||||||
Label {
|
Label {
|
||||||
color: "grey"
|
color: "grey"
|
||||||
text: if (newsitemobject.messagetype==0){qsTr("Source: ")+newsitemobject.source
|
text: if (newsitemobject.messagetype==0){qsTr("Source: ")+newsitemobject.source
|
||||||
|
@ -66,9 +67,9 @@ Item {
|
||||||
Label {
|
Label {
|
||||||
id:createdAtLabel
|
id:createdAtLabel
|
||||||
color: "grey"
|
color: "grey"
|
||||||
height:3.5*mm
|
height:3.5*mm
|
||||||
font.pixelSize: 1.5*mm
|
font.pixelSize: 1.5*mm
|
||||||
horizontalAlignment: Label.AlignRight
|
horizontalAlignment: Label.AlignRight
|
||||||
text: dateDiff
|
text: dateDiff
|
||||||
}
|
}
|
||||||
CheckBox {
|
CheckBox {
|
||||||
|
@ -104,8 +105,53 @@ Item {
|
||||||
{Newsjs.favorite(login,false,newsitemobject.status_id,root)}
|
{Newsjs.favorite(login,false,newsitemobject.status_id,root)}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Rectangle{
|
||||||
|
width: 4*mm
|
||||||
|
height: 3*mm
|
||||||
|
Text{
|
||||||
|
id:newsmenusymbol
|
||||||
|
color: "grey"
|
||||||
|
anchors.centerIn: parent
|
||||||
|
font.pixelSize: 2*mm
|
||||||
|
font.bold: true
|
||||||
|
text: "\u22EE"
|
||||||
|
}
|
||||||
|
MouseArea{
|
||||||
|
anchors.fill:parent
|
||||||
|
onClicked: {newsmenu.popup()}}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rectangle{
|
||||||
|
width: 4*mm
|
||||||
|
height: 3*mm
|
||||||
|
Text{
|
||||||
|
id:conversationsymbol
|
||||||
|
color: "grey"
|
||||||
|
anchors.centerIn: parent
|
||||||
|
font.pixelSize: 2*mm
|
||||||
|
text: "\u21C4"
|
||||||
|
}
|
||||||
|
MouseArea{
|
||||||
|
anchors.fill:parent
|
||||||
|
onClicked: {
|
||||||
|
newsBusy.running=true;
|
||||||
|
Newsjs.requestConversation(root.login,db,newsitemobject.status_id,root.contactlist,root,function(news,newContacts){
|
||||||
|
for (var i=0;i<newContacts.length;i++){
|
||||||
|
root.updateContactInDB(root.login,root.db,0,newContacts[i])
|
||||||
|
}
|
||||||
|
Newsjs.storeNews(root.login,root.db,news,root,function(){
|
||||||
|
var currentTime= new Date();
|
||||||
|
Newsjs.conversationfromdb(db,root.login.username,newsitemobject.statusnet_conversation_id, function(newsarray){
|
||||||
|
newsModel.clear();
|
||||||
|
var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsarray,'latestmessage':0};
|
||||||
|
newsWorker.sendMessage(msg);
|
||||||
|
newsBusy.running=false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
)})
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
color: "#404040"
|
color: "#404040"
|
||||||
|
@ -116,10 +162,10 @@ Item {
|
||||||
width: newsitem.width-8*mm-2
|
width: newsitem.width-8*mm-2
|
||||||
height: implicitHeight
|
height: implicitHeight
|
||||||
wrapMode: Text.Wrap
|
wrapMode: Text.Wrap
|
||||||
onLinkActivated:{ print("link "+link);
|
onLinkActivated:{
|
||||||
Qt.openUrlExternally(link)}
|
Qt.openUrlExternally(link)}
|
||||||
}
|
}
|
||||||
Row{id: friendicaActivities
|
Row{id:friendicaActivities
|
||||||
spacing:mm
|
spacing:mm
|
||||||
Label{color: "grey"
|
Label{color: "grey"
|
||||||
font.pixelSize: 1.5*mm
|
font.pixelSize: 1.5*mm
|
||||||
|
@ -141,13 +187,13 @@ Item {
|
||||||
font.pixelSize: 1.5*mm
|
font.pixelSize: 1.5*mm
|
||||||
text: friendica_activities.attendmaybeText
|
text: friendica_activities.attendmaybeText
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Row {
|
Row {
|
||||||
CheckBox{id:likeCheckbox
|
CheckBox{id:likeCheckbox
|
||||||
height:3*mm
|
height:3*mm
|
||||||
width:8*mm
|
width:8*mm
|
||||||
checked:(newsitemobject.liked==1)?true:false
|
checked:(friendica_activities.self.liked)?true:false
|
||||||
style: CheckBoxStyle {
|
style: CheckBoxStyle {
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
implicitWidth: 7*mm
|
implicitWidth: 7*mm
|
||||||
implicitHeight: 3*mm
|
implicitHeight: 3*mm
|
||||||
|
@ -170,11 +216,11 @@ Row {
|
||||||
else{Newsjs.like(root.login,root.db,0,"like",newsitemobject.status_id,root)}}
|
else{Newsjs.like(root.login,root.db,0,"like",newsitemobject.status_id,root)}}
|
||||||
}
|
}
|
||||||
CheckBox{id: dislikeCheckbox
|
CheckBox{id: dislikeCheckbox
|
||||||
height:3*mm
|
height:3*mm
|
||||||
width:8*mm
|
width:8*mm
|
||||||
checked: (newsitemobject.disliked==1)?true:false
|
checked: (friendica_activities.self.disliked)?true:false
|
||||||
style: CheckBoxStyle {
|
style: CheckBoxStyle {
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
implicitWidth: 7*mm
|
implicitWidth: 7*mm
|
||||||
implicitHeight:3*mm
|
implicitHeight:3*mm
|
||||||
color:"white"
|
color:"white"
|
||||||
|
@ -211,7 +257,7 @@ Row {
|
||||||
height:3.5*mm
|
height:3.5*mm
|
||||||
font.pixelSize: 1.5*mm
|
font.pixelSize: 1.5*mm
|
||||||
horizontalAlignment: Label.AlignRight
|
horizontalAlignment: Label.AlignRight
|
||||||
text: qsTr("attending: ")+ qsTr(attending)
|
text: (friendica_activities.self.attending)?qsTr("attending: ")+ qsTr(attending):""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -221,10 +267,10 @@ Row {
|
||||||
MenuItem {
|
MenuItem {
|
||||||
text: qsTr("Reply")
|
text: qsTr("Reply")
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"reply_to_user": newsitemobject.user.screen_name,"parentId":newsitemobject.status_id}});
|
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"reply_to_user": newsitemobject.user.screen_name,"parentId":newsitemobject.status_id,"login":root.login}});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MenuItem {
|
MenuItem {
|
||||||
text: qsTr("DM")
|
text: qsTr("DM")
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
root.directmessageSignal(newsitemobject.user.screen_name);
|
root.directmessageSignal(newsitemobject.user.screen_name);
|
||||||
|
@ -241,16 +287,20 @@ MenuItem {
|
||||||
MenuItem {
|
MenuItem {
|
||||||
text: qsTr("Conversation")
|
text: qsTr("Conversation")
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
Newsjs.requestConversation(root.login,db,newsitemobject.status_id,root,function(){
|
Newsjs.requestConversation(root.login,db,newsitemobject.status_id,root.contactlist,root,function(news,newContacts){
|
||||||
var currentTime= new Date();
|
for (var i=0;i<newContacts.length;i++){
|
||||||
Newsjs.conversationfromdb(db,root.login.username,newsitemobject.statusnet_conversation_id, function(newsarray){
|
root.updateContactInDB(root.login,root.db,0,newContacts[i])
|
||||||
|
}
|
||||||
|
Newsjs.storeNews(root.login,root.db,news,root,function(){
|
||||||
|
var currentTime= new Date();
|
||||||
|
Newsjs.conversationfromdb(db,root.login.username,newsitemobject.statusnet_conversation_id, function(newsarray){
|
||||||
newsModel.clear();
|
newsModel.clear();
|
||||||
var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsarray,'latestmessage':0};
|
var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsarray,'latestmessage':0};
|
||||||
newsWorker.sendMessage(msg);
|
newsWorker.sendMessage(msg);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
)}
|
)})
|
||||||
}
|
}}
|
||||||
|
|
||||||
Menu{
|
Menu{
|
||||||
title: qsTr("Attending")
|
title: qsTr("Attending")
|
||||||
|
@ -275,8 +325,8 @@ Menu{
|
||||||
MenuItem {
|
MenuItem {
|
||||||
text: qsTr("Delete")
|
text: qsTr("Delete")
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
Newsjs.deleteNews(root.login,db,newsitemobject.status_id,root,function(reply){
|
Newsjs.deleteNews(root.login,root.db,newsitemobject.status_id,root,function(reply){
|
||||||
print(JSON.stringify(reply));
|
print("Deleted "+reply);
|
||||||
newsModel.remove(index);
|
newsModel.remove(index);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
126
v0.002/Develop/source-android/qml/PermissionDialog.qml
Normal file
126
v0.002/Develop/source-android/qml/PermissionDialog.qml
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Dialogs 1.2
|
||||||
|
import QtQuick.Controls 1.4
|
||||||
|
import QtQml.Models 2.1
|
||||||
|
import "qrc:/js/service.js" as Service
|
||||||
|
import "qrc:/js/helper.js" as Helperjs
|
||||||
|
|
||||||
|
Rectangle{
|
||||||
|
id:permissionDialog
|
||||||
|
width: 80*mm
|
||||||
|
height:root.height/3
|
||||||
|
|
||||||
|
Text{
|
||||||
|
x:0.5*mm
|
||||||
|
y:0.5*mm
|
||||||
|
text: "Contacts"
|
||||||
|
}
|
||||||
|
ListView {
|
||||||
|
id: contactView
|
||||||
|
x:0.5*mm
|
||||||
|
y:5.5*mm
|
||||||
|
width: 39*mm
|
||||||
|
height:permissionDialog.height-14*mm
|
||||||
|
clip: true
|
||||||
|
spacing: 0
|
||||||
|
model: contactModel
|
||||||
|
delegate: contactItem
|
||||||
|
}
|
||||||
|
|
||||||
|
ListModel{id: contactModel}
|
||||||
|
Component{
|
||||||
|
id:contactItem
|
||||||
|
|
||||||
|
Rectangle{
|
||||||
|
id:contactitemRect
|
||||||
|
width:contactView.width
|
||||||
|
height: 5*mm
|
||||||
|
property string contactstatus:""
|
||||||
|
color: "light blue"
|
||||||
|
border.color:"grey"
|
||||||
|
Text{
|
||||||
|
color:"grey"
|
||||||
|
text:contact.screen_name
|
||||||
|
}
|
||||||
|
onContactstatusChanged:
|
||||||
|
{ if(contactstatus=="positive"){contactsitemRect.color="green"} else if (contactstatus=="negative"){contactsitemRect.color= "red"} else{contactsitemRect.color= "white"}}
|
||||||
|
MouseArea{
|
||||||
|
anchors.fill: parent}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Text{
|
||||||
|
x:20*mm
|
||||||
|
y:0.5*mm
|
||||||
|
text: "Groups"
|
||||||
|
}
|
||||||
|
ListView {
|
||||||
|
id: groupView
|
||||||
|
x:20*mm
|
||||||
|
y:5.5*mm
|
||||||
|
width: 19*mm
|
||||||
|
height:permissionDialog-8*mm
|
||||||
|
clip: true
|
||||||
|
spacing: 0
|
||||||
|
model: groupModel
|
||||||
|
delegate: groupItem
|
||||||
|
}
|
||||||
|
|
||||||
|
ListModel{id: groupModel}
|
||||||
|
Component{
|
||||||
|
id:groupItem
|
||||||
|
|
||||||
|
Rectangle{
|
||||||
|
id:groupitemRect
|
||||||
|
width:groupView.width
|
||||||
|
height: 5*mm
|
||||||
|
property string groupstatus:""
|
||||||
|
color: "white"
|
||||||
|
border.color:"grey"
|
||||||
|
Text{
|
||||||
|
color:"grey"
|
||||||
|
text:group.groupname
|
||||||
|
}
|
||||||
|
onGroupstatusChanged:
|
||||||
|
{ if(groupstatus=="positive"){groupitemRect.color="green"} else if (groupstatus=="negative"){groupitemRect.color= "red"} else{groupitemRect.color= "white"}}
|
||||||
|
MouseArea{
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked:{
|
||||||
|
if(groupModel.get(index).groupstatus=="neutral"){
|
||||||
|
groupModel.setProperty(index,"groupstatus","positive")}
|
||||||
|
else if (groupModel.get(index).groupstatus=="positive"){
|
||||||
|
groupModel.setProperty(index,"groupstatus","negative")}
|
||||||
|
else{groupModel.setProperty(index,"groupstatus","neutral")}
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button{
|
||||||
|
anchors.horizontalCenter: parent.hoizontalCenter
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.bottomMargin:1
|
||||||
|
text:qsTr("Done")
|
||||||
|
onClicked:{var group_allow=[];
|
||||||
|
for (var i=0;i<groupModel.count;i++)
|
||||||
|
{if (groupModel.get(i).groupstatus=="positive"){
|
||||||
|
group_allow.append(groupModel.get(i).groupname)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print("groups"+JSON.stringify(group_allow))
|
||||||
|
permissionDialog.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted:{
|
||||||
|
print("permissiondialog completed");
|
||||||
|
Helperjs.readData(db,"contacts",login.username,function(contacts){
|
||||||
|
for (var name in contacts){
|
||||||
|
print("contact: "+JSON.stringify(contacts[name]));
|
||||||
|
contactModel.append({"contact":contacts[name]})
|
||||||
|
}},"isFriend",1);
|
||||||
|
|
||||||
|
Helperjs.readData(db,"groups",login.username,function(owngroups){
|
||||||
|
for (var number in owngroups){
|
||||||
|
groupModel.append({"group":owngroup[number]})
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,17 +18,42 @@ Rectangle {
|
||||||
// photoWorker.sendMessage(msg);
|
// photoWorker.sendMessage(msg);
|
||||||
//}
|
//}
|
||||||
onNewImagesChanged:{
|
onNewImagesChanged:{
|
||||||
|
Helperjs.readField("album",root.db,"imageData",root.login.username,function(albums){
|
||||||
|
//print("albums"+JSON.stringify(albums)+JSON.stringify(newImages[currentImageNo]));
|
||||||
|
if(albums.indexOf(newImages[currentImageNo].album)==-1){
|
||||||
|
filesystem.Directory=root.login.imagestore+"/albums";
|
||||||
|
filesystem.makeDir(newImages[currentImageNo].album);}
|
||||||
|
});
|
||||||
if(newImages.length>0){
|
if(newImages.length>0){
|
||||||
|
print("Current image number"+currentImageNo)
|
||||||
Service.dataRequest(root.login,newImages[currentImageNo].id,root.db,fotorectangle);
|
Service.dataRequest(root.login,newImages[currentImageNo].id,root.db,fotorectangle);
|
||||||
newImagesProgress.visible=true //download first image
|
newImagesProgress.visible=true //download first image
|
||||||
}}
|
}}
|
||||||
|
|
||||||
onCurrentImageNoChanged:{
|
onCurrentImageNoChanged:{
|
||||||
if(currentImageNo<newImages.length){Service.dataRequest(root.login,newImages[currentImageNo].id,root.db,fotorectangle)};
|
if(currentImageNo<newImages.length){Service.dataRequest(root.login,newImages[currentImageNo].id,root.db,fotorectangle)};
|
||||||
if(currentImageNo==newImages.length){newImagesProgress.visible=false;showOwnFotos();
|
if(currentImageNo==newImages.length){newImagesProgress.visible=false;showOwnFotos();
|
||||||
newImages=[];currentImageNo=0}
|
newImages=[];currentImageNo=0}
|
||||||
// download next image if photoplaceholder is finished saving
|
// download next image if photoplaceholder is finished saving
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showOwnFotos(){
|
||||||
|
try {photogroupModel.clear()}catch (e){print(e)}
|
||||||
|
Helperjs.readField("album",root.db, "imageData",root.login.username,function(albums){
|
||||||
|
if (albums[0]) {
|
||||||
|
var msg = { 'model': photogroupModel,'albums':albums,'firstalbum':0,'foreignPicture': false};
|
||||||
|
photoWorker.sendMessage(msg);
|
||||||
|
};
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function onFriendsFotos(friend){print("Friend "+friend.url);
|
||||||
|
try {photogroupModel.clear()}catch (e){print(e)}
|
||||||
|
Service.requestFriendsAlbumPictures(friend,fotostab,function(albums){
|
||||||
|
var msg = {'model': photogroupModel,'albums':albums,'firstalbum':0,'foreignPicture':true};
|
||||||
|
photoWorker.sendMessage(msg);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
ProgressBar{
|
ProgressBar{
|
||||||
id: newImagesProgress
|
id: newImagesProgress
|
||||||
|
@ -118,23 +143,5 @@ Button {
|
||||||
ListView {anchors.fill: parent; model: visualphotoModel.parts.fullscreen; interactive: false }
|
ListView {anchors.fill: parent; model: visualphotoModel.parts.fullscreen; interactive: false }
|
||||||
WorkerScript{id: photoWorker;source: "qrc:/js/photoworker.js"}
|
WorkerScript{id: photoWorker;source: "qrc:/js/photoworker.js"}
|
||||||
|
|
||||||
function showOwnFotos(){
|
Component.onCompleted: { root.fotoSignal.connect(onFriendsFotos);}
|
||||||
try {photogroupModel.clear()}catch (e){print(e)}
|
|
||||||
Helperjs.readField("album",root.db, "imageData",root.login.username,function(albums){
|
|
||||||
if (albums[0]) {
|
|
||||||
var msg = { 'model': photogroupModel,'albums':albums,'firstalbum':0,'foreignPicture': false};
|
|
||||||
photoWorker.sendMessage(msg);
|
|
||||||
};
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function onFriendsFotos(friend){print("Friend "+friend.url);
|
|
||||||
try {photogroupModel.clear()}catch (e){print(e)}
|
|
||||||
Service.requestFriendsAlbumPictures(friend,fotostab,function(albums){
|
|
||||||
var msg = {'model': photogroupModel,'albums':albums,'firstalbum':0,'foreignPicture':true};
|
|
||||||
photoWorker.sendMessage(msg);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: { root.fotoSignal.connect(onFriendsFotos);}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ import QtQuick.LocalStorage 2.0
|
||||||
import QtQuick.Window 2.0
|
import QtQuick.Window 2.0
|
||||||
import QtQuick.Dialogs 1.2
|
import QtQuick.Dialogs 1.2
|
||||||
import QtQuick.Controls 1.2
|
import QtQuick.Controls 1.2
|
||||||
|
import QtQuick.Controls.Styles 1.4
|
||||||
|
|
||||||
import QtQml.Models 2.1
|
import QtQml.Models 2.1
|
||||||
import "qrc:/js/news.js" as Newsjs
|
import "qrc:/js/news.js" as Newsjs
|
||||||
|
@ -16,7 +17,7 @@ TabView{
|
||||||
id:root
|
id:root
|
||||||
tabPosition: Qt.BottomEdge
|
tabPosition: Qt.BottomEdge
|
||||||
width: Screen.desktopAvailableWidth
|
width: Screen.desktopAvailableWidth
|
||||||
height: Screen.desktopAvailableHeight
|
height: Screen.desktopAvailableHeight
|
||||||
|
|
||||||
property var db: ["Photos", "1.0", "Stores Friendica data", 100000000]
|
property var db: ["Photos", "1.0", "Stores Friendica data", 100000000]
|
||||||
property var login: Service.readActiveConfig(db)
|
property var login: Service.readActiveConfig(db)
|
||||||
|
@ -26,7 +27,7 @@ TabView{
|
||||||
signal fotoSignal(var friend)
|
signal fotoSignal(var friend)
|
||||||
signal directmessageSignal(var friend)
|
signal directmessageSignal(var friend)
|
||||||
signal newsSignal(var news)
|
signal newsSignal(var news)
|
||||||
|
signal friendsSignal(var username)
|
||||||
|
|
||||||
currentIndex: (login=="")? 3:0
|
currentIndex: (login=="")? 3:0
|
||||||
|
|
||||||
|
@ -39,11 +40,11 @@ TabView{
|
||||||
newsSignal(dbnews)
|
newsSignal(dbnews)
|
||||||
})}
|
})}
|
||||||
onNewContactsChanged:{if(newContacts.length>0){// download first contact image and update db
|
onNewContactsChanged:{if(newContacts.length>0){// download first contact image and update db
|
||||||
print("newcontact"+JSON.stringify(newContacts[0]));
|
// print("newcontact"+JSON.stringify(newContacts));
|
||||||
updateContactInDB(login,db,newContacts[currentContact].isFriend,newContacts[currentContact])}
|
updateContactInDB(login,db,newContacts[currentContact].isFriend,newContacts[currentContact])}
|
||||||
}
|
}
|
||||||
onCurrentContactChanged:{// download next contact image after photoplaceholder is finished saving and update db
|
onCurrentContactChanged:{// download next contact image after photoplaceholder is finished saving and update db
|
||||||
print("Current contact"+JSON.stringify(newContacts[currentContact]));
|
//print("Current contact"+JSON.stringify(newContacts[currentContact]));
|
||||||
if(currentContact<newContacts.length){
|
if(currentContact<newContacts.length){
|
||||||
updateContactInDB(login,db,newContacts[currentContact].isFriend,newContacts[currentContact])}
|
updateContactInDB(login,db,newContacts[currentContact].isFriend,newContacts[currentContact])}
|
||||||
else if(currentContact==newContacts.length){//newImagesProgress.visible=false;
|
else if(currentContact==newContacts.length){//newImagesProgress.visible=false;
|
||||||
|
@ -66,25 +67,56 @@ TabView{
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateContactInDB(login,database,isFriend,contact){// for newstab and friendstab
|
function updateContactInDB(login,database,isFriend,contact){// for newstab and friendstab
|
||||||
try{var imagename=login.imagestore+"contacts/"+contact.screen_name+".jpg";
|
var imagename=login.imagestore+"contacts/"+contact.screen_name.trim()+".jpg";
|
||||||
var component=Qt.createComponent("qrc:/qml/PhotoPlaceholder.qml");
|
if (isFriend==1){
|
||||||
print("imageName "+imagename+" source "+ contact.profile_image_url)
|
xhr.setUrl(Qt.resolvedUrl(contact.profile_image_url));
|
||||||
var sprite = component.createObject(root, {"fillMode": "Image.PreserveAspectFit","x":root.width,"y":50,"imageName":imagename,"source": contact.profile_image_url,"downloadtype":"contact"});} catch(e){print("Fehler beim Profilbild"+e)}
|
xhr.setFilename(imagename);
|
||||||
|
xhr.download();
|
||||||
|
}
|
||||||
var db=LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
var result;
|
var result;
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
result = tx.executeSql('SELECT * from contacts where id = '+contact.id); // check for news id
|
result = tx.executeSql('SELECT * from contacts where id = '+contact.id); // check for news id
|
||||||
if(result.rows.length === 1) {// use update
|
if(result.rows.length === 1) {// use update
|
||||||
result = tx.executeSql('UPDATE contacts SET username="'+login.username+'", id='+contact.id+', name="'+Qt.btoa(contact.name)+'", screen_name="'+contact.screen_name+'", location="'+contact.location+'",description="'+Qt.btoa(contact.description)+'", profile_image="'+imagename+'", url="'+contact.url+'" , protected="'+contact.protected+'", followers_count='+contact.followers_count+', friends_count='+contact.friends_count+', created_at="'+ 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 id='+contact.id);
|
result = tx.executeSql('UPDATE contacts SET username="'+login.username+'", id='+contact.id+', name="'+Qt.btoa(contact.name)+'", screen_name="'+contact.screen_name+'", location="'+contact.location+'", profile_image_url="'+contact.profile_image_url+'", description="'+Qt.btoa(contact.description)+'", profile_image="'+imagename+'", url="'+contact.url+'" , 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 id='+contact.id);
|
||||||
} else {// use insert
|
} else {// use insert
|
||||||
result = tx.executeSql('INSERT INTO contacts VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,contact.id,Qt.btoa(contact.name),contact.screen_name,contact.location,Qt.btoa(contact.description),imagename,contact.url,contact.protected,contact.followers_count, contact.friends_count,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]);}
|
result = tx.executeSql('INSERT INTO contacts VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,contact.id,Qt.btoa(contact.name),contact.screen_name,contact.location,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]);}
|
||||||
});
|
});
|
||||||
|
if (isFriend!=1){root.currentContact=root.currentContact+1}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Connections{
|
||||||
|
target:xhr
|
||||||
|
onDownloaded:{root.currentContact=root.currentContact+1}
|
||||||
|
}
|
||||||
|
Connections{
|
||||||
|
target:xhr
|
||||||
|
onError:{print("Error"+data)}
|
||||||
|
}
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
if (login==""){Service.initDatabase(db)}
|
if (login==""){Service.initDatabase(db)}
|
||||||
Helperjs.readField("id",db,"contacts",login.username,function(contacts){contactlist=contacts},"isFriend",1)
|
Helperjs.readField("id",db,"contacts",login.username,function(contacts){contactlist=contacts},"isFriend",1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
style: TabViewStyle {
|
||||||
|
frameOverlap: 1
|
||||||
|
tab: Rectangle {
|
||||||
|
color: styleData.selected?"white":"light blue"
|
||||||
|
border.color: "light grey"
|
||||||
|
implicitWidth: root.width/4-2*mm
|
||||||
|
implicitHeight: 4*mm
|
||||||
|
Text { id: text
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: styleData.title
|
||||||
|
color: "black"
|
||||||
|
font.pixelSize:3*mm
|
||||||
|
font.bold: styleData.selected
|
||||||
|
}
|
||||||
|
}
|
||||||
|
frame: Rectangle { color: "light grey" }
|
||||||
|
tabsAlignment:Qt.AlignHCenter
|
||||||
|
}
|
||||||
Tab{
|
Tab{
|
||||||
title: qsTr("News")
|
title: qsTr("News")
|
||||||
id: newstab
|
id: newstab
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
<file>js/layout.js</file>
|
<file>js/layout.js</file>
|
||||||
<file>js/photoworker.js</file>
|
<file>js/photoworker.js</file>
|
||||||
<file>js/service.js</file>
|
<file>js/service.js</file>
|
||||||
<file>qml/FriendComponent.qml</file>
|
|
||||||
<file>qml/MessageSend.qml</file>
|
<file>qml/MessageSend.qml</file>
|
||||||
<file>qml/Newsitem.qml</file>
|
<file>qml/Newsitem.qml</file>
|
||||||
<file>qml/PhotoComponent.qml</file>
|
<file>qml/PhotoComponent.qml</file>
|
||||||
|
@ -20,5 +19,7 @@
|
||||||
<file>images/defaultcontact.jpg</file>
|
<file>images/defaultcontact.jpg</file>
|
||||||
<file>qml/InfoBox.qml</file>
|
<file>qml/InfoBox.qml</file>
|
||||||
<file>qml/GroupComponent.qml</file>
|
<file>qml/GroupComponent.qml</file>
|
||||||
|
<file>qml/ContactComponent.qml</file>
|
||||||
|
<file>qml/PermissionDialog.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -13,7 +13,7 @@ int main(int argc, char *argv[]) {
|
||||||
view.rootContext()->setContextProperty("xhr", xhr);
|
view.rootContext()->setContextProperty("xhr", xhr);
|
||||||
FILESYSTEM* filesystem = FILESYSTEM::instance();
|
FILESYSTEM* filesystem = FILESYSTEM::instance();
|
||||||
view.rootContext()->setContextProperty("filesystem", filesystem);
|
view.rootContext()->setContextProperty("filesystem", filesystem);
|
||||||
view.setSource(QUrl("qrc:/qml/friendiqa.qml"));
|
view.setSource(QUrl("qrc:/qml/friendiqa.qml"));
|
||||||
view.show();
|
view.show();
|
||||||
view.connect(view.rootContext()->engine(), SIGNAL(quit()), &app, SLOT(quit()));
|
view.connect(view.rootContext()->engine(), SIGNAL(quit()), &app, SLOT(quit()));
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "xhr.h"
|
#include "xhr.h"
|
||||||
|
|
||||||
#include <QHttpPart>
|
#include <QHttpPart>
|
||||||
#include <QTextCodec>
|
#include <QTextCodec>
|
||||||
|
@ -14,7 +14,7 @@ XHR *XHR::instance()
|
||||||
|
|
||||||
XHR::XHR(QObject *parent) : QObject(parent)
|
XHR::XHR(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
|
// request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
|
||||||
}
|
}
|
||||||
|
|
||||||
void XHR::setUrl(QString url)
|
void XHR::setUrl(QString url)
|
||||||
|
@ -32,6 +32,15 @@ void XHR::setLogin(QString login)
|
||||||
emit loginChanged();
|
emit loginChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XHR::setFilename(QString filename)
|
||||||
|
{
|
||||||
|
if (filename!=m_filename) {
|
||||||
|
m_filename = filename;
|
||||||
|
emit filenameChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QString XHR::url() const
|
QString XHR::url() const
|
||||||
{
|
{
|
||||||
return m_url;
|
return m_url;
|
||||||
|
@ -42,6 +51,11 @@ QString XHR::login() const
|
||||||
return m_login;
|
return m_login;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString XHR::filename() const
|
||||||
|
{
|
||||||
|
return m_filename;
|
||||||
|
}
|
||||||
|
|
||||||
void XHR::setParam(QString name, QString value)
|
void XHR::setParam(QString name, QString value)
|
||||||
{
|
{
|
||||||
params.insert(name, value);
|
params.insert(name, value);
|
||||||
|
@ -58,6 +72,21 @@ void XHR::clearParams()
|
||||||
params.clear();
|
params.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XHR::download()
|
||||||
|
{
|
||||||
|
QUrl requrl(m_url);
|
||||||
|
// qDebug() << "start download of " << requrl;
|
||||||
|
request.setUrl(requrl);
|
||||||
|
reply = manager.get(request);
|
||||||
|
// qDebug() << "reply " << reply->header(QNetworkRequest::LocationHeader)<<reply->header(QNetworkRequest::LastModifiedHeader);
|
||||||
|
// qDebug() << "request " << request.url();
|
||||||
|
// qDebug() << "error " << reply->error();
|
||||||
|
// reply->ignoreSslErrors();
|
||||||
|
connect(reply, &QNetworkReply::readyRead,this, &XHR::onRequestFinished);
|
||||||
|
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
|
||||||
|
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
||||||
|
}
|
||||||
|
|
||||||
void XHR::get()
|
void XHR::get()
|
||||||
{
|
{
|
||||||
QUrlQuery query;
|
QUrlQuery query;
|
||||||
|
@ -82,7 +111,7 @@ void XHR::get()
|
||||||
connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess);
|
connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess);
|
||||||
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
||||||
connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead);
|
connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead);
|
||||||
|
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
|
||||||
}
|
}
|
||||||
|
|
||||||
void XHR::post()
|
void XHR::post()
|
||||||
|
@ -145,6 +174,22 @@ void XHR::onReplySuccess()
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XHR::onRequestFinished()
|
||||||
|
{
|
||||||
|
// Save the file here
|
||||||
|
QByteArray b = reply->readAll();
|
||||||
|
QImage image = QImage::fromData(b);
|
||||||
|
if (image.isNull()){qDebug() << "Image empty"<<m_url;}
|
||||||
|
QFile file(m_filename);
|
||||||
|
file.open(QIODevice::WriteOnly);
|
||||||
|
image.save(&file, "JPG");
|
||||||
|
b.clear();
|
||||||
|
file.close();
|
||||||
|
// qDebug() << m_url << "File downloaded "<<file.fileName();
|
||||||
|
emit this->downloaded();
|
||||||
|
reply->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
void XHR::onReadyRead()
|
void XHR::onReadyRead()
|
||||||
{
|
{
|
||||||
qDebug() << ".";
|
qDebug() << ".";
|
||||||
|
|
|
@ -11,35 +11,43 @@ class XHR : public QObject
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(QString url READ url WRITE setUrl NOTIFY urlChanged)
|
Q_PROPERTY(QString url READ url WRITE setUrl NOTIFY urlChanged)
|
||||||
Q_PROPERTY(QString login READ login WRITE setLogin NOTIFY loginChanged)
|
Q_PROPERTY(QString login READ login WRITE setLogin NOTIFY loginChanged)
|
||||||
|
Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged)
|
||||||
public:
|
public:
|
||||||
static XHR *instance();
|
static XHR *instance();
|
||||||
|
|
||||||
explicit XHR(QObject *parent = 0);
|
explicit XHR(QObject *parent = 0);
|
||||||
|
|
||||||
void setUrl(QString url);
|
|
||||||
// void setLogin(QString login);
|
// void setLogin(QString login);
|
||||||
|
|
||||||
QString url() const;
|
QString url() const;
|
||||||
QString login() const;
|
QString login() const;
|
||||||
|
QString filename() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void urlChanged();
|
void urlChanged();
|
||||||
void loginChanged();
|
void loginChanged();
|
||||||
|
void filenameChanged();
|
||||||
|
void downloaded();
|
||||||
void success(QString data);
|
void success(QString data);
|
||||||
void error(QString data, int code);
|
void error(QString data, int code);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
void setUrl(QString url);
|
||||||
void setLogin(QString login);
|
void setLogin(QString login);
|
||||||
|
void setFilename(QString filename);
|
||||||
void setParam(QString name, QString value);
|
void setParam(QString name, QString value);
|
||||||
void setImageFileParam(QString name, QString url);
|
void setImageFileParam(QString name, QString url);
|
||||||
void clearParams();
|
void clearParams();
|
||||||
void post();
|
void post();
|
||||||
void get();
|
void get();
|
||||||
|
void download();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onReplyError(QNetworkReply::NetworkError code);
|
void onReplyError(QNetworkReply::NetworkError code);
|
||||||
void onReplySuccess();
|
void onReplySuccess();
|
||||||
|
void onRequestFinished();
|
||||||
|
//void onFileWritten();
|
||||||
void onReadyRead();
|
void onReadyRead();
|
||||||
void onSSLError(const QList<QSslError> &errors);
|
void onSSLError(const QList<QSslError> &errors);
|
||||||
|
|
||||||
|
@ -47,6 +55,7 @@ private:
|
||||||
QByteArray buffer;
|
QByteArray buffer;
|
||||||
QString m_url;
|
QString m_url;
|
||||||
QString m_login;
|
QString m_login;
|
||||||
|
QString m_filename;
|
||||||
QHash<QString, QString> params;
|
QHash<QString, QString> params;
|
||||||
QHash<QString, QString> files;
|
QHash<QString, QString> files;
|
||||||
|
|
||||||
|
|
|
@ -4,18 +4,19 @@
|
||||||
function friendicaRequest(login,api,rootwindow,callback) {
|
function friendicaRequest(login,api,rootwindow,callback) {
|
||||||
var xhrequest= new XMLHttpRequest();
|
var xhrequest= new XMLHttpRequest();
|
||||||
xhrequest.onreadystatechange = function() {
|
xhrequest.onreadystatechange = function() {
|
||||||
if (xhrequest.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
|
// if (xhrequest.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
|
||||||
} else if(xhrequest.readyState === XMLHttpRequest.DONE) {
|
// } else
|
||||||
|
if(xhrequest.readyState === XMLHttpRequest.DONE) {
|
||||||
try{ if (xhrequest.responseText!=""){
|
try{ if (xhrequest.responseText!=""){
|
||||||
callback(xhrequest.responseText)
|
callback(xhrequest.responseText)
|
||||||
}else{
|
}else{
|
||||||
showMessage("Error",api+" NO RESPONSE",rootwindow)
|
showMessage("Error",api+" NO RESPONSE",rootwindow);
|
||||||
callback(xhrequest.responseText)
|
callback(xhrequest.responseText)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (e){
|
catch (e){
|
||||||
showMessage("Error", api+" "+e,rootwindow)
|
showMessage("Error", api+" "+e,rootwindow)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xhrequest.open("GET", login.server+api,true,login.username,Qt.atob(login.password));
|
xhrequest.open("GET", login.server+api,true,login.username,Qt.atob(login.password));
|
||||||
|
@ -65,12 +66,15 @@ function readData(database,table,username,callback,filter,filtervalue) { // read
|
||||||
if (filter){
|
if (filter){
|
||||||
var where = " AND "+ filter +" = '" + filtervalue+"'";
|
var where = " AND "+ filter +" = '" + filtervalue+"'";
|
||||||
} else { var where="";}
|
} else { var where="";}
|
||||||
|
if (username){
|
||||||
|
var user = ' where username= "'+ username +'"';
|
||||||
|
} else { var user='';}
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
if(!db) { return; }
|
if(!db) { return; }
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
// print('select * from '+table'+where username= "'+username+'"'+'where);
|
//print('select * from '+table+user+where);
|
||||||
var rsArray=[];
|
var rsArray=[];
|
||||||
var rs = tx.executeSql('select * from '+table+' where username= "'+username+'"'+where);
|
var rs = tx.executeSql('select * from '+table+user+where);
|
||||||
for(var i = 0; i < rs.rows.length; i++) {
|
for(var i = 0; i < rs.rows.length; i++) {
|
||||||
rsArray.push(rs.rows.item(i))
|
rsArray.push(rs.rows.item(i))
|
||||||
}
|
}
|
||||||
|
@ -85,19 +89,20 @@ var where = " AND "+ filter +" = '" + filtervalue+"'";
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
if(!db) { return; }
|
if(!db) { return; }
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
// print('... read from database ' + field)
|
//print('... read from database ' + field)
|
||||||
var rsArray=[];
|
var rsArray=[];
|
||||||
print('select DISTINCT '+field+' from '+table+' WHERE username="'+username+'"'+where+' ORDER BY '+field+' ASC');
|
//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');
|
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++) {
|
for(var i = 0; i < rs.rows.length; i++) {
|
||||||
rsArray.push(rs.rows.item(i)[field])
|
rsArray.push(rs.rows.item(i)[field])
|
||||||
}
|
}
|
||||||
callback(rsArray);
|
callback(rsArray);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function showMessage(header,message,rootwindow){
|
function showMessage(header,message,rootwindow){
|
||||||
var messageString='import QtQuick 2.0; import QtQuick.Dialogs 1.2; MessageDialog{ visible: true; title:"'+header+'";standardButtons: StandardButton.Ok; text:" '+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");
|
var messageObject=Qt.createQmlObject(messageString,rootwindow,"messageOutput");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,35 +40,66 @@ function getFriendsTimeline(login,database,contacts,rootwindow,callback){// retr
|
||||||
var result = tx.executeSql('SELECT status_id from news WHERE username="'+login.username+'" ORDER BY status_id DESC LIMIT 1'); // check for last news id
|
var result = tx.executeSql('SELECT status_id from news WHERE username="'+login.username+'" ORDER BY status_id DESC LIMIT 1'); // check for last news id
|
||||||
try{parameter="&since_id="+result.rows.item(0).status_id;}catch(e){};})
|
try{parameter="&since_id="+result.rows.item(0).status_id;}catch(e){};})
|
||||||
var newContacts=[];
|
var newContacts=[];
|
||||||
|
//print(JSON.stringify("Contacts "+contacts));
|
||||||
Helperjs.friendicaRequest(login,"/api/statuses/friends_timeline"+parameter, rootwindow,function (obj){
|
Helperjs.friendicaRequest(login,"/api/statuses/friends_timeline"+parameter, rootwindow,function (obj){
|
||||||
var news=JSON.parse(obj);
|
var news=JSON.parse(obj);
|
||||||
for (var i=0;i<news.length;i++){
|
var newContacts=findNewContacts(news,contacts);
|
||||||
if(contacts.indexOf(news[i].user.id)==-1 && !(inArray(newContacts,"id",news[i].user.id))){
|
// for (var i=0;i<news.length;i++){
|
||||||
news[i].user.isFriend=0;
|
// if(contacts.indexOf(news[i].user.id)==-1 && !(inArray(newContacts,"id",news[i].user.id))){
|
||||||
newContacts.push(news[i].user);
|
// news[i].user.isFriend=0;
|
||||||
}
|
// newContacts.push(news[i].user);
|
||||||
if (news[i].friendica_activities.like.length>0){
|
// }
|
||||||
print("Like Contact"+JSON.stringify(news[i].friendica_activities.like));
|
// if (news[i].friendica_activities.like.length>0){
|
||||||
for (var j=0;j<news[i].friendica_activities.like.length;j++){
|
// // print("Like Contact"+JSON.stringify(news[i].friendica_activities.like));
|
||||||
if(contacts.indexOf(news[i].friendica_activities.like[j].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activities.like[j].id))){
|
// for (var j=0;j<news[i].friendica_activities.like.length;j++){
|
||||||
news[i].friendica_activities.like[j].isFriend=0;
|
// if(contacts.indexOf(news[i].friendica_activities.like[j].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activities.like[j].id))){
|
||||||
newContacts.push(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){
|
// }
|
||||||
print("DisLike Contact"+JSON.stringify(news[i].friendica_activities.dislike));
|
// if (news[i].friendica_activities.dislike.length>0){
|
||||||
for (var k=0;j<news[k].friendica_activities.dislike.length;k++){
|
// //print("DisLike Contact"+JSON.stringify(news[i].friendica_activities.dislike));
|
||||||
if(contacts.indexOf(news[i].friendica_activities.dislike[k].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activties.dislike[k].id))){
|
// for (var k=0;j<news[k].friendica_activities.dislike.length;k++){
|
||||||
news[i].friendica_activities.dislike[k].isFriend=0;
|
// if(contacts.indexOf(news[i].friendica_activities.dislike[k].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activties.dislike[k].id))){
|
||||||
newContacts.push(news[i].friendica_activities.dislike[k]);
|
// news[i].friendica_activities.dislike[k].isFriend=0;
|
||||||
}
|
// newContacts.push(news[i].friendica_activities.dislike[k]);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
callback(news,newContacts)
|
callback(news,newContacts)
|
||||||
})}
|
})}
|
||||||
|
|
||||||
|
function findNewContacts(news,contacts){
|
||||||
|
var newContacts=[];
|
||||||
|
for (var i=0;i<news.length;i++){
|
||||||
|
if(contacts.indexOf(news[i].user.id)==-1 && !(inArray(newContacts,"id",news[i].user.id))){
|
||||||
|
news[i].user.isFriend=0;
|
||||||
|
newContacts.push(news[i].user);
|
||||||
|
}
|
||||||
|
if (news[i].friendica_activities.like.length>0){
|
||||||
|
// print("Like Contact"+JSON.stringify(news[i].friendica_activities.like));
|
||||||
|
for (var j=0;j<news[i].friendica_activities.like.length;j++){
|
||||||
|
if(contacts.indexOf(news[i].friendica_activities.like[j].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activities.like[j].id))){
|
||||||
|
news[i].friendica_activities.like[j].isFriend=0;
|
||||||
|
newContacts.push(news[i].friendica_activities.like[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (news[i].friendica_activities.dislike.length>0){
|
||||||
|
//print("DisLike Contact"+JSON.stringify(news[i].friendica_activities.dislike));
|
||||||
|
for (var k=0;j<news[k].friendica_activities.dislike.length;k++){
|
||||||
|
if(contacts.indexOf(news[i].friendica_activities.dislike[k].id)==-1 && !(inArray(newContacts,"id",news[i].friendica_activties.dislike[k].id))){
|
||||||
|
news[i].friendica_activities.dislike[k].isFriend=0;
|
||||||
|
newContacts.push(news[i].friendica_activities.dislike[k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newContacts
|
||||||
|
}
|
||||||
|
|
||||||
function storeNews(login,database,news,rootwindow,callback){
|
function storeNews(login,database,news,rootwindow,callback){
|
||||||
// save news after contacts download, call next function
|
// save news after contacts download, call next function
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
|
@ -80,14 +111,14 @@ function storeNews(login,database,news,rootwindow,callback){
|
||||||
var attendyesarray=[]; for (var user in news[i].friendica_activities.attendyes){attendyesarray.push(parseInt(news[i].friendica_activities.attendyes[user].id))}
|
var attendyesarray=[]; for (var user in news[i].friendica_activities.attendyes){attendyesarray.push(parseInt(news[i].friendica_activities.attendyes[user].id))}
|
||||||
var attendnoarray=[]; for (var user in news[i].friendica_activities.attendno){attendnoarray.push(parseInt(news[i].friendica_activities.attendno[user].id))}
|
var attendnoarray=[]; for (var user in news[i].friendica_activities.attendno){attendnoarray.push(parseInt(news[i].friendica_activities.attendno[user].id))}
|
||||||
var attendmaybearray=[]; for (var user in news[i].friendica_activities.attendmaybe){attendmaybearray.push(parseInt(news[i].friendica_activities.attendmaybe[user].id))}
|
var attendmaybearray=[]; for (var user in news[i].friendica_activities.attendmaybe){attendmaybearray.push(parseInt(news[i].friendica_activities.attendmaybe[user].id))}
|
||||||
|
var friendica_activities=[likearray,dislikearray,attendyesarray,attendnoarray,attendmaybearray]
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
var result = tx.executeSql('SELECT * from news where status_id = "'+news[i].id+'"'); // check for news id
|
var result = tx.executeSql('SELECT * from news where status_id = "'+news[i].id+'"'); // check for news id
|
||||||
if(result.rows.length === 1) {// use update
|
if(result.rows.length === 1) {// use update
|
||||||
print(news[i].id +' exists, update it')
|
print(news[i].id +' exists, update it')
|
||||||
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+'",like="'+JSON.stringify(likearray)+'", dislike="'+JSON.stringify(dislikearray)+'", attendyes="'+JSON.stringify(attendyesarray)+'",attendno="'+JSON.stringify(attendnoarray)+'",attendmaybe="'+JSON.stringify(attendmaybearray)+'" where status_id="'+news[i].status_id+'"');
|
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="'+JSON.stringify(friendica_activities)+'" where status_id="'+news[i].status_id+'"');
|
||||||
} else {// use insert
|
} 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,like,dislike,attendyes,attendno,attendmaybe) 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, JSON.stringify(likearray),JSON.stringify(dislikearray),JSON.stringify(attendyesarray),JSON.stringify(attendnoarray),JSON.stringify(attendmaybearray)])}})
|
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) 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, JSON.stringify(friendica_activities),"[]"])}})
|
||||||
}
|
}
|
||||||
getDirectMessage(login,database,rootwindow,callback)
|
getDirectMessage(login,database,rootwindow,callback)
|
||||||
}
|
}
|
||||||
|
@ -102,9 +133,9 @@ function getDirectMessage(login,database,rootwindow,callback){
|
||||||
var result = tx.executeSql('SELECT * from news where status_id = "'+messages[i].id+'"'); // check for news id
|
var result = tx.executeSql('SELECT * from news where status_id = "'+messages[i].id+'"'); // check for news id
|
||||||
if(result.rows.length === 1) {// use update
|
if(result.rows.length === 1) {// use update
|
||||||
print(messages[i].id +' exists, update it')
|
print(messages[i].id +' 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)+'" where status_id="'+messages[i].status_id+'"');
|
result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=1, text="'+Qt.btoa(messages[i].text)+'", created_at="'+Date.parse(messages[i].created_at)+'", source="Friendica", status_id="'+messages[i].id+'", uid="'+messages[i].sender.id+'", statusnet_html="'+Qt.btoa(messages[i].text)+'" where status_id="'+messages[i].status_id+'"');
|
||||||
} else {// use insert
|
} else {// use insert
|
||||||
result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,source,status_id,uid,statusnet_html) 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)])}
|
result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,source,status_id,uid,statusnet_html) VALUES (?,?,?,?,?,?,?,?)', [login.username,1,Qt.btoa(messages[i].text),Date.parse(messages[i].created_at), "Friendica", messages[i].id, messages[i].sender.id,Qt.btoa(messages[i].text)])}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -121,15 +152,25 @@ function getNotifications(login,database,rootwindow,callback){
|
||||||
var result = tx.executeSql('SELECT * from news where status_id = "'+messages[i].id+'"'); // check for news id
|
var result = tx.executeSql('SELECT * from news where status_id = "'+messages[i].id+'"'); // check for news id
|
||||||
if(result.rows.length === 1) {// use update
|
if(result.rows.length === 1) {// use update
|
||||||
print(messages[i].id +' exists, update it')
|
print(messages[i].id +' exists, update it')
|
||||||
result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=2, text="'+Qt.btoa(messages[i].msg_html)+'", created_at="'+messages[i].timestamp+'", 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 status_id="'+messages[i].id+'"');
|
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 status_id="'+messages[i].id+'"');
|
||||||
} else {// use insert
|
} 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),messages[i].timestamp,"Friendica", messages[i].id, messages[i].uid,Qt.btoa(messages[i].msg_html),messages[i].parent])}
|
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])}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
newsfromdb(database,login.username,callback)
|
newsfromdb(database,login.username,callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getActivitiesUserData(database,username,useridArray){
|
||||||
|
var helpArray=[];
|
||||||
|
for (var i=0;i<useridArray.length;i++){
|
||||||
|
Helperjs.readData(database,"contacts",username,function(userdata){
|
||||||
|
helpArray.push(userdata[0]);
|
||||||
|
},"id",useridArray[i]);
|
||||||
|
}
|
||||||
|
return helpArray
|
||||||
|
}
|
||||||
|
|
||||||
function newsfromdb(database,username,callback,contact,stop_time){
|
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
|
// 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]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
|
@ -139,6 +180,7 @@ db.transaction( function(tx) {
|
||||||
stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}}
|
stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}}
|
||||||
else{var stop="<"+stop_time}
|
else{var stop="<"+stop_time}
|
||||||
var contactfilter="";if(contact){contactfilter=" AND uid='"+contact+"'"}
|
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 newsrs=tx.executeSql('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
|
||||||
var newsArray=[];
|
var newsArray=[];
|
||||||
for(var i = 0; i < newsrs.rows.length; i++) {
|
for(var i = 0; i < newsrs.rows.length; i++) {
|
||||||
|
@ -152,57 +194,45 @@ db.transaction( function(tx) {
|
||||||
},"id",newsArray[i].in_reply_to_user_id);
|
},"id",newsArray[i].in_reply_to_user_id);
|
||||||
}
|
}
|
||||||
if (newsArray[i].messagetype==0){
|
if (newsArray[i].messagetype==0){
|
||||||
//userdata for likes
|
for(var j=0;j<newsArray[i].friendica_activities.length;j++)
|
||||||
var likeArray=JSON.parse(newsArray[i].like);
|
{var friendicaArray=JSON.parse(newsArray[i].friendica_activities);
|
||||||
var likeHelper=[];
|
// print("Array: "+friendicaArray[1]);
|
||||||
for (var j=0;j<likeArray.length;j++){
|
newsArray[i].like=getActivitiesUserData(database,username,friendicaArray[0]);
|
||||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
newsArray[i].dislike=getActivitiesUserData(database,username,friendicaArray[1]);
|
||||||
likeHelper[j]=userdata[0];
|
newsArray[i].attendyes=getActivitiesUserData(database,username,friendicaArray[2]);
|
||||||
},"id",likeArray[j]);
|
newsArray[i].attendno=getActivitiesUserData(database,username,friendicaArray[3]);
|
||||||
}
|
newsArray[i].attendmaybe=getActivitiesUserData(database,username,friendicaArray[4]);
|
||||||
newsArray[i].like=likeHelper;
|
}
|
||||||
//userdata for dislikes
|
|
||||||
var dislikeArray=JSON.parse(newsArray[i].dislike);
|
|
||||||
var dislikeHelper=[];
|
|
||||||
for (var k=0;k<dislikeArray.length;k++){
|
|
||||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
|
||||||
dislikeHelper[j]=userdata[0];
|
|
||||||
},"id",dislikeArray[k]);
|
|
||||||
}
|
|
||||||
newsArray[i].dislike=dislikeHelper;
|
|
||||||
//userdata for attendyes
|
|
||||||
var attendyesArray=JSON.parse(newsArray[i].attendyes);
|
|
||||||
var attendyesHelper=[];
|
|
||||||
for (var l=0;l<attendyesArray.length;l++){
|
|
||||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
|
||||||
attendyesHelper[j]=userdata[0];
|
|
||||||
},"id",attendyesArray[l]);
|
|
||||||
}
|
|
||||||
newsArray[i].attendyes=attendyesHelper;
|
|
||||||
//userdata for attendno
|
|
||||||
var attendnoArray=JSON.parse(newsArray[i].attendno);
|
|
||||||
var attendnoHelper=[];
|
|
||||||
for (var m=0;m<attendnoArray.length;m++){
|
|
||||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
|
||||||
attendnoHelper[j]=userdata[0];
|
|
||||||
},"id",attendnoArray[m]);
|
|
||||||
}
|
|
||||||
newsArray[i].attendno=attendnoHelper;
|
|
||||||
|
|
||||||
//userdata for attendmaybe
|
|
||||||
var attendmaybeArray=JSON.parse(newsArray[i].attendmaybe);
|
|
||||||
var attendmaybeHelper=[];
|
|
||||||
for (var n=0;n<attendmaybeArray.length;n++){
|
|
||||||
Helperjs.readData(database,"contacts",username,function(userdata){
|
|
||||||
attendmaybeHelper[j]=userdata[0];
|
|
||||||
},"id",attendmaybeArray[l]);
|
|
||||||
}
|
|
||||||
newsArray[i].attendmaybe=attendmaybeHelper;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
callback(newsArray)});
|
callback(newsArray)});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fetchUsersForNews(database,username,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(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]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return news
|
||||||
|
}
|
||||||
|
|
||||||
function deleteNews(login,database,newsid,rootwindow,callback){
|
function deleteNews(login,database,newsid,rootwindow,callback){
|
||||||
Helperjs.friendicaPostRequest(login,"/api/statuses/destroy?id="+newsid, rootwindow,function (obj){
|
Helperjs.friendicaPostRequest(login,"/api/statuses/destroy?id="+newsid, rootwindow,function (obj){
|
||||||
print("Delete "+obj);
|
print("Delete "+obj);
|
||||||
|
@ -228,73 +258,105 @@ function favorite(login,favorite,newsid,rootwindow){
|
||||||
})}
|
})}
|
||||||
}
|
}
|
||||||
|
|
||||||
function likerequest(login,database,toggle,verb,newsid,rootwindow){
|
function likerequest(login,database,verb,newsid,rootwindow){
|
||||||
Helperjs.friendicaPostRequest(login,"/api/friendica/activity/"+verb+"?id="+newsid, rootwindow,function (obj){
|
Helperjs.friendicaPostRequest(login,"/api/friendica/activity/"+verb+"?id="+newsid, rootwindow,function (obj){
|
||||||
print("likereturn "+obj);
|
|
||||||
if (obj=='"ok"'){
|
if (obj=='"ok"'){
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
db.transaction( function(tx) {var result = tx.executeSql('UPDATE news SET '+verb+'d ='+toggle+' where status_id ='+newsid);
|
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("currentActivities "+JSON.stringify(currentActivities));
|
||||||
|
if ((verb=="like")&&(currentActivities.indexOf(1)==-1)){ currentActivities.push(1);
|
||||||
|
currentActivities.splice(currentActivities.indexOf(2),1)
|
||||||
|
}
|
||||||
|
if ((verb=="dislike")&&(currentActivities.indexOf(2)==-1)){ currentActivities.push(2);
|
||||||
|
currentActivities.splice(currentActivities.indexOf(1),1)
|
||||||
|
}
|
||||||
|
if (verb=="unlike"){ try{currentActivities.splice(currentActivities.indexOf(1),1)}catch(e){}}
|
||||||
|
if (verb=="undislike"){ try{currentActivities.splice(currentActivities.indexOf(2),1)}catch(e){}}
|
||||||
|
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){
|
function like(login,database,toggle,verb,newsid,rootwindow){
|
||||||
if(verb=="like"&& toggle==1){
|
if(verb=="like"&& toggle==1){likerequest(login,database,"like",newsid,rootwindow);
|
||||||
likerequest(login,database,1,"like",newsid,rootwindow);
|
}
|
||||||
likerequest(login,database,0,"undislike",newsid,rootwindow);}
|
if(verb=="dislike"&& toggle==1){likerequest(login,database,"dislike",newsid,rootwindow);
|
||||||
if(verb=="dislike"&& toggle==1){
|
}
|
||||||
likerequest(login,database,1,"dislike",newsid,rootwindow);
|
if(toggle==0){
|
||||||
likerequest(login,database,0,"unlike",newsid,rootwindow);}
|
likerequest(login,database,"un"+verb,newsid,rootwindow);}
|
||||||
if(toggle==0){
|
|
||||||
likerequest(login,database,0,"un"+verb,newsid,rootwindow);}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function attend(login,database,attend,newsid,rootwindow,callback){
|
function attend(login,database,attend,newsid,rootwindow,callback){
|
||||||
Helperjs.friendicaPostRequest(login,"/api/friendica/activity/attend"+attend+"?id="+newsid, rootwindow,function (obj){
|
Helperjs.friendicaPostRequest(login,"/api/friendica/activity/attend"+attend+"?id="+newsid, rootwindow,function (obj){
|
||||||
var attendReturn=JSON.parse(obj);
|
var attendReturn=JSON.parse(obj);
|
||||||
// print("attend: "+obj);
|
// print("attend: "+obj);
|
||||||
//if (attendReturn=="OK")
|
if (attendReturn=="OK")
|
||||||
{
|
{var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
db.transaction( function(tx) {
|
||||||
db.transaction( function(tx) {var result = tx.executeSql('UPDATE news SET attend="+attend+" where status_id ='+newsid);
|
var currentActivities_rs=tx.executeSql('select friendica_activities_self from news WHERE username="'+login.username+'" AND status_id='+newsid) ;
|
||||||
callback();
|
var currentActivities=JSON.parse(currentActivities_rs.rows.item(0));
|
||||||
|
print("currentActivities "+JSON.stringify(currentActivities));
|
||||||
|
if ((attend=="attendyes")&&(currentActivities.indexOf(3)==-1)){
|
||||||
|
currentActivities.push(3);
|
||||||
|
currentActivities.splice(currentActivities.indexOf(4),1)
|
||||||
|
currentActivities.splice(currentActivities.indexOf(5),1)
|
||||||
|
}
|
||||||
|
if ((attend=="attendno")&&(currentActivities.indexOf(4)==-1)){
|
||||||
|
currentActivities.push(4);
|
||||||
|
currentActivities.splice(currentActivities.indexOf(3),1)
|
||||||
|
currentActivities.splice(currentActivities.indexOf(5),1)
|
||||||
|
}
|
||||||
|
if ((attend=="attendmaybe")&&(currentActivities.indexOf(5)==-1)){
|
||||||
|
currentActivities.push(5);
|
||||||
|
currentActivities.splice(currentActivities.indexOf(3),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,rootwindow,callback){
|
function requestConversation(login,database,newsid,contacts,rootwindow,callback){
|
||||||
Helperjs.friendicaRequest(login,"/api/conversation/show?id="+newsid,rootwindow, function (obj){
|
Helperjs.friendicaRequest(login,"/api/conversation/show?id="+newsid,rootwindow, function (obj){
|
||||||
print(obj+JSON.stringify(obj));
|
|
||||||
var news=JSON.parse(obj);
|
var news=JSON.parse(obj);
|
||||||
for (var i=0;i<news.length;i++){
|
var newContacts=findNewContacts(news,contacts);
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
// storeNews(login,database,news,rootwindow,callback)
|
||||||
print('store news data for ' + news[i].id);
|
callback(news,newContacts)
|
||||||
db.transaction( function(tx) {
|
})}
|
||||||
var result = tx.executeSql('SELECT * from news where status_id = "'+news[i].id+'"'); // check for news id
|
|
||||||
if(result.rows.length === 1) {// use update
|
|
||||||
print(news[i].id +' exists, update it')
|
|
||||||
result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=0, text="'+Qt.btoa(news[i].text)+'", truncated="'+news[i].truncated+'", 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+'", attachments="'+news[i].attachments+'" where status_id="'+news[i].status_id+'"');
|
|
||||||
} else {// use insert
|
|
||||||
result = tx.executeSql('INSERT INTO news VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,0,Qt.btoa(news[i].text),news[i].truncated,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, news[i].attachments,0,0,0]);
|
|
||||||
}});
|
|
||||||
if(news[i].user.following!=true){
|
|
||||||
updateContactInDB(login,database,rootwindow,news[i].user)}
|
|
||||||
}
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
);}
|
|
||||||
|
|
||||||
function conversationfromdb(database,user,conversationId,callback){
|
function conversationfromdb(database,user,conversationId,callback){
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
print('select * from news WHERE statusnet_conversation_id='+conversationId+' ORDER BY status_id DESC');
|
print('select * from news WHERE statusnet_conversation_id='+conversationId+' ORDER BY status_id DESC');
|
||||||
var newsrs=tx.executeSql('select * from news WHERE statusnet_conversation_id='+conversationId+' ORDER BY status_id DESC');
|
var newsrs=tx.executeSql('select * from news WHERE statusnet_conversation_id='+conversationId+' ORDER BY status_id DESC');
|
||||||
var newsArray=[];
|
var newsArray=[];
|
||||||
for(var i = 0; i < newsrs.rows.length; i++) {
|
for(var i = 0; i < newsrs.rows.length; i++) {
|
||||||
newsArray.push(newsrs.rows.item(i))
|
newsArray.push(newsrs.rows.item(i));
|
||||||
Helperjs.readData(database,"contacts",function(userdata){
|
newsArray[i]=fetchUsersForNews(database,user,newsArray[i]);
|
||||||
newsArray[i].user=userdata[0];
|
|
||||||
},"id",newsArray[i].uid);
|
|
||||||
}
|
|
||||||
callback(newsArray);
|
callback(newsArray);
|
||||||
});}
|
}})}
|
||||||
|
|
||||||
|
function requestFavorites(login,database,rootwindow,callback){
|
||||||
|
Helperjs.friendicaRequest(login,"/api/favorites",rootwindow, function (obj){
|
||||||
|
//print(obj+JSON.stringify(obj));
|
||||||
|
var news=JSON.parse(obj);
|
||||||
|
// storeNews(login,database,news,rootwindow,callback)
|
||||||
|
callback(news)
|
||||||
|
})}
|
||||||
|
|
||||||
|
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 inArray(list, prop, val) {
|
function inArray(list, prop, val) {
|
||||||
if (list.length > 0 ) {
|
if (list.length > 0 ) {
|
||||||
|
|
|
@ -1,35 +1,50 @@
|
||||||
WorkerScript.onMessage = function(msg) {
|
WorkerScript.onMessage = function(msg) {
|
||||||
if(msg.appendnews!==true){ msg.model.clear()};
|
if(msg.appendnews!==true){ msg.model.clear()};
|
||||||
|
|
||||||
for (var j=0;j<msg.news.length;j++){
|
for (var j=0;j<msg.news.length;j++){
|
||||||
if (msg.news[j]) {
|
if (msg.news[j]) {
|
||||||
var newsitemobject=msg.news[j];
|
var newsitemobject=msg.news[j];
|
||||||
var likeText="";var dislikeText="";var attendyesText="";var attendnoText="";var attendmaybeText="";
|
//print("Newsitem"+JSON.stringify(newsitemobject));
|
||||||
if (newsitemobject.messagetype==0){
|
if (newsitemobject.messagetype==2){
|
||||||
if (msg.news[j].like.length>0){
|
newsitemobject.user={};
|
||||||
if (msg.news[j].like.length==1){likeText= Qt.atob(msg.news[j].like[0].name)+" "+ qsTr("likes this.")}
|
newsitemobject.user.profile_image="qrc:/images/defaultcontact.jpg";
|
||||||
else {likeText= msg.news[j].like.length+" "+ qsTr("like this.")}
|
newsitemobject.user.profile_image_url="qrc:/images/defaultcontact.jpg";
|
||||||
|
newsitemobject.user.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 (msg.news[j].dislike.length>0){
|
if (newsitemobject.dislike.length>0){
|
||||||
if (msg.news[j].dislike.length==1){dislikeText= QT.atob(msg.news[j].dislike[0].name)+" "+ qsTr("doesn't like this.")}
|
if (newsitemobject.dislike.length==1){dislikeText= QT.atob(newsitemobject.dislike[0].name)+" "+ qsTr("doesn't like this.")}
|
||||||
else {dislikeText= msg.news[j].dislike.length+" "+ qsTr("don't like this.")}
|
else {dislikeText= newsitemobject.dislike.length+" "+ qsTr("don't like this.")}
|
||||||
}
|
}
|
||||||
if (msg.news[j].attendyes.length>0){
|
if (newsitemobject.attendyes.length>0){
|
||||||
if (msg.news[j].attendyes.length==1){attendyesText= Qt.atob(msg.news[j].attendyes[0].name)+" "+ qsTr("will attend.")}
|
if (newsitemobject.attendyes.length==1){attendyesText= Qt.atob(newsitemobject.attendyes[0].name)+" "+ qsTr("will attend.")}
|
||||||
else {attendyesText= msg.news[j].attendyes.length+" "+ qsTr("persons will attend.")}
|
else {attendyesText= newsitemobject.attendyes.length+" "+ qsTr("persons will attend.")}
|
||||||
}
|
}
|
||||||
if (msg.news[j].attendno.length>0){
|
if (newsitemobject.attendno.length>0){
|
||||||
if (msg.news[j].attendno.length==1){attendnoText= Qt.atob(msg.news[j].attendno[0].name)+" "+ qsTr("will not attend.")}
|
if (newsitemobject.attendno.length==1){attendnoText= Qt.atob(newsitemobject.attendno[0].name)+" "+ qsTr("will not attend.")}
|
||||||
else {attendnoText= msg.news[j].attendno.length+" "+ qsTr("persons will not attend.")}
|
else {attendnoText= newsitemobject.attendno.length+" "+ qsTr("persons will not attend.")}
|
||||||
}
|
}
|
||||||
if (msg.news[j].attendmaybe.length>0){
|
if (newsitemobject.attendmaybe.length>0){
|
||||||
if (msg.news[j].attendmaybe.length==1){attendmaybeText= Qt.atob(msg.news[j].attendmaybe[0].name)+" "+ qsTr("may attend.")}
|
if (newsitemobject.attendmaybe.length==1){attendmaybeText= Qt.atob(newsitemobject.attendmaybe[0].name)+" "+ qsTr("may attend.")}
|
||||||
else {attendmaybeText= msg.news[j].attendmaybe.length+" "+ qsTr("persons may attend.")}
|
else {attendmaybeText= newsitemobject.attendmaybe.length+" "+ qsTr("persons may attend.")}
|
||||||
}
|
}
|
||||||
|
var friendica_activities_self=JSON.parse(newsitemobject.friendica_activities_self);
|
||||||
|
if (friendica_activities_self.indexOf(3)!=-1){self.attending=qsTr("yes")}
|
||||||
|
if (friendica_activities_self.indexOf(4)!=-1){self.attending=qsTr("no")}
|
||||||
|
if (friendica_activities_self.indexOf(5)!=-1){self.attending=qsTr("maybe")}
|
||||||
|
if (friendica_activities_self.indexOf(1)!=-1){self.liked=1}
|
||||||
|
if (friendica_activities_self.indexOf(2)!=-1){self.disliked=1}
|
||||||
}
|
}
|
||||||
var friendica_activities={likeText:likeText,dislikeText:dislikeText,attendyesText:attendyesText,attendnoText:attendnoText,attendmaybeText:attendmaybeText}
|
var friendica_activities={likeText:likeText,dislikeText:dislikeText,attendyesText:attendyesText,attendnoText:attendnoText,attendmaybeText:attendmaybeText,self:self}
|
||||||
var seconds=(msg.currentTime-newsitemobject.created_at)/1000;
|
//print(JSON.stringify(friendica_activities) ) ;
|
||||||
var timestring="";
|
var seconds=(msg.currentTime-newsitemobject.created_at)/1000;
|
||||||
if (seconds<60) {timestring=seconds+" "+qsTr("seconds") +" "+qsTr("ago");}
|
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<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<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<5400){timestring=Math.round(seconds/3600)+" "+qsTr("hour") +" "+qsTr("ago");}
|
||||||
|
@ -40,7 +55,7 @@ WorkerScript.onMessage = function(msg) {
|
||||||
else if (seconds<69984000){timestring=Math.round(seconds/3888000)+" "+qsTr("months") +" "+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");}
|
else {timestring=Math.round(seconds/69984000)+" "+qsTr("years") +" "+qsTr("ago");}
|
||||||
var data=({"newsitemobject": newsitemobject,"dateDiff":timestring,"friendica_activities":friendica_activities})}
|
var data=({"newsitemobject": newsitemobject,"dateDiff":timestring,"friendica_activities":friendica_activities})}
|
||||||
// print("News:"+j+msg.news.length+JSON.stringify(data));
|
//print("News:"+j+msg.news.length+JSON.stringify(data));
|
||||||
msg.model.append(data);}
|
msg.model.append(data);}
|
||||||
if (j==msg.news.length){
|
if (j==msg.news.length){
|
||||||
msg.model.sync()
|
msg.model.sync()
|
||||||
|
|
|
@ -24,13 +24,13 @@ function requestList(login,database,rootwindow,callback) {
|
||||||
|
|
||||||
function dataRequest(login,photoID,database,rootwindow) {
|
function dataRequest(login,photoID,database,rootwindow) {
|
||||||
// check if image exist and call download function
|
// check if image exist and call download function
|
||||||
Helperjs.friendicaRequest(login,"/api/friendica/photo?photo_id="+photoID, rootwindow, function (obj){
|
Helperjs.friendicaRequest(login,"/api/friendica/photo?photo_id="+photoID, rootwindow, function (image){
|
||||||
try{ if(obj==""){currentImageNo=currentImageNo+1}else{
|
try{ if(image==""){currentImageNo=currentImageNo+1}else{
|
||||||
var image = JSON.parse(obj);
|
var obj = JSON.parse(image);
|
||||||
print('storeData() for ' + JSON.stringify(obj));
|
print('storeData() for ' + JSON.stringify(obj));
|
||||||
try{sprite.destroy();}catch(e){}
|
// try{sprite.destroy();}catch(e){}
|
||||||
if (obj["link"]["0"]){var source=obj["link"]["0"]} else {var source=obj["link"]["4"]}//source for profile picture or original size
|
// if (obj["link"]["0"]){var source=obj["link"]["0"]} else {var source=obj["link"]["4"]}//source for profile picture or original size
|
||||||
print("Source"+obj["link"]["0"]+source)
|
// print("Source"+source);
|
||||||
obj["source"]=source;
|
obj["source"]=source;
|
||||||
var filename=obj.filename;
|
var filename=obj.filename;
|
||||||
if (filename==""){// check if file as any filename
|
if (filename==""){// check if file as any filename
|
||||||
|
@ -45,7 +45,7 @@ function dataRequest(login,photoID,database,rootwindow) {
|
||||||
}
|
}
|
||||||
print("obj.Filename: "+obj["filename"]+" filename: "+filename)
|
print("obj.Filename: "+obj["filename"]+" filename: "+filename)
|
||||||
}
|
}
|
||||||
saveImage(obj,login.imagestore,function(obj,sprite){
|
saveImage(obj,login.imagestore+'albums/'+obj.album,function(obj,sprite){
|
||||||
//sprite.destroy(500);
|
//sprite.destroy(500);
|
||||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
|
@ -53,9 +53,9 @@ function dataRequest(login,photoID,database,rootwindow) {
|
||||||
var result = tx.executeSql('SELECT * from imageData where id = "'+obj["id"]+'"');
|
var result = tx.executeSql('SELECT * from imageData where id = "'+obj["id"]+'"');
|
||||||
if(result.rows.length === 1) {// use update
|
if(result.rows.length === 1) {// use update
|
||||||
print(obj["id"] +' exists, update it')
|
print(obj["id"] +' exists, update it')
|
||||||
result = tx.executeSql('UPDATE imageData SET username ="' +login.username+ '",id="'+obj.id+'", created="'+obj.created+'", edited="'+obj.edited+'", profile="'+obj.profile+'", link="'+obj.source+'", 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+'" where id="'+obj["id"]+'"');
|
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')
|
} 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.source,'file://'+login.imagestore]);
|
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+"/"]);
|
||||||
print("Inserted");}
|
print("Inserted");}
|
||||||
})})}}
|
})})}}
|
||||||
catch (e){print("Data retrieval failure! "+ e+obj);}
|
catch (e){print("Data retrieval failure! "+ e+obj);}
|
||||||
|
@ -63,18 +63,17 @@ function dataRequest(login,photoID,database,rootwindow) {
|
||||||
|
|
||||||
function saveImage(obj,storagedirectory,callback) {
|
function saveImage(obj,storagedirectory,callback) {
|
||||||
// create image component from base64 code and save it
|
// create image component from base64 code and save it
|
||||||
print("Storing "+storagedirectory+obj.filename+obj.width+"x"+obj.height);
|
print("Storing "+storagedirectory+"/"+obj.filename+obj.width+"x"+obj.height);
|
||||||
var maxSize=Math.max(fotostab.width,fotostab.height);
|
var maxSize=Math.max(fotostab.width,fotostab.height);
|
||||||
var helpwidth=(obj.width<maxSize)?obj.width:maxSize;
|
var helpwidth=(obj.width<maxSize)?obj.width:maxSize;
|
||||||
var helpheight=(obj.height<maxSize)?obj.height:maxSize;
|
var helpheight=(obj.height<maxSize)?obj.height:maxSize;
|
||||||
|
|
||||||
if (obj.width>obj.height){ //landscape
|
if (obj.width>obj.height){ //landscape
|
||||||
helpheight=helpwidth*obj.height/obj.width
|
helpheight=helpwidth*obj.height/obj.width
|
||||||
} else { //portrait
|
} else { //portrait
|
||||||
helpwidth=helpheight*obj.width/obj.height
|
helpwidth=helpheight*obj.width/obj.height
|
||||||
}
|
}
|
||||||
var component=Qt.createComponent("qrc:/qml/PhotoPlaceholder.qml");
|
var component=Qt.createComponent("qrc:/qml/PhotoPlaceholder.qml");
|
||||||
var sprite = component.createObject(fotostab, {"x":0,"y":0,"imageName":storagedirectory+obj.filename ,"width":helpwidth,"height":helpheight,"source": obj.source,"downloadtype":"picture"});
|
var sprite = component.createObject(fotostab, {"x":0,"y":0,"imageName":storagedirectory+"/"+obj.filename ,"width":helpwidth,"height":helpheight,"source": obj["link"]["4"],"downloadtype":"picture"});
|
||||||
callback(obj,sprite)
|
callback(obj,sprite)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,8 +140,8 @@ function initDatabase(database) { // initialize the database object
|
||||||
print('... create table')
|
print('... create table')
|
||||||
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 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)');
|
tx.executeSql('CREATE TABLE IF NOT EXISTS config(server TEXT, username TEXT, password TEXT, imagestore TEXT, maxnews INT, timerInterval INT, newsViewType TEXT,isActive INT)');
|
||||||
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,like TEXT, dislike TEXT, attendyes TEXT,attendno TEXT, attendmaybe 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)');
|
||||||
tx.executeSql('CREATE TABLE IF NOT EXISTS contacts(username TEXT, id INT, name TEXT, screen_name TEXT, location TEXT,description TEXT, profile_image BLOB, url TEXT, protected TEXT, followers_count INT, friends_count INT, created_at TEXT, 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 contacts(username TEXT, id INT, name TEXT, screen_name TEXT, location TEXT,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)');
|
tx.executeSql('CREATE TABLE IF NOT EXISTS groups(username TEXT, groupname TEXT, gid INT, members TEXT)');
|
||||||
})}
|
})}
|
||||||
|
|
||||||
|
|
0
v0.002/Develop/source-linux/qml/BlueButton.qml
Normal file
0
v0.002/Develop/source-linux/qml/BlueButton.qml
Normal file
|
@ -187,7 +187,8 @@ onCurrentIndexChanged:{
|
||||||
if (errormessage=="") {
|
if (errormessage=="") {
|
||||||
filesystem.Directory=userconfig.imagestore;
|
filesystem.Directory=userconfig.imagestore;
|
||||||
filesystem.makeDir("contacts");
|
filesystem.makeDir("contacts");
|
||||||
Service.storeConfig(db,userconfig);
|
filesystem.makeDir("albums");
|
||||||
|
Service.storeConfig(db,userconfig);
|
||||||
Service.readConfig(db,function(userconfig){Service.getServerConfig(userconfig,configBackground, function(obj){
|
Service.readConfig(db,function(userconfig){Service.getServerConfig(userconfig,configBackground, function(obj){
|
||||||
var serverString=obj;
|
var serverString=obj;
|
||||||
var serverconfigObject=Qt.createQmlObject(serverString,configBackground,"serverconfigOutput");
|
var serverconfigObject=Qt.createQmlObject(serverString,configBackground,"serverconfigOutput");
|
||||||
|
@ -236,13 +237,14 @@ onCurrentIndexChanged:{
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
try{Helperjs.readData(db,"config",root.login.username,function(users){
|
try{print("get users");
|
||||||
|
Helperjs.readData(db,"config","",function(users){
|
||||||
users.sort(function(obj1, obj2) {
|
users.sort(function(obj1, obj2) {
|
||||||
return obj1.isActive - obj2.isActive;
|
return obj1.isActive - obj2.isActive;
|
||||||
});
|
});
|
||||||
for (var i=0; i<users.length;i++){
|
for (var i=0; i<users.length;i++){
|
||||||
if (users[i]) {usermodel.append({text:users[i].username});};
|
if (users[i]) {usermodel.append({text:users[i].username});};
|
||||||
};})}
|
}})}
|
||||||
catch (e){print(e)}
|
catch (e){print(e)}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
137
v0.002/Develop/source-linux/qml/ContactComponent.qml
Normal file
137
v0.002/Develop/source-linux/qml/ContactComponent.qml
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Controls 1.3
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: contactComponent
|
||||||
|
property var createdAtDate: new Date(contact.created_at)
|
||||||
|
property var linkUrl: contact.network!=="dfrn"?contact.url:contact.url.replace("profile","dfrn_request")
|
||||||
|
Rectangle {
|
||||||
|
id: wrapper
|
||||||
|
width: 16*mm
|
||||||
|
height: 15*mm
|
||||||
|
border.color: "grey"
|
||||||
|
color:"white"
|
||||||
|
Image {
|
||||||
|
id: photoImage
|
||||||
|
x:1
|
||||||
|
y:1
|
||||||
|
width: 10*mm
|
||||||
|
height:10*mm
|
||||||
|
source:(contact.isFriend==1)? "file://"+contact.profile_image :contact.profile_image_url
|
||||||
|
onStatusChanged: if (photoImage.status == Image.Error) {source="qrc:/images/defaultcontact.jpg"}
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: namelabel
|
||||||
|
x: 1
|
||||||
|
width: wrapper.width-4
|
||||||
|
height: 3*mm
|
||||||
|
text: contact.screen_name
|
||||||
|
elide:Text.ElideRight
|
||||||
|
anchors.topMargin: 0
|
||||||
|
anchors.left: photoImage.left
|
||||||
|
color: "#303030"
|
||||||
|
font.pixelSize: 3*mm
|
||||||
|
anchors.top: photoImage.bottom
|
||||||
|
}
|
||||||
|
Button{
|
||||||
|
id:infobutton
|
||||||
|
width: 5*mm
|
||||||
|
height: 5*mm
|
||||||
|
text:"?"
|
||||||
|
anchors.left: photoImage.right
|
||||||
|
anchors.leftMargin: 3
|
||||||
|
anchors.topMargin: 3
|
||||||
|
anchors.top: parent.top
|
||||||
|
onClicked:{
|
||||||
|
//print("State: "+ friendComponent.state);
|
||||||
|
contactComponent.state="large"}
|
||||||
|
}
|
||||||
|
Rectangle{
|
||||||
|
id: detailsrectangle
|
||||||
|
anchors.top: namelabel.bottom
|
||||||
|
anchors.topMargin: 2*mm
|
||||||
|
opacity: 0
|
||||||
|
|
||||||
|
Flickable{
|
||||||
|
id:namelabelflickable
|
||||||
|
width: root.width-10*mm
|
||||||
|
height:friendsTabView.height-55*mm
|
||||||
|
boundsBehavior:Flickable.StopAtBounds
|
||||||
|
flickableDirection:Flickable.VerticalFlick
|
||||||
|
contentWidth:width
|
||||||
|
contentHeight: namelabeltext.height
|
||||||
|
clip:true
|
||||||
|
Text{
|
||||||
|
id:namelabeltext
|
||||||
|
//anchors.top: parent.top
|
||||||
|
width: namelabelflickable.width
|
||||||
|
height: implicitHeight
|
||||||
|
font.pixelSize: 3*mm
|
||||||
|
textFormat:Text.RichText
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
text:"<b>"+qsTr("Description")+": </b> "+Qt.atob(contact.description)+"<br> <b>"+qsTr("Server Type")+":</b> "+contact.location+"<br> <b>"+qsTr("Posts")+":</b> "+contact.statuses_count+
|
||||||
|
"<br> <b>"+qsTr("URL")+":</b> <a href='"+ linkUrl+"'>"+linkUrl+"</a><br> <b>"+
|
||||||
|
qsTr("Created at")+":</b> "+createdAtDate.toLocaleString(Qt.locale())
|
||||||
|
onLinkActivated: {
|
||||||
|
Qt.openUrlExternally(link)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Row{
|
||||||
|
anchors.top: namelabelflickable.bottom
|
||||||
|
anchors.topMargin: 2*mm
|
||||||
|
spacing:4
|
||||||
|
|
||||||
|
Button{
|
||||||
|
id:photobutton
|
||||||
|
text:"Photos"
|
||||||
|
visible:contact.location=="Friendica"? 1:0
|
||||||
|
onClicked:{contactComponent.state="";
|
||||||
|
root.currentIndex=2;
|
||||||
|
fotostab.active=true;
|
||||||
|
root.fotoSignal(contact) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button{
|
||||||
|
id:messagebutton
|
||||||
|
text:"Messages"
|
||||||
|
onClicked:{contactComponent.state="";
|
||||||
|
root.currentIndex=0;
|
||||||
|
newstab.active=true;
|
||||||
|
root.messageSignal(contact.id) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button{
|
||||||
|
id:dmbutton
|
||||||
|
visible: contact.following=="true"?true:false
|
||||||
|
text: "DM"
|
||||||
|
onClicked:{contactComponent.state="";
|
||||||
|
root.currentIndex=0;
|
||||||
|
newstab.active=true;
|
||||||
|
root.directmessageSignal(contact.screen_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button{
|
||||||
|
id: closeButton
|
||||||
|
text: "close"
|
||||||
|
onClicked:{contactComponent.state=""}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
states: [
|
||||||
|
State {
|
||||||
|
name: "large"
|
||||||
|
PropertyChanges { target: namelabel; font.pixelSize: 4*mm; width:friendsTabView.width-4*mm; text:Qt.atob(contact.name)+" (@"+contact.screen_name+")"}
|
||||||
|
PropertyChanges { target: contactComponent; z: 2 }
|
||||||
|
PropertyChanges { target: wrapper; width:friendsTabView.width-3*mm;height:friendsTabView.height-20*mm}
|
||||||
|
PropertyChanges { target: photoImage; width:15*mm;height:15*mm }
|
||||||
|
PropertyChanges { target:contactComponent.GridView.view;contentY:contactComponent.y;contentX:contactComponent.x;interactive:false}
|
||||||
|
PropertyChanges { target: detailsrectangle; opacity:1 }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import QtQuick.Dialogs 1.2
|
import QtQuick.Dialogs 1.2
|
||||||
import QtQuick.Controls 1.2
|
import QtQuick.Controls 1.2
|
||||||
|
import QtQuick.Controls.Styles 1.4
|
||||||
import "qrc:/js/service.js" as Service
|
import "qrc:/js/service.js" as Service
|
||||||
import "qrc:/js/helper.js" as Helperjs
|
import "qrc:/js/helper.js" as Helperjs
|
||||||
import "qrc:/js/news.js" as Newsjs
|
import "qrc:/js/news.js" as Newsjs
|
||||||
|
@ -17,17 +18,35 @@ Rectangle {
|
||||||
tabPosition: Qt.TopEdge
|
tabPosition: Qt.TopEdge
|
||||||
x:mm
|
x:mm
|
||||||
y:mm
|
y:mm
|
||||||
width: root.width-5*mm
|
width: root.width-2*mm
|
||||||
height: root.height-10*mm
|
height: root.height-10*mm
|
||||||
currentIndex: 0
|
currentIndex: 0
|
||||||
signal friendsSignal(var username)
|
|
||||||
signal contactsSignal(var username)
|
signal contactsSignal(var username)
|
||||||
signal groupsSignal(var username)
|
signal groupsSignal(var username)
|
||||||
onCurrentIndexChanged:{
|
onCurrentIndexChanged:{
|
||||||
if (currentIndex==0){friendsSignal(root.login.username)}
|
if (currentIndex==0){root.friendsSignal(root.login.username)}
|
||||||
else if (currentIndex==1){contactsSignal(root.login.username)}
|
else if (currentIndex==1){contactsSignal(root.login.username)}
|
||||||
else if (currentIndex==2){groupsSignal(root.login.username)}
|
else if (currentIndex==2){groupsSignal(root.login.username)}
|
||||||
}
|
}
|
||||||
|
style: TabViewStyle {
|
||||||
|
frameOverlap: 1
|
||||||
|
tab: Rectangle {
|
||||||
|
color: "white"
|
||||||
|
//border.color: "light grey"
|
||||||
|
implicitWidth: root.width/3-2*mm
|
||||||
|
implicitHeight: 4*mm
|
||||||
|
Text { id: text
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: styleData.title
|
||||||
|
color: "dark grey"
|
||||||
|
font.pixelSize:2.5*mm
|
||||||
|
font.bold: styleData.selected
|
||||||
|
}
|
||||||
|
}
|
||||||
|
frame: Rectangle { color: "light grey" }
|
||||||
|
tabsAlignment:Qt.AlignHCenter
|
||||||
|
}
|
||||||
|
|
||||||
Tab{
|
Tab{
|
||||||
title: qsTr("Friends")
|
title: qsTr("Friends")
|
||||||
|
@ -35,15 +54,16 @@ Rectangle {
|
||||||
id: friendsGridTab
|
id: friendsGridTab
|
||||||
function showFriends(username){
|
function showFriends(username){
|
||||||
try {friendsModel.clear()} catch(e){print(e)};
|
try {friendsModel.clear()} catch(e){print(e)};
|
||||||
Helperjs.readData(db,"contacts",username,function(friends){
|
Helperjs.readData(db,"contacts",username,function(friendsobject){
|
||||||
for (var i=0;i<friends.length;i++){
|
for (var i=0;i<friendsobject.length;i++){
|
||||||
friendsModel.append({"friend":friends[i]});
|
friendsModel.append({"contact":friendsobject[i]});
|
||||||
}},"isFriend",1)
|
}},"isFriend",1)
|
||||||
}
|
}
|
||||||
Button {
|
Button {
|
||||||
id: updateFriendsButton
|
id: updateFriendsButton
|
||||||
text: qsTr("Update")
|
text: qsTr("Update")
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
|
anchors.topMargin: mm
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
onClicked: {
|
onClicked: {
|
||||||
try {friendsModel.clear()} catch(e){print(e)};
|
try {friendsModel.clear()} catch(e){print(e)};
|
||||||
|
@ -67,7 +87,7 @@ Rectangle {
|
||||||
GridView {
|
GridView {
|
||||||
id: friendsView
|
id: friendsView
|
||||||
x:mm
|
x:mm
|
||||||
y:updateFriendsButton.height+mm
|
y:updateFriendsButton.height+2*mm
|
||||||
width:friendsGridTab.width-2*mm
|
width:friendsGridTab.width-2*mm
|
||||||
height:friendsGridTab.height-updateFriendsButton.height-2*mm
|
height:friendsGridTab.height-updateFriendsButton.height-2*mm
|
||||||
clip: true
|
clip: true
|
||||||
|
@ -77,7 +97,7 @@ Rectangle {
|
||||||
NumberAnimation { properties: "x,y"; from: 300; duration: 1000 }
|
NumberAnimation { properties: "x,y"; from: 300; duration: 1000 }
|
||||||
}
|
}
|
||||||
model: friendsModel
|
model: friendsModel
|
||||||
delegate: FriendComponent { }
|
delegate: ContactComponent { }
|
||||||
}
|
}
|
||||||
|
|
||||||
ListModel{id:friendsModel}
|
ListModel{id:friendsModel}
|
||||||
|
@ -85,7 +105,7 @@ Rectangle {
|
||||||
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
friendsTabView.friendsSignal.connect(showFriends);
|
root.friendsSignal.connect(showFriends);
|
||||||
showFriends(root.login.username)
|
showFriends(root.login.username)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -98,16 +118,16 @@ Rectangle {
|
||||||
id: contactsGridTab
|
id: contactsGridTab
|
||||||
function showContacts(username){
|
function showContacts(username){
|
||||||
try {contactsModel.clear()} catch(e){print(e)};
|
try {contactsModel.clear()} catch(e){print(e)};
|
||||||
Helperjs.readData(db, "contacts",root.login.username,function(friendsobject){
|
Helperjs.readData(db, "contacts",root.login.username,function(contactsobject){
|
||||||
for (var j=0;j<friendsobject.length;j++){
|
for (var j=0;j<contactsobject.length;j++){
|
||||||
contactsModel.append({"friend":friendsobject[j]});
|
contactsModel.append({"contact":contactsobject[j]});
|
||||||
}
|
}
|
||||||
},"isFriend",0)}
|
},"isFriend",0)}
|
||||||
|
|
||||||
GridView {
|
GridView {
|
||||||
id: contactsView
|
id: contactsView
|
||||||
x:mm
|
x:mm
|
||||||
y:mm
|
y:2*mm
|
||||||
width:contactsGridTab.width-2*mm
|
width:contactsGridTab.width-2*mm
|
||||||
height:contactsGridTab.height-2*mm
|
height:contactsGridTab.height-2*mm
|
||||||
clip: true
|
clip: true
|
||||||
|
@ -117,7 +137,7 @@ Rectangle {
|
||||||
NumberAnimation { properties: "x,y"; from: 300; duration: 1000 }
|
NumberAnimation { properties: "x,y"; from: 300; duration: 1000 }
|
||||||
}
|
}
|
||||||
model: contactsModel
|
model: contactsModel
|
||||||
delegate: FriendComponent { }
|
delegate: ContactComponent { }
|
||||||
}
|
}
|
||||||
|
|
||||||
ListModel{id: contactsModel}
|
ListModel{id: contactsModel}
|
||||||
|
@ -132,7 +152,6 @@ Rectangle {
|
||||||
id: groupsGridTab
|
id: groupsGridTab
|
||||||
function showGroups(username){
|
function showGroups(username){
|
||||||
try {groupsModel.clear()} catch(e){print(e)};
|
try {groupsModel.clear()} catch(e){print(e)};
|
||||||
print("showGroups"+username);
|
|
||||||
Helperjs.readData(db, "groups",root.login.username,function(groupsobject){
|
Helperjs.readData(db, "groups",root.login.username,function(groupsobject){
|
||||||
for (var j=0;j<groupsobject.length;j++){
|
for (var j=0;j<groupsobject.length;j++){
|
||||||
groupsModel.append({"group":groupsobject[j]});
|
groupsModel.append({"group":groupsobject[j]});
|
||||||
|
@ -141,6 +160,7 @@ Rectangle {
|
||||||
id: updateGroupsButton
|
id: updateGroupsButton
|
||||||
text: qsTr("Update")
|
text: qsTr("Update")
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
|
anchors.topMargin: mm
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
onClicked: {
|
onClicked: {
|
||||||
print("Update groups");
|
print("Update groups");
|
||||||
|
@ -150,7 +170,7 @@ Rectangle {
|
||||||
GridView {
|
GridView {
|
||||||
id: groupsView
|
id: groupsView
|
||||||
x:mm
|
x:mm
|
||||||
y:updateGroupsButton.height+mm
|
y:updateGroupsButton.height+2*mm
|
||||||
width:groupsGridTab.width-2*mm
|
width:groupsGridTab.width-2*mm
|
||||||
height:groupsGridTab.height-updateGroupsButton.height-2*mm
|
height:groupsGridTab.height-updateGroupsButton.height-2*mm
|
||||||
clip: true
|
clip: true
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import QtQuick.Controls 1.3
|
import QtQuick.Controls 1.3
|
||||||
import "qrc:/js/service.js" as Service
|
import "qrc:/js/helper.js" as Helperjs
|
||||||
import "qrc:/js/layout.js" as Layoutjs
|
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: groupComponent
|
id: groupComponent
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: wrapper
|
id: wrapper
|
||||||
width: 16*mm
|
width: 16*mm
|
||||||
|
@ -13,6 +10,14 @@ import "qrc:/js/layout.js" as Layoutjs
|
||||||
border.color: "grey"
|
border.color: "grey"
|
||||||
color:"white"
|
color:"white"
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: photoImage
|
||||||
|
x:1
|
||||||
|
y:1
|
||||||
|
width: 10*mm
|
||||||
|
height:10*mm
|
||||||
|
source:"qrc:/images/defaultcontact.jpg"
|
||||||
|
}
|
||||||
Label {
|
Label {
|
||||||
id: namelabel
|
id: namelabel
|
||||||
x: 1
|
x: 1
|
||||||
|
@ -22,127 +27,92 @@ import "qrc:/js/layout.js" as Layoutjs
|
||||||
|
|
||||||
color: "#303030"
|
color: "#303030"
|
||||||
font.pixelSize: 3*mm
|
font.pixelSize: 3*mm
|
||||||
anchors.centerIn:parent
|
anchors.top: photoImage.bottom
|
||||||
}
|
}
|
||||||
Button{
|
Button{
|
||||||
id:infobutton
|
id:infobutton
|
||||||
width: 5*mm
|
width: 5*mm
|
||||||
height: 5*mm
|
height: 5*mm
|
||||||
text:"?"
|
text:"?"
|
||||||
anchors.top: namelabel.bottom;anchors.topMargin: 3
|
anchors.left: photoImage.right
|
||||||
|
anchors.leftMargin: 3
|
||||||
|
anchors.topMargin: 3
|
||||||
|
anchors.top: parent.top
|
||||||
onClicked:{
|
onClicked:{
|
||||||
print("State: "+ groupComponent.state+groupView.contentY);
|
Helperjs.readField("members",root.db,"groups",root.login.username,function(groups){
|
||||||
|
try {groupModel.clear()}catch (e){print(e)}
|
||||||
|
var groupmembers=JSON.parse(groups);
|
||||||
|
for (var user in groupmembers){
|
||||||
|
Helperjs.readData(root.db,"contacts",root.login.username,function(userdata){
|
||||||
|
groupModel.append({"groupmember":userdata[0]});
|
||||||
|
},"id",groupmembers[user])}
|
||||||
|
},"groupname",group.groupname);
|
||||||
groupComponent.state="large"}
|
groupComponent.state="large"}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Rectangle{
|
Rectangle{
|
||||||
id: detailsrectangle
|
id: detailsrectangle
|
||||||
anchors.top: infobutton.bottom
|
anchors.top: namelabel.bottom
|
||||||
anchors.topMargin: 2*mm
|
anchors.topMargin: 2*mm
|
||||||
opacity: 0
|
opacity: 0
|
||||||
|
|
||||||
Component { id:footerComponent
|
|
||||||
Rectangle{
|
|
||||||
border.color: "#EEEEEE"
|
|
||||||
border.width: 1
|
|
||||||
width:parent.width
|
|
||||||
height:6*mm
|
|
||||||
Text{
|
|
||||||
font.pixelSize: 3*mm
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text:qsTr("+")
|
|
||||||
}
|
|
||||||
MouseArea{anchors.fill:parent
|
|
||||||
onClicked:{var contactitems="";
|
|
||||||
readData(db,"contacts",root.login.username, function(contacts){for (var i=0;i<contacts.length;i++){
|
|
||||||
contactitems=contactitems+"MenuItem{text:'"+contacts[i].screen_name+"'; onTriggered: groupModel.append(' @"+contacts[i]+"')}"
|
|
||||||
}},"isFriend",0)
|
|
||||||
var menuString="import QtQuick.Controls 1.4; Menu {"+contactitems+"}";
|
|
||||||
print("menustring: "+menuString);
|
|
||||||
var contactlistObject=Qt.createQmlObject(menuString,messageSend,"contactmenuOutput");
|
|
||||||
contactlistObject.popup();
|
|
||||||
Newsjs.addToGroup
|
|
||||||
}}}}
|
|
||||||
|
|
||||||
Component { id:groupMember
|
Component { id:groupMember
|
||||||
Rectangle{
|
Rectangle{
|
||||||
border.color: "#EEEEEE"
|
border.color: "#EEEEEE"
|
||||||
border.width: 1
|
border.width: 1
|
||||||
width:parent.width
|
width:parent.width
|
||||||
height:6*mm
|
height:6*mm
|
||||||
|
Image {
|
||||||
|
id: memberImage
|
||||||
|
x:1
|
||||||
|
y:1
|
||||||
|
width: 5*mm
|
||||||
|
height:5*mm
|
||||||
|
source:(groupmember.isFriend==1)? "file://"+groupmember.profile_image :groupmember.profile_image_url
|
||||||
|
onStatusChanged: if (photoImage.status == Image.Error) {source="qrc:/images/defaultcontact.jpg"}
|
||||||
|
}
|
||||||
Text{
|
Text{
|
||||||
font.pixelSize: 3*mm
|
font.pixelSize: 3*mm
|
||||||
anchors.left: parent.left
|
anchors.left: memberImage.right
|
||||||
text:groupmember.screen_name
|
anchors.margins: 1*mm
|
||||||
|
text:Qt.atob(groupmember.name)
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
|
||||||
ListView{
|
ListView{
|
||||||
id:namelabeltext
|
id: groupListView
|
||||||
anchors.top: parent.top
|
x:1
|
||||||
|
//anchors.top: parent.top
|
||||||
width: root.width-10*mm
|
width: root.width-10*mm
|
||||||
height:wrapper.height-20*mm
|
height:groupsView.height -28*mm
|
||||||
clip: true
|
clip: true
|
||||||
spacing: 0
|
spacing: 2
|
||||||
footer: footerComponent
|
|
||||||
model: groupModel
|
model: groupModel
|
||||||
delegate: groupMember
|
delegate: groupMember
|
||||||
}
|
}
|
||||||
|
|
||||||
ListModel{id: groupModel}
|
ListModel{id: groupModel}
|
||||||
|
|
||||||
}
|
Button{
|
||||||
|
id: closeButton
|
||||||
Row{
|
anchors.top: groupListView.bottom
|
||||||
anchors.top: namelabeltext.bottom
|
x:1
|
||||||
anchors.topMargin: 2*mm
|
text: "close"
|
||||||
spacing:4
|
onClicked:{groupComponent.state=""}
|
||||||
|
|
||||||
Button{
|
|
||||||
id:photobutton
|
|
||||||
text:"Photos"
|
|
||||||
visible:friend.location=="Friendica"? 1:0
|
|
||||||
onClicked:{root.currentIndex=2;
|
|
||||||
fotostab.active=true;
|
|
||||||
root.fotoSignal(friend) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Button{
|
|
||||||
id:messagebutton
|
|
||||||
text:"Messages"
|
|
||||||
onClicked:{root.currentIndex=0;
|
|
||||||
newstab.active=true;
|
|
||||||
root.messageSignal(friend.id) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Button{id:dmbutton
|
|
||||||
visible: friend.following=="true"?true:false
|
|
||||||
text: "DM"
|
|
||||||
onClicked:{root.currentIndex=0;
|
|
||||||
newstab.active=true;
|
|
||||||
root.directmessageSignal(friend.screen_name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Button{
|
|
||||||
id: closeButton
|
|
||||||
text: "close"
|
|
||||||
onClicked:{friendComponent.state=""}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
states: [
|
states: [
|
||||||
State {
|
State {
|
||||||
name: "large"
|
name: "large"
|
||||||
PropertyChanges { target: namelabel; font.pixelSize: 4*mm; width:friendsView.width; text:Qt.atob(friend.name)+" (@"+friend.screen_name+")"}
|
PropertyChanges { target: namelabel; font.pixelSize: 4*mm; width:groupsView.width}
|
||||||
PropertyChanges { target: friendComponent; z: 2 }
|
PropertyChanges { target: groupComponent; z: 2 }
|
||||||
PropertyChanges { target: wrapper; width:friendsView.width;height:friendsView.height -2*mm-1}
|
PropertyChanges { target: wrapper; width:groupsView.width;height:groupsView.height -2*mm-1}
|
||||||
PropertyChanges { target: photoImage; width:15*mm;height:15*mm }
|
PropertyChanges { target: photoImage; width:15*mm;height:15*mm }
|
||||||
PropertyChanges { target:friendComponent.GridView.view ;contentY:friendComponent.y;contentX:friendComponent.x;interactive:false}
|
PropertyChanges { target:groupComponent.GridView.view ;contentY:groupComponent.y;contentX:groupComponent.x;interactive:false}
|
||||||
PropertyChanges { target: detailsrectangle; opacity:1 }
|
PropertyChanges { target: detailsrectangle; opacity:1 }
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ Rectangle{
|
||||||
Text{id:infoBoxText
|
Text{id:infoBoxText
|
||||||
textFormat: Text.RichText
|
textFormat: Text.RichText
|
||||||
wrapMode: Text.Wrap
|
wrapMode: Text.Wrap
|
||||||
text: "<b>Friendiqa v0.001 </b><br>Licensed under GPL 3<br> "+
|
text: "<b>Friendiqa v0.002 </b><br>Licensed under GPL 3<br> "+
|
||||||
"Sourcecode: <a href='https://github.com/LubuWest/Friendiqa'>https://github.com/LubuWest/Friendica</a><br>"+
|
"Sourcecode: <a href='https://github.com/LubuWest/Friendiqa'>https://github.com/LubuWest/Friendica</a><br>"+
|
||||||
"C++ code by <a href='https://kirgroup.com/profile/fabrixxm'>Fabio</a><br>"+
|
"C++ code by <a href='https://kirgroup.com/profile/fabrixxm'>Fabio</a><br>"+
|
||||||
"QML and Javascript code by <a href='https://freunde.ma-nic.de/profile/marco'>Marco</a>"
|
"QML and Javascript code by <a href='https://freunde.ma-nic.de/profile/marco'>Marco</a>"
|
||||||
|
|
|
@ -5,18 +5,22 @@ import QtQml 2.2
|
||||||
import QtQuick.Controls 1.3
|
import QtQuick.Controls 1.3
|
||||||
import QtQuick.Dialogs 1.2
|
import QtQuick.Dialogs 1.2
|
||||||
import QtQuick.LocalStorage 2.0
|
import QtQuick.LocalStorage 2.0
|
||||||
//import "../qml"
|
import "qrc:/js/helper.js" as Helperjs
|
||||||
import "qrc:/js/service.js" as Service
|
import "qrc:/js/service.js" as Servicejs
|
||||||
|
|
||||||
Item{
|
Item{
|
||||||
id:messageSend
|
id:messageSend
|
||||||
property var login
|
property var login
|
||||||
property string parentId: ""
|
property string parentId: ""
|
||||||
property string reply_to_user:""
|
property string reply_to_user:""
|
||||||
property string attachImageURL: "";
|
property string attachImageURL: "";
|
||||||
property int directmessage: 0;
|
property int directmessage: 0;
|
||||||
property var contacts: []
|
property var contacts: []
|
||||||
// title: parentId !== "" ? qsTr("Reply to "+reply_to_user) : qsTr("New post")
|
property var groups: []
|
||||||
|
property string contact_allow:""
|
||||||
|
property string contact_deny:""
|
||||||
|
property string group_allow:""
|
||||||
|
property string group_deny:""
|
||||||
|
|
||||||
function statusUpdate(title,status,in_reply_to_status_id,attachImageURL) {
|
function statusUpdate(title,status,in_reply_to_status_id,attachImageURL) {
|
||||||
xhr.url= login.server + "/api/statuses/update.xml";
|
xhr.url= login.server + "/api/statuses/update.xml";
|
||||||
|
@ -46,7 +50,7 @@ Item{
|
||||||
Column {
|
Column {
|
||||||
id:messageColumn
|
id:messageColumn
|
||||||
spacing: 2
|
spacing: 2
|
||||||
|
width: parent.width
|
||||||
TextField {
|
TextField {
|
||||||
id: titleField
|
id: titleField
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
@ -59,8 +63,13 @@ Item{
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: 30*mm
|
height: 30*mm
|
||||||
wrapMode: TextEdit.Wrap
|
wrapMode: TextEdit.Wrap
|
||||||
|
textFormat: TextEdit.RichText
|
||||||
}
|
}
|
||||||
CheckBox{
|
|
||||||
|
Row{
|
||||||
|
|
||||||
|
spacing: 2
|
||||||
|
CheckBox{
|
||||||
id:dmCheckbox
|
id:dmCheckbox
|
||||||
text:"DM"
|
text:"DM"
|
||||||
enabled: false
|
enabled: false
|
||||||
|
@ -70,18 +79,59 @@ CheckBox{
|
||||||
else if(dmCheckbox.checkedState==Qt.Unchecked){directmessage=0}
|
else if(dmCheckbox.checkedState==Qt.Unchecked){directmessage=0}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Button{
|
||||||
|
text:qsTr("Url")
|
||||||
|
onClicked: {
|
||||||
|
if(bodyField.selectedText==""){Helperjs.showMessage("Error","No text selected",messageSend)}
|
||||||
|
else{urlTextEdit.text="";
|
||||||
|
urlRectangle.visible=true}}
|
||||||
|
}
|
||||||
|
Rectangle{
|
||||||
|
id:urlRectangle
|
||||||
|
height:parent.height
|
||||||
|
width:37*mm
|
||||||
|
visible:false
|
||||||
|
TextField{
|
||||||
|
id:urlTextEdit
|
||||||
|
width:30*mm
|
||||||
|
height:parent.height
|
||||||
|
}
|
||||||
|
Button{
|
||||||
|
anchors.left:urlTextEdit.right
|
||||||
|
anchors.leftMargin:mm
|
||||||
|
text:qsTr("\u2713")
|
||||||
|
onClicked: {
|
||||||
|
var start = bodyField.selectionStart;
|
||||||
|
var end = bodyField.selectionEnd;
|
||||||
|
var text = bodyField.getText(start,end);
|
||||||
|
text = "<a href='"+urlTextEdit.text+"'>" + text + "</a>";
|
||||||
|
bodyField.remove(start,end);
|
||||||
|
bodyField.insert(start,text);
|
||||||
|
urlRectangle.visible=false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Row{
|
Row{
|
||||||
spacing:2
|
spacing:2
|
||||||
Button {
|
Button{
|
||||||
id: cancelButton
|
text:qsTr("Permissions")
|
||||||
text: qsTr("Cancel")
|
onClicked: {
|
||||||
onClicked: {newsStack.pop()}
|
var component = Qt.createComponent("qrc:/qml/PermissionDialog.qml");
|
||||||
}
|
var sprite = component.createObject(messageColumn);
|
||||||
|
if (sprite == null) { // Error Handling
|
||||||
|
console.log("Error creating object"); }
|
||||||
|
}}
|
||||||
Button {
|
Button {
|
||||||
id: attachButton
|
id: attachButton
|
||||||
text: qsTr("Attach")
|
text: qsTr("Attach")
|
||||||
onClicked: {imageAttachmentDialog.open()}
|
onClicked: {
|
||||||
|
try{imageAttachment.visible=false;
|
||||||
|
imageAttachment.opacity=0;imageAttachment.destroy()}catch(e){}
|
||||||
|
imageAttachmentDialog.open()}
|
||||||
}
|
}
|
||||||
Button{
|
Button{
|
||||||
id:contactButton
|
id:contactButton
|
||||||
|
@ -90,43 +140,49 @@ CheckBox{
|
||||||
onClicked:{
|
onClicked:{
|
||||||
var contactitems="";
|
var contactitems="";
|
||||||
for (var i=0;i<contacts.length;i++){
|
for (var i=0;i<contacts.length;i++){
|
||||||
contactitems=contactitems+"MenuItem{text:'"+contacts[i]+"'; onTriggered: bodyField.append(' @"+contacts[i]+"')}"
|
contactitems=contactitems+"MenuItem{text:'"+contacts[i].screen_name+"'; onTriggered: bodyField.append(' @"+contacts[i].screen_name+"')}"
|
||||||
}
|
}
|
||||||
var menuString="import QtQuick.Controls 1.4; Menu {"+contactitems+"}";
|
var menuString="import QtQuick.Controls 1.4; Menu {"+contactitems+"}";
|
||||||
// print(menuString);
|
|
||||||
var contactlistObject=Qt.createQmlObject(menuString,messageSend,"contactmenuOutput")
|
var contactlistObject=Qt.createQmlObject(menuString,messageSend,"contactmenuOutput")
|
||||||
contactlistObject.popup() }
|
contactlistObject.popup() }
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
|
||||||
id: sendButton
|
|
||||||
text: qsTr("Send")
|
|
||||||
onClicked: {
|
|
||||||
print("login: "+login.server+login.username);
|
|
||||||
if (directmessage==0){
|
|
||||||
statusUpdate(titleField.text,bodyField.text,messageSend.parentId,attachImageURL.toString());}
|
|
||||||
else {dmUpdate( titleField.text,bodyField.text,"",messageSend.reply_to_user) }
|
|
||||||
newsStack.pop()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
Row{
|
||||||
|
spacing:2
|
||||||
|
Button {
|
||||||
|
id: cancelButton
|
||||||
|
text: qsTr("Cancel")
|
||||||
|
onClicked: {newsStack.pop()}
|
||||||
|
}
|
||||||
|
Button {
|
||||||
|
id: sendButton
|
||||||
|
text: qsTr("Send")
|
||||||
|
onClicked: {
|
||||||
|
//print("login: "+login.server+login.username);
|
||||||
|
var title=titleField.text.replace("\"","\'");
|
||||||
|
var body=bodyField.getText(0,bodyField.length);
|
||||||
|
if (directmessage==0){
|
||||||
|
statusUpdate(title,body,messageSend.parentId,attachImageURL.toString())}
|
||||||
|
else {dmUpdate( title,body,"",messageSend.reply_to_user) }
|
||||||
|
newsStack.pop()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FileDialog {
|
FileDialog {
|
||||||
id: imageAttachmentDialog
|
id: imageAttachmentDialog
|
||||||
title: "Please choose a picture"
|
title: "Please choose a picture"
|
||||||
folder: shortcuts.pictures
|
folder: shortcuts.pictures
|
||||||
selectFolder: false
|
selectFolder: false
|
||||||
onAccepted: {
|
onAccepted: {
|
||||||
attachImageURL=imageAttachmentDialog.fileUrl;
|
attachImageURL=imageAttachmentDialog.fileUrl;
|
||||||
var imageAttachementObject=Qt.createQmlObject('import QtQuick 2.0; Image {source:"'+attachImageURL.toString()+'"; width: 30*mm; height: 30*mm;fillMode: Image.PreserveAspectFit}',messageColumn,"attachedImage");
|
var imageAttachmentObject=Qt.createQmlObject('import QtQuick 2.0; Image {id:imageAttachment;source:"'+attachImageURL.toString()+'"; width: 15*mm; height: 15*mm;fillMode: Image.PreserveAspectFit}',messageColumn,"attachedImage");
|
||||||
console.log("You chose: " + attachImageURL)
|
//console.log("You chose: " + attachImageURL)
|
||||||
|
|
||||||
}
|
}
|
||||||
onRejected: {
|
onRejected: {
|
||||||
console.log("Canceled")
|
//console.log("Canceled")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ Item {
|
||||||
}
|
}
|
||||||
|
|
||||||
function onDirectMessage(friend){
|
function onDirectMessage(friend){
|
||||||
|
print(root.login.server);
|
||||||
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"reply_to_user": friend,"directmessage":1,"login":root.login}});
|
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"reply_to_user": friend,"directmessage":1,"login":root.login}});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,13 +52,43 @@ Item {
|
||||||
width:root.width-2*mm
|
width:root.width-2*mm
|
||||||
height:root.height-8*mm
|
height:root.height-8*mm
|
||||||
|
|
||||||
|
ComboBox{
|
||||||
|
y:mm
|
||||||
|
width: 8*mm
|
||||||
|
model: ListModel{
|
||||||
|
id: cbModel
|
||||||
|
ListElement{text: qsTr("News")}
|
||||||
|
ListElement{text: qsTr("Favorites")}
|
||||||
|
}
|
||||||
|
onCurrentIndexChanged:{
|
||||||
|
if (currentIndex==0){newsModel.clear();
|
||||||
|
Newsjs.newsfromdb(root.db,root.login.username, function(dbnews){
|
||||||
|
showNews(dbnews)
|
||||||
|
})}
|
||||||
|
else if (currentIndex==1){
|
||||||
|
newsBusy.running=true;
|
||||||
|
Newsjs.requestFavorites(root.login,db,root,function(news){
|
||||||
|
JSON.stringify("Favorites: "+news);
|
||||||
|
Newsjs.storeNews(root.login,root.db,news,root,function(){
|
||||||
|
Newsjs.favoritesfromdb(db,root.login.username,function(newsarray){
|
||||||
|
JSON.stringify("FavoritesArray: "+newsarray);showNews(newsarray)
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
)})
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
id: newMessageButton
|
id: newMessageButton
|
||||||
text: qsTr("+")
|
text: qsTr("+")
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
onClicked: {
|
onClicked: {
|
||||||
Helperjs.readField("screen_name",root.db,"contacts",root.login.username,function(friends){
|
var groups=[];
|
||||||
|
Helperjs.readData(root.db,"groups",root.login.username,function(groupobject){
|
||||||
|
groups=groupobject});
|
||||||
|
Helperjs.readData(root.db,"contacts",root.login.username,function(friends){
|
||||||
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"contacts": friends,"login":root.login}})
|
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"contacts": friends,"login":root.login}})
|
||||||
},"isFriend",1);
|
},"isFriend",1);
|
||||||
}
|
}
|
||||||
|
@ -150,6 +181,6 @@ Item {
|
||||||
showNews(dbnews)
|
showNews(dbnews)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,15 +3,13 @@ import QtQuick.LocalStorage 2.0
|
||||||
import QtQuick.Controls 1.4
|
import QtQuick.Controls 1.4
|
||||||
import QtQuick.Controls.Styles 1.4
|
import QtQuick.Controls.Styles 1.4
|
||||||
import "qrc:/js/news.js" as Newsjs
|
import "qrc:/js/news.js" as Newsjs
|
||||||
import "qrc:/js/layout.js" as Layoutjs
|
|
||||||
|
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: newsitem
|
id: newsitem
|
||||||
width: newsView.width
|
width: newsView.width
|
||||||
height:Math.max((itemMessage.height+createdAtLabel.height+friendicaActivities.height+4*mm),profileImage.height+user_name.height+mm)
|
height:Math.max((itemMessage.height+topFlow.height+friendicaActivities.height+4*mm),profileImage.height+user_name.height+mm)
|
||||||
|
|
||||||
// property var friendica_activities
|
|
||||||
property string conversation_id: ""
|
property string conversation_id: ""
|
||||||
property string attending: ""
|
property string attending: ""
|
||||||
onAttendingChanged: {attendLabel.visible=true;
|
onAttendingChanged: {attendLabel.visible=true;
|
||||||
|
@ -23,7 +21,7 @@ Item {
|
||||||
Rectangle{
|
Rectangle{
|
||||||
width:newsitem.width
|
width:newsitem.width
|
||||||
height:newsitem.height-1
|
height:newsitem.height-1
|
||||||
color: (newsitemobject.directmessage)?"#ffe6e6" : "white"
|
color: (newsitemobject.messagetype==1)?"#ffe6e6" : "white"
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: authorcolumn
|
id: authorcolumn
|
||||||
|
@ -31,7 +29,7 @@ Item {
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id:profileImage
|
id:profileImage
|
||||||
source: "file://"+newsitemobject.user.profile_image
|
source:(newsitemobject.user.isFriend==1)? "file://"+newsitemobject.user.profile_image : newsitemobject.user.profile_image_url
|
||||||
x:1
|
x:1
|
||||||
width: 7*mm
|
width: 7*mm
|
||||||
height: 7*mm
|
height: 7*mm
|
||||||
|
@ -53,10 +51,13 @@ Item {
|
||||||
}
|
}
|
||||||
Column {
|
Column {
|
||||||
id:newscolumn
|
id:newscolumn
|
||||||
|
width: newsitem.width-8*mm
|
||||||
anchors.left: authorcolumn.right
|
anchors.left: authorcolumn.right
|
||||||
|
|
||||||
Row{
|
Flow{
|
||||||
spacing: 5*mm
|
id:topFlow
|
||||||
|
spacing: 2*mm
|
||||||
|
width:parent.width
|
||||||
Label {
|
Label {
|
||||||
color: "grey"
|
color: "grey"
|
||||||
text: if (newsitemobject.messagetype==0){qsTr("Source: ")+newsitemobject.source
|
text: if (newsitemobject.messagetype==0){qsTr("Source: ")+newsitemobject.source
|
||||||
|
@ -66,9 +67,9 @@ Item {
|
||||||
Label {
|
Label {
|
||||||
id:createdAtLabel
|
id:createdAtLabel
|
||||||
color: "grey"
|
color: "grey"
|
||||||
height:3.5*mm
|
height:3.5*mm
|
||||||
font.pixelSize: 1.5*mm
|
font.pixelSize: 1.5*mm
|
||||||
horizontalAlignment: Label.AlignRight
|
horizontalAlignment: Label.AlignRight
|
||||||
text: dateDiff
|
text: dateDiff
|
||||||
}
|
}
|
||||||
CheckBox {
|
CheckBox {
|
||||||
|
@ -104,8 +105,53 @@ Item {
|
||||||
{Newsjs.favorite(login,false,newsitemobject.status_id,root)}
|
{Newsjs.favorite(login,false,newsitemobject.status_id,root)}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Rectangle{
|
||||||
|
width: 4*mm
|
||||||
|
height: 3*mm
|
||||||
|
Text{
|
||||||
|
id:newsmenusymbol
|
||||||
|
color: "grey"
|
||||||
|
anchors.centerIn: parent
|
||||||
|
font.pixelSize: 2*mm
|
||||||
|
font.bold: true
|
||||||
|
text: "\u22EE"
|
||||||
|
}
|
||||||
|
MouseArea{
|
||||||
|
anchors.fill:parent
|
||||||
|
onClicked: {newsmenu.popup()}}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rectangle{
|
||||||
|
width: 4*mm
|
||||||
|
height: 3*mm
|
||||||
|
Text{
|
||||||
|
id:conversationsymbol
|
||||||
|
color: "grey"
|
||||||
|
anchors.centerIn: parent
|
||||||
|
font.pixelSize: 2*mm
|
||||||
|
text: "\u21C4"
|
||||||
|
}
|
||||||
|
MouseArea{
|
||||||
|
anchors.fill:parent
|
||||||
|
onClicked: {
|
||||||
|
newsBusy.running=true;
|
||||||
|
Newsjs.requestConversation(root.login,db,newsitemobject.status_id,root.contactlist,root,function(news,newContacts){
|
||||||
|
for (var i=0;i<newContacts.length;i++){
|
||||||
|
root.updateContactInDB(root.login,root.db,0,newContacts[i])
|
||||||
|
}
|
||||||
|
Newsjs.storeNews(root.login,root.db,news,root,function(){
|
||||||
|
var currentTime= new Date();
|
||||||
|
Newsjs.conversationfromdb(db,root.login.username,newsitemobject.statusnet_conversation_id, function(newsarray){
|
||||||
|
newsModel.clear();
|
||||||
|
var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsarray,'latestmessage':0};
|
||||||
|
newsWorker.sendMessage(msg);
|
||||||
|
newsBusy.running=false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
)})
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
color: "#404040"
|
color: "#404040"
|
||||||
|
@ -116,10 +162,10 @@ Item {
|
||||||
width: newsitem.width-8*mm-2
|
width: newsitem.width-8*mm-2
|
||||||
height: implicitHeight
|
height: implicitHeight
|
||||||
wrapMode: Text.Wrap
|
wrapMode: Text.Wrap
|
||||||
onLinkActivated:{ print("link "+link);
|
onLinkActivated:{
|
||||||
Qt.openUrlExternally(link)}
|
Qt.openUrlExternally(link)}
|
||||||
}
|
}
|
||||||
Row{id: friendicaActivities
|
Row{id:friendicaActivities
|
||||||
spacing:mm
|
spacing:mm
|
||||||
Label{color: "grey"
|
Label{color: "grey"
|
||||||
font.pixelSize: 1.5*mm
|
font.pixelSize: 1.5*mm
|
||||||
|
@ -141,13 +187,13 @@ Item {
|
||||||
font.pixelSize: 1.5*mm
|
font.pixelSize: 1.5*mm
|
||||||
text: friendica_activities.attendmaybeText
|
text: friendica_activities.attendmaybeText
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Row {
|
Row {
|
||||||
CheckBox{id:likeCheckbox
|
CheckBox{id:likeCheckbox
|
||||||
height:3*mm
|
height:3*mm
|
||||||
width:8*mm
|
width:8*mm
|
||||||
checked:(newsitemobject.liked==1)?true:false
|
checked:(friendica_activities.self.liked)?true:false
|
||||||
style: CheckBoxStyle {
|
style: CheckBoxStyle {
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
implicitWidth: 7*mm
|
implicitWidth: 7*mm
|
||||||
implicitHeight: 3*mm
|
implicitHeight: 3*mm
|
||||||
|
@ -170,11 +216,11 @@ Row {
|
||||||
else{Newsjs.like(root.login,root.db,0,"like",newsitemobject.status_id,root)}}
|
else{Newsjs.like(root.login,root.db,0,"like",newsitemobject.status_id,root)}}
|
||||||
}
|
}
|
||||||
CheckBox{id: dislikeCheckbox
|
CheckBox{id: dislikeCheckbox
|
||||||
height:3*mm
|
height:3*mm
|
||||||
width:8*mm
|
width:8*mm
|
||||||
checked: (newsitemobject.disliked==1)?true:false
|
checked: (friendica_activities.self.disliked)?true:false
|
||||||
style: CheckBoxStyle {
|
style: CheckBoxStyle {
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
implicitWidth: 7*mm
|
implicitWidth: 7*mm
|
||||||
implicitHeight:3*mm
|
implicitHeight:3*mm
|
||||||
color:"white"
|
color:"white"
|
||||||
|
@ -211,7 +257,7 @@ Row {
|
||||||
height:3.5*mm
|
height:3.5*mm
|
||||||
font.pixelSize: 1.5*mm
|
font.pixelSize: 1.5*mm
|
||||||
horizontalAlignment: Label.AlignRight
|
horizontalAlignment: Label.AlignRight
|
||||||
text: qsTr("attending: ")+ qsTr(attending)
|
text: (friendica_activities.self.attending)?qsTr("attending: ")+ qsTr(attending):""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -221,10 +267,10 @@ Row {
|
||||||
MenuItem {
|
MenuItem {
|
||||||
text: qsTr("Reply")
|
text: qsTr("Reply")
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"reply_to_user": newsitemobject.user.screen_name,"parentId":newsitemobject.status_id}});
|
newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"reply_to_user": newsitemobject.user.screen_name,"parentId":newsitemobject.status_id,"login":root.login}});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MenuItem {
|
MenuItem {
|
||||||
text: qsTr("DM")
|
text: qsTr("DM")
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
root.directmessageSignal(newsitemobject.user.screen_name);
|
root.directmessageSignal(newsitemobject.user.screen_name);
|
||||||
|
@ -241,16 +287,20 @@ MenuItem {
|
||||||
MenuItem {
|
MenuItem {
|
||||||
text: qsTr("Conversation")
|
text: qsTr("Conversation")
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
Newsjs.requestConversation(root.login,db,newsitemobject.status_id,root,function(){
|
Newsjs.requestConversation(root.login,db,newsitemobject.status_id,root.contactlist,root,function(news,newContacts){
|
||||||
var currentTime= new Date();
|
for (var i=0;i<newContacts.length;i++){
|
||||||
Newsjs.conversationfromdb(db,root.login.username,newsitemobject.statusnet_conversation_id, function(newsarray){
|
root.updateContactInDB(root.login,root.db,0,newContacts[i])
|
||||||
|
}
|
||||||
|
Newsjs.storeNews(root.login,root.db,news,root,function(){
|
||||||
|
var currentTime= new Date();
|
||||||
|
Newsjs.conversationfromdb(db,root.login.username,newsitemobject.statusnet_conversation_id, function(newsarray){
|
||||||
newsModel.clear();
|
newsModel.clear();
|
||||||
var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsarray,'latestmessage':0};
|
var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsarray,'latestmessage':0};
|
||||||
newsWorker.sendMessage(msg);
|
newsWorker.sendMessage(msg);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
)}
|
)})
|
||||||
}
|
}}
|
||||||
|
|
||||||
Menu{
|
Menu{
|
||||||
title: qsTr("Attending")
|
title: qsTr("Attending")
|
||||||
|
@ -275,8 +325,8 @@ Menu{
|
||||||
MenuItem {
|
MenuItem {
|
||||||
text: qsTr("Delete")
|
text: qsTr("Delete")
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
Newsjs.deleteNews(root.login,db,newsitemobject.status_id,root,function(reply){
|
Newsjs.deleteNews(root.login,root.db,newsitemobject.status_id,root,function(reply){
|
||||||
print(JSON.stringify(reply));
|
print("Deleted "+reply);
|
||||||
newsModel.remove(index);
|
newsModel.remove(index);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
126
v0.002/Develop/source-linux/qml/PermissionDialog.qml
Normal file
126
v0.002/Develop/source-linux/qml/PermissionDialog.qml
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Dialogs 1.2
|
||||||
|
import QtQuick.Controls 1.4
|
||||||
|
import QtQml.Models 2.1
|
||||||
|
import "qrc:/js/service.js" as Service
|
||||||
|
import "qrc:/js/helper.js" as Helperjs
|
||||||
|
|
||||||
|
Rectangle{
|
||||||
|
id:permissionDialog
|
||||||
|
width: 80*mm
|
||||||
|
height:root.height/3
|
||||||
|
|
||||||
|
Text{
|
||||||
|
x:0.5*mm
|
||||||
|
y:0.5*mm
|
||||||
|
text: "Contacts"
|
||||||
|
}
|
||||||
|
ListView {
|
||||||
|
id: contactView
|
||||||
|
x:0.5*mm
|
||||||
|
y:5.5*mm
|
||||||
|
width: 39*mm
|
||||||
|
height:permissionDialog.height-14*mm
|
||||||
|
clip: true
|
||||||
|
spacing: 0
|
||||||
|
model: contactModel
|
||||||
|
delegate: contactItem
|
||||||
|
}
|
||||||
|
|
||||||
|
ListModel{id: contactModel}
|
||||||
|
Component{
|
||||||
|
id:contactItem
|
||||||
|
|
||||||
|
Rectangle{
|
||||||
|
id:contactitemRect
|
||||||
|
width:contactView.width
|
||||||
|
height: 5*mm
|
||||||
|
property string contactstatus:""
|
||||||
|
color: "light blue"
|
||||||
|
border.color:"grey"
|
||||||
|
Text{
|
||||||
|
color:"grey"
|
||||||
|
text:contact.screen_name
|
||||||
|
}
|
||||||
|
onContactstatusChanged:
|
||||||
|
{ if(contactstatus=="positive"){contactsitemRect.color="green"} else if (contactstatus=="negative"){contactsitemRect.color= "red"} else{contactsitemRect.color= "white"}}
|
||||||
|
MouseArea{
|
||||||
|
anchors.fill: parent}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Text{
|
||||||
|
x:20*mm
|
||||||
|
y:0.5*mm
|
||||||
|
text: "Groups"
|
||||||
|
}
|
||||||
|
ListView {
|
||||||
|
id: groupView
|
||||||
|
x:20*mm
|
||||||
|
y:5.5*mm
|
||||||
|
width: 19*mm
|
||||||
|
height:permissionDialog-8*mm
|
||||||
|
clip: true
|
||||||
|
spacing: 0
|
||||||
|
model: groupModel
|
||||||
|
delegate: groupItem
|
||||||
|
}
|
||||||
|
|
||||||
|
ListModel{id: groupModel}
|
||||||
|
Component{
|
||||||
|
id:groupItem
|
||||||
|
|
||||||
|
Rectangle{
|
||||||
|
id:groupitemRect
|
||||||
|
width:groupView.width
|
||||||
|
height: 5*mm
|
||||||
|
property string groupstatus:""
|
||||||
|
color: "white"
|
||||||
|
border.color:"grey"
|
||||||
|
Text{
|
||||||
|
color:"grey"
|
||||||
|
text:group.groupname
|
||||||
|
}
|
||||||
|
onGroupstatusChanged:
|
||||||
|
{ if(groupstatus=="positive"){groupitemRect.color="green"} else if (groupstatus=="negative"){groupitemRect.color= "red"} else{groupitemRect.color= "white"}}
|
||||||
|
MouseArea{
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked:{
|
||||||
|
if(groupModel.get(index).groupstatus=="neutral"){
|
||||||
|
groupModel.setProperty(index,"groupstatus","positive")}
|
||||||
|
else if (groupModel.get(index).groupstatus=="positive"){
|
||||||
|
groupModel.setProperty(index,"groupstatus","negative")}
|
||||||
|
else{groupModel.setProperty(index,"groupstatus","neutral")}
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button{
|
||||||
|
anchors.horizontalCenter: parent.hoizontalCenter
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.bottomMargin:1
|
||||||
|
text:qsTr("Done")
|
||||||
|
onClicked:{var group_allow=[];
|
||||||
|
for (var i=0;i<groupModel.count;i++)
|
||||||
|
{if (groupModel.get(i).groupstatus=="positive"){
|
||||||
|
group_allow.append(groupModel.get(i).groupname)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print("groups"+JSON.stringify(group_allow))
|
||||||
|
permissionDialog.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted:{
|
||||||
|
print("permissiondialog completed");
|
||||||
|
Helperjs.readData(db,"contacts",login.username,function(contacts){
|
||||||
|
for (var name in contacts){
|
||||||
|
print("contact: "+JSON.stringify(contacts[name]));
|
||||||
|
contactModel.append({"contact":contacts[name]})
|
||||||
|
}},"isFriend",1);
|
||||||
|
|
||||||
|
Helperjs.readData(db,"groups",login.username,function(owngroups){
|
||||||
|
for (var number in owngroups){
|
||||||
|
groupModel.append({"group":owngroup[number]})
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,17 +18,42 @@ Rectangle {
|
||||||
// photoWorker.sendMessage(msg);
|
// photoWorker.sendMessage(msg);
|
||||||
//}
|
//}
|
||||||
onNewImagesChanged:{
|
onNewImagesChanged:{
|
||||||
|
Helperjs.readField("album",root.db,"imageData",root.login.username,function(albums){
|
||||||
|
//print("albums"+JSON.stringify(albums)+JSON.stringify(newImages[currentImageNo]));
|
||||||
|
if(albums.indexOf(newImages[currentImageNo].album)==-1){
|
||||||
|
filesystem.Directory=root.login.imagestore+"/albums";
|
||||||
|
filesystem.makeDir(newImages[currentImageNo].album);}
|
||||||
|
});
|
||||||
if(newImages.length>0){
|
if(newImages.length>0){
|
||||||
|
print("Current image number"+currentImageNo)
|
||||||
Service.dataRequest(root.login,newImages[currentImageNo].id,root.db,fotorectangle);
|
Service.dataRequest(root.login,newImages[currentImageNo].id,root.db,fotorectangle);
|
||||||
newImagesProgress.visible=true //download first image
|
newImagesProgress.visible=true //download first image
|
||||||
}}
|
}}
|
||||||
|
|
||||||
onCurrentImageNoChanged:{
|
onCurrentImageNoChanged:{
|
||||||
if(currentImageNo<newImages.length){Service.dataRequest(root.login,newImages[currentImageNo].id,root.db,fotorectangle)};
|
if(currentImageNo<newImages.length){Service.dataRequest(root.login,newImages[currentImageNo].id,root.db,fotorectangle)};
|
||||||
if(currentImageNo==newImages.length){newImagesProgress.visible=false;showOwnFotos();
|
if(currentImageNo==newImages.length){newImagesProgress.visible=false;showOwnFotos();
|
||||||
newImages=[];currentImageNo=0}
|
newImages=[];currentImageNo=0}
|
||||||
// download next image if photoplaceholder is finished saving
|
// download next image if photoplaceholder is finished saving
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showOwnFotos(){
|
||||||
|
try {photogroupModel.clear()}catch (e){print(e)}
|
||||||
|
Helperjs.readField("album",root.db, "imageData",root.login.username,function(albums){
|
||||||
|
if (albums[0]) {
|
||||||
|
var msg = { 'model': photogroupModel,'albums':albums,'firstalbum':0,'foreignPicture': false};
|
||||||
|
photoWorker.sendMessage(msg);
|
||||||
|
};
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function onFriendsFotos(friend){print("Friend "+friend.url);
|
||||||
|
try {photogroupModel.clear()}catch (e){print(e)}
|
||||||
|
Service.requestFriendsAlbumPictures(friend,fotostab,function(albums){
|
||||||
|
var msg = {'model': photogroupModel,'albums':albums,'firstalbum':0,'foreignPicture':true};
|
||||||
|
photoWorker.sendMessage(msg);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
ProgressBar{
|
ProgressBar{
|
||||||
id: newImagesProgress
|
id: newImagesProgress
|
||||||
|
@ -118,23 +143,5 @@ Button {
|
||||||
ListView {anchors.fill: parent; model: visualphotoModel.parts.fullscreen; interactive: false }
|
ListView {anchors.fill: parent; model: visualphotoModel.parts.fullscreen; interactive: false }
|
||||||
WorkerScript{id: photoWorker;source: "qrc:/js/photoworker.js"}
|
WorkerScript{id: photoWorker;source: "qrc:/js/photoworker.js"}
|
||||||
|
|
||||||
function showOwnFotos(){
|
Component.onCompleted: { root.fotoSignal.connect(onFriendsFotos);}
|
||||||
try {photogroupModel.clear()}catch (e){print(e)}
|
|
||||||
Helperjs.readField("album",root.db, "imageData",root.login.username,function(albums){
|
|
||||||
if (albums[0]) {
|
|
||||||
var msg = { 'model': photogroupModel,'albums':albums,'firstalbum':0,'foreignPicture': false};
|
|
||||||
photoWorker.sendMessage(msg);
|
|
||||||
};
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function onFriendsFotos(friend){print("Friend "+friend.url);
|
|
||||||
try {photogroupModel.clear()}catch (e){print(e)}
|
|
||||||
Service.requestFriendsAlbumPictures(friend,fotostab,function(albums){
|
|
||||||
var msg = {'model': photogroupModel,'albums':albums,'firstalbum':0,'foreignPicture':true};
|
|
||||||
photoWorker.sendMessage(msg);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: { root.fotoSignal.connect(onFriendsFotos);}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ import QtQuick.LocalStorage 2.0
|
||||||
import QtQuick.Window 2.0
|
import QtQuick.Window 2.0
|
||||||
import QtQuick.Dialogs 1.2
|
import QtQuick.Dialogs 1.2
|
||||||
import QtQuick.Controls 1.2
|
import QtQuick.Controls 1.2
|
||||||
|
import QtQuick.Controls.Styles 1.4
|
||||||
|
|
||||||
import QtQml.Models 2.1
|
import QtQml.Models 2.1
|
||||||
import "qrc:/js/news.js" as Newsjs
|
import "qrc:/js/news.js" as Newsjs
|
||||||
|
@ -26,7 +27,7 @@ TabView{
|
||||||
signal fotoSignal(var friend)
|
signal fotoSignal(var friend)
|
||||||
signal directmessageSignal(var friend)
|
signal directmessageSignal(var friend)
|
||||||
signal newsSignal(var news)
|
signal newsSignal(var news)
|
||||||
|
signal friendsSignal(var username)
|
||||||
|
|
||||||
currentIndex: (login=="")? 3:0
|
currentIndex: (login=="")? 3:0
|
||||||
|
|
||||||
|
@ -39,11 +40,11 @@ TabView{
|
||||||
newsSignal(dbnews)
|
newsSignal(dbnews)
|
||||||
})}
|
})}
|
||||||
onNewContactsChanged:{if(newContacts.length>0){// download first contact image and update db
|
onNewContactsChanged:{if(newContacts.length>0){// download first contact image and update db
|
||||||
print("newcontact"+JSON.stringify(newContacts[0]));
|
// print("newcontact"+JSON.stringify(newContacts));
|
||||||
updateContactInDB(login,db,newContacts[currentContact].isFriend,newContacts[currentContact])}
|
updateContactInDB(login,db,newContacts[currentContact].isFriend,newContacts[currentContact])}
|
||||||
}
|
}
|
||||||
onCurrentContactChanged:{// download next contact image after photoplaceholder is finished saving and update db
|
onCurrentContactChanged:{// download next contact image after photoplaceholder is finished saving and update db
|
||||||
print("Current contact"+JSON.stringify(newContacts[currentContact]));
|
//print("Current contact"+JSON.stringify(newContacts[currentContact]));
|
||||||
if(currentContact<newContacts.length){
|
if(currentContact<newContacts.length){
|
||||||
updateContactInDB(login,db,newContacts[currentContact].isFriend,newContacts[currentContact])}
|
updateContactInDB(login,db,newContacts[currentContact].isFriend,newContacts[currentContact])}
|
||||||
else if(currentContact==newContacts.length){//newImagesProgress.visible=false;
|
else if(currentContact==newContacts.length){//newImagesProgress.visible=false;
|
||||||
|
@ -66,25 +67,56 @@ TabView{
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateContactInDB(login,database,isFriend,contact){// for newstab and friendstab
|
function updateContactInDB(login,database,isFriend,contact){// for newstab and friendstab
|
||||||
try{var imagename=login.imagestore+"contacts/"+contact.screen_name+".jpg";
|
var imagename=login.imagestore+"contacts/"+contact.screen_name.trim()+".jpg";
|
||||||
var component=Qt.createComponent("qrc:/qml/PhotoPlaceholder.qml");
|
if (isFriend==1){
|
||||||
print("imageName "+imagename+" source "+ contact.profile_image_url)
|
xhr.setUrl(Qt.resolvedUrl(contact.profile_image_url));
|
||||||
var sprite = component.createObject(root, {"fillMode": "Image.PreserveAspectFit","x":root.width,"y":50,"imageName":imagename,"source": contact.profile_image_url,"downloadtype":"contact"});} catch(e){print("Fehler beim Profilbild"+e)}
|
xhr.setFilename(imagename);
|
||||||
|
xhr.download();
|
||||||
|
}
|
||||||
var db=LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
var db=LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
|
||||||
var result;
|
var result;
|
||||||
db.transaction( function(tx) {
|
db.transaction( function(tx) {
|
||||||
result = tx.executeSql('SELECT * from contacts where id = '+contact.id); // check for news id
|
result = tx.executeSql('SELECT * from contacts where id = '+contact.id); // check for news id
|
||||||
if(result.rows.length === 1) {// use update
|
if(result.rows.length === 1) {// use update
|
||||||
result = tx.executeSql('UPDATE contacts SET username="'+login.username+'", id='+contact.id+', name="'+Qt.btoa(contact.name)+'", screen_name="'+contact.screen_name+'", location="'+contact.location+'",description="'+Qt.btoa(contact.description)+'", profile_image="'+imagename+'", url="'+contact.url+'" , protected="'+contact.protected+'", followers_count='+contact.followers_count+', friends_count='+contact.friends_count+', created_at="'+ 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 id='+contact.id);
|
result = tx.executeSql('UPDATE contacts SET username="'+login.username+'", id='+contact.id+', name="'+Qt.btoa(contact.name)+'", screen_name="'+contact.screen_name+'", location="'+contact.location+'", profile_image_url="'+contact.profile_image_url+'", description="'+Qt.btoa(contact.description)+'", profile_image="'+imagename+'", url="'+contact.url+'" , 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 id='+contact.id);
|
||||||
} else {// use insert
|
} else {// use insert
|
||||||
result = tx.executeSql('INSERT INTO contacts VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,contact.id,Qt.btoa(contact.name),contact.screen_name,contact.location,Qt.btoa(contact.description),imagename,contact.url,contact.protected,contact.followers_count, contact.friends_count,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]);}
|
result = tx.executeSql('INSERT INTO contacts VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,contact.id,Qt.btoa(contact.name),contact.screen_name,contact.location,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]);}
|
||||||
});
|
});
|
||||||
|
if (isFriend!=1){root.currentContact=root.currentContact+1}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Connections{
|
||||||
|
target:xhr
|
||||||
|
onDownloaded:{root.currentContact=root.currentContact+1}
|
||||||
|
}
|
||||||
|
Connections{
|
||||||
|
target:xhr
|
||||||
|
onError:{print("Error"+data)}
|
||||||
|
}
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
if (login==""){Service.initDatabase(db)}
|
if (login==""){Service.initDatabase(db)}
|
||||||
Helperjs.readField("id",db,"contacts",login.username,function(contacts){contactlist=contacts},"isFriend",1)
|
Helperjs.readField("id",db,"contacts",login.username,function(contacts){contactlist=contacts},"isFriend",1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
style: TabViewStyle {
|
||||||
|
frameOverlap: 1
|
||||||
|
tab: Rectangle {
|
||||||
|
color: styleData.selected?"white":"light blue"
|
||||||
|
border.color: "light grey"
|
||||||
|
implicitWidth: root.width/4-2*mm
|
||||||
|
implicitHeight: 4*mm
|
||||||
|
Text { id: text
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: styleData.title
|
||||||
|
color: "black"
|
||||||
|
font.pixelSize:3*mm
|
||||||
|
font.bold: styleData.selected
|
||||||
|
}
|
||||||
|
}
|
||||||
|
frame: Rectangle { color: "light grey" }
|
||||||
|
tabsAlignment:Qt.AlignHCenter
|
||||||
|
}
|
||||||
Tab{
|
Tab{
|
||||||
title: qsTr("News")
|
title: qsTr("News")
|
||||||
id: newstab
|
id: newstab
|
||||||
|
|
Loading…
Reference in a new issue