import QtQuick 2.0 import QtQuick.Dialogs 1.2 import QtQuick.Controls 1.2 //import QtQuick.LocalStorage 2.0 as Sql import "qrc:/qml" 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:newstab onConversationChanged:{ newsBusy.running=false; newstab.newstabstatus="Conversation"; newsStack.push({item:"qrc:/qml/newsqml/Conversation.qml",properties:{"news": conversation}}) } } Connections{ target:root onCurrentContactChanged:{ if (root.newContacts.length>0){ print(Qt.atob(root.newContacts[root.currentContact].name)) } } } function showNews(newsToShow){ if (newsStack.depth>1){newsStack.pop()} newsBusy.running=false; var currentTime= new Date(); var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsToShow}; newsWorker.sendMessage(msg); } function onFriendsMessages(friend){ newstab.newstabstatus="Contact"; Newsjs.newsfromdb(db,root.login.username, function(dbnews){showNews(dbnews)},friend) } 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 initialItem:Rectangle { y:1 color: "white" width:root.width-2*mm height:root.height-8*mm 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 width:10*mm text: qsTr("+") 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 width:10*mm text: qsTr("Quit") onClicked: {Service.cleanNews(root.db,function(){Qt.quit() })} } BlueButton { id: update text: "Update" onClicked: { 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;root.currentContact=0; 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;root.currentContact=0}) } })} } } Component { id:footerComponent Rectangle{ border.color: "#EEEEEE" border.width: 1 width:parent.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(); if(newstab.newstabstatus=="Timeline"){ var lastnews_id=newsModel.get(newsModel.count-1).newsitemobject.created_at; 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=="Tree"){ var lastnews_id=newsModel.get(newsModel.count-1).newsitemobject.created_at; 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,newsModel.get(newsModel.count-1).newsitemobject.created_at)} }} } } ListView { id: newsView anchors.fill: parent anchors.topMargin: 8*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{} } 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 } Menu { id:newstabmenu MenuItem { text: qsTr("Timeline") onTriggered: { newstab.newstabstatus="Timeline"; newsModel.clear(); Newsjs.newsfromdb(root.db,root.login.username, function(dbnews){ showNews(dbnews) })} } 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;root.currentContact=0; }) } } MenuItem { text: qsTr("Tree") onTriggered:{ newsModel.clear(); newstab.newstabstatus="Tree"; 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(login.newsViewType=="Timeline"){Newsjs.newsfromdb(db,login.username,function(dbnews){showNews(dbnews)})} else{Newsjs.chatsfromdb(db,login.username,function(dbnews){showNews(dbnews)})} } } } }