Merge pull request #11 from molan-git/develop

1.0.3-6
This commit is contained in:
molan-git 2020-01-30 13:22:54 +01:00 committed by GitHub
commit 26e309e327
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 705 additions and 617 deletions

View file

@ -36,7 +36,6 @@ import "./lib/API.js" as Logic
ApplicationWindow ApplicationWindow
{ {
id: appWindow id: appWindow
//initialPage: Component { FirstPage { } }
cover: Qt.resolvedUrl("cover/CoverPage.qml") cover: Qt.resolvedUrl("cover/CoverPage.qml")
allowedOrientations: defaultAllowedOrientations allowedOrientations: defaultAllowedOrientations
Component.onCompleted: { Component.onCompleted: {
@ -59,9 +58,6 @@ ApplicationWindow
pageStack.push(Qt.resolvedUrl("./pages/MainPage.qml"), {}) pageStack.push(Qt.resolvedUrl("./pages/MainPage.qml"), {})
}); });
//
//
//pageStack.push(Qt.resolvedUrl("./pages/Conversation.qml"), {})
} else { } else {
pageStack.push(Qt.resolvedUrl("./pages/LoginPage.qml"), {}) pageStack.push(Qt.resolvedUrl("./pages/LoginPage.qml"), {})
} }

View file

@ -82,7 +82,7 @@ WorkerScript.onMessage = function(msg) {
console.log("descendants") console.log("descendants")
for (var j = 0; j < data[i].length; j ++) { for (var j = 0; j < data[i].length; j ++) {
item = parseToot(data[i][j]); item = parseToot(data[i][j]);
item['id'] = item['status_id'] item['id'] = item['status_id'];
if (typeof item['attachments'] === "undefined") if (typeof item['attachments'] === "undefined")
item['attachments'] = []; item['attachments'] = [];
items.push(item) items.push(item)

View file

@ -6,32 +6,37 @@ import "./components/"
Page { Page {
id: conversationPage id: conversationPage
property string type; property string type
property alias title: header.title property alias title: header.title
property alias description: header.description property alias description: header.description
property alias avatar: header.image property alias avatar: header.image
property string suggestedUser: "" property string suggestedUser: ""
property ListModel suggestedModel; property ListModel suggestedModel
property string toot_id: "" property string toot_id: ""
property int tootMaxChar: 500; property int tootMaxChar: 500;
property ListModel mdl; property ListModel mdl
allowedOrientations: Orientation.All allowedOrientations: Orientation.All
onSuggestedUserChanged: { onSuggestedUserChanged: {
console.log(suggestedUser) console.log(suggestedUser)
suggestedModel = Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject'); suggestedModel = Qt.createQmlObject(
predictionList.visible = false; 'import QtQuick 2.0; ListModel { }',
Qt.application, 'InternalQmlObject'
)
predictionList.visible = false
if (suggestedUser.length > 0) { if (suggestedUser.length > 0) {
var msg = { var msg = {
'action' : 'accounts/search', "action": 'accounts/search',
'method' : 'GET', "method": 'GET',
'model' : suggestedModel, "model": suggestedModel,
'mode' : "append", "mode": "append",
'params' : [ {name: "q", data: suggestedUser} ], "params": [{
"name": "q",
'conf' : Logic.conf "data": suggestedUser
}; }],
worker.sendMessage(msg); "conf": Logic.conf
predictionList.visible = true; }
worker.sendMessage(msg)
predictionList.visible = true
} }
} }
@ -59,7 +64,7 @@ Page {
header: PageHeader { header: PageHeader {
title: qsTr("Conversation") title: qsTr("Conversation")
} }
clip: true; clip: true
anchors { anchors {
top: parent.top top: parent.top
bottom: panel.top bottom: panel.top
@ -74,21 +79,21 @@ Page {
text: Format.formatDate(section, Formatter.DateMedium) text: Format.formatDate(section, Formatter.DateMedium)
} }
} }
delegate: VisualContainer {} delegate: VisualContainer {
}
onCountChanged: { onCountChanged: {
if (mdl) if (mdl)
for (var i = 0; i < mdl.count; i++){ for (var i = 0; i < mdl.count; i++) {
if (mdl.get(i).status_id === toot_id) { if (mdl.get(i).status_id === toot_id) {
console.log(mdl.get(i).status_id) console.log(mdl.get(i).status_id)
positionViewAtIndex(i, ListView.Center ) positionViewAtIndex(i, ListView.Center)
} }
} }
} }
} }
Rectangle { Rectangle {
id: predictionList id: predictionList
visible: false; visible: false
anchors.bottom: panel.top anchors.bottom: panel.top
anchors.left: parent.left anchors.left: parent.left
anchors.right: panel.right anchors.right: panel.right
@ -102,20 +107,24 @@ Page {
delegate: ItemUser { delegate: ItemUser {
onClicked: { onClicked: {
var start = toot.cursorPosition; var start = toot.cursorPosition
while(toot.text[start] !== "@" && start > 0){ while (toot.text[start] !== "@" && start > 0) {
start--; start--
} }
textOperations.text = toot.text textOperations.text = toot.text
textOperations.cursorPosition = toot.cursorPosition textOperations.cursorPosition = toot.cursorPosition
textOperations.moveCursorSelection(start-1,TextInput.SelectWords) textOperations.moveCursorSelection(start - 1, TextInput.SelectWords)
toot.text = textOperations.text.substring(0, textOperations.selectionStart) + ' @'+model.account_acct + ' ' + textOperations.text.substring(textOperations.selectionEnd).trim() toot.text = textOperations.text.substring(0, textOperations.selectionStart)
+ ' @'
+ model.account_acct
+ ' '
+ textOperations.text.substring(textOperations.selectionEnd).trim()
toot.cursorPosition = toot.text.indexOf('@'+model.account_acct) toot.cursorPosition = toot.text.indexOf('@' + model.account_acct)
} }
} }
onCountChanged: { onCountChanged: {
positionViewAtIndex(suggestedModel.count-1, ListView.End ) positionViewAtIndex(suggestedModel.count - 1, ListView.End)
} }
} }
} }
@ -130,7 +139,9 @@ Page {
} }
width: parent.width width: parent.width
height: progressBar.height + toot.height + (mediaModel.count ? uploadedImages.height : 0) + btnContentWarning.height + Theme.paddingMedium + (warningContent.visible ? warningContent.height : 0) height: progressBar.height + toot.height + (mediaModel.count ? uploadedImages.height : 0)
+ btnContentWarning.height + Theme.paddingMedium
+ (warningContent.visible ? warningContent.height : 0)
dock: Dock.Bottom dock: Dock.Bottom
Rectangle { Rectangle {
width: parent.width width: parent.width
@ -145,7 +156,7 @@ Page {
} }
Rectangle { Rectangle {
id: progressBar id: progressBar
width: toot.text.length ? panel.width*(toot.text.length/tootMaxChar) : 0; width: toot.text.length ? panel.width * (toot.text.length / tootMaxChar) : 0
height: Theme.itemSizeSmall * 0.05 height: Theme.itemSizeSmall * 0.05
color: Theme.highlightBackgroundColor color: Theme.highlightBackgroundColor
@ -159,7 +170,7 @@ Page {
TextField { TextField {
id: warningContent id: warningContent
visible: false visible: false
height: visible ? implicitHeight : 0; height: visible ? implicitHeight : 0
anchors { anchors {
top: parent.top top: parent.top
topMargin: Theme.paddingMedium topMargin: Theme.paddingMedium
@ -168,7 +179,9 @@ Page {
} }
autoScrollEnabled: true autoScrollEnabled: true
labelVisible: false labelVisible: false
placeholderText: qsTr("Content warning!") placeholderText: qsTr("Write your warning here")
placeholderColor: palette.highlightColor
color: palette.highlightColor
horizontalAlignment: Text.AlignLeft horizontalAlignment: Text.AlignLeft
EnterKey.onClicked: { EnterKey.onClicked: {
//tweet() //tweet()
@ -191,9 +204,13 @@ Page {
autoScrollEnabled: true autoScrollEnabled: true
labelVisible: false labelVisible: false
//focus: true //focus: true
text: description !== "" && (description.charAt(0) == '@' || description.charAt(0) == '#') ? description+' ' : '' text: description !== "" && (description.charAt(0) == '@'
height: implicitHeight || description.charAt(
0) == '#') ? description + ' ' : ''
height: Math.max(250, Math.min(900, implicitHeight))
//height: implicitHeight
horizontalAlignment: Text.AlignLeft horizontalAlignment: Text.AlignLeft
placeholderText: qsTrId("What's on your mind?")
EnterKey.onClicked: { EnterKey.onClicked: {
//tweet() //tweet()
} }
@ -201,12 +218,14 @@ Page {
textOperations.text = toot.text textOperations.text = toot.text
textOperations.cursorPosition = toot.cursorPosition textOperations.cursorPosition = toot.cursorPosition
textOperations.selectWord() textOperations.selectWord()
textOperations.select(textOperations.selectionStart ? textOperations.selectionStart-1 : 0, textOperations.selectionEnd) textOperations.select(
textOperations.selectionStart ? textOperations.selectionStart - 1 : 0,
textOperations.selectionEnd)
//console.log(textOperations.text.substr(textOperations.selectionStart, textOperations.selectionEnd)) //console.log(textOperations.text.substr(textOperations.selectionStart, textOperations.selectionEnd))
console.log(toot.text.length) console.log(toot.text.length)
suggestedUser = "" suggestedUser = ""
if (textOperations.selectedText.charAt(0) === "@") { if (textOperations.selectedText.charAt(0) === "@") {
suggestedUser = textOperations.selectedText.trim().substring(1); suggestedUser = textOperations.selectedText.trim().substring(1)
} }
} }
} }
@ -218,18 +237,18 @@ Page {
} }
anchors { anchors {
top: warningContent.bottom + 4
bottom: bottom.top bottom: bottom.top
right: parent.right right: parent.right
rightMargin: Theme.paddingSmall rightMargin: Theme.paddingSmall
} }
icon.source: "image://theme/icon-s-edit?" + (pressed icon.source: "../../qml/images/emojiselect.svg" + (pressed ? Theme.highlightColor : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
? Theme.highlightColor
: (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
onClicked: pageStack.push(firstWizardPage) onClicked: pageStack.push(firstWizardPage)
} }
SilicaGridView { SilicaGridView {
id: uploadedImages id: uploadedImages
width: parent.width width: parent.width
anchors.top: bottom.toot
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
height: mediaModel.count ? Theme.itemSizeSmall : 0 height: mediaModel.count ? Theme.itemSizeSmall : 0
model: mediaModel model: mediaModel
@ -239,7 +258,9 @@ Page {
id: myDelegate id: myDelegate
width: uploadedImages.cellWidth width: uploadedImages.cellWidth
height: uploadedImages.cellHeight height: uploadedImages.cellHeight
RemorseItem { id: remorse } RemorseItem {
id: remorse
}
Image { Image {
anchors.fill: parent anchors.fill: parent
fillMode: Image.PreserveAspectCrop fillMode: Image.PreserveAspectCrop
@ -250,18 +271,34 @@ Page {
var idx = index var idx = index
console.log(idx) console.log(idx)
//mediaModel.remove(idx) //mediaModel.remove(idx)
remorse.execute(myDelegate, qsTr("Delete"), function() { mediaModel.remove(idx) } ) remorse.execute(myDelegate, qsTr("Delete"), function () {
mediaModel.remove(idx)
})
} }
} }
add: Transition { add: Transition {
NumberAnimation { property: "opacity"; from: 0; to: 1.0; duration: 800 } NumberAnimation {
property: "opacity"
from: 0
to: 1.0
duration: 800
}
} }
remove: Transition { remove: Transition {
NumberAnimation { property: "opacity"; from: 1.0; to: 0; duration: 800 } NumberAnimation {
property: "opacity"
from: 1.0
to: 0
duration: 800
}
} }
displaced: Transition { displaced: Transition {
NumberAnimation { properties: "x,y"; duration: 800; easing.type: Easing.InOutBack } NumberAnimation {
properties: "x,y"
duration: 800
easing.type: Easing.InOutBack
}
} }
} }
IconButton { IconButton {
@ -272,9 +309,8 @@ Page {
left: parent.left left: parent.left
leftMargin: Theme.paddingMedium leftMargin: Theme.paddingMedium
} }
icon.source: "image://theme/icon-s-warning?" + (pressed icon.source: "image://theme/icon-s-warning?"
? Theme.highlightColor + (pressed ? Theme.highlightColor : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
: (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
onClicked: warningContent.visible = !warningContent.visible onClicked: warningContent.visible = !warningContent.visible
} }
IconButton { IconButton {
@ -285,112 +321,114 @@ Page {
left: btnContentWarning.right left: btnContentWarning.right
leftMargin: Theme.paddingSmall leftMargin: Theme.paddingSmall
} }
icon.source: "image://theme/icon-s-attach?" + (pressed icon.source: "image://theme/icon-s-attach?"
? Theme.highlightColor + (pressed ? Theme.highlightColor : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
: (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
onClicked: { onClicked: {
btnAddImage.enabled = false; btnAddImage.enabled = false
var once = true; var once = true
var imagePicker = pageStack.push("Sailfish.Pickers.ImagePickerPage", { "allowedOrientations" : Orientation.All }); var imagePicker = pageStack.push("Sailfish.Pickers.ImagePickerPage", {"allowedOrientations": Orientation.All})
imagePicker.selectedContentChanged.connect(function () { imagePicker.selectedContentChanged.connect(function () {
var imagePath = imagePicker.selectedContent; var imagePath = imagePicker.selectedContent
console.log(imagePath) console.log(imagePath)
imageUploader.setUploadUrl(Logic.conf.instance + "/api/v1/media") imageUploader.setUploadUrl(Logic.conf.instance + "/api/v1/media")
imageUploader.setFile(imagePath); imageUploader.setFile(imagePath)
imageUploader.setAuthorizationHeader(Logic.conf.api_user_token); imageUploader.setAuthorizationHeader(Logic.conf.api_user_token)
imageUploader.upload(); imageUploader.upload()
}); })
} }
} }
ImageUploader { ImageUploader {
id: imageUploader id: imageUploader
onProgressChanged: { onProgressChanged: {
console.log("progress "+progress) console.log("progress " + progress)
uploadProgress.width = parent.width*progress uploadProgress.width = parent.width * progress
} }
onSuccess: { onSuccess: {
uploadProgress.width =0 uploadProgress.width = 0
console.log(replyData); console.log(replyData)
mediaModel.append(JSON.parse(replyData)) mediaModel.append(JSON.parse(replyData))
} }
onFailure: { onFailure: {
uploadProgress.width =0 uploadProgress.width = 0
btnAddImage.enabled = true; btnAddImage.enabled = true
console.log(status) console.log(status)
console.log(statusText) console.log(statusText)
} }
} }
ComboBox { ComboBox {
id: privacy id: privacy
anchors { anchors {
top: toot.bottom topMargin: -Theme.paddingSmall * 2
topMargin: -Theme.paddingSmall*2
left: btnAddImage.right left: btnAddImage.right
right: btnSend.left right: btnSend.left
bottom: parent.bottom
} }
menu: ContextMenu { menu: ContextMenu {
MenuItem { text: qsTr("public") } MenuItem {
MenuItem { text: qsTr("unlisted") } text: qsTr("Public")
MenuItem { text: qsTr("followers only") } }
MenuItem { text: qsTr("direct") } MenuItem {
text: qsTr("Unlisted")
}
MenuItem {
text: qsTr("Followers-only")
}
MenuItem {
text: qsTr("Direct")
} }
} }
}
IconButton { IconButton {
id: btnSend id: btnSend
icon.source: "image://theme/icon-m-send?" + (pressed icon.source: "image://theme/icon-m-send?"
? Theme.highlightColor + (pressed ? Theme.highlightColor : Theme.primaryColor)
: Theme.primaryColor)
anchors { anchors {
top: toot.bottom top: toot.bottom
right: parent.right right: parent.right
rightMargin: Theme.paddingLarge rightMargin: Theme.paddingSmall
} }
enabled: toot.text !== "" && toot.text.length < tootMaxChar enabled: toot.text !== "" && toot.text.length < tootMaxChar && uploadProgress.width == 0
onClicked: { onClicked: {
var visibility = [ "public", "unlisted", "private", "direct"]; var visibility = ["public", "unlisted", "private", "direct"]
var media_ids = []; var media_ids = []
for(var k = 0; k < mediaModel.count; k++){ for (var k = 0; k < mediaModel.count; k++) {
console.log(mediaModel.get(k).id) console.log(mediaModel.get(k).id)
media_ids.push(mediaModel.get(k).id) media_ids.push(mediaModel.get(k).id)
} }
var msg = { var msg = {
'action' : 'statuses', "action": 'statuses',
'method' : 'POST', "method": 'POST',
'model' : mdl, "model": mdl,
'mode' : "append", "mode": "append",
'params' : { "params": {
"status": toot.text, "status": toot.text,
"visibility": visibility[privacy.currentIndex], "visibility": visibility[privacy.currentIndex],
"media_ids": media_ids "media_ids": media_ids
}, },
'conf' : Logic.conf "conf": Logic.conf
}; }
if (toot_id) if (toot_id)
msg.params['in_reply_to_id'] = (toot_id)+"" msg.params['in_reply_to_id'] = (toot_id) + ""
if (warningContent.visible && warningContent.text.length > 0){ if (warningContent.visible && warningContent.text.length > 0) {
msg.params['sensitive'] = 1 msg.params['sensitive'] = 1
msg.params['spoiler_text'] = warningContent.text msg.params['spoiler_text'] = warningContent.text
} }
worker.sendMessage(msg); worker.sendMessage(msg)
warningContent.text = "" warningContent.text = ""
toot.text = "" toot.text = ""
mediaModel.clear() mediaModel.clear()
pageStack.pop()
} }
} }
Rectangle { Rectangle {
id: uploadProgress id: uploadProgress
color: Theme.highlightBackgroundColor color: Theme.highlightBackgroundColor
@ -402,45 +440,46 @@ Page {
Component.onCompleted: { Component.onCompleted: {
toot.cursorPosition = toot.text.length toot.cursorPosition = toot.text.length
if (mdl.count > 0) { if (mdl.count > 0) {
var setIndex = 0; var setIndex = 0
switch (mdl.get(0).status_visibility){ switch (mdl.get(0).status_visibility) {
case "unlisted": case "unlisted":
setIndex = 1; setIndex = 1
break; break
case "private": case "private":
setIndex = 2; setIndex = 2
break; break
case "direct": case "direct":
privacy.enabled = false; privacy.enabled = false
setIndex = 3; setIndex = 3
break; break
default: default:
privacy.enabled = true; privacy.enabled = true
setIndex = 0; setIndex = 0
} }
privacy.currentIndex = setIndex; privacy.currentIndex = setIndex
} }
console.log(JSON.stringify()) console.log(JSON.stringify())
worker.sendMessage({ worker.sendMessage({
'action' : 'statuses/'+mdl.get(0).status_id+'/context', "action": 'statuses/' + mdl.get(0).status_id + '/context',
'method' : 'GET', "method": 'GET',
'model' : mdl, "model": mdl,
'params' : { }, "params": { },
'conf' : Logic.conf "conf": Logic.conf
}); })
} }
Component { Component {
id: firstWizardPage id: firstWizardPage
Dialog { Dialog {
id: emoticonsDialog id: emoticonsDialog
canAccept: false; //selector.currentIndex >= 0 canAccept: false //selector.currentIndex >= 0
//acceptDestination: conversationPage
//acceptDestination: conversationPage
onAcceptPendingChanged: { onAcceptPendingChanged: {
if (acceptPending) { if (acceptPending) {
// Tell the destination page what the selected category is // Tell the destination page what the selected category is
// acceptDestinationInstance.category = selector.value // acceptDestinationInstance.category = selector.value
} }
@ -515,7 +554,6 @@ Page {
ListElement { section: "smileys"; glyph: "🙎" } ListElement { section: "smileys"; glyph: "🙎" }
ListElement { section: "smileys"; glyph: "🙏" } ListElement { section: "smileys"; glyph: "🙏" }
ListElement { section: "Transport and map"; glyph: "🚀" } ListElement { section: "Transport and map"; glyph: "🚀" }
ListElement { section: "Transport and map"; glyph: "🚃" } ListElement { section: "Transport and map"; glyph: "🚃" }
ListElement { section: "Transport and map"; glyph: "🚀" } ListElement { section: "Transport and map"; glyph: "🚀" }
@ -561,11 +599,6 @@ Page {
ListElement { section: "Horoscope Signs"; glyph: "♑" } ListElement { section: "Horoscope Signs"; glyph: "♑" }
ListElement { section: "Horoscope Signs"; glyph: "♒" } ListElement { section: "Horoscope Signs"; glyph: "♒" }
ListElement { section: "Horoscope Signs"; glyph: "♓" } ListElement { section: "Horoscope Signs"; glyph: "♓" }
} }
delegate: BackgroundItem { delegate: BackgroundItem {
width: gridView.cellWidth width: gridView.cellWidth
@ -578,11 +611,12 @@ Page {
} }
onClicked: { onClicked: {
var cursorPosition = toot.cursorPosition var cursorPosition = toot.cursorPosition
toot.text = toot.text.substring(0, cursorPosition) + model.glyph + toot.text.substring(cursorPosition) toot.text = toot.text.substring(
toot.cursorPosition = cursorPosition+model.glyph.length 0, cursorPosition) + model.glyph + toot.text.substring(
emoticonsDialog.canAccept = true; cursorPosition)
toot.cursorPosition = cursorPosition + model.glyph.length
emoticonsDialog.canAccept = true
emoticonsDialog.accept() emoticonsDialog.accept()
} }
} }
} }

View file

@ -37,7 +37,6 @@ import "../lib/API.js" as Logic
Page { Page {
id: loginPage id: loginPage
// The effective value will be restricted by ApplicationWindow.allowedOrientations // The effective value will be restricted by ApplicationWindow.allowedOrientations
allowedOrientations: Orientation.All allowedOrientations: Orientation.All
@ -62,7 +61,7 @@ Page {
TextField { TextField {
id: instance id: instance
focus: true focus: true
label: qsTr("Enter an Mastodon instance URL") label: qsTr("Enter a valid Mastodon instance URL")
text: "https://" text: "https://"
placeholderText: "https://mastodon.social" placeholderText: "https://mastodon.social"
width: parent.width width: parent.width

View file

@ -69,10 +69,11 @@ Page {
onOpenDrawer: infoPanel.open = setDrawer onOpenDrawer: infoPanel.open = setDrawer
} }
MyList{ MyList{
id: tlPublic; id: tlNotifications;
title: qsTr("Federated") title: qsTr("Notifications")
type: "timelines/public" type: "notifications"
mdl: Logic.modelTLpublic notifier: true
mdl: Logic.modelTLnotifications
width: parent.itemWidth width: parent.itemWidth
height: parent.itemHeight height: parent.itemHeight
onOpenDrawer: infoPanel.open = setDrawer onOpenDrawer: infoPanel.open = setDrawer
@ -88,11 +89,10 @@ Page {
onOpenDrawer: infoPanel.open = setDrawer onOpenDrawer: infoPanel.open = setDrawer
} }
MyList{ MyList{
id: tlNotifications; id: tlPublic;
title: qsTr("Notifications") title: qsTr("Federated")
type: "notifications" type: "timelines/public"
notifier: true mdl: Logic.modelTLpublic
mdl: Logic.modelTLnotifications
width: parent.itemWidth width: parent.itemWidth
height: parent.itemHeight height: parent.itemHeight
onOpenDrawer: infoPanel.open = setDrawer onOpenDrawer: infoPanel.open = setDrawer
@ -260,6 +260,11 @@ Page {
slideshow.positionViewAtIndex(4, ListView.SnapToItem) slideshow.positionViewAtIndex(4, ListView.SnapToItem)
navigation.navigateTo('search') navigation.navigateTo('search')
} else if (test.length === 4 && test[3][0] === "@" ) {
tlSearch.search = decodeURIComponent("@"+test[3].substring(1)+"@"+test[2])
slideshow.positionViewAtIndex(4, ListView.SnapToItem)
navigation.navigateTo('search')
} else { } else {
Qt.openUrlExternally(href); Qt.openUrlExternally(href);
} }

View file

@ -16,8 +16,9 @@ Page {
property int favourites_count; property int favourites_count;
property int reblogs_count; property int reblogs_count;
property int count_moments; property int count_moments;
property string profile_background : ""; property string profile_background: "";
property string note: ""; property string note: "";
property string url: "";
property bool locked : false; property bool locked : false;
property date created_at; property date created_at;
@ -28,7 +29,6 @@ Page {
property bool muting : false; property bool muting : false;
property bool domain_blocking : false; property bool domain_blocking : false;
WorkerScript { WorkerScript {
id: worker id: worker
source: "../lib/Worker.js" source: "../lib/Worker.js"
@ -68,9 +68,10 @@ Page {
following_count = messageObject.data following_count = messageObject.data
break; break;
case 'acct': case 'acct':
//username = messageObject.data // line below was commented out, reason unknown
// username = messageObject.data
break; break;
case 'locked': case 'locked':m
locked = messageObject.data locked = messageObject.data
break; break;
case 'created_at': case 'created_at':
@ -82,6 +83,9 @@ Page {
case 'note': case 'note':
note = messageObject.data note = messageObject.data
break; break;
case 'url':
url = messageObject.data
break;
case 'following': case 'following':
following = messageObject.data following = messageObject.data
followers_count = followers_count + (following ? 1 : - 1) followers_count = followers_count + (following ? 1 : - 1)
@ -238,10 +242,65 @@ Page {
} }
} }
/*ExpandingSection { ExpandingSection {
title: "Tweets" title: qsTr("Bio")
content.sourceComponent: Column {
spacing: Theme.paddingMedium
anchors.bottomMargin: Theme.paddingLarge
Text {
x: Theme.horizontalPageMargin
width: parent.width - ( 2 * Theme.horizontalPageMargin )
id: txtnote
text: note
font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.secondaryColor
linkColor: Theme.secondaryHighlightColor
wrapMode: Text.Wrap
anchors {
horizontalCenter: parent.horizontalCenter
}
onLinkActivated: {
var test = link.split("/")
console.log(link)
console.log(JSON.stringify(test))
console.log(JSON.stringify(test.length))
}*/ if (test.length === 5 && (test[3] === "tags" || test[3] === "tag") ) {
pageStack.pop(pageStack.find(function(page) {
var check = page.isFirstPage === true;
if (check)
page.onLinkActivated(link)
return check;
}));
send(link)
} else if (test.length === 4 && test[3][0] === "@" ) {
tlSearch.search = decodeURIComponent("@"+test[3].substring(1)+"@"+test[2])
slideshow.positionViewAtIndex(4, ListView.SnapToItem)
navigation.navigateTo('search')
} else {
Qt.openUrlExternally(link);
}
}
}
Column {
spacing: Theme.paddingMedium
anchors.horizontalCenter: parent.horizontalCenter
Button {
id: btnUrl
text: qsTr("Open Profile in Browser")
onClicked: {
Qt.openUrlExternally(url);
}
}
}
Label {
text: " "
}
}
}
} }

View file

@ -57,29 +57,29 @@ Page {
IconTextSwitch { IconTextSwitch {
//enabled: false //enabled: false
checked: typeof Logic.conf['loadImages'] !== "undefined" && Logic.conf['loadImages'] checked: typeof Logic.conf['loadImages'] !== "undefined" && Logic.conf['loadImages']
text: qsTr("Load images in toots") text: qsTr("Load Images in Toots")
description: qsTr("Disable this option if you want to preserve your data connection") description: qsTr("Disable this option if you want to preserve your data connection")
icon.source: "image://theme/icon-m-mobile-network" icon.source: "image://theme/icon-m-mobile-network"
onClicked: { onClicked: {
Logic.conf['loadImages'] = checked Logic.conf['loadImages'] = checked
} }
} }
IconTextSwitch { // IconTextSwitch {
text: qsTr("Translate") // text: qsTr("Translate")
description: qsTr("Use Transifex to help with app translation to your language") // description: qsTr("Use Transifex to help with app translation to your language")
icon.source: "image://theme/icon-m-presence" // icon.source: "image://theme/icon-m-presence"
onCheckedChanged: { // onCheckedChanged: {
busy = true; // busy = true;
checked = false; // checked = false;
Qt.openUrlExternally("https://www.transifex.com/dysko/tooter/"); // Qt.openUrlExternally("https://www.transifex.com/dysko/tooter/");
timer2.start() // timer2.start()
} // }
Timer { // Timer {
id: timer2 // id: timer2
interval: 4700 // interval: 4700
onTriggered: parent.busy = false // onTriggered: parent.busy = false
} // }
} // }
} }
SectionHeader { SectionHeader {
@ -113,6 +113,12 @@ Page {
} }
Repeater { Repeater {
model: ListModel { model: ListModel {
ListElement {
name: "molan"
desc: qsTr("Maintainer of this release")
mastodon: ""
mail: "mol_an@sunrise.ch"
}
ListElement { ListElement {
name: "Duško Angirević" name: "Duško Angirević"
desc: qsTr("UI/UX design and development") desc: qsTr("UI/UX design and development")
@ -121,38 +127,31 @@ Page {
} }
ListElement { ListElement {
name: "Miodrag Nikolić" name: "Miodrag Nikolić"
desc: "visual identity" desc: qsTr("Visual identity")
mastodon: "" mastodon: ""
mail: "micotakis@gmail.com" mail: "micotakis@gmail.com"
} }
ListElement {
name: "Molan"
desc: "Maintainer of this forked version"
mastodon: ""
mail: "mol_an@sunrise.ch"
}
ListElement { ListElement {
name: "Quentin PAGÈS / Quenti ♏" name: "Quentin PAGÈS / Quenti ♏"
desc: "Occitan & French translation" desc: qsTr("Occitan & French translation")
mastodon: "Quenti@framapiaf.org" mastodon: "Quenti@framapiaf.org"
mail: "" mail: ""
} }
ListElement { ListElement {
name: "André Koot" name: "André Koot"
desc: "Dutch translation" desc: qsTr("Dutch translation")
mastodon: "meneer@mastodon.social" mastodon: "meneer@mastodon.social"
mail: "https://twitter.com/meneer" mail: "https://twitter.com/meneer"
} }
ListElement { ListElement {
name: "Carlos Gonzalez / Caballlero" name: "Carlos Gonzalez / Caballlero"
desc: "Español translation" desc: qsTr("Spanish translation")
mastodon: "" mastodon: ""
mail: "carlosgonz@protonmail.com" mail: "carlosgonz@protonmail.com"
} }
ListElement { ListElement {
name: "Mohamed-Touhami MAHDI" name: "Mohamed-Touhami MAHDI"
desc: "Added README file" desc: qsTr("Added README file")
mastodon: "dragnucs@touha.me" mastodon: "dragnucs@touha.me"
mail: "touhami@touha.me" mail: "touhami@touha.me"
} }

View file

@ -21,11 +21,10 @@ SilicaGridView {
unread: false unread: false
} }
ListElement { ListElement {
icon: "image://theme/icon-m-website" icon: "image://theme/icon-m-alarm"
slug: "federated" slug: "notifications"
name: "Federated" name: "Notifications"
active: false active: false
unread: false
} }
ListElement { ListElement {
icon: "image://theme/icon-m-whereami" icon: "image://theme/icon-m-whereami"
@ -35,10 +34,11 @@ SilicaGridView {
unread: false unread: false
} }
ListElement { ListElement {
icon: "image://theme/icon-m-alarm" icon: "image://theme/icon-m-website"
slug: "notifications" slug: "federated"
name: "Notifications" name: "Federated"
active: false active: false
unread: false
} }
ListElement { ListElement {
icon: "image://theme/icon-m-search" icon: "image://theme/icon-m-search"

View file

@ -4,7 +4,6 @@ import QtGraphicalEffects 1.0
BackgroundItem { BackgroundItem {
signal send (string notice) signal send (string notice)
id: delegate id: delegate
//property string text: "0" //property string text: "0"
width: parent.width width: parent.width
@ -149,10 +148,9 @@ BackgroundItem {
console.log(link) console.log(link)
if (link[0] === "@") { if (link[0] === "@") {
pageStack.push(Qt.resolvedUrl("../Profile.qml"), { pageStack.push(Qt.resolvedUrl("../Profile.qml"), {
"display_name": account_display_name, "name": "",
"username": account_username, "username": link.substring(1),
"user_id": model.account_id, "profileImage": ""
"profileImage": account_avatar
}) })
} else if (link[0] === "#") { } else if (link[0] === "#") {

View file

@ -134,12 +134,10 @@ BackgroundItem {
})); }));
send(link) send(link)
} else if (test.length === 4 && test[3][0] === "@" ) { } else if (test.length === 4 && test[3][0] === "@" ) {
pageStack.push(Qt.resolvedUrl("../Profile.qml"), { tlSearch.search = decodeURIComponent("@"+test[3].substring(1)+"@"+test[2])
"display_name": account_display_name, slideshow.positionViewAtIndex(4, ListView.SnapToItem)
"username": account_username, navigation.navigateTo('search')
"user_id": model.account_id,
"profileImage": account_avatar
})
} else { } else {
Qt.openUrlExternally(link); Qt.openUrlExternally(link);
} }