This commit is contained in:
LubuWest 2019-01-09 22:03:16 +01:00
commit 63dfb9b197
70 changed files with 2829 additions and 1056 deletions

View file

@ -93,99 +93,106 @@ StackView{
}
Text {
text: qsTr("Server")
x: 4*mm; y: 10*mm
text: qsTr("Server")
font.pixelSize:3*mm
x: 4*mm; y: 10*mm
}
Text {
text: qsTr("Nickname")
x: 4*mm; y: 20*mm
text: qsTr("Nickname")
font.pixelSize:3*mm
x: 4*mm; y: 20*mm
}
Text {
text: qsTr("Password")
x: 4*mm; y: 30*mm
font.pixelSize:3*mm
x: 4*mm; y: 30*mm
}
Text {
text: qsTr("Image dir.")
x: 4*mm; y: 40*mm
text: qsTr("Image dir.")
font.pixelSize:3*mm
x: 4*mm; y: 40*mm
}
Text {
text: qsTr("Max. News")
x: 4*mm; y: 50*mm
}
Text {
text: qsTr("News as")
x: 4*mm; y: 60*mm
Text {
text: qsTr("Max. News")
font.pixelSize:3*mm
x: 4*mm; y: 50*mm
}
Text {
text: qsTr("Interval (0=None)")
visible: false
x: 4*mm; y: 70*mm; width:20*mm;wrapMode: Text.Wrap
}
text: qsTr("News as")
font.pixelSize:3*mm
x: 4*mm; y: 60*mm
}
Text {
text: qsTr("Sync Interval (0=None)")
font.pixelSize:3*mm
//visible: false
x: 4*mm; y: 70*mm; //width:35*mm;wrapMode: Text.Wrap
}
// Text {
// Text {
// text: qsTr("Show Website")
// x: 4*mm; y: 70*mm; width: 20*mm
// }
// x: 4*mm; y:80*mm; width: 20*mm
// }
Image{
id:servericon
x:19*mm;y:10*mm
width:5*mm; height: 5*mm
visible: false
source:""
MouseArea{
anchors.fill:parent
onClicked:{
Service.showServerConfig(servername.text, configBackground, function(configString){
var serverconfigObject=Qt.createQmlObject(configString,configBackground,"serverconfigOutput");})
}
Image{
id:servericon
x:4*mm;y:13.5*mm
width:5*mm; height: 5*mm
visible: false
source:""
MouseArea{
anchors.fill:parent
onClicked:{
Service.showServerConfig(servername.text, configBackground, function(configString){
var serverconfigObject=Qt.createQmlObject(configString,configBackground,"serverconfigOutput");})
}
}
}
BlueButton{
id:serverSearchButton
text:"\uf002"
x:19*mm
y:10*mm
width: 5*mm; height:5*mm
visible: servericon.visible?false:true
onClicked:{Qt.openUrlExternally(Qt.resolvedUrl("https://dir.friendica.social/servers"))}
}
BlueButton{
id:serverSearchButton
text:"\uf002"
x:4*mm
y:13.5*mm
width: 5*mm; height:5*mm
visible: servericon.visible?false:true
onClicked:{Qt.openUrlExternally(Qt.resolvedUrl("https://dir.friendica.social/servers"))}
}
Rectangle{color: "light grey"; x: 25*mm; y: 10*mm; width: root.width/2; height: 5*mm;}
Flickable {
id: servernameFlickable
x: 25*mm; y: 10*mm; width: root.width/2; height: 5*mm;
contentWidth: servername.paintedWidth
contentHeight: servername.paintedHeight
clip: true
TextEdit {
id: servername
width: servernameFlickable.width
height: servernameFlickable.height
focus: true
text:"https://..."
onEditingFinished:{
Rectangle{color: "light grey"; x: 10*mm; y: 13.5*mm; width: root.width-12*mm; height: 5*mm;}
Flickable {
id: servernameFlickable
x: 10*mm; y: 13.5*mm; width: root.width-12*mm; height: 5*mm;
contentWidth: servername.paintedWidth
contentHeight: servername.paintedHeight
clip: true
TextEdit {
id: servername
width: servernameFlickable.width
height: servernameFlickable.height
focus: true
font.pixelSize:3*mm
text:"https://..."
onEditingFinished:{
if((servername.text).substring(0,14) =="https://...http"){
serverstring.text= (serverstring.text).substring(11)
}
configBackground.setServericon(servername.text)
}
onCursorRectangleChanged: Layoutjs.ensureVisibility(cursorRectangle,servernameFlickable)
}
}
}
}
Rectangle{
color: "light grey"
x: 25*mm; y: 20*mm; width: root.width/2-9*mm; height: 5*mm;
TextInput {
id: username
anchors.fill: parent
selectByMouse: true
Rectangle{
color: "light grey"
x: 4*mm; y: 23.5*mm; width: root.width-14*mm; height: 5*mm;
TextInput {
id: username
anchors.fill: parent
font.pixelSize:3*mm
selectByMouse: true
onEditingFinished:{
if (username.text.indexOf('@')>-1){
Helperjs.showMessage(qsTr("Error"),qsTr("Nicknames containing @ symbol currently not supported"),configBackground)
@ -201,84 +208,40 @@ StackView{
}
}
}
BlueButton {
x: root.width/2+18*mm; y: 20*mm; width:7*mm
text: "\uf234"
onClicked: {
configStack.push({item:"qrc:/qml/configqml/RegisterPage.qml",properties:{url:servername.text+"/register?nickname="+username.getText(0,username.length)}})
}
}
BlueButton {
x: root.width-9*mm; y: 23.5*mm; width:7*mm
text: "\uf234"
onClicked: {
configStack.push({item:"qrc:/qml/configqml/RegisterPage.qml",properties:{url:servername.text+"/register?nickname="+username.getText(0,username.length)}})
}
}
Rectangle{
color: "light grey"
x: 25*mm; y: 30*mm; width: root.width/2; height: 5*mm;
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: 25*mm; y: 40*mm; width: root.width/2-9*mm; height: 5*mm;}
Rectangle{color: "light grey"; x: 4*mm; y: 43.5*mm; width: root.width-14*mm; height: 5*mm;}
Flickable {
id: imagestoreFlickable
x: 25*mm; y: 40*mm; width: root.width/2-9*mm; height: 5*mm;
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
wrapMode: TextEdit.NoWrap
onCursorRectangleChanged: Layoutjs.ensureVisibility(cursorRectangle,imagestoreFlickable)
}
}
Slider{ id: maxNews
x:34*mm; y: 50*mm;width: root.width/3;height:5*mm
minimumValue: 0;maximumValue:2000; stepSize: 100
}
Rectangle{color: "light grey"; x: 25*mm; y: 50*mm; width: 9*mm; height: 5*mm;
TextEdit{id:maxNewsText;
anchors.fill: parent
verticalAlignment:TextEdit.AlignRight
text:maxNews.value
focus: true
selectByMouse: true
}
}
Rectangle{
x: 25*mm; y: 60*mm; width: root.width/2; height: 5*mm;
color:"light grey"
Text{
id: newsTypeField
anchors.fill: parent
text:"Conversations"
}
MouseArea{
anchors.fill:parent
onClicked:newstypemenu.popup()
}
}
Slider{ id: messageIntervalSlider
visible: false
x:37*mm; y: 70*mm;width: root.width/3;height:5*mm
minimumValue: 0;maximumValue:24; stepSize: 0.5
}
Rectangle{
visible:false
x: 25*mm; y: 70*mm; width: 9*mm; height: 5*mm;
TextEdit{
id: messageIntervalField
anchors.fill: parent
verticalAlignment:TextEdit.AlignRight
text:messageIntervalSlider.value
focus: true
selectByMouse: true
}
}
FileDialog {
id: imagestoreDialog
@ -290,20 +253,71 @@ StackView{
imagestoreString=imagestoreString.replace(/^(file:\/{2})/,"")+"/"
imagestore.text=imagestoreString
}
}
}
BlueButton {
x: root.width/2+18*mm; y: 40*mm; width: 7*mm; height: 5*mm;
x: root.width-9*mm; y: 43.5*mm; width: 7*mm; height: 5*mm;
text: "..."
onClicked:
{imagestoreDialog.open()}
}
Slider{ id: maxNews
x:19*mm; y: 53.5*mm;width: root.width/2;height:5*mm
minimumValue: 0;maximumValue: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: 63.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()
}
}
Slider{ id: messageIntervalSlider
x:22*mm; y: 73.5*mm;width: root.width/2;height:5*mm
minimumValue: 0;maximumValue:120; stepSize: 15
}
Rectangle{
x: 4*mm; y: 73.5*mm; width: 9*mm; height: 5*mm;
TextEdit{
id: messageIntervalField
anchors.fill: parent
font.pixelSize:3*mm
verticalAlignment:TextEdit.AlignRight
text:messageIntervalSlider.value
focus: true
selectByMouse: true
}
}
Text{x: 14*mm; y: 73.5*mm; width: 5*mm; height: 5*mm;
font.pixelSize:3*mm
text:qsTr("Min.")
}
// CheckBox{
// id:showwebsiteCheckbox
// x:35*mm;y:70*mm
// x:35*mm;y:80*mm
// onClicked:{
// if (checked==true){
// Service.updateglobaloptions(root.db,"showWebsiteForLinks","true")
@ -314,11 +328,10 @@ StackView{
// root.globaloptions.showWebsiteForLinks="false"
// }
// }
// }
BlueButton {
x: 25*mm; y: 78*mm
x: 4*mm; y: 83.5*mm
text: qsTr("Confirm")
onClicked:{
var userconfig={server: servername.text, username: username.text, password:Qt.btoa(password.text), imagestore:imagestore.text,maxnews:maxNewsText.text,interval: messageIntervalField.text, newsViewType:newsTypeField.text};
@ -352,7 +365,10 @@ StackView{
root.login=userconfig;
root.news=[];
},"isActive",0);
Service.requestProfile(userconfig,db,root,function(nc){root.newContacts=nc})
Service.requestProfile(userconfig,db,root,function(nc){root.newContacts=nc});
if(osSettings.osType=="Android" && userconfig.timerInterval !=0){
alarm.setAlarm(userconfig.timerInterval);
}
Helperjs.showMessage(qsTr("Success"),qsTr("Name")+": "+credentials.name+"\nScreen Name: "+credentials.screen_name,root)
}
});
@ -382,7 +398,7 @@ StackView{
imagestore.text="";
maxNews.value=0;
newsTypeField.text="Conversations";
messageIntervalSlider.value=0;
messageIntervalSlider.value=30;
userButton.text=qsTr("User");
Helperjs.readData(db,"config","",function(storedUsers){
storedUsers.sort(function(obj1, obj2) {
@ -405,7 +421,7 @@ StackView{
imagestore.text=""
maxNews.value=0
newsTypeField.text="Conversations"
messageIntervalSlider.value=0
messageIntervalSlider.value=30
userButton.text=qsTr("User")
}
}
@ -449,12 +465,12 @@ StackView{
if( obj.isActive==0){userButton.fontColor='black'} else {userButton.fontColor='grey'}},"isActive",0
)
})
//Service.readGlobaloptions(db,function(go){
// Service.readGlobaloptions(db,function(go){
// if (root.globaloptions.showWebsiteForLinks!="false"){showwebsiteCheckbox.checked=true}
//})
// })
}
catch (e){
catch (e){print(e)
Helperjs.friendicaWebRequest("https://dir.friendica.social/servers/surprise",configBackground,function(html){
var bpos=html.indexOf("baseurl");
var baseurl=html.substring(html.indexOf("http",bpos),html.indexOf('"',html.indexOf("http",bpos)));

View file

@ -43,7 +43,7 @@ Rectangle{
textFormat: Text.RichText
width: parent.width
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
text: "<b>Friendiqa v0.3.4 </b><br>Licensed under GPL 3 with the exception of OpenSSL <br> "+
text: "<b>Friendiqa v0.4 </b><br>Licensed under GPL 3 with the exception of OpenSSL <br> "+
"Profile <a href='https://freunde.ma-nic.de/profile/friendiqa'>https://freunde.ma-nic.de/profile/friendiqa</a><br>"+
"Sourcecode: <a href='https://git.friendi.ca/LubuWest/Friendiqa'>https://git.friendi.ca/LubuWest/Friendiqa</a><br>"+
"Most of C++ code by <a href='https://kirgroup.com/profile/fabrixxm'>Fabio</a><br>"+

View file

@ -36,6 +36,7 @@ QtObject{
property int appHeight: Screen.desktopAvailableHeight
property int backKey: Qt.Key_Back
//property string attachImageDir:filesystem.cameraPath+"/"
property string osType: "Android"
property string imagePickQml: "ImagePicker"
property string imagePicker:'import QtQuick 2.0; import "qrc:/qml/genericqml";'+
imagePickQml+'{multiple : true;onReady: {attachImageURLs.push(imageUrl);'+

View file

@ -34,6 +34,7 @@ QtObject{
property real appWidth: 500
property real appHeight: 500
property int backKey: Qt.Key_Escape
property string osType: "Android"
//property string attachImageDir:filesystem.homePath+"/Pictures/"
property string imagePickQml: "ImagePickerLinux"
}

View file

@ -194,8 +194,10 @@ TabView{
Component.onCompleted: {
Service.readGlobaloptions(db,function(go){globaloptions=go})
//print(xhr.networktype);
if(osSettings.imagePickQml=="ImagePicker"){var component = Qt.createComponent("qrc:/qml/genericqml/IntentReceiver.qml");
var IntentReceiverQml = component.createObject(root)
if(osSettings.osType=="Android"){
var component = Qt.createComponent("qrc:/qml/genericqml/IntentReceiver.qml");
var IntentReceiverQml = component.createObject(root);
}
}
}

View file

@ -38,6 +38,10 @@ Item {
Component.onCompleted: {
SystemDispatcher.setInitialized();
print("timer " + login.timerInterval)
if (login.timerInterval !=0){
alarm.setAlarm(login.timerInterval);
}
}
}

View file

@ -45,8 +45,23 @@ Rectangle{
// WebView {id:htmlview;
// anchors.fill: parent
// }
Component.onCompleted: //Helperjs.friendicaWebRequest(url,parent,function(html){
//print(html);
htmlview.text="Text <iframe src='"+url+"' width = '300px' height = '300px'>"
//})
Component.onCompleted:{
// Helperjs.friendicaWebRequest(url,parent,function(document){
// print(document);
//// var metas = document.getElementsByTagName('meta'); //get all the meta tag elements
//// //iterate through them
//// for (i=0; i<metas.length; i++) {
//// if (metas[i].getAttribute("name") == "keywords") {
//// print(metas[i].getAttribute("content"));
//// }
//// else if (metas[i].getAttribute("name") == "description") {
//// console.log(metas[i].getAttribute("content"));
//// }
//// }
// //print(html);
// htmlview.text=""
// })
}
}

View file

@ -40,6 +40,8 @@ import "qrc:/js/helper.js" as Helperjs
import "qrc:/js/service.js" as Service
import AndroidNative 1.0
Item {
Connections{
target:newstab
@ -59,6 +61,25 @@ Item {
}
}
// Connections{
// target:xhr
// onError:{
// Helperjs.showMessage(qsTr("Network Error"),"API:\n" +login.server+api+"\n Return: \n"+data,root);
// }
// onSuccess:{
// if (api=="/api/statuses/friends_timeline"){
// // downloadNotice.text=downloadNotice.text+ "\n xhr finished "+Date.now();
// //Service.processNews(api,data);
// if(login.newsViewType=="Timeline"){
// Newsjs.newsfromdb(db,login.username,function(dbnews){showNews(dbnews)})}
// else{Newsjs.chatsfromdb(db,login.username,function(dbnews){
// showNews(dbnews);
// })}
// }
// }
// }
Timer {id:replytimer; interval: 1000; running: false; repeat: false
onTriggered: {
if(newstab.newstabstatus=="Conversation"){
@ -221,6 +242,14 @@ Item {
Service.updateView("Favorites")
}
}
QC2.Action {
text: qsTr("Replies")
onTriggered:{
newsStack.updateMethodNews="refresh";
newstab.newstabstatus="Replies";
Service.updateView("Replies")
}
}
QC2.Action {
text: qsTr("Public timeline")
onTriggered:{

View file

@ -0,0 +1,100 @@
// 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.8
import "qrc:/js/helper.js" as Helperjs
//import QtWebView 1.1
Rectangle{
color:"transparent"
width:newscolumn.width;
height:newscolumn.width/4*3
property string url:""//htmlview.text
WebView {
id: webView
anchors.fill: parent
opacity: 0
url: "qrc:///content/player.html?" + currentVideo.vId
Behavior on opacity { NumberAnimation { duration: 200 } }
onLoadingChanged: {
switch (loadRequest.status)
{
case WebView.LoadSucceededStatus:
opacity = 1
return
case WebView.LoadStartedStatus:
case WebView.LoadStoppedStatus:
break
case WebView.LoadFailedStatus:
topInfo.text = "Failed to load the requested video"
break
}
opacity = 0
}
onTitleChanged: {
currentVideo.status = 1 * title
if (title == videoStatus.paused || title == videoStatus.ready)
panel.state = "list"
else if (title == videoStatus.playing)
panel.state = "hidden"
}
}
Text{id:htmlview
textFormat:Text.RichText
}
// WebView {id:htmlview;
// anchors.fill: parent
// }
Component.onCompleted:{
// Helperjs.friendicaWebRequest(url,parent,function(document){
// print(document);
//// var metas = document.getElementsByTagName('meta'); //get all the meta tag elements
//// //iterate through them
//// for (i=0; i<metas.length; i++) {
//// if (metas[i].getAttribute("name") == "keywords") {
//// print(metas[i].getAttribute("content"));
//// }
//// else if (metas[i].getAttribute("name") == "description") {
//// console.log(metas[i].getAttribute("content"));
//// }
//// }
// //print(html);
// htmlview.text=""
// })
}
}

View file

@ -184,10 +184,10 @@ Item {
var component = Qt.createComponent("qrc:/qml/newsqml/NewsImage.qml");
var imageQml = component.createObject(messageColumn,{"source":newsitemobject.attachmentList[attachments].url,"mimetype":newsitemobject.attachmentList[attachments].mimetype});
}
// else if(newsitemobject.attachmentList[attachments].mimetype=="text/html"){
// var component = Qt.createComponent("qrc:/qml/newsqml/NewsLink.qml");
// var linkQml = component.createObject(messageColumn,{"url":newsitemobject.attachmentList[attachments].url});
// }
else if(newsitemobject.attachmentList[attachments].mimetype=="text/html"){
var component = Qt.createComponent("qrc:/qml/newsqml/NewsLink.qml");
var linkQml = component.createObject(messageColumn,{"url":newsitemobject.attachmentList[attachments].url});
}
else {//print(newsitemobject.attachmentList[attachments].url+" Type: "+newsitemobject.attachmentList[attachments].mimetype)
var component = Qt.createComponent("qrc:/qml/newsqml/NewsVideo.qml");
var videoQml = component.createObject(messageColumn,{"source":newsitemobject.attachmentList[attachments].url,"mimetype":newsitemobject.attachmentList[attachments].mimetype});
@ -461,14 +461,6 @@ Item {
})
}
}
MenuItem {
text: qsTr("Post")
onTriggered: {
Helperjs.friendicaPostRequest(root.login,"/item","preview=1&"+encodeURIComponent(newsitemobject.text),"POST",root,function(reply){
print(reply)
})
}
}
//MenuItem{
// text:qsTr("Show on website")