// This file is part of Friendiqa // https://git.friendi.ca/lubuwest/Friendiqa // Copyright (C) 2017 Marco R. <thomasschmidt45@gmx.net> // // 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 <http://www.gnu.org/licenses/>. import QtQuick 2.5 import QtQuick.Controls 2.4 import "qrc:/js/helper.js" as Helperjs import "qrc:/js/image.js" as Imagejs import "qrc:/qml/genericqml" Rectangle{ id:imageDialog property var attachImageURLs: [] property string imageId: "" property string currentAlbum:"" property var contacts: [] property var groups: [] property var contact_allow:login.permissions[0] property var contact_deny:login.permissions[1] property var group_allow:login.permissions[2] property var group_deny:login.permissions[3] property int imageNo: 0 function uploadSelectedImage(inumber){ xhr.url= login.server + "/api/friendica/photo/create.json"; xhr.setLogin(login.username+":"+Qt.atob(login.password)); xhr.clearParams(); xhr.setParam("desc",imageUploadModel.get(inumber).description); xhr.setParam("album", album.currentText); //if (group_allow.length>0) {xhr.setParam("group_allow", Helperjs.cleanArray(group_allow))}; //if (group_deny.length>0) {xhr.setParam("group_deny", Helperjs.cleanArray(group_deny))}; //if (contact_allow.length>0) {xhr.setParam("contact_allow", Helperjs.cleanArray(contact_allow))}; //if (contact_deny.length>0) {xhr.setParam("contact_deny", Helperjs.cleanArray(contact_deny))}; xhr.setImageFileParam("media", imageUploadModel.get(inumber).imageUrl ); xhr.post(); } function updateImage(){ xhr.url= login.server + "/api/friendica/photo/update.json"; xhr.setLogin(login.username+":"+Qt.atob(login.password)); xhr.clearParams(); xhr.setParam("desc",imageUploadModel.get(0).description); xhr.setParam("album", currentAlbum); xhr.setParam("album_new", album.currentText); xhr.setParam("photo_id", imageId); xhr.post(); } function attachImage(url){ imageUploadModel.append({"imageUrl":url,"description":""}) } //border.color: "grey" y:1 width:root.width-mm height:root.height-5*mm property string directory: "" Connections{ target:xhr onError:{print(data)}//if (data=="image"){Helperjs.showMessage()}} onSuccess:{ if (imageId==""){ imageNo=imageNo+1; if(imageNo<imageUploadModel.count){ uploadSelectedImage(imageNo); }else{ Imagejs.requestList(login,db, true,root,function(obj){ fotorectangle.newimages=obj; imageDialog.destroy() }) }} else{ Imagejs.updateImage(db,login,"image",filesystem,imageId,root,function(){ Imagejs.requestList(login,db, true,root,function(obj){ fotorectangle.newimages=obj; fotoSignal(login,"backButton"); //photoStack.pop() }) }) } } } Row{ id:buttonRow anchors.top: parent.top anchors.topMargin: 1*mm anchors.right: parent.right anchors.rightMargin: 1*mm spacing:5*mm Text{ font.pixelSize: 3.5*mm font.bold: true text:qsTr("Upload to album") } // BlueButton{ // id:permButton // text: ((contact_allow.length==0)&&(contact_deny.length==0)&&(group_allow.length==0)&&(group_deny.length==0))?"\uf09c":"\uf023" // onClicked: { // var component = Qt.createComponent("qrc:/qml/genericqml/PermissionDialog.qml"); // var permissions = component.createObject(imageDialog,{"x":mm,"y":40*mm}); // } // } Button{ id:closeButton height: 8*mm text: "\uf057" font.pixelSize: 3*mm onClicked:{photoStack.pop(); //imageDialog.destroy() } } } // Text { // text: qsTr("Album") // x: 4*mm; y: 10*mm // } // Text { // text: qsTr("Image") // x: 4*mm; y: 17*mm // } // Text { // text: qsTr("Description") // x: 4*mm; y: 33*mm // } ListView{ id: imageUploadView x:3*mm //23*mm y:17*mm width: imageDialog.width-5*mm //25*mm height: root.width/2 //25*mm model: imageUploadModel delegate: imageDelegate footer: imageId==""?imageFooter:null clip:true orientation: ListView.Horizontal spacing: mm } BusyIndicator{ id: uploadBusy running: false anchors.horizontalCenter: imageUploadView.horizontalCenter anchors.top:imageUploadView.top anchors.topMargin: 2*mm width:10*mm height: 10*mm } ListModel{ id: imageUploadModel } Component{ id: imageDelegate Rectangle{ width:root.width/2 //Math.max(20*mm,descriptionInput.contentWidth) height:imageUploadView.height-5*mm // 20*mm Image{ id: uploadImage width: root.width/2-mm //20*mm height: imageUploadView.height-6*mm//height: 14*mm fillMode: Image.PreserveAspectFit source:imageUrl onVisibleChanged: descriptionInput.focus=true; MouseArea{ anchors.fill: parent onClicked:{ imageUploadModel.remove(index) // attachImageURLs.splice(attachImageURLs.indexOf(imageUrl,1)) // attachImage(imageUrl) } } } Rectangle{ color: "light grey" border.color: "grey" anchors.top: uploadImage.bottom anchors.topMargin: mm //x: mm; y: 15*mm; width: root.width/2-mm //Math.max(root.width/2-mm, descriptionInput.contentWidth); height: 5*mm; TextField{ //TextInput { id: descriptionInput anchors.fill: parent font.pixelSize: 3*mm selectByMouse: true placeholderText: qsTr("Description") text:description!=""?description:"" onTextChanged: imageUploadModel.set(index,{"description":descriptionInput.text}); } } } } Component{ id: imageFooter Image{ id: footerImage height: root.width/4 width: root.width/4 //15*mm //15*mm fillMode: Image.PreserveAspectFit source:"qrc:/images/addImage.png" MouseArea{ anchors.fill: parent onClicked:{ imagePicking=true; var imagePicker = Qt.createQmlObject('import QtQuick 2.0; import "qrc:/qml/genericqml";'+ osSettings.imagePickQml+'{multiple : false;onReady: {attachImageURLs.push(imageUrl);'+ 'attachImage(imageUrl)}}',imageDialog,"imagePicker"); imagePicker.pickImage() } } } } ComboBox{ id: album x: 3*mm y: 10*mm width: root.width/2; height: 5*mm; editable:true model: albumModel onAccepted: { if (find(currentText) === -1) { albumModel.append({text: editText}) currentIndex = find(editText) } } } ListModel{id:albumModel} Button{ id:uploadButton height: 8*mm x:4*mm; y:root.width/2+18*mm //40*mm text: imageId==""?qsTr("Upload"):qsTr("Change") font.pixelSize: 3*mm onClicked:{ if(album.currentText==""){Helperjs.showMessage(qsTr("Error"),qsTr(" No album name given"), imageDialog)} else if (imageId!=""){uploadBusy.running=true; updateImage()} else{newimageProgress.visible=true; if (imageUploadModel.count>0){ uploadSelectedImage(0) }} } } ProgressBar{ id: newimageProgress width: 15*mm height: buttonRow.height anchors.top: parent.top anchors.right:buttonRow.left anchors.rightMargin:mm visible: false value: imageNo/imageUploadModel.count } Component.onCompleted:{ albumModel.append({"text":""}); try{Helperjs.readField("album",db,"imageData",login.username,function(storedAlbums){ for (var n in storedAlbums){ albumModel.append({"text":storedAlbums[n]})} })} catch (e){print(e)} if(attachImageURLs.length>0){ for (var n in attachImageURLs){attachImage(attachImageURLs[n])} } } }