From 59fe1ea0df173ac4f824f331d6c72a9abd95beab Mon Sep 17 00:00:00 2001 From: LubuWest Date: Wed, 31 May 2023 20:47:17 +0200 Subject: [PATCH] updatenews error bugfix --- README.md | 6 +- source-android/android/AndroidManifest.xml | 13 +--- source-android/common/oauth.cpp | 2 +- source-android/common/oauth.h | 2 +- source-android/friendiqa.pro | 6 +- source-linux/common/oauth.cpp | 2 +- source-linux/common/updatenews.cpp | 16 ++-- source-linux/common/updatenews.h | 1 + source-linux/common/xhr.cpp | 11 ++- source-linux/qml/configqml/AcceptRules.qml | 6 +- source-linux/qml/configqml/AccountPage.qml | 61 +++++++++------- source-linux/qml/friendiqa.qml | 2 +- .../qml/genericqml/DrawerAccountComponent.qml | 7 +- source-linux/qml/newsqml/MessageSend.qml | 2 +- source-linux/qml/newsqml/NewsStack.qml | 73 +++++++++---------- source-linux/qml/newsqml/NewsTab.qml | 12 +++ 16 files changed, 117 insertions(+), 105 deletions(-) diff --git a/README.md b/README.md index bbc0244..feb79cb 100644 --- a/README.md +++ b/README.md @@ -103,9 +103,7 @@ Currently supported: * Maximum news (deleted after use of Quit button) * Sync home timeline, replies, DM, Events, friend requests; Notify yes/no * Hide #nsfw - - -* OAuth +* OAuth2 as authorization method # Other @@ -120,7 +118,7 @@ ToDo # Translations -* German, Spanish, Italian, Hungarian, dutch +* German, Spanish, Italian, Hungarian, Dutch * To contribute translations: # Install diff --git a/source-android/android/AndroidManifest.xml b/source-android/android/AndroidManifest.xml index 69ccde9..cbfb09a 100644 --- a/source-android/android/AndroidManifest.xml +++ b/source-android/android/AndroidManifest.xml @@ -2,14 +2,6 @@ - - - - - - - + @@ -138,4 +130,7 @@ + + + diff --git a/source-android/common/oauth.cpp b/source-android/common/oauth.cpp index 52faaff..7e5af5f 120000 --- a/source-android/common/oauth.cpp +++ b/source-android/common/oauth.cpp @@ -1 +1 @@ -/home/pankraz/ownCloud/clientsync/Friendiqa/v0.6/source-linux/common/oauth.cpp \ No newline at end of file +../../source-linux/common/oauth.cpp \ No newline at end of file diff --git a/source-android/common/oauth.h b/source-android/common/oauth.h index 5c2bab8..607b211 120000 --- a/source-android/common/oauth.h +++ b/source-android/common/oauth.h @@ -1 +1 @@ -/home/pankraz/ownCloud/clientsync/Friendiqa/v0.6/source-linux/common/oauth.h \ No newline at end of file +../../source-linux/common/oauth.h \ No newline at end of file diff --git a/source-android/friendiqa.pro b/source-android/friendiqa.pro index ec7451e..20ff216 100644 --- a/source-android/friendiqa.pro +++ b/source-android/friendiqa.pro @@ -13,7 +13,7 @@ TEMPLATE = app TARGET = friendiqa CONFIG += release -QT += core core-private qml quick gui widgets sql androidextras network networkauth #webengine webview +QT += core core-private qml quick gui widgets sql androidextras network networkauth include(androidnative.pri/androidnative.pri) @@ -88,8 +88,6 @@ DISTFILES += \ android/src/FriendiqaActivity.java \ android/src/FriendiqaService.java -ANDROID_EXTRA_LIBS = /home/pankraz/android-sdk/android_openssl/latest/arm/libcrypto_1_1.so /home/pankraz/android-sdk/android_openssl/latest/arm/libssl_1_1.so /home/pankraz/android-sdk/android_openssl/latest/arm64/libcrypto_1_1.so /home/pankraz/android-sdk/android_openssl/latest/arm64/libssl_1_1.so /home/pankraz/android-sdk/android_openssl/latest/x86/libcrypto_1_1.so /home/pankraz/android-sdk/android_openssl/latest/x86/libssl_1_1.so /home/pankraz/android-sdk/android_openssl/latest/x86_64/libcrypto_1_1.so /home/pankraz/android-sdk/android_openssl/latest/x86_64/libssl_1_1.so /home/pankraz/android-sdk/android_openssl/latest/arm/libcrypto_1_1.so /home/pankraz/android-sdk/android_openssl/latest/arm/libssl_1_1.so /home/pankraz/android-sdk/android_openssl/latest/arm64/libcrypto_1_1.so /home/pankraz/android-sdk/android_openssl/latest/arm64/libssl_1_1.so /home/pankraz/android-sdk/android_openssl/latest/x86/libcrypto_1_1.so /home/pankraz/android-sdk/android_openssl/latest/x86/libssl_1_1.so /home/pankraz/android-sdk/android_openssl/latest/x86_64/libcrypto_1_1.so /home/pankraz/android-sdk/android_openssl/latest/x86_64/libssl_1_1.so - #ANDROID_ABIS = arm64-v8a -#android: include(/home/pankraz/git/android_openssl/openssl.pri) + android: include(/home/pankraz/android-sdk/android_openssl/openssl.pri) diff --git a/source-linux/common/oauth.cpp b/source-linux/common/oauth.cpp index 75b77a5..c2d0d4d 100644 --- a/source-linux/common/oauth.cpp +++ b/source-linux/common/oauth.cpp @@ -1,6 +1,6 @@ // This file is part of Friendiqa // https://github.com/lubuwest/Friendiqa -// Copyright (C) 2020 Marco R. +// Copyright (C) 2023 Marco R. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source-linux/common/updatenews.cpp b/source-linux/common/updatenews.cpp index 91edf12..454320e 100644 --- a/source-linux/common/updatenews.cpp +++ b/source-linux/common/updatenews.cpp @@ -161,6 +161,7 @@ void UPDATENEWS::login() QJsonObject currentAccount =acc[usernameindex].toObject(); xhr.setAccount(currentAccount.toVariantMap()); username = currentAccount["username"].toString(); + m_url=currentAccount["server"].toString(); } } @@ -206,7 +207,7 @@ void UPDATENEWS::timeline() { m_api="/api/statuses/friends_timeline"; xhr.clearParams(); - //xhr.setUrl(m_url); + xhr.setUrl(m_url); xhr.setApi(m_api); QSqlQuery query("SELECT status_id FROM news WHERE messagetype=0 AND username='"+ username +"' ORDER BY status_id DESC LIMIT 1",m_db); if (query.isActive() && query.isSelect()){ @@ -226,6 +227,7 @@ void UPDATENEWS::replies() { m_api="/api/statuses/replies"; xhr.clearParams(); + xhr.setUrl(m_url); xhr.setApi(m_api); QSqlQuery query("SELECT status_id FROM news WHERE messagetype=3 AND username='"+ username +"' ORDER BY status_id DESC LIMIT 1",m_db); if (query.isActive() && query.isSelect()){ @@ -245,6 +247,7 @@ void UPDATENEWS::directmessages() { m_api="/api/direct_messages/all"; xhr.clearParams(); + xhr.setUrl(m_url); xhr.setApi(m_api); QSqlQuery query("SELECT status_id FROM news WHERE messagetype=1 AND username='"+ username +"' ORDER BY status_id DESC LIMIT 1",m_db); if (query.isActive() && query.isSelect()){ @@ -263,6 +266,7 @@ void UPDATENEWS::notifications() { m_api="/api/friendica/notification"; xhr.clearParams(); + xhr.setUrl(m_url); xhr.setApi(m_api); xhr.get(); QObject::connect(&xhr,SIGNAL(success(QByteArray,QString)),this,SLOT(store(QByteArray,QString))); @@ -273,6 +277,7 @@ void UPDATENEWS::notifications() void UPDATENEWS::events() { m_api="/api/friendica/events"; xhr.clearParams(); + xhr.setUrl(m_url); xhr.setApi(m_api); QSqlQuery query("SELECT id FROM events WHERE username='"+ username +"' ORDER BY id DESC LIMIT 1",m_db); if (query.isActive() && query.isSelect()){ @@ -291,6 +296,7 @@ void UPDATENEWS::events() void UPDATENEWS::friendrequests() { m_api="/api/v1/follow_requests"; xhr.clearParams(); + xhr.setUrl(m_url); xhr.setApi(m_api); xhr.get(); QObject::disconnect(&xhr,SIGNAL(success(QByteArray,QString)),this,SLOT(store(QByteArray,QString))); @@ -300,7 +306,6 @@ void UPDATENEWS::friendrequests() } - void UPDATENEWS::store(QByteArray serverreply,QString apiname) { if (apiname!=m_api || xhr.downloadtype()!=""){} else { QJsonDocument news; @@ -430,6 +435,7 @@ void UPDATENEWS::store(QByteArray serverreply,QString apiname) } } QList newcontacts=findNewContacts(news); + emit this->success(m_api); if (newcontacts.size()>0){ updateContacts(newcontacts); startImagedownload("contactlist"); @@ -442,7 +448,7 @@ void UPDATENEWS::store(QByteArray serverreply,QString apiname) } } else { - qDebug()<< m_api << "Friendiqa updatenews error " << serverreply <error(m_api,QTextCodec::codecForName("utf-8")->toUnicode(serverreply)); emit this->error(m_api,QString(serverreply)); if(m_syncAll){ @@ -454,8 +460,6 @@ void UPDATENEWS::store(QByteArray serverreply,QString apiname) } - - void UPDATENEWS::updateImageLocation(QString downloadtype,QString imageurl, QString filename, int index){ if (downloadtype=="contactlist"){ QSqlQuery testquery("SELECT profile_image FROM contacts WHERE profile_image_url ='"+imageurl+ "' AND username = '" +username+"'",m_db); @@ -812,7 +816,7 @@ void UPDATENEWS::storeEvents(QByteArray serverreply,QString apiname) } } if(notifylist.contains("notify_Events")){ - QSqlQuery eventnotifyquery("SELECT start,title FROM events WHERE (start BETWEEN " + QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch()) + " AND "+QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch()+(m_updateInterval*60*1000))+") AND username='"+ username +"'",m_db); + QSqlQuery eventnotifyquery("SELECT start,title FROM events WHERE (start BETWEEN " + QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch()) + " AND "+QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch()+(m_updateInterval*119*1000))+") AND username='"+ username +"'",m_db); while (eventnotifyquery.next()) { alarm.notify("Event: "+ QDateTime::fromMSecsSinceEpoch(eventnotifyquery.value(0).toLongLong()).toString("dd.MM.yyyy hh:mm"),eventnotifyquery.value(1).toString(),1); } diff --git a/source-linux/common/updatenews.h b/source-linux/common/updatenews.h index 5db6237..9f857d7 100644 --- a/source-linux/common/updatenews.h +++ b/source-linux/common/updatenews.h @@ -75,6 +75,7 @@ public slots: private: QString m_api; + QString m_url; QString username; bool m_syncAll; int syncindex; diff --git a/source-linux/common/xhr.cpp b/source-linux/common/xhr.cpp index 7e4b695..ace30a0 100644 --- a/source-linux/common/xhr.cpp +++ b/source-linux/common/xhr.cpp @@ -363,7 +363,10 @@ void XHR::onRequestFinished() { // Save the file here //qDebug() << "buffer " << buffer; - if (buffer.isNull()){qDebug() << "File empty"<error(m_downloadtype,m_url,m_api,1);} + if (buffer.isNull()){qDebug() << "File empty"<error(m_downloadtype,m_url,m_api,1); + } else if (m_downloadtype=="picturelist") { QJsonDocument jsonResponse = QJsonDocument::fromJson(buffer); QJsonObject jsonObject = jsonResponse.object(); @@ -391,7 +394,6 @@ void XHR::onRequestFinished() jsonObject["data"]=""; jsonObject["filename"]=helpfile+filesuffix; emit this->downloadedjson(m_downloadtype,m_url,m_filename,dlindex,jsonObject); - if(downloadtype()=="picturelist"){dlindex=dlindex+1;XHR::getlist();} } else { QFile file(m_filename); @@ -400,10 +402,11 @@ void XHR::onRequestFinished() buffer.clear(); file.close(); emit this->downloaded(m_downloadtype,m_url,m_filename,dlindex); - if(downloadtype()=="contactlist" || downloadtype()=="friendrequests"){dlindex=dlindex+1;XHR::getlist();} - //reply->deleteLater(); } + if(downloadtype()=="contactlist" || downloadtype()=="friendrequests" || downloadtype()=="picturelist"){ + dlindex=dlindex+1;XHR::getlist(); + } } void XHR::onReadyRead() diff --git a/source-linux/qml/configqml/AcceptRules.qml b/source-linux/qml/configqml/AcceptRules.qml index 66442a0..1036802 100644 --- a/source-linux/qml/configqml/AcceptRules.qml +++ b/source-linux/qml/configqml/AcceptRules.qml @@ -43,11 +43,9 @@ Dialog { standardButtons: Dialog.Yes | Dialog.No modal: true onAccepted: { -// username.visible=true; -// password.visible=true; + username.visible=true; ruleButton.visible=false; -// confirmation.visible=true - accountPage.state="oauth" + confirmationOAuth.visible=true } onRejected: {close()} ScrollView{ diff --git a/source-linux/qml/configqml/AccountPage.qml b/source-linux/qml/configqml/AccountPage.qml index efd337d..a1ab175 100644 --- a/source-linux/qml/configqml/AccountPage.qml +++ b/source-linux/qml/configqml/AccountPage.qml @@ -67,10 +67,13 @@ Page{ else{ if (users.length==0){Service.setDefaultOptions(db);} if (userconfig.APIVersion!=""){userconfig.password=""} - if (imagestoredir==""){imagestoredir=filesystem.homePath+"/"+credentials.username+"/"; - userconfig.imagestore=imagestoredir} - if(userconfig.imagestore == filesystem.homePath+"/"+username.text+"/") - {filesystem.makePath(filesystem.homePath+"/"+username.text);} + if (imagestoredir==""){ + imagestoredir=filesystem.homePath+"/"+credentials.username+"/"; + userconfig.imagestore=imagestoredir + } + if(userconfig.imagestore == filesystem.homePath+"/"+credentials.username+"/") + {filesystem.makePath(filesystem.homePath+"/"+credentials.username);} + print("imagestoredir "+imagestoredir) filesystem.Directory=imagestoredir; filesystem.makeDir("contacts"); filesystem.makeDir("albums"); @@ -373,7 +376,7 @@ Page{ rulestext=rulestext+rulesarray[rule].text+"\n" } var component = Qt.createComponent("qrc:/qml/configqml/AcceptRules.qml"); - var rulesdialog = component.createObject(root,{"rules": rulestext}); + var rulesdialog = component.createObject(accountPage,{"rules": rulestext}); rulesdialog.open(); } else if(api=="/api/statusnet/config"){ @@ -385,7 +388,7 @@ Page{ catch(e){print(e)} } - else if (api=="/api/v1/apps"){ + else if (api=="/api/v1/apps"){print("/api/v1/apps text "+text) let app=JSON.parse(text); accountPage.appdata=app; oauth2.setClientId(app.client_id); @@ -537,23 +540,23 @@ Page{ states: [ State { name: "new_oauth" - PropertyChanges { target: username; visible: false } - PropertyChanges { target: password; visible: false} - PropertyChanges { target: ruleButton; visible: true} + PropertyChanges {target: username; visible: false } + PropertyChanges {target: password; visible: false} + PropertyChanges {target: ruleButton; visible: true} }, State { name:"oauth" PropertyChanges {target: username; visible: true} - PropertyChanges { target: password; visible: false} + PropertyChanges {target: password; visible: false} PropertyChanges {target: confirmationOAuth; visible: true} PropertyChanges {target: setDefault; visible: true} - PropertyChanges { target: confirmation; visible: false} + PropertyChanges {target: confirmation; visible: false} }, State{ name:"password" - PropertyChanges { target: username; visible: true } - PropertyChanges { target: password; visible: true} - PropertyChanges { target: confirmation; visible: true} + PropertyChanges {target: username; visible: true } + PropertyChanges {target: password; visible: true} + PropertyChanges {target: confirmation; visible: true} PropertyChanges {target: confirmationOAuth; visible: false} } ] @@ -565,18 +568,24 @@ Page{ }) accountPage.users=storedUsers; Service.readConfig(db,function(obj){ - userButton.text=obj.username; - servername.text=obj.server; - serverModel.insert(0,{text:obj.server}) - accountPage.setServericon(obj.server); - username.text= obj.username; - password.text=Qt.atob(obj.password); - imagestore.text=obj.imagestore; - imagestoredir=obj.imagestore; - if( obj.isActive==0){userButton.font.bold='true'} else {userButton.font.bold='false'} - if(obj.password!=""){accountPage.state="password"} - else if (obj.token!=""){accountPage.state="oauth"} - else {accountPage.state="new_oauth"} + if (obj==null){ + accountPage.state="new_oauth" + } + else{ + userButton.text=obj.username; + servername.text=obj.server; + serverModel.insert(0,{text:obj.server}) + accountPage.setServericon(obj.server); + username.text= obj.username; + password.text=Qt.atob(obj.password); + imagestore.text=obj.imagestore; + imagestoredir=obj.imagestore; + if( obj.isActive==0){userButton.font.bold='true'} else {userButton.font.bold='false'} + if(obj.password!=""){accountPage.state="password"} + else if (obj.token!=""){accountPage.state="oauth"} + else {accountPage.state="new_oauth"} + } + },"isActive",0) })} catch (e){//print("onCompleted" +users.count +e) diff --git a/source-linux/qml/friendiqa.qml b/source-linux/qml/friendiqa.qml index e09bf64..3893f30 100644 --- a/source-linux/qml/friendiqa.qml +++ b/source-linux/qml/friendiqa.qml @@ -80,7 +80,7 @@ ApplicationWindow{ color: Material.backgroundColor function onLoginChanged(login){ - if(login==""){rootstackView.push("qrc:/qml/configqml/AccountPage.qml")} + if(login=="" || login==null){rootstackView.push("qrc:/qml/configqml/AccountPage.qml")} else{ // if (login.newsViewType!="" || login.newsViewType!=null){ // newstab.newstabstatus=login.newsViewType;} diff --git a/source-linux/qml/genericqml/DrawerAccountComponent.qml b/source-linux/qml/genericqml/DrawerAccountComponent.qml index db47c58..c01ced0 100644 --- a/source-linux/qml/genericqml/DrawerAccountComponent.qml +++ b/source-linux/qml/genericqml/DrawerAccountComponent.qml @@ -39,7 +39,6 @@ Item { width: parent.width Label{ - y:0.5*root.fontFactor*osSettings.bigFontSize width:parent.width height: 1.5*osSettings.bigFontSize*root.fontFactor @@ -47,11 +46,6 @@ Item { font.pointSize: osSettings.bigFontSize text: account.username } - // Label{ - // text:login.hasOwnProperty("server")?"@"+login.server:"" - // font.pixelSize: 5*mm - // width: parent.width - // } Label{ y:2*root.fontFactor*osSettings.bigFontSize @@ -64,6 +58,7 @@ Item { login=account; if(!wideScreen){leftDrawerAndroid.close()} // newstypeSignal("refresh") + newsBusy.running=true; updatenews.setDatabase(); updatenews.login(); updatenews.startsync(); diff --git a/source-linux/qml/newsqml/MessageSend.qml b/source-linux/qml/newsqml/MessageSend.qml index 2589b78..af087d6 100644 --- a/source-linux/qml/newsqml/MessageSend.qml +++ b/source-linux/qml/newsqml/MessageSend.qml @@ -124,7 +124,7 @@ Rectangle{ messageSend.reply_to_user=newsitemobject.user.screen_name; messageSend.parentId=newsitemobject.id } else { - messageSend.state=""; + messageSend.state=null; messageSend.reply_to_user=""; messageSend.parentId=""; bodyField.text=""; diff --git a/source-linux/qml/newsqml/NewsStack.qml b/source-linux/qml/newsqml/NewsStack.qml index 187abe8..82aeed8 100644 --- a/source-linux/qml/newsqml/NewsStack.qml +++ b/source-linux/qml/newsqml/NewsStack.qml @@ -38,7 +38,6 @@ import "qrc:/js/service.js" as Service Rectangle{ id: newsStack - //anchors.fill: parent width: parent.width height: parent.height color: Material.backgroundColor @@ -47,17 +46,6 @@ Rectangle{ property int lastnewsid:0 property string newstabstatus: "" - BusyIndicator{ - id: newsBusy - anchors.horizontalCenter: parent.horizontalCenter - anchors.top:parent.top - anchors.topMargin: mm - width: 2*root.fontFactor*osSettings.bigFontSize - height: 2*root.fontFactor*osSettings.bigFontSize - z:2 - running: false - } - function newstypeHandling(newstype){ try{newsBusy.running=true}catch(e){print(e)}; root.replySignal(""); @@ -215,14 +203,37 @@ Rectangle{ xhr.get() } } + + + function loadDBNews(){ + var messagetype=0; + switch(newsSwipeview.stacktype){ + case "Home":messagetype=0;break; + case "DirectMessages": messagetype=1;break; + case "Notifications":messagetype=2;break; + case "Replies":messagetype=3;break; + default:messagetype=0; + } + if((newstabstatus=="Conversations")&&(newsSwipeview.stacktype=="Home")){ + Newsjs.chatsfromdb(db,login,messagetype,[],function(dbnews,lastid){ + lastnewsid=lastid; + showNews(dbnews); + }) + } + else{ + Newsjs.newsfromdb(db,login,messagetype,function(dbnews,lastid){ + lastnewsid=lastid; + showNews(dbnews) + }) + } + } + Connections{ target:xhr function onError(data,url,api,code){ - //if (data !="contactlist"){Helperjs.showMessage(qsTr("Network Error"),"API:\n" +login.server+api+"\n Return: \n"+data,root);} newsBusy.running=false; } function onSuccess(data,api){ - // downloadNotice.text=downloadNotice.text+ "\n xhr finished "+Date.now(); const newsApiArray=["/api/statuses/friends_timeline", "/api/direct_messages/all", "/api/direct_messages/conversation", @@ -244,6 +255,16 @@ Rectangle{ } } } + Connections{ + target:updatenews + function onError(api,data){print("updatnews error "+api); + newsBusy.running=false; + } + function onSuccess(api){ + loadDBNews(); + newsBusy.running=false; + } + } Timer {id:replytimer; interval: 1000; running: false; repeat: false onTriggered: { @@ -440,30 +461,8 @@ Rectangle{ root.searchSignal.connect(search); try{newsModel.clear()} catch(e){} swipeIndicator.visible=true; - //newsSwipeview.height=rootstack.height - //newsSwipeview.y=5*mm; - //rootStackItem.state="" root.globaloptions.hasOwnProperty("newsViewType")?newstab.newstabstatus=root.globaloptions.newsViewType:newstab.newstabstatus="Conversations"; newstabstatus=newstab.newstabstatus; - var messagetype=0; - switch(newsSwipeview.stacktype){ - case "Home":messagetype=0;break; - case "DirectMessages": messagetype=1;break; - case "Notifications":messagetype=2;break; - case "Replies":messagetype=3;break; - default:messagetype=0; - } - - if((newstabstatus=="Conversations")&&(newsSwipeview.stacktype=="Home")){ - Newsjs.chatsfromdb(db,login,messagetype,[],function(dbnews,lastid){ - lastnewsid=lastid; - showNews(dbnews); - }) - } - else{ - Newsjs.newsfromdb(db,login,messagetype,function(dbnews,lastid){ - lastnewsid=lastid; - showNews(dbnews) - })} + loadDBNews() } } diff --git a/source-linux/qml/newsqml/NewsTab.qml b/source-linux/qml/newsqml/NewsTab.qml index 67031de..36254f0 100644 --- a/source-linux/qml/newsqml/NewsTab.qml +++ b/source-linux/qml/newsqml/NewsTab.qml @@ -192,6 +192,7 @@ Rectangle{ //onLoaded: newsSwipeview.stacktype="Notifications" } } + PageIndicator { id: swipeIndicator z:5 @@ -203,5 +204,16 @@ Rectangle{ anchors.horizontalCenter: parent.horizontalCenter } + BusyIndicator{ + id: newsBusy + anchors.horizontalCenter: newsSwipeview.horizontalCenter + anchors.top:parent.top + anchors.topMargin: mm + width: 2*root.fontFactor*osSettings.bigFontSize + height: 2*root.fontFactor*osSettings.bigFontSize + z:2 + running: false + } + Component.onCompleted: {root.directmessageSignal.connect(newsSwipeview.onDirectMessage)} }