// This file is part of Friendiqa // https://git.friendi.ca/lubuwest/Friendiqa // Copyright (C) 2020 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 // 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 . import QtQuick 2.11 import QtQuick.Controls 2.12 //import QtQuick.Controls.Styles 1.4 import QtQuick.Layouts 1.11 import QtQuick.LocalStorage 2.0 import "qrc:/js/helper.js" as Helperjs import "qrc:/js/news.js" as Newsjs import "qrc:/js/service.js" as Service import "qrc:/qml/contactqml" import "qrc:/qml/genericqml" Rectangle { y:1 color: "white" // function showContactdetails(contact){ // var component = Qt.createComponent("qrc:/qml/contactqml/ContactDetailsComponent.qml"); // if(contact.isFriend){ // friendsTabView.currentIndex=1; // var contactDetails = component.createObject(friendstab,{"contact": contact}) // } // else{friendsTabView.currentIndex=2; // var contactDetails = component.createObject(friendstab,{"contact": contact}) // } // } function showContactdetails(contact){ rootstack.currentIndex=0; bar.currentIndex=0; root.contactdetailsSignal(contact) } function showProfile(callback){ var profile=({}); Helperjs.readData(db,"profiles",login.username,function(profileobject){ var profilearray=[]; for (var i in profileobject){ profilearray.push(JSON.parse(Qt.atob(profileobject[i].profiledata))); } profile.profiles=profilearray; }); Helperjs.readData(db,"contacts",login.username,function(owner){ profile.friendica_owner=owner[0]; },"isFriend",2); callback(profile) } TabBar { id: friendsbar width: parent.width height: 9*mm position:TabBar.Header currentIndex: 1 TabButton { text: qsTr("Me") font.pixelSize: 2*mm } TabButton { text: qsTr("Friends") font.pixelSize: 2*mm } TabButton { text: qsTr("Contacts") font.pixelSize: 2*mm } TabButton { text: qsTr("Groups") font.pixelSize: 2*mm } } StackLayout{ id:friendsTabView //anchors.fill: parent x:mm y:10*mm width: parent.width-2*mm height: parent.height-10*mm currentIndex: friendsbar.currentIndex signal contactsSignal(var contact) signal groupsSignal(var username) onCurrentIndexChanged:{ if (currentIndex==1){ contactsSignal("") } else if (currentIndex==2){ contactsSignal("") } else if (currentIndex==3){groupsSignal(root.login.username)} } // style: TabViewStyle { // frameOverlap: 1 // tab: Rectangle { // color: "white" // implicitWidth: root.width/4-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 // } Item{ id:profileGridTab Layout.fillWidth:true Layout.fillHeight: true Component.onCompleted:{ showProfile(function(profile){ var component = Qt.createComponent("qrc:/qml/contactqml/ProfileComponent.qml"); var profilecomp = component.createObject(profileGridTab,{"profile": profile}); }); } } Item{ id: friendsGridTab Layout.fillWidth:true Layout.fillHeight: true property int currentContact: 0 function showFriends(contact){ try {friendsModel.clear()} catch(e){print(e)}; Helperjs.readData(root.db,"contacts",login.username,function(friendsobject){ for (var i=0;i1){ friendsobject[i].screen_name=friendsobject[i].screen_name+"+"+friendsobject[i].cid } friendsModel.append({"contact":friendsobject[i]}); } },"isFriend",1,"screen_name ASC"); } Connections{ target:xhr onDownloaded:{ if(type=="contactlist"){ //print(url+" "+filename+" "+i) friendsGridTab.currentContact=i+1; if(friendsGridTab.currentContact==root.newContacts.length){ friendsGridTab.showFriends(root.login.username) } } } } MButton { id: updateFriendsButton text: "\uf021" anchors.top: parent.top anchors.topMargin: mm anchors.right: parent.right height: 6*mm width: 8*mm onClicked: { try {friendsModel.clear()} catch(e){print(e)}; //root.contactLoadType="friends"; Newsjs.requestFriends(root.login,db,root,function(nc){ root.newContacts=nc }) } } ProgressBar{ id: newContactsProgress width: 15*mm height: updateFriendsButton.height anchors.top: parent.top anchors.right:updateFriendsButton.left anchors.rightMargin:mm visible: (friendsGridTab.currentContact!=(root.newContacts.length))?true:false value: friendsGridTab.currentContact/root.newContacts.length } //GridView { ListView{ id: friendsView x:mm y:updateFriendsButton.height+2*mm width:friendsGridTab.width-2*mm height:friendsGridTab.height-updateFriendsButton.height-2*mm clip: true spacing: 2 function processContactSelection(contactobject){showContactdetails(contactobject)} //add: Transition { // NumberAnimation { properties: "x,y"; from: 300; duration: 1000 } // } model: friendsModel delegate: ContactComponent { } } ListModel{id:friendsModel} Component.onCompleted: { root.friendsSignal.connect(showFriends); friendsTabView.contactsSignal.connect(showFriends); showFriends(root.login.username); root.newContacts=[] } } Item{ id: contactsGridTab Layout.fillWidth:true Layout.fillHeight: true function showContacts(contact){ try {contactsModel.clear()} catch(e){print(e)}; Helperjs.readData(db, "contacts",root.login.username,function(contactsobject){ for (var j=0;j