forked from lubuwest/Friendiqa
Friendiqa v0.3
This commit is contained in:
parent
585e329bcb
commit
bda2d9f7b5
63 changed files with 2746 additions and 1357 deletions
|
@ -31,64 +31,98 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.2
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import QtQuick.Dialogs 1.3
|
||||
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
|
||||
|
||||
//import AndroidNative 1.0
|
||||
|
||||
Item {
|
||||
Connections{
|
||||
target:newstab
|
||||
onNewstabstatusChanged:{
|
||||
newstabstatusButton.text= qsTr(newstab.newstabstatus)
|
||||
// switch(newstab.newstabstatus){
|
||||
// case "Timeline": newstabstatusCombo.currentIndex=1; break;
|
||||
// case "Conversations":newstabstatusCombo.currentIndex=2; break;
|
||||
// case "Favorites":newstabstatusCombo.currentIndex=3; break;
|
||||
// case "Network":newstabstatusCombo.currentIndex=4; break;
|
||||
// case "Direct Messages":newstabstatusCombo.currentIndex=5; break;
|
||||
// case "Notifications":newstabstatusCombo.currentIndex=6; break;
|
||||
// case "Search":newstabstatusCombo.currentIndex=7; break;
|
||||
// case "Groupnews":newstabstatusCombo.currentIndex=8; break;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
Connections{
|
||||
target:xhr
|
||||
// onError:{if (data=="contact"){downloadNotice.text=root.newContacts[root.currentContact].name+"... Error!"}}
|
||||
onSuccess:{replytimer.start() //wait 1 second to load new timeline
|
||||
onError:{
|
||||
Helperjs.showMessage(qsTr("Error"),"API:\n" +login.server+api+"\n Return: \n"+data,root);
|
||||
}
|
||||
onSuccess:{
|
||||
// downloadNotice.text=downloadNotice.text+ "\n xhr finished "+Date.now();
|
||||
Service.processNews(api,data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Timer {id:replytimer; interval: 1000; running: false; repeat: false
|
||||
onTriggered: {
|
||||
if(newstab.newstabstatus=="Conversation"){
|
||||
showConversation(newsStack.timelineIndex-1,newsModel.get(0).newsitemobject)}
|
||||
else{
|
||||
var onlynew=true;
|
||||
Newsjs.getFriendsTimeline(login,db,contactlist,onlynew,newstab,function(rns,rnc){
|
||||
Service.updateView(newstab.newstabstatus)
|
||||
root.contactLoadType="news";
|
||||
root.news=rns;root.newContacts=rnc;})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Timer {id:contacttimer; interval: 50; running: false; repeat: false
|
||||
onTriggered: {
|
||||
// downloadNotice.text=downloadNotice.text + "\n contactTimer start "+ Date.now()
|
||||
root.newContacts=Newsjs.findNewContacts(root.news,root.contactlist);
|
||||
Newsjs.storeNews(login,db,root.news,root)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function showNews(newsToShow){
|
||||
try{if (newsStack.depth>1){newsStack.pop()}}catch(e){}
|
||||
newsBusy.running=false;
|
||||
var currentTime= new Date();
|
||||
downloadNotice.text="";
|
||||
var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsToShow};
|
||||
// downloadNotice.text=downloadNotice.text + "\n shownews start "+ Date.now();
|
||||
//print("appendnews "+newsStack.appendNews +JSON.stringify(newsToShow))
|
||||
var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsToShow,'appendnews':newsStack.appendNews};
|
||||
newsWorker.sendMessage(msg);
|
||||
newsStack.appendNews=false
|
||||
}
|
||||
|
||||
|
||||
|
||||
function showConversation(conversationIndex,newsitemobject){
|
||||
//newsBusy.running=true;
|
||||
root.contactLoadType="conversation";
|
||||
newsStack.conversationIndex= conversationIndex;
|
||||
//print(newsitemobject.id);
|
||||
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=[];
|
||||
})}
|
||||
xhr.clearParams();
|
||||
xhr.setLogin(login.username+":"+Qt.atob(login.password));
|
||||
xhr.setUrl(login.server);
|
||||
xhr.setApi("/api/conversation/show");
|
||||
xhr.setParam("id",newsitemobject.id)
|
||||
xhr.get();
|
||||
}
|
||||
else{
|
||||
xhr.clearParams();
|
||||
xhr.setLogin(login.username+":"+Qt.atob(login.password));
|
||||
xhr.setUrl(login.server);
|
||||
xhr.setApi("/api/direct_messages/conversation");
|
||||
xhr.setParam("uri",newsitemobject.statusnet_conversation_id)
|
||||
xhr.get();
|
||||
}
|
||||
}
|
||||
|
||||
function showContact(contact){
|
||||
|
@ -98,6 +132,21 @@ Item {
|
|||
}
|
||||
}
|
||||
|
||||
function search(term){print("Search "+term)
|
||||
if (term!=""){
|
||||
newstab.newstabstatus="Search";
|
||||
newsBusy.running=true;
|
||||
xhr.setLogin(login.username+":"+Qt.atob(login.password));
|
||||
xhr.setUrl(login.server);
|
||||
xhr.setApi("/api/search");
|
||||
xhr.clearParams();
|
||||
xhr.setParam("q",term)
|
||||
xhr.get();}
|
||||
newsSearch.visible=false;
|
||||
newsView.anchors.topMargin=7*mm
|
||||
}
|
||||
|
||||
|
||||
function onFriendsMessages(friend){
|
||||
newstab.newstabstatus="Contact"
|
||||
Newsjs.newsfromdb(db,root.login.username, function(dbnews){
|
||||
|
@ -132,18 +181,163 @@ Item {
|
|||
id: newsStack
|
||||
anchors.fill:parent
|
||||
property int conversationIndex: 0
|
||||
|
||||
property bool appendNews: false
|
||||
property var allchats: ({})
|
||||
initialItem:Rectangle {
|
||||
id:newslistRectangle
|
||||
y:1
|
||||
color: "white"
|
||||
|
||||
// ComboBox{
|
||||
// id:newstabstatusCombo
|
||||
// anchors.top: parent.top
|
||||
// anchors.topMargin: 0.5*mm
|
||||
// width: 1/3*root.width
|
||||
// height: 5*mm;
|
||||
// style:
|
||||
// ComboBoxStyle{
|
||||
// background: Rectangle {
|
||||
// color:"light blue"
|
||||
// radius: 0.5*mm
|
||||
// }
|
||||
// label: Text {
|
||||
// verticalAlignment: Text.AlignVCenter
|
||||
// horizontalAlignment: Text.AlignHCenter
|
||||
// text: control.currentText
|
||||
// }
|
||||
// }
|
||||
|
||||
// model: ListModel {
|
||||
// id: newscomboItems
|
||||
// ListElement { type: "Timeline"; text: qsTr("Timeline")}
|
||||
// ListElement { type: "Conversations";text: qsTr("Conversations")}
|
||||
// ListElement { type: "Favorites";text: qsTr("Favorites") }
|
||||
// ListElement { type: "PublicTimeline";text: qsTr("Public timeline") }
|
||||
// ListElement { type: "DirectMessages";text: qsTr("Direct Messages") }
|
||||
// ListElement { type: "Notifications";text: qsTr("Notifications") }
|
||||
// ListElement { type: "Search";text: qsTr("Search") }
|
||||
// ListElement { type: "Groupnews"; text: qsTr("Group News") }
|
||||
// ListElement { type: "Quit";text: qsTr("Quit") }
|
||||
// }
|
||||
// currentIndex:(login.newsViewType=="Timeline")?0:1
|
||||
// onCurrentIndexChanged:{
|
||||
// //onActivated:{
|
||||
// print(newscomboItems.get(currentIndex).type);
|
||||
// switch(newscomboItems.get(currentIndex).type){
|
||||
// case "Timeline":
|
||||
// newstab.newstabstatus="Timeline";
|
||||
// newsModel.clear();
|
||||
// try{ Newsjs.newsfromdb(root.db,root.login.username, function(dbnews){
|
||||
// showNews(dbnews)
|
||||
// })}catch(e){Helperjs.showMessage("Error",e,root)}
|
||||
// break;
|
||||
// case "Conversations":
|
||||
// newsModel.clear();
|
||||
// newstab.newstabstatus="Conversations";
|
||||
// Newsjs.chatsfromdb(db,root.login.username,function(news){showNews(news)})
|
||||
// break;
|
||||
// case "Favorites":
|
||||
// newstab.newstabstatus="Favorites";
|
||||
// root.contactLoadType="favorites";
|
||||
// Service.updateView("Favorites");
|
||||
// break;
|
||||
// case "PublicTimeline":
|
||||
// newstab.newstabstatus="Network";
|
||||
// Service.updateView("Network");
|
||||
// break;
|
||||
// case "DirectMessages":
|
||||
// newstab.newstabstatus="DirectMessages";
|
||||
// Service.updateView("DirectMessages");
|
||||
// break;
|
||||
// case "Notifications":
|
||||
// newstab.newstabstatus="Notifications";
|
||||
// Service.updateView("Notifications");
|
||||
// break;
|
||||
// case "Search":
|
||||
// newsView.anchors.topMargin=18*mm;
|
||||
// newsSearch.visible=true
|
||||
// break;
|
||||
// case "Groupnews":
|
||||
// Service.showGroups();
|
||||
// break;
|
||||
// case "Quit":
|
||||
// Service.cleanNews(root.db,function(){
|
||||
// Service.cleanContacts(root.login,root.db,function(){
|
||||
// Qt.quit()})
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
BlueButton{
|
||||
id:newstabstatusButton
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: 0.5*mm
|
||||
text: qsTr(newstab.newstabstatus)
|
||||
onClicked: {newstabmenu.popup()}
|
||||
|
||||
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("Conversations")
|
||||
onTriggered:{
|
||||
newsModel.clear();
|
||||
newstab.newstabstatus="Conversations";
|
||||
Newsjs.chatsfromdb(db,root.login.username,function(news){showNews(news)})
|
||||
}
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Favorites")
|
||||
onTriggered:{
|
||||
newstab.newstabstatus="Favorites";
|
||||
// root.contactLoadType="favorites";
|
||||
Service.updateView("Favorites")
|
||||
}
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Public timeline")
|
||||
onTriggered:{
|
||||
newstab.newstabstatus="Public Timeline";
|
||||
Service.updateView("Public Timeline")
|
||||
}
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
text: qsTr("Direct Messages")
|
||||
onTriggered:{
|
||||
newstab.newstabstatus="Direct Messages";
|
||||
Service.updateView("Direct Messages")
|
||||
}
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Notifications")
|
||||
onTriggered:{
|
||||
newstab.newstabstatus="Notifications";
|
||||
Service.updateView("Notifications")
|
||||
}
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Group news")
|
||||
onTriggered:Service.showGroups();
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Quit")
|
||||
onTriggered:{
|
||||
Service.cleanNews(root.db,function(){
|
||||
Service.cleanContacts(root.login,root.db,function(){
|
||||
Qt.quit()})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Row{
|
||||
|
@ -152,6 +346,20 @@ Item {
|
|||
anchors.topMargin: 0.5*mm
|
||||
anchors.right: parent.right
|
||||
|
||||
BlueButton {
|
||||
id: searchButton
|
||||
text: "\uf002"
|
||||
onClicked: {
|
||||
if (newsSearch.visible==false){
|
||||
newsView.anchors.topMargin=18*mm;
|
||||
newsSearch.visible=true}
|
||||
else{
|
||||
newsSearch.visible=false;
|
||||
newsView.anchors.topMargin=7*mm;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BlueButton {
|
||||
id: newMessageButton
|
||||
text: "\uf040"
|
||||
|
@ -166,32 +374,20 @@ Item {
|
|||
},"isFriend",1);
|
||||
}
|
||||
}
|
||||
BlueButton {
|
||||
id: quitButton
|
||||
text: "\uf08b"
|
||||
onClicked: {Service.cleanNews(root.db,function(){
|
||||
Service.cleanContacts(root.login,root.db,function(){
|
||||
Qt.quit() })
|
||||
})}
|
||||
}
|
||||
// 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;})
|
||||
}
|
||||
})
|
||||
//root.contactLoadType="news";
|
||||
Service.updateView(newstab.newstabstatus)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -211,7 +407,6 @@ Item {
|
|||
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};
|
||||
|
@ -227,11 +422,27 @@ Item {
|
|||
var msg = {'currentTime': currentTime, 'model': newsModel,'news':news,'appendnews':true};
|
||||
newsWorker.sendMessage(msg);
|
||||
},newsModel.get(newsModel.count-1).newsitemobject.uid,lastnews_id)}
|
||||
}
|
||||
else if (newstab.newstabstatus=="Notifications"){}
|
||||
else{
|
||||
newsStack.appendNews=true;
|
||||
xhr.setParam("max_id",newsModel.get(newsModel.count-1).newsitemobject.id-1);
|
||||
xhr.get()
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle{
|
||||
id: newsSearch
|
||||
color: "#FFFAFA"
|
||||
y:8*mm
|
||||
width:root.width
|
||||
height: 8*mm
|
||||
visible:false
|
||||
Search{
|
||||
anchors.fill: parent
|
||||
anchors.margins: mm
|
||||
}
|
||||
}
|
||||
ListView {
|
||||
id: newsView
|
||||
anchors.fill: parent
|
||||
|
@ -245,19 +456,9 @@ Item {
|
|||
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;})
|
||||
}
|
||||
})
|
||||
Service.updateView(newstab.newstabstatus)
|
||||
}}
|
||||
}
|
||||
|
||||
|
@ -299,67 +500,23 @@ Item {
|
|||
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);
|
||||
root.uploadSignal.connect(sendUrls);
|
||||
root.sendtextSignal.connect(sendtext);
|
||||
try{newsModel.clear()} catch(e){}
|
||||
|
||||
//print("imageUrls "+JSON.stringify(imageUrls)+" newsstack.depth:"+newsStack.depth);
|
||||
//newsStack.push({item:"qrc:/qml/newsqml/MessageSend.qml",properties:{attachImageURLs:[imageUrl]}})
|
||||
// var imagePicker = Qt.createQmlObject('import QtQuick 2.0; import "qrc:/qml/genericqml";'+
|
||||
// osSettings.imagePickQml+'{multiple : true; onReady: {'+
|
||||
// 'if(imageUrls.length==1){root.currentIndex=0;newstab.active=true;root.uploadSignal(imageUrls)} else{'+
|
||||
// ' root.currentIndex=2;fotostab.active=true;'+
|
||||
// 'root.uploadSignal(imageUrls)};}}',newstab,"imagePicker");
|
||||
//SystemDispatcher.setInitialized();
|
||||
root.messageSignal.connect(onFriendsMessages);
|
||||
root.directmessageSignal.connect(onDirectMessage);
|
||||
root.newsSignal.connect(showNews);
|
||||
root.uploadSignal.connect(sendUrls);
|
||||
root.sendtextSignal.connect(sendtext);
|
||||
try{newsModel.clear()} catch(e){}
|
||||
xhr.setLogin(login.username+":"+Qt.atob(login.password));
|
||||
xhr.setUrl(login.server);
|
||||
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)})}
|
||||
if(login.newsViewType=="Timeline"){Newsjs.newsfromdb(db,login.username,function(dbnews){showNews(dbnews)})}
|
||||
else{Newsjs.chatsfromdb(db,login.username,function(dbnews){showNews(dbnews)})}
|
||||
}
|
||||
if(osSettings.imagePickQml=="ImagePicker"){var component = Qt.createComponent("qrc:/qml/genericqml/IntentReceiver.qml");
|
||||
var IntentReceiverQml = component.createObject(root)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue