// This file is part of Friendiqa // https://git.friendi.ca/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.7 import QtQuick.Dialogs 1.2 import QtQuick.Controls 2.4 import "qrc:/js/service.js" as Service import "qrc:/js/layout.js" as Layoutjs import "qrc:/js/helper.js" as Helperjs import "qrc:/qml/configqml" import "qrc:/qml/genericqml" Page{ id:accountPage width: root.width height: root.height property var users:[] property var userdata: ({}) function setServericon(server){ try {Helperjs.friendicaWebRequest(server+"/api/statusnet/config",accountPage, function (obj){ var serverdata = JSON.parse(obj); servericon.visible=true; servericon.source=serverdata.site.logo})} catch(e){print(e)} } Button{ id:userButton height: 8*mm text:qsTr("User") font.pixelSize: 3*mm x: mm y: mm width: root.width/2 onClicked:{ var useritems=""; for (var i=0;i-1){ Helperjs.showMessage(qsTr("Error"),qsTr("Nicknames containing @ symbol currently not supported"),accountPage) } } } } Button { x: root.width-9*mm; y: 23.5*mm; width:5*mm; height:5*mm text: "\uf234" font.pixelSize: 3*mm onClicked: { root.push("qrc:/qml/configqml/RegisterPage.qml",{url:servername.text+"/register?nickname="+username.getText(0,username.length)}) } } Rectangle{ color: "light grey" x: 4*mm; y: 33.5*mm; width: root.width-6*mm; height: 5*mm; TextInput { id: password anchors.fill: parent font.pixelSize:3*mm selectByMouse: true echoMode: TextInput.PasswordEchoOnEdit } } Rectangle{color: "light grey"; x: 4*mm; y: 43.5*mm; width: root.width-14*mm; height: 5*mm;} Flickable { id: imagestoreFlickable x: 4*mm; y: 43.5*mm; width: root.width-14*mm; height: 5*mm; clip: true TextInput { id: imagestore width: imagestoreFlickable.width height: imagestoreFlickable.height font.pixelSize:3*mm text: (osSettings.osType=="Android") && (filesystem.fileexist("/storage/emulated/0/Pictures/"))?"/storage/emulated/0/Pictures/":"" wrapMode: TextEdit.NoWrap onCursorRectangleChanged: Layoutjs.ensureVisibility(cursorRectangle,imagestoreFlickable) } } FileDialog { id: imagestoreDialog title: "Please choose a directory" folder: shortcuts.pictures selectFolder: true onAccepted: { var imagestoreString=imagestoreDialog.folder.toString(); imagestoreString=imagestoreString.replace(/^(file:\/{2})/,"")+"/" imagestore.text=imagestoreString } } Button { x: root.width-9*mm; y: 43.5*mm; width: 5*mm; height: 5*mm; text: "..." font.pixelSize: 3*mm onClicked: {imagestoreDialog.open()} } // Slider{ id: maxNews // x:19*mm; y: 53.5*mm;width: root.width/2;height:5*mm // from: 0;to:2000; stepSize: 100 // } // Rectangle{color: "light grey"; x: 4*mm; y: 53.5*mm; width: 9*mm; height: 5*mm; // TextEdit{id:maxNewsText; // anchors.fill: parent // font.pixelSize:3*mm // verticalAlignment:TextEdit.AlignRight // text:maxNews.value // focus: true // selectByMouse: true // } // } Rectangle{ x: 4*mm; y: 53.5*mm; width: newsTypeField.contentWidth+2*mm; height: 5*mm; color:"light grey" Text{ id: newsTypeField anchors.fill: parent font.pixelSize:3*mm text:"Conversations" } MouseArea{ anchors.fill:parent onClicked:newstypemenu.popup() } } BusyIndicator{ id: accountBusy anchors.horizontalCenter: parent.horizontalCenter y: 63.5*mm width:10*mm height: 10*mm running: false } // CheckBox{ // id:showwebsiteCheckbox // x:35*mm;y:80*mm // onClicked:{ // if (checked==true){ // Service.updateglobaloptions(root.db,"showWebsiteForLinks","true") // root.globaloptions.showWebsiteForLinks="true" // } // else { // Service.updateglobaloptions(root.db,"showWebsiteForLinks","false") // root.globaloptions.showWebsiteForLinks="false" // } // } // } Button { x: 4*mm; y: 63.5*mm height: 8*mm text: qsTr("Confirm") font.pixelSize: 3*mm onClicked:{ accountBusy.running=true; var userconfig={server: servername.text, username: username.text, password:Qt.btoa(password.text), imagestore:imagestore.text, maxnews:"",interval: "",newsViewType:newsTypeField.text}; var errormessage=""; if (servername.text==""){errormessage=qsTr("No server given! ")} else if (username.text==""){errormessage+=qsTr("No nickname given! ")} else if (password.text=="") {errormessage+=qsTr("No password given! ")} else if (imagestore.text=="") {errormessage+=qsTr("No image directory given!")} //else if (maxNewsText.text=="") {errormessage+=qsTr("No maximum news number given!")} else {errormessage=""} if (errormessage=="") { Helperjs.friendicaRequest(userconfig,"/api/account/verify_credentials?skip_status=true",root,function(obj){ accountBusy.running=false; var credentials=JSON.parse(obj); if (credentials.hasOwnProperty('status')){ Helperjs.showMessage(qsTr("Error"),qsTr("Wrong password!"),root) } else{ filesystem.Directory=userconfig.imagestore; filesystem.makeDir("contacts"); filesystem.makeDir("albums"); Service.storeConfig(db,userconfig); Service.readConfig(db,function(userconfig){ Helperjs.readData(db,"config","",function(storedUsers){ storedUsers.sort(function(obj1, obj2) { return obj1.isActive - obj2.isActive; }); accountPage.users=storedUsers}); //reset values root.login=userconfig; root.news=[]; rootstack.currentIndex=0; root.newstypeSignal("refresh"); },"isActive",0); //Service.requestProfile(userconfig,db,root,function(nc){root.newContacts=nc}); Helperjs.showMessage(qsTr("Success"),qsTr("Name")+": "+credentials.name+"\nScreen Name: "+credentials.screen_name,root) } }); } else {Helperjs.showMessage(qsTr("Error"), errormessage,root)} }} Button { x: parent.width/2+2*mm; y: mm; width: 5*mm; height: 8*mm; text: "-" font.pixelSize: 3*mm onClicked:{ var userconfig={server: servername.text, username: username.text, password: Qt.btoa(password.text)}; Service.deleteConfig(db,userconfig,function(){ filesystem.Directory=imagestore.text+"contacts"; filesystem.rmDir(); filesystem.Directory=imagestore.text+"albums"; filesystem.rmDir(); servername.text="https://"; servericon.visible=false; servericon.source=""; username.text=""; password.text=""; imagestore.text=""; //maxNews.value=0; newsTypeField.text="Conversations"; //messageIntervalSlider.value=30; userButton.text=qsTr("User"); Helperjs.readData(db,"config","",function(storedUsers){ storedUsers.sort(function(obj1, obj2) { return obj1.isActive - obj2.isActive; }) accountPage.users=storedUsers;}) }) }} Button { x: parent.width/2+8*mm; y: mm; width: 5*mm; height: 8*mm; text: "+" font.pixelSize: 3*mm onClicked:{ servername.text="https://" servericon.visible=false; servericon.source=""; username.text="" password.text="" imagestore.text="" //maxNews.value=0 newsTypeField.text="Conversations" //messageIntervalSlider.value=30 userButton.text=qsTr("User") } } Button { x: parent.width/2+14*mm; y: mm; width: 5*mm; height: 8*mm; text: "?" font.pixelSize: 3*mm onClicked:{ root.push("qrc:/qml/configqml/InfoBox.qml"); } } Button{ id:closeButton height: 8*mm width: 5*mm anchors.top: parent.top anchors.topMargin: 1*mm anchors.right: parent.right anchors.rightMargin: 1*mm text: "\uf057" font.pixelSize: 3*mm onClicked:{root.pop()} } Menu { id:newstypemenu MenuItem { font.pixelSize: 3*mm text: qsTr("Timeline") onTriggered: {newsTypeField.text="Timeline"} } MenuItem { font.pixelSize: 3*mm text: qsTr("Conversations") onTriggered: {newsTypeField.text="Conversations"} } } Component.onCompleted: { try{Helperjs.readData(db,"config","",function(storedUsers){ storedUsers.sort(function(obj1, obj2) { return obj1.isActive - obj2.isActive; }) accountPage.users=storedUsers; Service.readConfig(db,function(obj){ userButton.text=obj.username; servername.text=obj.server; accountPage.setServericon(obj.server); username.text= obj.username; password.text=Qt.atob(obj.password); imagestore.text=obj.imagestore; //maxNews.value=obj.maxnews; newsTypeField.text=obj.newsViewType; //messageIntervalSlider.value=obj.timerInterval; if( obj.isActive==0){userButton.font.bold='true'} else {userButton.font.bold='false'} },"isActive",0) })} catch (e){print(e) // Helperjs.friendicaWebRequest("https://dir.friendica.social/servers/surprise",accountPage,function(html){ // print(html); // var bpos=html.indexOf("base "); // var baseurl=html.substring(html.indexOf("http",bpos),html.indexOf('"',html.indexOf("http",bpos))); // servername.text=baseurl // }) } } }