408 lines
14 KiB
QML
408 lines
14 KiB
QML
// This file is part of Friendiqa
|
|
// https://git.friendi.ca/lubuwest/Friendiqa
|
|
// Copyright (C) 2017 Marco R. <thomasschmidt45@gmx.net>
|
|
//
|
|
// 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
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// In addition, as a special exception, the copyright holders give
|
|
// permission to link the code of portions of this program with the
|
|
// OpenSSL library under certain conditions as described in each
|
|
// individual source file, and distribute linked combinations including
|
|
// the two.
|
|
//
|
|
// You must obey the GNU General Public License in all respects for all
|
|
// of the code used other than OpenSSL. If you modify file(s) with this
|
|
// exception, you may extend this exception to your version of the
|
|
// file(s), but you are not obligated to do so. If you do not wish to do
|
|
// so, delete this exception statement from your version. If you delete
|
|
// this exception statement from all source files in the program, then
|
|
// also delete it here.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
import QtQuick 2.5
|
|
import QtQuick.LocalStorage 2.0
|
|
import QtQuick.Window 2.0
|
|
import QtQuick.Controls 2.4
|
|
import QtQuick.Layouts 1.11
|
|
import "qrc:/js/news.js" as Newsjs
|
|
import "qrc:/js/service.js" as Service
|
|
|
|
|
|
StackView{
|
|
id:root
|
|
property QtObject osSettings: {var tmp=Qt.createComponent("qrc:/qml/configqml/OSSettingsAndroid.qml");return tmp.createObject(root)}
|
|
width: osSettings.appWidth
|
|
height:osSettings.appHeight
|
|
property var db: ["Friendiqa", "1.0", "Stores Friendica data", 100000000]
|
|
property var login: Service.readActiveConfig(db)
|
|
property var globaloptions: ({}) //Service.readGlobaloptions(db)
|
|
property var contactlist: []
|
|
property real mm: osSettings.osType=="Android"?Screen.pixelDensity:Screen.pixelDensity*1.5
|
|
signal messageSignal(var friend)
|
|
signal fotoSignal(var username, var friend)
|
|
signal directmessageSignal(var friend)
|
|
signal newsSignal(var news)
|
|
signal newstypeSignal(var type)
|
|
signal friendsSignal(var username)
|
|
signal contactdetailsSignal(var contact)
|
|
signal eventSignal(var contact)
|
|
signal uploadSignal(var urls)
|
|
signal sendtextSignal(var intenttext)
|
|
signal changeimage(var method, var type, var id)
|
|
property var news:[]
|
|
property var newContacts:[]
|
|
//property string contactLoadType: ""
|
|
property bool imagePicking: false
|
|
|
|
onLoginChanged:{
|
|
if(login==""){root.push("qrc:/qml/configqml/AccountPage.qml")}
|
|
else{root.push(rootStackItem)
|
|
newstab.newstabstatus=login.newsViewType;
|
|
Newsjs.getCurrentContacts(login,db,function(contacts){
|
|
contactlist=contacts})}
|
|
}
|
|
onNewContactsChanged:{
|
|
if(newContacts.length>0){// download contact images and update db
|
|
var contacturls=[];
|
|
var contactnames=[];
|
|
for (var link in newContacts){
|
|
contacturls.push(newContacts[link].profile_image_url);
|
|
contactnames.push(newContacts[link].screen_name);
|
|
Service.updateContactInDB(login,db,newContacts[link].isFriend,newContacts[link])
|
|
contactlist.push(newContacts[link].url);
|
|
}
|
|
xhr.setDownloadtype("contactlist");
|
|
xhr.setFilelist(contacturls);
|
|
xhr.setContactlist(contactnames);
|
|
xhr.setImagedir(login.imagestore);
|
|
xhr.getlist();
|
|
}
|
|
|
|
}
|
|
|
|
Connections{
|
|
target:xhr
|
|
onDownloaded:{
|
|
if(type=="contactlist"){
|
|
var database=LocalStorage.openDatabaseSync(root.db[0],root.db[1],root.db[2],root.db[3]);
|
|
var result;
|
|
database.transaction( function(tx) {
|
|
result = tx.executeSql('UPDATE contacts SET profile_image="'+filename+'" where profile_image_url="'+url+'"');
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
FontLoader{id: fontAwesome; source: "qrc:/images/fontawesome-webfont.ttf"}
|
|
|
|
Keys.onReleased: {
|
|
if (event.key === osSettings.backKey) {
|
|
if (rootstack.currentIndex==0){
|
|
newstab.active=true;
|
|
if (newstab.newstabstatus!=login.newsViewType){
|
|
newstab.newstabstatus=login.newsViewType;
|
|
if(login.newsViewType=="Timeline"){Newsjs.newsfromdb(db,login.username,0,function(dbnews){
|
|
newsSignal(dbnews)
|
|
})}
|
|
else{
|
|
Newsjs.chatsfromdb(db,login.username,function(dbnews){
|
|
newsSignal(dbnews)
|
|
})}
|
|
}
|
|
|
|
else if (newstab.conversation.length>0){newstab.conversation=[]}
|
|
else if (root.depth>1){root.pop()}
|
|
else{Service.cleanNews(root.db,function(){
|
|
Service.cleanContacts(root.login,root.db,function(){
|
|
Qt.quit()})
|
|
})}
|
|
}
|
|
else if (rootstack.currentIndex==2){fotoSignal("backButton")}
|
|
else {rootstack.currentIndex=0}
|
|
event.accepted = true
|
|
}}
|
|
|
|
Drawer{
|
|
id: leftDrawer
|
|
width: 0.66* root.width
|
|
height: root.height
|
|
edge: Qt.LeftEdge
|
|
position: 1.0
|
|
Column{
|
|
x:mm
|
|
width:parent.width-mm
|
|
Label{
|
|
text: login.hasOwnProperty("username")?login.username:""
|
|
font.pixelSize: 4*mm
|
|
width: parent.width
|
|
height: 6*mm
|
|
}
|
|
// Label{
|
|
// text:login.hasOwnProperty("server")?"@"+login.server:""
|
|
// font.pixelSize: 5*mm
|
|
// width: parent.width
|
|
// }
|
|
|
|
Label{
|
|
text: "\uf021 " + qsTr("Refresh")
|
|
font.pixelSize: 4*mm
|
|
width: parent.width
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked:{
|
|
leftDrawer.close();
|
|
// newstypeSignal("refresh")
|
|
updatenews.setDatabase();
|
|
updatenews.login();
|
|
updatenews.startsync();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
Label{
|
|
text: "\uf1da " + qsTr("Timeline")
|
|
font.pixelSize: 4*mm
|
|
width: parent.width
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked:{
|
|
leftDrawer.close();
|
|
newstypeSignal("timeline")
|
|
}
|
|
}
|
|
}
|
|
|
|
Label{
|
|
text: "\uf086 " + qsTr("Conversations")
|
|
width: parent.width
|
|
font.pixelSize: 4*mm
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked:{
|
|
leftDrawer.close();
|
|
newstypeSignal("conversation")
|
|
}
|
|
}
|
|
}
|
|
|
|
Label{
|
|
text: "\uf005 " + qsTr("Favorites")
|
|
font.pixelSize: 4*mm
|
|
width: parent.width
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked:{
|
|
leftDrawer.close();
|
|
newstypeSignal("favorites")
|
|
}
|
|
}
|
|
}
|
|
Label{
|
|
text: "\uf0ec " + qsTr("Replies")
|
|
font.pixelSize: 4*mm
|
|
width: parent.width
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked:{
|
|
leftDrawer.close();
|
|
newstypeSignal("replies")
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
Label{
|
|
text: "\uf0ac " + qsTr("Public Timeline")
|
|
font.pixelSize: 4*mm
|
|
width: parent.width
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked:{
|
|
leftDrawer.close();
|
|
newstypeSignal("publictimeline")
|
|
}
|
|
}
|
|
}
|
|
|
|
Label{
|
|
text: "\uf0c0 " + qsTr("Group news")
|
|
font.pixelSize: 4*mm
|
|
width: parent.width
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked:{
|
|
leftDrawer.close();
|
|
newstypeSignal("groupnews")
|
|
}
|
|
}
|
|
}
|
|
|
|
Label{
|
|
text: "\uf002 " + qsTr("Search")
|
|
font.pixelSize: 4*mm
|
|
width: parent.width
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked:{
|
|
leftDrawer.close();
|
|
newstypeSignal("search")
|
|
}
|
|
}
|
|
}
|
|
|
|
Label{
|
|
text: "\uf085 "+ qsTr("Settings")
|
|
font.pixelSize: 4*mm
|
|
width: parent.width
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked: {root.push("qrc:qml/configqml/ConfigPage.qml");
|
|
leftDrawer.close()
|
|
}
|
|
}
|
|
}
|
|
Label{
|
|
text: "\uf2bb " + qsTr("Accounts")
|
|
font.pixelSize: 4*mm
|
|
width: parent.width
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked: {root.push("qrc:qml/configqml/AccountPage.qml");
|
|
leftDrawer.close()
|
|
}
|
|
}
|
|
}
|
|
|
|
Label{
|
|
|
|
text: "\uf08b " +qsTr("Quit")
|
|
font.pixelSize: 4*mm
|
|
width: parent.width
|
|
MouseArea{
|
|
anchors.fill: parent
|
|
onClicked:{
|
|
Service.cleanNews(root.db,function(){
|
|
Service.cleanContacts(root.login,root.db,function(){
|
|
Qt.quit()})
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
Item{
|
|
id:rootStackItem
|
|
width:parent.width
|
|
height: parent.height
|
|
//anchors.fill:parent
|
|
states: State {
|
|
name: "fullscreen";
|
|
PropertyChanges { target: bar; height:0 }
|
|
PropertyChanges { target: rootstack; height:parent.height }
|
|
}
|
|
|
|
transitions: Transition {
|
|
PropertyAnimation { properties: "height";
|
|
easing.type: Easing.InOutQuad
|
|
duration: 1000
|
|
}
|
|
}
|
|
TabBar {
|
|
id: bar
|
|
width: parent.width
|
|
height: 7*mm
|
|
position:TabBar.Footer
|
|
anchors.top: rootstack.bottom
|
|
onCurrentIndexChanged: rootstack.currentIndex=bar.currentIndex
|
|
TabButton {
|
|
text: "\uf03a"
|
|
font.pixelSize: 3*mm
|
|
height: 6*mm
|
|
}
|
|
TabButton {
|
|
text: "\uf0c0"
|
|
font.pixelSize: 3*mm
|
|
height: 6*mm
|
|
}
|
|
TabButton {
|
|
text: "\uf03e"
|
|
font.pixelSize: 3*mm
|
|
height: 6*mm
|
|
}
|
|
|
|
TabButton {
|
|
text: "\uf073"
|
|
font.pixelSize: 3*mm
|
|
height: 6*mm
|
|
}
|
|
}
|
|
|
|
StackLayout{
|
|
id:rootstack
|
|
width:parent.width
|
|
height: parent.height-7*mm
|
|
currentIndex:bar.currentIndex
|
|
|
|
|
|
Loader{
|
|
id: newstab
|
|
Layout.fillWidth:true
|
|
Layout.fillHeight: true
|
|
property string newstabstatus
|
|
property var conversation:[]
|
|
property var contactposts:[]
|
|
source:(rootstack.currentIndex==0)? "qrc:/qml/newsqml/NewsTab.qml":""
|
|
}
|
|
Loader{
|
|
id: friendstab
|
|
Layout.fillWidth:true
|
|
Layout.fillHeight: true
|
|
source: (rootstack.currentIndex==1)?"qrc:/qml/contactqml/FriendsTab.qml":""
|
|
}
|
|
Loader{
|
|
id: fotostab
|
|
property string phototabstatus:"Images"
|
|
Layout.fillWidth:true
|
|
Layout.fillHeight: true
|
|
source: (rootstack.currentIndex==2)?"qrc:/qml/photoqml/PhotoTab.qml":""
|
|
}
|
|
Loader{
|
|
id: calendartab
|
|
property string calendartabstatus:"Events"
|
|
Layout.fillWidth:true
|
|
Layout.fillHeight: true
|
|
source: (rootstack.currentIndex==3)?"qrc:/qml/calendarqml/CalendarTab.qml":""
|
|
}
|
|
|
|
}
|
|
Component.onCompleted: {
|
|
forceActiveFocus();
|
|
Service.readGlobaloptions(db,function(go){globaloptions=go})
|
|
//print(xhr.networktype());
|
|
if(osSettings.osType=="Android"){
|
|
var component = Qt.createComponent("qrc:/qml/genericqml/IntentReceiver.qml");
|
|
var IntentReceiverQml = component.createObject(root);
|
|
} else if (osSettings.osType=="Linux"){
|
|
var component = Qt.createComponent("qrc:/qml/genericqml/LinuxSync.qml");
|
|
var LinuxSyncQml = component.createObject(root);
|
|
}
|
|
}
|
|
}
|
|
}
|