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)}
}