// This file is part of Friendiqa // https://github.com/lubuwest/Friendiqa // Copyright (C) 2017 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.0 import QtQuick.Controls 1.2 import "qrc:/qml/genericqml" import "qrc:/js/news.js" as Newsjs import "qrc:/js/helper.js" as Helperjs import "qrc:/js/service.js" as Service Item { Connections{ target:newstab onNewstabstatusChanged:{ newstabstatusButton.text= qsTr(newstab.newstabstatus) } } // Connections{ // target:root // onCurrentContactChanged:{ // if (root.newContacts.length>0){ // if(root.currentContact1){newsStack.pop()}}catch(e){} newsBusy.running=false; var currentTime= new Date(); downloadNotice.text=""; var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsToShow}; newsWorker.sendMessage(msg); } function showConversation(conversationIndex,newsitemobject){ //newsBusy.running=true; root.contactLoadType="conversation"; newsStack.conversationIndex= conversationIndex; if(newsitemobject.messagetype==0){ Newsjs.requestConversation(root.login,db,newsitemobject.status_id,root.contactlist,root,function(ns,nc){ root.news=ns;root.newContacts=nc; })} else{Newsjs.conversationfromdb(root.db,root.login.username,newsitemobject.statusnet_conversation_id, function(newsarray){ root.news=newsarray;root.newContacts=[]; })} } function showContact(contact){ var component = Qt.createComponent("qrc:/qml/contactqml/ContactDetailsComponent.qml"); if (component.status== Component.Ready){ var contactDetails = component.createObject(newstab,{"contact": contact}) } } function onFriendsMessages(friend){ newstab.newstabstatus="Contact" Newsjs.newsfromdb(db,root.login.username, function(dbnews){ if (dbnews.length==0){ Newsjs.newsfromdb(db,login.username,function(forumnews){ showNews(forumnews) },friend.url) } else showNews(dbnews) },friend.id) } function onDirectMessage(friend){ newstab.newstabstatus="SendMessage" newsStack.push({item:"qrc:/qml/newsqml/MessageSend.qml",properties:{"reply_to_user": friend,"directmessage":1,"login":root.login}}); } StackView{ id: newsStack anchors.fill:parent property int conversationIndex: 0 initialItem:Rectangle { y:1 color: "white" BlueButton{ id:newstabstatusButton anchors.top: parent.top anchors.topMargin: 0.5*mm text: qsTr(newstab.newstabstatus) onClicked: {newstabmenu.popup()} } Row{ spacing: mm anchors.top: parent.top anchors.topMargin: 0.5*mm anchors.right: parent.right BlueButton { id: newMessageButton text: "\uf040" onClicked: { var groups=[]; Helperjs.readData(root.db,"groups",root.login.username,function(groupobject){ groups=groupobject }); newstab.newstabstatus="SendMessage"; Helperjs.readData(root.db,"contacts",root.login.username,function(friends){ newsStack.push({item:"qrc:/qml/newsqml/MessageSend.qml",properties:{"contacts": friends,"login":root.login}}) },"isFriend",1); } } BlueButton { id: quitButton text: "\uf08b" onClicked: {Service.cleanNews(root.db,function(){ Service.cleanContacts(root.login,root.db,function(){ Qt.quit() }) })} } BlueButton { id: update text: "\uf021" onClicked: { newsBusy.running=true; newstab.newstabstatus=login.newsViewType; root.contactLoadType="news"; var onlynew=true; //print("newstab "+ JSON.stringify(contactlist)); Newsjs.getFriendsTimeline(login,db,contactlist,onlynew,newstab,function(ns,nc){ root.news=ns;root.newContacts=nc; if (ns.length==0){// update last 20 existing news for changes and likes onlynew=false; Newsjs.getFriendsTimeline(login,db,contactlist,onlynew,newstab,function(rns,rnc){ root.contactLoadType="news"; root.news=rns;root.newContacts=rnc;}) } }) } } } Component { id:footerComponent Rectangle{ border.color: "#EEEEEE" border.width: 1 width:newsView.width height:6*mm Text{ font.pixelSize: 1.5*mm anchors.centerIn: parent text:qsTr("More") } MouseArea{anchors.fill:parent onClicked:{ var currentTime= new Date(); var lastnews_id=newsModel.get(newsModel.count-1).newsitemobject.created_at; print("Lastnews ID "+lastnews_id+Qt.atob(newsModel.get(newsModel.count-1).newsitemobject.statusnet_html)) if(newstab.newstabstatus=="Timeline"){ Newsjs.newsfromdb(root.db,root.login.username, function(news){ var msg = {'currentTime': currentTime, 'model': newsModel,'news':news,'appendnews':true}; newsWorker.sendMessage(msg); },false,lastnews_id)} if(newstab.newstabstatus=="Conversations"){ Newsjs.chatsfromdb(root.db,root.login.username, function(news){ var msg = {'currentTime': currentTime, 'model': newsModel,'news':news,'appendnews':true}; newsWorker.sendMessage(msg); },lastnews_id)} else if(newstab.newstabstatus=="Contact"){ Newsjs.newsfromdb(root.db,root.login.username, function(news){ var msg = {'currentTime': currentTime, 'model': newsModel,'news':news,'appendnews':true}; newsWorker.sendMessage(msg); },newsModel.get(newsModel.count-1).newsitemobject.uid,lastnews_id)} } } } } ListView { id: newsView anchors.fill: parent anchors.topMargin: 7*root.mm anchors.leftMargin: 3*root.mm; anchors.rightMargin: root.mm anchors.bottomMargin: 1*root.mm clip: true spacing: 0 footer: footerComponent model: newsModel delegate: Newsitem{} //onContentYChanged:{if(contentY<-8*mm&&contentY>(-8*mm-1)){print("refreshing"); onDragEnded:{if(contentY<-5*mm){//print("refreshing"); newsBusy.running=true; newstab.newstabstatus=login.newsViewType; root.contactLoadType="news"; var onlynew=true; Newsjs.getFriendsTimeline(login,db,contactlist,onlynew,newstab,function(ns,nc){ root.news=ns;root.newContacts=nc; if (ns.length==0){// update last 20 existing news for changes and likes onlynew=false; Newsjs.getFriendsTimeline(login,db,contactlist,onlynew,newstab,function(rns,rnc){ root.contactLoadType="news"; root.news=rns;root.newContacts=rnc;}) } }) }} } ListModel{id: newsModel} WorkerScript { id: newsWorker source: "qrc:/js/newsworker.js" } BusyIndicator{ id: newsBusy anchors.horizontalCenter: newsView.horizontalCenter anchors.top:newsView.top anchors.topMargin: 2*mm width:10*mm height: 10*mm } Rectangle{ id:downloadNotice property alias text: noticeText.text color:"white" border.color:"grey" z:1 anchors.horizontalCenter: newsView.horizontalCenter anchors.bottom:newsView.bottom anchors.bottomMargin: 2*mm width: noticeText.width+2*mm height: noticeText.height+2*mm visible: (downloadNotice.text!="") Text{ id:noticeText color: "grey" anchors.centerIn: parent width: contentWidth height: contentHeight font.pixelSize: 2*mm text:"" } } Menu { id:newstabmenu MenuItem { text: qsTr("Timeline") onTriggered: { newstab.newstabstatus="Timeline"; newsModel.clear(); try{ Newsjs.newsfromdb(root.db,root.login.username, function(dbnews){ showNews(dbnews) })}catch(e){Helperjs.showMessage("Error",e,root)}} } MenuItem { text: qsTr("Favorites") onTriggered:{ newstab.newstabstatus="Favorites"; root.contactLoadType="favorites"; newsBusy.running=true; Newsjs.requestFavorites(root.login,db,root.contactlist,root,function(ns,nc){ root.news=ns; root.newContacts=nc; }) } } MenuItem { text: qsTr("Conversations") onTriggered:{ newsModel.clear(); newstab.newstabstatus="Conversations"; Newsjs.chatsfromdb(db,root.login.username,function(news){showNews(news)}) } } MenuItem { text: qsTr("Notifications") onTriggered:{ newstab.newstabstatus="Notifications"; newsBusy.running=true; Newsjs.getNotifications(root.login,db,root,function(news){ showNews(news)} )} } } Component.onCompleted: { root.messageSignal.connect(onFriendsMessages); root.directmessageSignal.connect(onDirectMessage); root.newsSignal.connect(showNews); try{newsModel.clear()} catch(e){} if(root.news.length>0){showNews(root.news)} else{ newstab.newstabstatus=login.newsViewType; if(login.newsViewType=="Timeline"){Newsjs.newsfromdb(db,login.username,function(dbnews){showNews(dbnews)})} else{Newsjs.chatsfromdb(db,login.username,function(dbnews){showNews(dbnews)})} } }} } }