diff --git a/harbour-tooter.pro b/harbour-tooter.pro
index eb7ed40..8b1cb5f 100644
--- a/harbour-tooter.pro
+++ b/harbour-tooter.pro
@@ -114,4 +114,4 @@ TRANSLATIONS += translations/harbour-tooter-pl.ts
TRANSLATIONS += translations/harbour-tooter-ru.ts
TRANSLATIONS += translations/harbour-tooter-sr.ts
TRANSLATIONS += translations/harbour-tooter-sv.ts
-TRANSLATIONS += translations/harbour-tooter-zh.ts
+TRANSLATIONS += translations/harbour-tooter-zh_CN.ts
diff --git a/qml/images/emojiselect.svg b/qml/images/emojiselect.svg
new file mode 100644
index 0000000..ffef849
--- /dev/null
+++ b/qml/images/emojiselect.svg
@@ -0,0 +1,14 @@
+
diff --git a/qml/images/federated.svg b/qml/images/federated.svg
deleted file mode 100644
index 5511f58..0000000
--- a/qml/images/federated.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
diff --git a/qml/images/home.svg b/qml/images/home.svg
deleted file mode 100644
index be54abc..0000000
--- a/qml/images/home.svg
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
diff --git a/qml/images/local.svg b/qml/images/local.svg
deleted file mode 100644
index 1ae1e7f..0000000
--- a/qml/images/local.svg
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
diff --git a/qml/images/public.svg b/qml/images/public.svg
deleted file mode 100644
index bb92391..0000000
--- a/qml/images/public.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
diff --git a/qml/images/search.svg b/qml/images/search.svg
deleted file mode 100644
index 53514ed..0000000
--- a/qml/images/search.svg
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
diff --git a/qml/lib/Worker.js b/qml/lib/Worker.js
index a5cc849..15c13fd 100644
--- a/qml/lib/Worker.js
+++ b/qml/lib/Worker.js
@@ -82,7 +82,7 @@ WorkerScript.onMessage = function(msg) {
console.log("descendants")
for (var j = 0; j < data[i].length; j ++) {
item = parseToot(data[i][j]);
- item['id'] = item['status_id']
+ item['id'] = item['status_id'];
if (typeof item['attachments'] === "undefined")
item['attachments'] = [];
items.push(item)
@@ -150,7 +150,7 @@ function parseNotification(data){
switch (item['type']){
case "mention":
if (!data.status) {
- break;
+ break;
}
item = parseToot(data.status)
diff --git a/qml/pages/Browser.qml b/qml/pages/Browser.qml
deleted file mode 100644
index 4143575..0000000
--- a/qml/pages/Browser.qml
+++ /dev/null
@@ -1,284 +0,0 @@
-/****************************************************************************************
-**
-** Copyright (C) 2013 Jolla Ltd.
-** Contact: Raine Makelainen
-** All rights reserved.
-**
-** This file is part of Sailfish Silica UI component package.
-**
-** You may use this file under the terms of BSD license as follows:
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in the
-** documentation and/or other materials provided with the distribution.
-** * Neither the name of the Jolla Ltd nor the
-** names of its contributors may be used to endorse or promote products
-** derived from this software without specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR
-** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**
-****************************************************************************************/
-
-import QtQuick 2.0
-import QtWebKit 3.0
-import Sailfish.Silica 1.0
-
-Page {
- id: browser
- property string href;
- property bool screenReaderMode: true
- property bool loaded: false
- property string articleContent: ""
- property string articleTitle: ""
- property string articleDate: ""
- property string articleImage: ""
- onLoadedChanged: {
- pullDownMenu.busy = pullDownMenu2.busy = !loaded
- }
- onStatusChanged: {
- if (status === PageStatus.Active) {
- fetchData();
- }
-
- }
- onScreenReaderModeChanged: {
- loaded = false;
- fetchData();
- }
-
- allowedOrientations: Orientation.All
- function fetchData(){
- var xhr = new XMLHttpRequest();
- xhr.open("GET", "https://mercury.postlight.com/parser?url="+href, true);
- xhr.onreadystatechange = function() {
- if ( xhr.readyState === xhr.DONE ) {
- if ( xhr.status === 200 ) {
- console.log(xhr.responseText)
- var response = JSON.parse(xhr.responseText);
- //if (response.date_published)
- //articleDate = new Date(response.date_published.replace(/^(\w+) (\w+) (\d+) ([\d:]+) \+0000 (\d+)$/,"$1, $2 $3 $5 $4 GMT"));
- if (response.title)
- articleTitle = response.title;
- if (response.lead_image_url)
- articleImage = response.lead_image_url
- if (response.content)
- articleContent = response.content;
- if (response.content && response.lead_image_url)
- articleContent = articleContent.replace(articleImage, "")
- } else {
-
- }
- loaded = true;
- }
- }
- xhr.setRequestHeader("Content-Type", 'application/json');
- xhr.setRequestHeader("x-api-key", 'uakC11NlSubREs1r5NjkOCS1NJEkwti6DnDutcYC');
-
- if (screenReaderMode)
- xhr.send();
- else
- webView.url = 'https://mercury.postlight.com/amp?url='+href
- }
-
-
-
- BusyIndicator {
- id: loading
- size: BusyIndicatorSize.Large
- anchors.centerIn: parent
- running: !loaded
- }
-
- SilicaWebView {
- enabled: !screenReaderMode
- visible: !screenReaderMode
- id: webView
- anchors {
- fill: parent
- }
-
- PullDownMenu {
- id: pullDownMenu
- MenuItem {
- text: qsTr("Open in Browser")
- onClicked: {
- Qt.openUrlExternally(href);
- }
- }
- MenuItem {
- text: screenReaderMode ? qsTr("Web mode") : qsTr("Reading mode")
- onClicked: {
- screenReaderMode = !screenReaderMode
- }
- }
- }
-
- opacity: 0
- onLoadingChanged: {
- switch (loadRequest.status)
- {
- case WebView.LoadSucceededStatus:
- opacity = 1
- loaded = true;
- break
- case WebView.LoadFailedStatus:
- opacity = 0
- loaded = true;
- viewPlaceHolder.errorString = loadRequest.errorString
- break
- default:
- opacity = 0
- loaded = false;
- break
- }
- }
- FadeAnimation on opacity {}
- }
- ViewPlaceholder {
- id: viewPlaceHolder
- property string errorString
- enabled: webView.opacity === 0 && loaded && !screenReaderMode
- text: errorString
- hintText: "Check network connectivity and pull down to reload"
- }
-
-
-
- SilicaFlickable {
- visible: screenReaderMode
- enabled: screenReaderMode
- anchors {
- fill: parent
- }
- contentHeight: article.height
- VerticalScrollDecorator {}
- PullDownMenu {
- id: pullDownMenu2
- MenuItem {
- text: qsTr("Copy URL")
- onClicked: Clipboard.text = href
- }
- MenuItem {
- text: qsTr("Open in Browser")
- onClicked: Qt.openUrlExternally(href);
- }
- MenuItem {
- text: screenReaderMode ? qsTr("Web mode") : qsTr("Reading mode")
- onClicked: {
- screenReaderMode = !screenReaderMode
- }
- }
- }
- Column {
-
- id: article
- width: parent.width
-
- Rectangle {
- height: Theme.itemSizeExtraSmall/3
- width: parent.width
- opacity: 0
- }
-
- Label {
- id: title
- text: articleTitle
- font.pixelSize: Theme.fontSizeLarge
- color: Theme.highlightColor
- textFormat: Text.StyledText
- wrapMode: Text.WordWrap
- font.bold: true
- anchors {
- left: parent.left
- right: parent.right
- leftMargin: Theme.paddingLarge
- rightMargin: Theme.paddingLarge
- }
- }
- Label {
- id: date
- visible: articleDate !== ""
- text: articleDate
- font.pixelSize: Theme.fontSizeExtraSmall
- color: Theme.secondaryColor
- anchors {
- left: parent.left
- right: parent.right
- topMargin: Theme.paddingSmall
- bottomMargin: Theme.paddingSmall
- leftMargin: Theme.paddingLarge
- rightMargin: Theme.paddingLarge
- }
- }
- Rectangle {
- height: image.visible ? Theme.itemSizeExtraSmall/3 : 0
- width: parent.width
- opacity: 0
- }
- Image {
- id: image
- visible: articleImage !== "" ? true : false
- source: articleImage
- width: parent.width
- height: Theme.itemSizeExtraLarge
- fillMode: Image.PreserveAspectCrop
- anchors {
- left: parent.left
- right: parent.right
- }
- BusyIndicator {
- size: BusyIndicatorSize.Small
- anchors.centerIn: parent
- running: parent.status != Image.Ready
- }
-
- onStatusChanged: if (image.status === Image.Ready) {
- var ratio = image.sourceSize.width/image.sourceSize.height
- height = width / ratio
- }
- }
- Rectangle {
- height: image.visible ? Theme.itemSizeExtraSmall/3 : 0
- width: parent.width
- opacity: 0
- }
- Label {
- id: content
- readonly property string _linkStyle: ""
- textFormat: Text.RichText
- text: _linkStyle + articleContent;
- font.pixelSize: Theme.fontSizeSmall
- color: Theme.secondaryColor
- wrapMode: Text.WordWrap
- anchors {
- left: parent.left
- right: parent.right
- topMargin: image.visible ? Theme.paddingSmall : Theme.paddingLarge
- leftMargin: Theme.paddingLarge
- rightMargin: Theme.paddingLarge
- bottomMargin: Theme.paddingLarge
- }
-
- }
- Rectangle {
- height: Theme.itemSizeExtraSmall/3
- width: parent.width
- opacity: 0
- }
-
- }
- }
-}
diff --git a/qml/pages/Conversation.qml b/qml/pages/Conversation.qml
index fbfc551..fce4817 100644
--- a/qml/pages/Conversation.qml
+++ b/qml/pages/Conversation.qml
@@ -5,587 +5,621 @@ import "../lib/API.js" as Logic
import "./components/"
Page {
- id: conversationPage
- property string type;
- property alias title: header.title
- property alias description: header.description
- property alias avatar: header.image
- property string suggestedUser: ""
- property ListModel suggestedModel;
- property string toot_id: ""
+ id: conversationPage
+ property string type
+ property alias title: header.title
+ property alias description: header.description
+ property alias avatar: header.image
+ property string suggestedUser: ""
+ property ListModel suggestedModel
+ property string toot_id: ""
property int tootMaxChar: 500;
- property ListModel mdl;
- allowedOrientations: Orientation.All
- onSuggestedUserChanged: {
- console.log(suggestedUser)
- suggestedModel = Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject');
- predictionList.visible = false;
- if (suggestedUser.length > 0) {
- var msg = {
- 'action' : 'accounts/search',
- 'method' : 'GET',
- 'model' : suggestedModel,
- 'mode' : "append",
- 'params' : [ {name: "q", data: suggestedUser} ],
+ property ListModel mdl
+ allowedOrientations: Orientation.All
+ onSuggestedUserChanged: {
+ console.log(suggestedUser)
+ suggestedModel = Qt.createQmlObject(
+ 'import QtQuick 2.0; ListModel { }',
+ Qt.application, 'InternalQmlObject'
+ )
+ predictionList.visible = false
+ if (suggestedUser.length > 0) {
+ var msg = {
+ "action": 'accounts/search',
+ "method": 'GET',
+ "model": suggestedModel,
+ "mode": "append",
+ "params": [{
+ "name": "q",
+ "data": suggestedUser
+ }],
+ "conf": Logic.conf
+ }
+ worker.sendMessage(msg)
+ predictionList.visible = true
+ }
+ }
- 'conf' : Logic.conf
- };
- worker.sendMessage(msg);
- predictionList.visible = true;
- }
- }
+ ListModel {
+ id: mediaModel
+ onCountChanged: {
+ btnAddImage.enabled = mediaModel.count < 4
+ }
+ }
- ListModel {
- id: mediaModel
- onCountChanged: {
- btnAddImage.enabled = mediaModel.count < 4
- }
- }
+ WorkerScript {
+ id: worker
+ source: "../lib/Worker.js"
+ onMessage: {
+ console.log(JSON.stringify(messageObject))
+ }
+ }
- WorkerScript {
- id: worker
- source: "../lib/Worker.js"
- onMessage: {
- console.log(JSON.stringify(messageObject))
- }
- }
+ ProfileHeader {
+ id: header
+ visible: false
+ }
+ SilicaListView {
+ id: conversationList
+ header: PageHeader {
+ title: qsTr("Conversation")
+ }
+ clip: true
+ anchors {
+ top: parent.top
+ bottom: panel.top
+ left: parent.left
+ right: parent.right
+ }
+ model: mdl
+ section {
+ property: 'section'
+ delegate: SectionHeader {
+ height: Theme.itemSizeExtraSmall
+ text: Format.formatDate(section, Formatter.DateMedium)
+ }
+ }
+ delegate: VisualContainer {
+ }
+ onCountChanged: {
+ if (mdl)
+ for (var i = 0; i < mdl.count; i++) {
+ if (mdl.get(i).status_id === toot_id) {
+ console.log(mdl.get(i).status_id)
+ positionViewAtIndex(i, ListView.Center)
+ }
+ }
+ }
+ }
+ Rectangle {
+ id: predictionList
+ visible: false
+ anchors.bottom: panel.top
+ anchors.left: parent.left
+ anchors.right: panel.right
+ height: suggestedModel.count > 6 ? Theme.itemSizeMedium * 6 : Theme.itemSizeMedium * suggestedModel.count
+ color: Theme.highlightDimmerColor
- ProfileHeader {
- id: header
- visible: false
- }
- SilicaListView {
- id: conversationList
- header: PageHeader {
- title: qsTr("Conversation")
- }
- clip: true;
- anchors {
- top: parent.top
- bottom: panel.top
- left: parent.left
- right: parent.right
- }
- model: mdl
- section {
- property: 'section'
- delegate: SectionHeader {
- height: Theme.itemSizeExtraSmall
- text: Format.formatDate(section, Formatter.DateMedium)
- }
- }
- delegate: VisualContainer {}
- onCountChanged: {
- if (mdl)
- for (var i = 0; i < mdl.count; i++){
- if (mdl.get(i).status_id === toot_id) {
- console.log(mdl.get(i).status_id)
- positionViewAtIndex(i, ListView.Center )
- }
- }
- }
+ SilicaListView {
+ anchors.fill: parent
+ model: suggestedModel
+ clip: true
- }
- Rectangle {
- id: predictionList
- visible: false;
- anchors.bottom: panel.top
- anchors.left: parent.left
- anchors.right: panel.right
- height: suggestedModel.count > 6 ? Theme.itemSizeMedium * 6 : Theme.itemSizeMedium * suggestedModel.count
- color: Theme.highlightDimmerColor
+ delegate: ItemUser {
+ onClicked: {
+ var start = toot.cursorPosition
+ while (toot.text[start] !== "@" && start > 0) {
+ start--
+ }
+ textOperations.text = toot.text
+ textOperations.cursorPosition = toot.cursorPosition
+ textOperations.moveCursorSelection(start - 1, TextInput.SelectWords)
+ toot.text = textOperations.text.substring(0, textOperations.selectionStart)
+ + ' @'
+ + model.account_acct
+ + ' '
+ + textOperations.text.substring(textOperations.selectionEnd).trim()
- SilicaListView {
- anchors.fill: parent
- model: suggestedModel
- clip: true
+ toot.cursorPosition = toot.text.indexOf('@' + model.account_acct)
+ }
+ }
+ onCountChanged: {
+ positionViewAtIndex(suggestedModel.count - 1, ListView.End)
+ }
+ }
+ }
- delegate: ItemUser {
- onClicked: {
- var start = toot.cursorPosition;
- while(toot.text[start] !== "@" && start > 0){
- start--;
- }
- textOperations.text = toot.text
- textOperations.cursorPosition = toot.cursorPosition
- textOperations.moveCursorSelection(start-1,TextInput.SelectWords)
- toot.text = textOperations.text.substring(0, textOperations.selectionStart) + ' @'+model.account_acct + ' ' + textOperations.text.substring(textOperations.selectionEnd).trim()
+ DockedPanel {
+ id: panel
+ open: true
+ onExpandedChanged: {
+ if (!expanded) {
+ show()
+ }
+ }
- toot.cursorPosition = toot.text.indexOf('@'+model.account_acct)
- }
- }
- onCountChanged: {
- positionViewAtIndex(suggestedModel.count-1, ListView.End )
- }
- }
- }
+ width: parent.width
+ height: progressBar.height + toot.height + (mediaModel.count ? uploadedImages.height : 0)
+ + btnContentWarning.height + Theme.paddingMedium
+ + (warningContent.visible ? warningContent.height : 0)
+ dock: Dock.Bottom
+ Rectangle {
+ width: parent.width
+ height: progressBar.height
+ color: Theme.highlightBackgroundColor
+ opacity: 0.2
+ anchors {
+ left: parent.left
+ right: parent.right
+ top: parent.top
+ }
+ }
+ Rectangle {
+ id: progressBar
+ width: toot.text.length ? panel.width * (toot.text.length / tootMaxChar) : 0
- DockedPanel {
- id: panel
- open: true
- onExpandedChanged: {
- if (!expanded) {
- show()
- }
- }
+ height: Theme.itemSizeSmall * 0.05
+ color: Theme.highlightBackgroundColor
+ opacity: 0.7
+ anchors {
+ left: parent.left
+ top: parent.top
+ }
+ }
- width: parent.width
- height: progressBar.height + toot.height + (mediaModel.count ? uploadedImages.height : 0) + btnContentWarning.height + Theme.paddingMedium + (warningContent.visible ? warningContent.height : 0)
- dock: Dock.Bottom
- Rectangle {
- width: parent.width
- height: progressBar.height
- color: Theme.highlightBackgroundColor
- opacity: 0.2
- anchors {
- left: parent.left
- right: parent.right
- top: parent.top
- }
- }
- Rectangle {
- id: progressBar
- width: toot.text.length ? panel.width*(toot.text.length/tootMaxChar) : 0;
+ TextField {
+ id: warningContent
+ visible: false
+ height: visible ? implicitHeight : 0
+ anchors {
+ top: parent.top
+ topMargin: Theme.paddingMedium
+ left: parent.left
+ right: parent.right
+ }
+ autoScrollEnabled: true
+ labelVisible: false
+ placeholderText: qsTr("Write your warning here")
+ placeholderColor: palette.highlightColor
+ color: palette.highlightColor
+ horizontalAlignment: Text.AlignLeft
+ EnterKey.onClicked: {
+ //tweet()
+ }
+ }
+ TextInput {
+ id: textOperations
+ visible: false
+ }
- height: Theme.itemSizeSmall * 0.05
- color: Theme.highlightBackgroundColor
- opacity: 0.7
- anchors {
- left: parent.left
- top: parent.top
- }
- }
+ TextArea {
+ id: toot
+ anchors {
+ top: warningContent.bottom
+ topMargin: Theme.paddingMedium
+ left: parent.left
+ right: parent.right
+ rightMargin: Theme.paddingMedium
+ }
+ autoScrollEnabled: true
+ labelVisible: false
+ //focus: true
+ text: description !== "" && (description.charAt(0) == '@'
+ || description.charAt(
+ 0) == '#') ? description + ' ' : ''
+ height: Math.max(270, Math.min(900, implicitHeight))
+ //height: implicitHeight
+ horizontalAlignment: Text.AlignLeft
+ placeholderText: qsTr("What's on your mind?")
+ EnterKey.onClicked: {
+ //tweet()
+ }
+ onTextChanged: {
+ textOperations.text = toot.text
+ textOperations.cursorPosition = toot.cursorPosition
+ textOperations.selectWord()
+ textOperations.select(
+ textOperations.selectionStart ? textOperations.selectionStart - 1 : 0,
+ textOperations.selectionEnd)
+ //console.log(textOperations.text.substr(textOperations.selectionStart, textOperations.selectionEnd))
+ console.log(toot.text.length)
+ suggestedUser = ""
+ if (textOperations.selectedText.charAt(0) === "@") {
+ suggestedUser = textOperations.selectedText.trim().substring(1)
+ }
+ }
+ }
+ IconButton {
+ id: btnSmileys
+ property string selection
+ onSelectionChanged: {
+ console.log(selection)
+ }
- TextField {
- id: warningContent
- visible: false
- height: visible ? implicitHeight : 0;
- anchors {
- top: parent.top
- topMargin: Theme.paddingMedium
- left: parent.left
- right: parent.right
- }
- autoScrollEnabled: true
- labelVisible: false
- placeholderText: qsTr("Content warning!")
- horizontalAlignment: Text.AlignLeft
- EnterKey.onClicked: {
- //tweet()
- }
- }
- TextInput {
- id: textOperations
- visible: false
- }
-
- TextArea {
- id: toot
- anchors {
+ anchors {
top: warningContent.bottom
- topMargin: Theme.paddingMedium
- left: parent.left
- right: parent.right
- rightMargin: Theme.paddingMedium
- }
- autoScrollEnabled: true
- labelVisible: false
- //focus: true
- text: description !== "" && (description.charAt(0) == '@' || description.charAt(0) == '#') ? description+' ' : ''
- height: implicitHeight
- horizontalAlignment: Text.AlignLeft
- EnterKey.onClicked: {
- //tweet()
- }
- onTextChanged: {
- textOperations.text = toot.text
- textOperations.cursorPosition = toot.cursorPosition
- textOperations.selectWord()
- textOperations.select(textOperations.selectionStart ? textOperations.selectionStart-1 : 0, textOperations.selectionEnd)
- //console.log(textOperations.text.substr(textOperations.selectionStart, textOperations.selectionEnd))
- console.log(toot.text.length)
- suggestedUser = ""
- if (textOperations.selectedText.charAt(0) === "@") {
- suggestedUser = textOperations.selectedText.trim().substring(1);
- }
- }
- }
- IconButton {
- id: btnSmileys
- property string selection
- onSelectionChanged: {
- console.log(selection)
- }
-
- anchors {
- bottom: bottom.top
- right: parent.right
- rightMargin: Theme.paddingSmall
- }
- icon.source: "image://theme/icon-s-mms?" + (pressed
- ? Theme.highlightColor
- : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
- onClicked: pageStack.push(firstWizardPage)
- }
- SilicaGridView {
- id: uploadedImages
- width: parent.width
- anchors.bottom: parent.bottom
+ bottom: bottom.top
+ right: parent.right
+ rightMargin: Theme.paddingSmall
+ }
+ icon.source: "../../qml/images/emojiselect.svg" + (pressed ? Theme.highlightColor : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
+ onClicked: pageStack.push(firstWizardPage)
+ }
+ SilicaGridView {
+ id: uploadedImages
+ width: parent.width
+ anchors.top: bottom.toot
+ anchors.bottom: parent.bottom
height: mediaModel.count ? Theme.itemSizeSmall : 0
- model: mediaModel
- cellWidth: uploadedImages.width / 4
+ model: mediaModel
+ cellWidth: uploadedImages.width / 4
cellHeight: Theme.itemSizeSmall
- delegate: BackgroundItem {
- id: myDelegate
- width: uploadedImages.cellWidth
- height: uploadedImages.cellHeight
- RemorseItem { id: remorse }
- Image {
- anchors.fill: parent
- fillMode: Image.PreserveAspectCrop
- source: model.preview_url
- }
+ delegate: BackgroundItem {
+ id: myDelegate
+ width: uploadedImages.cellWidth
+ height: uploadedImages.cellHeight
+ RemorseItem {
+ id: remorse
+ }
+ Image {
+ anchors.fill: parent
+ fillMode: Image.PreserveAspectCrop
+ source: model.preview_url
+ }
- onClicked: {
- var idx = index
- console.log(idx)
- //mediaModel.remove(idx)
- remorse.execute(myDelegate, qsTr("Delete"), function() { mediaModel.remove(idx) } )
- }
- }
- add: Transition {
- NumberAnimation { property: "opacity"; from: 0; to: 1.0; duration: 800 }
- }
+ onClicked: {
+ var idx = index
+ console.log(idx)
+ //mediaModel.remove(idx)
+ remorse.execute(myDelegate, qsTr("Delete"), function () {
+ mediaModel.remove(idx)
+ })
+ }
+ }
+ add: Transition {
+ NumberAnimation {
+ property: "opacity"
+ from: 0
+ to: 1.0
+ duration: 800
+ }
+ }
- remove: Transition {
- NumberAnimation { property: "opacity"; from: 1.0; to: 0; duration: 800 }
- }
- displaced: Transition {
- NumberAnimation { properties: "x,y"; duration: 800; easing.type: Easing.InOutBack }
- }
- }
- IconButton {
+ remove: Transition {
+ NumberAnimation {
+ property: "opacity"
+ from: 1.0
+ to: 0
+ duration: 800
+ }
+ }
+ displaced: Transition {
+ NumberAnimation {
+ properties: "x,y"
+ duration: 800
+ easing.type: Easing.InOutBack
+ }
+ }
+ }
+ IconButton {
- id: btnContentWarning
- anchors {
- verticalCenter: privacy.verticalCenter
- left: parent.left
- leftMargin: Theme.paddingMedium
- }
- icon.source: "image://theme/icon-s-high-importance?" + (pressed
- ? Theme.highlightColor
- : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
- onClicked: warningContent.visible = !warningContent.visible
- }
- IconButton {
- id: btnAddImage
- enabled: mediaModel.count < 4
- anchors {
- verticalCenter: privacy.verticalCenter
- left: btnContentWarning.right
- leftMargin: Theme.paddingSmall
- }
- icon.source: "image://theme/icon-s-attach?" + (pressed
- ? Theme.highlightColor
- : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
- onClicked: {
- btnAddImage.enabled = false;
- var once = true;
- var imagePicker = pageStack.push("Sailfish.Pickers.ImagePickerPage", { "allowedOrientations" : Orientation.All });
- imagePicker.selectedContentChanged.connect(function () {
- var imagePath = imagePicker.selectedContent;
- console.log(imagePath)
- imageUploader.setUploadUrl(Logic.conf.instance + "/api/v1/media")
- imageUploader.setFile(imagePath);
- imageUploader.setAuthorizationHeader(Logic.conf.api_user_token);
- imageUploader.upload();
- });
- }
- }
- ImageUploader {
- id: imageUploader
+ id: btnContentWarning
+ anchors {
+ verticalCenter: privacy.verticalCenter
+ left: parent.left
+ leftMargin: Theme.paddingMedium
+ }
+ icon.source: "image://theme/icon-s-warning?"
+ + (pressed ? Theme.highlightColor : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
+ onClicked: warningContent.visible = !warningContent.visible
+ }
+ IconButton {
+ id: btnAddImage
+ enabled: mediaModel.count < 4
+ anchors {
+ verticalCenter: privacy.verticalCenter
+ left: btnContentWarning.right
+ leftMargin: Theme.paddingSmall
+ }
+ icon.source: "image://theme/icon-s-attach?"
+ + (pressed ? Theme.highlightColor : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
+ onClicked: {
+ btnAddImage.enabled = false
+ var once = true
+ var imagePicker = pageStack.push("Sailfish.Pickers.ImagePickerPage", {"allowedOrientations": Orientation.All})
+ imagePicker.selectedContentChanged.connect(function () {
+ var imagePath = imagePicker.selectedContent
+ console.log(imagePath)
+ imageUploader.setUploadUrl(Logic.conf.instance + "/api/v1/media")
+ imageUploader.setFile(imagePath)
+ imageUploader.setAuthorizationHeader(Logic.conf.api_user_token)
+ imageUploader.upload()
+ })
+ }
+ }
+ ImageUploader {
+ id: imageUploader
- onProgressChanged: {
- console.log("progress "+progress)
- uploadProgress.width = parent.width*progress
- }
+ onProgressChanged: {
+ console.log("progress " + progress)
+ uploadProgress.width = parent.width * progress
+ }
- onSuccess: {
- uploadProgress.width =0
- console.log(replyData);
+ onSuccess: {
+ uploadProgress.width = 0
+ console.log(replyData)
- mediaModel.append(JSON.parse(replyData))
+ mediaModel.append(JSON.parse(replyData))
+ }
-
- }
-
- onFailure: {
- uploadProgress.width =0
- btnAddImage.enabled = true;
- console.log(status)
- console.log(statusText)
-
- }
-
- }
- ComboBox {
- id: privacy
- anchors {
+ onFailure: {
+ uploadProgress.width = 0
+ btnAddImage.enabled = true
+ console.log(status)
+ console.log(statusText)
+ }
+ }
+ ComboBox {
+ id: privacy
+ anchors {
top: toot.bottom
- topMargin: -Theme.paddingSmall*2
- left: btnAddImage.right
- right: btnSend.left
- }
- menu: ContextMenu {
- MenuItem { text: qsTr("public") }
- MenuItem { text: qsTr("unlisted") }
- MenuItem { text: qsTr("followers only") }
- MenuItem { text: qsTr("direct") }
- }
- }
- IconButton {
- id: btnSend
- icon.source: "image://theme/icon-m-enter?" + (pressed
- ? Theme.highlightColor
- : Theme.primaryColor)
- anchors {
+ topMargin: -Theme.paddingSmall * 2
+ left: btnAddImage.right
+ right: btnSend.left
+ }
+ menu: ContextMenu {
+ MenuItem {
+ text: qsTr("Public")
+ }
+ MenuItem {
+ text: qsTr("Unlisted")
+ }
+ MenuItem {
+ text: qsTr("Followers-only")
+ }
+ MenuItem {
+ text: qsTr("Direct")
+ }
+ }
+ }
+
+ IconButton {
+ id: btnSend
+ icon.source: "image://theme/icon-m-send?"
+ + (pressed ? Theme.highlightColor : Theme.primaryColor)
+ anchors {
top: toot.bottom
- right: parent.right
- rightMargin: Theme.paddingLarge
- }
- enabled: toot.text !== "" && toot.text.length < tootMaxChar
- onClicked: {
- var visibility = [ "public", "unlisted", "private", "direct"];
- var media_ids = [];
- for(var k = 0; k < mediaModel.count; k++){
- console.log(mediaModel.get(k).id)
- media_ids.push(mediaModel.get(k).id)
- }
+ right: parent.right
+ rightMargin: Theme.paddingSmall
+ }
+ enabled: toot.text !== "" && toot.text.length < tootMaxChar && uploadProgress.width == 0
+ onClicked: {
+ var visibility = ["public", "unlisted", "private", "direct"]
+ var media_ids = []
+ for (var k = 0; k < mediaModel.count; k++) {
+ console.log(mediaModel.get(k).id)
+ media_ids.push(mediaModel.get(k).id)
+ }
- var msg = {
- 'action' : 'statuses',
- 'method' : 'POST',
- 'model' : mdl,
- 'mode' : "append",
- 'params' : {
- "status": toot.text,
- "visibility": visibility[privacy.currentIndex],
- "media_ids": media_ids
- },
- 'conf' : Logic.conf
- };
- if (toot_id)
- msg.params['in_reply_to_id'] = (toot_id)+""
+ var msg = {
+ "action": 'statuses',
+ "method": 'POST',
+ "model": mdl,
+ "mode": "append",
+ "params": {
+ "status": toot.text,
+ "visibility": visibility[privacy.currentIndex],
+ "media_ids": media_ids
+ },
+ "conf": Logic.conf
+ }
+ if (toot_id)
+ msg.params['in_reply_to_id'] = (toot_id) + ""
- if (warningContent.visible && warningContent.text.length > 0){
- msg.params['sensitive'] = 1
- msg.params['spoiler_text'] = warningContent.text
- }
+ if (warningContent.visible && warningContent.text.length > 0) {
+ msg.params['sensitive'] = 1
+ msg.params['spoiler_text'] = warningContent.text
+ }
- worker.sendMessage(msg);
- warningContent.text = ""
- toot.text = ""
- mediaModel.clear()
- }
- }
+ worker.sendMessage(msg)
+ warningContent.text = ""
+ toot.text = ""
+ mediaModel.clear()
+ pageStack.pop()
+ }
+ }
+ Rectangle {
+ id: uploadProgress
+ color: Theme.highlightBackgroundColor
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ height: 3
+ }
+ }
+ Component.onCompleted: {
+ toot.cursorPosition = toot.text.length
+ if (mdl.count > 0) {
+ var setIndex = 0
+ switch (mdl.get(0).status_visibility) {
+ case "unlisted":
+ setIndex = 1
+ break
+ case "private":
+ setIndex = 2
+ break
+ case "direct":
+ privacy.enabled = false
+ setIndex = 3
+ break
+ default:
+ privacy.enabled = true
+ setIndex = 0
+ }
+ privacy.currentIndex = setIndex
+ }
+ console.log(JSON.stringify())
- Rectangle {
- id: uploadProgress
- color: Theme.highlightBackgroundColor
- anchors.bottom: parent.bottom
- anchors.left: parent.left
- height: 3
- }
- }
- Component.onCompleted: {
- toot.cursorPosition = toot.text.length
- if (mdl.count > 0) {
- var setIndex = 0;
- switch (mdl.get(0).status_visibility){
- case "unlisted":
- setIndex = 1;
- break;
- case "private":
- setIndex = 2;
- break;
- case "direct":
- privacy.enabled = false;
- setIndex = 3;
- break;
- default:
- privacy.enabled = true;
- setIndex = 0;
- }
- privacy.currentIndex = setIndex;
- }
+ worker.sendMessage({
+ "action": 'statuses/' + mdl.get(0).status_id + '/context',
+ "method": 'GET',
+ "model": mdl,
+ "params": { },
+ "conf": Logic.conf
+ })
+ }
+ Component {
+ id: firstWizardPage
- console.log(JSON.stringify())
+ Dialog {
+ id: emoticonsDialog
+ canAccept: false //selector.currentIndex >= 0
- worker.sendMessage({
- 'action' : 'statuses/'+mdl.get(0).status_id+'/context',
- 'method' : 'GET',
- 'model' : mdl,
- 'params' : { },
- 'conf' : Logic.conf
- });
- }
- Component {
- id: firstWizardPage
+ //acceptDestination: conversationPage
+ onAcceptPendingChanged: {
+ if (acceptPending) {
- Dialog {
- id: emoticonsDialog
- canAccept: false; //selector.currentIndex >= 0
- //acceptDestination: conversationPage
+ // Tell the destination page what the selected category is
+ // acceptDestinationInstance.category = selector.value
+ }
+ }
- onAcceptPendingChanged: {
- if (acceptPending) {
- // Tell the destination page what the selected category is
- // acceptDestinationInstance.category = selector.value
- }
- }
+ SilicaGridView {
+ id: gridView
+ anchors.fill: parent
+ cellWidth: gridView.width / 6
+ cellHeight: cellWidth
+ header: PageHeader {
+ title: qsTr("Emojis")
+ description: qsTr("Tap to insert")
+ }
+ model: ListModel {
+ ListElement { section: "smileys"; glyph: "😁" }
+ ListElement { section: "smileys"; glyph: "😂" }
+ ListElement { section: "smileys"; glyph: "😃" }
+ ListElement { section: "smileys"; glyph: "😄" }
+ ListElement { section: "smileys"; glyph: "😅" }
+ ListElement { section: "smileys"; glyph: "😆" }
+ ListElement { section: "smileys"; glyph: "😉" }
+ ListElement { section: "smileys"; glyph: "😊" }
+ ListElement { section: "smileys"; glyph: "😋" }
+ ListElement { section: "smileys"; glyph: "😌" }
+ ListElement { section: "smileys"; glyph: "😍" }
+ ListElement { section: "smileys"; glyph: "😏" }
+ ListElement { section: "smileys"; glyph: "😒" }
+ ListElement { section: "smileys"; glyph: "😓" }
+ ListElement { section: "smileys"; glyph: "😔" }
+ ListElement { section: "smileys"; glyph: "😖" }
+ ListElement { section: "smileys"; glyph: "😘" }
+ ListElement { section: "smileys"; glyph: "😚" }
+ ListElement { section: "smileys"; glyph: "😜" }
+ ListElement { section: "smileys"; glyph: "😝" }
+ ListElement { section: "smileys"; glyph: "😞" }
+ ListElement { section: "smileys"; glyph: "😠" }
+ ListElement { section: "smileys"; glyph: "😡" }
+ ListElement { section: "smileys"; glyph: "😢" }
+ ListElement { section: "smileys"; glyph: "😣" }
+ ListElement { section: "smileys"; glyph: "😤" }
+ ListElement { section: "smileys"; glyph: "😥" }
+ ListElement { section: "smileys"; glyph: "😨" }
+ ListElement { section: "smileys"; glyph: "😩" }
+ ListElement { section: "smileys"; glyph: "😪" }
+ ListElement { section: "smileys"; glyph: "😫" }
+ ListElement { section: "smileys"; glyph: "😭" }
+ ListElement { section: "smileys"; glyph: "😰" }
+ ListElement { section: "smileys"; glyph: "😱" }
+ ListElement { section: "smileys"; glyph: "😲" }
+ ListElement { section: "smileys"; glyph: "😳" }
+ ListElement { section: "smileys"; glyph: "😵" }
+ ListElement { section: "smileys"; glyph: "😷" }
+ ListElement { section: "smileys"; glyph: "😸" }
+ ListElement { section: "smileys"; glyph: "😹" }
+ ListElement { section: "smileys"; glyph: "😺" }
+ ListElement { section: "smileys"; glyph: "😻" }
+ ListElement { section: "smileys"; glyph: "😼" }
+ ListElement { section: "smileys"; glyph: "😽" }
+ ListElement { section: "smileys"; glyph: "😾" }
+ ListElement { section: "smileys"; glyph: "😿" }
+ ListElement { section: "smileys"; glyph: "🙀" }
+ ListElement { section: "smileys"; glyph: "🙅" }
+ ListElement { section: "smileys"; glyph: "🙆" }
+ ListElement { section: "smileys"; glyph: "🙇" }
+ ListElement { section: "smileys"; glyph: "🙈" }
+ ListElement { section: "smileys"; glyph: "🙉" }
+ ListElement { section: "smileys"; glyph: "🙊" }
+ ListElement { section: "smileys"; glyph: "🙋" }
+ ListElement { section: "smileys"; glyph: "🙌" }
+ ListElement { section: "smileys"; glyph: "🙍" }
+ ListElement { section: "smileys"; glyph: "🙎" }
+ ListElement { section: "smileys"; glyph: "🙏" }
- SilicaGridView {
- id: gridView
- anchors.fill: parent
- cellWidth: gridView.width / 6
- cellHeight: cellWidth
- header: PageHeader {
- title: qsTr("Emojis")
- description: qsTr("Tap to insert")
- }
- model: ListModel {
- ListElement { section: "smileys"; glyph: "😁" }
- ListElement { section: "smileys"; glyph: "😂" }
- ListElement { section: "smileys"; glyph: "😃" }
- ListElement { section: "smileys"; glyph: "😄" }
- ListElement { section: "smileys"; glyph: "😅" }
- ListElement { section: "smileys"; glyph: "😆" }
- ListElement { section: "smileys"; glyph: "😉" }
- ListElement { section: "smileys"; glyph: "😊" }
- ListElement { section: "smileys"; glyph: "😋" }
- ListElement { section: "smileys"; glyph: "😌" }
- ListElement { section: "smileys"; glyph: "😍" }
- ListElement { section: "smileys"; glyph: "😏" }
- ListElement { section: "smileys"; glyph: "😒" }
- ListElement { section: "smileys"; glyph: "😓" }
- ListElement { section: "smileys"; glyph: "😔" }
- ListElement { section: "smileys"; glyph: "😖" }
- ListElement { section: "smileys"; glyph: "😘" }
- ListElement { section: "smileys"; glyph: "😚" }
- ListElement { section: "smileys"; glyph: "😜" }
- ListElement { section: "smileys"; glyph: "😝" }
- ListElement { section: "smileys"; glyph: "😞" }
- ListElement { section: "smileys"; glyph: "😠" }
- ListElement { section: "smileys"; glyph: "😡" }
- ListElement { section: "smileys"; glyph: "😢" }
- ListElement { section: "smileys"; glyph: "😣" }
- ListElement { section: "smileys"; glyph: "😤" }
- ListElement { section: "smileys"; glyph: "😥" }
- ListElement { section: "smileys"; glyph: "😨" }
- ListElement { section: "smileys"; glyph: "😩" }
- ListElement { section: "smileys"; glyph: "😪" }
- ListElement { section: "smileys"; glyph: "😫" }
- ListElement { section: "smileys"; glyph: "😭" }
- ListElement { section: "smileys"; glyph: "😰" }
- ListElement { section: "smileys"; glyph: "😱" }
- ListElement { section: "smileys"; glyph: "😲" }
- ListElement { section: "smileys"; glyph: "😳" }
- ListElement { section: "smileys"; glyph: "😵" }
- ListElement { section: "smileys"; glyph: "😷" }
- ListElement { section: "smileys"; glyph: "😸" }
- ListElement { section: "smileys"; glyph: "😹" }
- ListElement { section: "smileys"; glyph: "😺" }
- ListElement { section: "smileys"; glyph: "😻" }
- ListElement { section: "smileys"; glyph: "😼" }
- ListElement { section: "smileys"; glyph: "😽" }
- ListElement { section: "smileys"; glyph: "😾" }
- ListElement { section: "smileys"; glyph: "😿" }
- ListElement { section: "smileys"; glyph: "🙀" }
- ListElement { section: "smileys"; glyph: "🙅" }
- ListElement { section: "smileys"; glyph: "🙆" }
- ListElement { section: "smileys"; glyph: "🙇" }
- ListElement { section: "smileys"; glyph: "🙈" }
- ListElement { section: "smileys"; glyph: "🙉" }
- ListElement { section: "smileys"; glyph: "🙊" }
- ListElement { section: "smileys"; glyph: "🙋" }
- 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: "🚇" }
+ 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: "🚓" }
+ 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: "🚨" }
+ 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: "🚲" }
+ 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: "🚽" }
+ 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: "🚄" }
- 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: "🚑" }
- 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: "🚚" }
- 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: "🚬" }
- 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: "🚻" }
- 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: "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: "♍" }
- 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 {
- width: gridView.cellWidth
- height: gridView.cellHeight
- Label {
- anchors.centerIn: parent
- color: (highlighted ? Theme.secondaryHighlightColor : Theme.secondaryColor)
- font.pixelSize: Theme.fontSizeLarge
- text: glyph
- }
- onClicked: {
- var cursorPosition = toot.cursorPosition
- toot.text = toot.text.substring(0, cursorPosition) + model.glyph + toot.text.substring(cursorPosition)
- toot.cursorPosition = cursorPosition+model.glyph.length
- emoticonsDialog.canAccept = true;
- emoticonsDialog.accept()
-
- }
- }
- }
- }
- }
+ 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: "♍" }
+ 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 {
+ width: gridView.cellWidth
+ height: gridView.cellHeight
+ Label {
+ anchors.centerIn: parent
+ color: (highlighted ? Theme.secondaryHighlightColor : Theme.secondaryColor)
+ font.pixelSize: Theme.fontSizeLarge
+ text: glyph
+ }
+ onClicked: {
+ var cursorPosition = toot.cursorPosition
+ toot.text = toot.text.substring(
+ 0, cursorPosition) + model.glyph + toot.text.substring(
+ cursorPosition)
+ toot.cursorPosition = cursorPosition + model.glyph.length
+ emoticonsDialog.canAccept = true
+ emoticonsDialog.accept()
+ }
+ }
+ }
+ }
+ }
}
diff --git a/qml/pages/MainPage.qml b/qml/pages/MainPage.qml
index 3745cc7..e676870 100644
--- a/qml/pages/MainPage.qml
+++ b/qml/pages/MainPage.qml
@@ -69,10 +69,11 @@ Page {
onOpenDrawer: infoPanel.open = setDrawer
}
MyList{
- id: tlPublic;
- title: qsTr("Federated")
- type: "timelines/public"
- mdl: Logic.modelTLpublic
+ id: tlNotifications;
+ title: qsTr("Notifications")
+ type: "notifications"
+ notifier: true
+ mdl: Logic.modelTLnotifications
width: parent.itemWidth
height: parent.itemHeight
onOpenDrawer: infoPanel.open = setDrawer
@@ -88,11 +89,10 @@ Page {
onOpenDrawer: infoPanel.open = setDrawer
}
MyList{
- id: tlNotifications;
- title: qsTr("Notifications")
- type: "notifications"
- notifier: true
- mdl: Logic.modelTLnotifications
+ id: tlPublic;
+ title: qsTr("Federated")
+ type: "timelines/public"
+ mdl: Logic.modelTLpublic
width: parent.itemWidth
height: parent.itemHeight
onOpenDrawer: infoPanel.open = setDrawer
@@ -185,7 +185,7 @@ Page {
delegate: ItemUser {
onClicked: {
pageStack.push(Qt.resolvedUrl("Profile.qml"), {
- "displayname": model.account_username,
+ "display_name": model.account_display_name,
"username": model.account_acct,
"user_id": model.account_id,
"profileImage": model.account_avatar
@@ -260,8 +260,13 @@ Page {
slideshow.positionViewAtIndex(4, ListView.SnapToItem)
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 {
- pageStack.push(Qt.resolvedUrl("Browser.qml"), {"href" : href})
+ Qt.openUrlExternally(href);
}
}
Component.onCompleted: {
diff --git a/qml/pages/Profile.qml b/qml/pages/Profile.qml
index c432b04..c26c7ed 100644
--- a/qml/pages/Profile.qml
+++ b/qml/pages/Profile.qml
@@ -6,7 +6,7 @@ import QtGraphicalEffects 1.0
Page {
property ListModel tweets;
- property string displayname : "";
+ property string display_name : "";
property string username : "";
property string profileImage : "";
property int user_id;
@@ -16,8 +16,9 @@ Page {
property int favourites_count;
property int reblogs_count;
property int count_moments;
- property string profile_background : "";
+ property string profile_background: "";
property string note: "";
+ property string url: "";
property bool locked : false;
property date created_at;
@@ -39,7 +40,7 @@ Page {
followers_count = messageObject.data.followers_count
following_count = messageObject.data.following_count
username = messageObject.data.acct
- displayname = messageObject.data.display_name
+ display_name = messageObject.data.display_name
profileImage = messageObject.data.avatar_static
var msg = {
@@ -68,9 +69,10 @@ Page {
following_count = messageObject.data
break;
case 'acct':
- //username = messageObject.data
+ // line below was commented out, reason unknown
+ // username = messageObject.data
break;
- case 'locked':
+ case 'locked':m
locked = messageObject.data
break;
case 'created_at':
@@ -82,6 +84,9 @@ Page {
case 'note':
note = messageObject.data
break;
+ case 'url':
+ url = messageObject.data
+ break;
case 'following':
following = messageObject.data
followers_count = followers_count + (following ? 1 : - 1)
@@ -135,7 +140,7 @@ Page {
id: list
header: ProfileHeader {
id: header
- title: displayname
+ title: display_name
description: '@'+username
image: profileImage
}
@@ -238,10 +243,65 @@ Page {
}
}
- /*ExpandingSection {
- title: "Tweets"
+ ExpandingSection {
+ 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: " "
+ }
+ }
+ }
}
diff --git a/qml/pages/Settings.qml b/qml/pages/Settings.qml
index 0dbc847..637cf94 100644
--- a/qml/pages/Settings.qml
+++ b/qml/pages/Settings.qml
@@ -102,32 +102,38 @@ Page {
}
ListElement {
name: "Miodrag Nikolić"
- desc: "visual identity"
+ desc: qsTr("Visual identity")
mastodon: ""
mail: "micotakis@gmail.com"
}
+ ListElement {
+ name: "molan"
+ desc: qsTr("Development and maintenence")
+ mastodon: ""
+ mail: "mol_an@sunrise.ch"
+ }
ListElement {
name: "Quentin PAGÈS / Quenti ♏"
- desc: "Occitan & French translation"
+ desc: qsTr("Occitan & French translation")
mastodon: "Quenti@framapiaf.org"
mail: ""
}
ListElement {
name: "André Koot"
- desc: "Dutch translation"
+ desc: qsTr("Dutch translation")
mastodon: "meneer@mastodon.social"
mail: "https://twitter.com/meneer"
}
ListElement {
- name: "Carlos Gonzalez / Caballlero"
- desc: "Español translation"
+ name: "CarmenFdez"
+ desc: qsTr("Spanish translation")
mastodon: ""
- mail: "carlosgonz@protonmail.com"
+ mail: ""
}
ListElement {
name: "Mohamed-Touhami MAHDI"
- desc: "Added README file"
+ desc: qsTr("Added README file")
mastodon: "dragnucs@touha.me"
mail: "touhami@touha.me"
}
diff --git a/qml/pages/components/ItemUser.qml b/qml/pages/components/ItemUser.qml
index ffebb63..809c97e 100644
--- a/qml/pages/components/ItemUser.qml
+++ b/qml/pages/components/ItemUser.qml
@@ -33,7 +33,7 @@ BackgroundItem {
MouseArea {
anchors.fill: parent
onClicked: pageStack.push(Qt.resolvedUrl("./../Profile.qml"), {
- "displayname": model.account_username,
+ "display_name": model.account_display_name,
"username": model.account_acct,
"user_id": model.account_id,
"profileImage": model.account_avatar
@@ -60,7 +60,7 @@ BackgroundItem {
}
}
onClicked: openUser({
- "displayname": model.account_username,
+ "display_name": model.account_display_name,
"username": model.account_acct,
"user_id": model.account_id,
"profileImage": model.account_avatar
diff --git a/qml/pages/components/Navigation.qml b/qml/pages/components/Navigation.qml
index d2e3c35..30e5e81 100644
--- a/qml/pages/components/Navigation.qml
+++ b/qml/pages/components/Navigation.qml
@@ -15,38 +15,33 @@ SilicaGridView {
id: listModel
ListElement {
icon: "image://theme/icon-m-home"
- //icon: "../../images/home.svg"
slug: "home"
name: "Home"
active: true
unread: false
}
ListElement {
- //icon: "image://theme/icon-m-region"
- icon: "../../images/federated.svg"
- slug: "federated"
- name: "Federated"
+ icon: "image://theme/icon-m-alarm"
+ slug: "notifications"
+ name: "Notifications"
active: false
- unread: false
}
ListElement {
- //icon: "image://theme/icon-m-sailfish"
- icon: "../../images/local.svg"
+ icon: "image://theme/icon-m-whereami"
slug: "local"
name: "Local"
active: false
unread: false
}
ListElement {
- icon: "image://theme/icon-m-alarm"
- //icon: "../../images/notification.svg"
- slug: "notifications"
- name: "Notifications"
+ icon: "image://theme/icon-m-website"
+ slug: "federated"
+ name: "Federated"
active: false
+ unread: false
}
ListElement {
icon: "image://theme/icon-m-search"
- //icon: "../../images/search.svg"
slug: "search"
name: "Search"
active: false
diff --git a/qml/pages/components/ProfileHeader.qml b/qml/pages/components/ProfileHeader.qml
index e557bcb..8dd369c 100644
--- a/qml/pages/components/ProfileHeader.qml
+++ b/qml/pages/components/ProfileHeader.qml
@@ -19,7 +19,7 @@ Item {
}*/
Rectangle {
anchors.fill: parent
- opacity: 0.1
+ opacity: 0.2
gradient: Gradient {
GradientStop { position: 0.0; color: Theme.highlightBackgroundColor }
GradientStop { position: 1.0; color: Theme.highlightBackgroundColor }
@@ -51,7 +51,7 @@ Item {
id: ttl
text: title
height: contentHeight
- color: Theme.highlightColor
+ color: Theme.primaryColor
font.pixelSize: Theme.fontSizeLarge
font.family: Theme.fontFamilyHeading
horizontalAlignment: Text.AlignRight
@@ -61,7 +61,7 @@ Item {
Label {
height: description === "" ? 0 : contentHeight
text: description
- color: Theme.secondaryHighlightColor
+ color: Theme.primaryColor
font.pixelSize: Theme.fontSizeSmall
font.family: Theme.fontFamilyHeading
horizontalAlignment: Text.AlignRight
diff --git a/qml/pages/components/Toot.qml b/qml/pages/components/Toot.qml
index fb9b9ab..7809e7a 100644
--- a/qml/pages/components/Toot.qml
+++ b/qml/pages/components/Toot.qml
@@ -63,7 +63,7 @@ BackgroundItem {
anchors.fill: parent
onClicked: {
pageStack.push(Qt.resolvedUrl("../Profile.qml"), {
- "displayname": account_display_name,
+ "display_name": account_display_name,
"username": account_username,
"profileImage": account_avatar
})
@@ -142,7 +142,7 @@ BackgroundItem {
right: parent.right
top: lblScreenName.bottom
topMargin: Theme.paddingSmall
- rightMargin: Theme.paddingLarge
+ rightMargin: Theme.paddingLarge
}
height: content.length ? paintedHeight : 0
onLinkActivated: {
@@ -164,7 +164,7 @@ BackgroundItem {
send(link)
} else {
- pageStack.push(Qt.resolvedUrl("../Browser.qml"), {"href" : link})
+ Qt.openUrlExternally(link);
}
diff --git a/qml/pages/components/VisualContainer.qml b/qml/pages/components/VisualContainer.qml
index 9f649d9..2d42d6c 100644
--- a/qml/pages/components/VisualContainer.qml
+++ b/qml/pages/components/VisualContainer.qml
@@ -55,7 +55,7 @@ BackgroundItem {
anchors.fill: parent
onClicked: {
pageStack.push(Qt.resolvedUrl("../Profile.qml"), {
- "displayname": model.account_username,
+ "display_name": model.account_display_name,
"username": model.account_acct,
"user_id": model.account_id,
"profileImage": model.account_avatar
@@ -134,13 +134,12 @@ BackgroundItem {
}));
send(link)
} else if (test.length === 4 && test[3][0] === "@" ) {
- pageStack.push(Qt.resolvedUrl("../Profile.qml"), {
- "name": "",
- "username": test[3].substring(1)+"@"+test[2],
- "profileImage": ""
- })
+ tlSearch.search = decodeURIComponent("@"+test[3].substring(1)+"@"+test[2])
+ slideshow.positionViewAtIndex(4, ListView.SnapToItem)
+ navigation.navigateTo('search')
+
} else {
- pageStack.push(Qt.resolvedUrl("../Browser.qml"), {"href" : link})
+ Qt.openUrlExternally(link);
}
}
text: content.replace(new RegExp(" 1.0.4-1
+- Merge with molan code
+
+* Tue Feb 04 2020 molan 1.0.3-8
+- Fix for broken translations
+- Updated Spanish translation
+
+* Mon Feb 03 2020 molan 1.0.3-7
+- Updated translations for new language strings
+
+* Thu Jan 30 2020 molan 1.0.3-6
+- Workaround for opening user profiles in toots
+- Show profile descriptions (Bio) with option to open them in Browser
+- Updated and improved UI for Conversation page
+- Indication for sending toot (move back to previous page)
+- New arrangement of main pages (like used in Mastodon websites and other apps)
+- Small UI and text/label changes
+
+* Thu Jan 16 2020 molan 1.0.3-5 [fork of Tooter 1.0.3]
+- Fix for broken profile pages when clicking on usernames in toots
+- Fixed navigation icons for inverted ambiences
+- Updated Chinese translation (thanks to dashinfantry)
+
+* Wed Jan 15 2020 molan 1.0.3-4 [fork of Tooter 1.0.3]
+- Website links in toots now open directly in browser since the web scraper service which was used before is discontinued
+- Profile page now shows full display name in title instead of user name
+- Changed send, content warning and add emoji icon in Conversation page for clarification
+- Small update to Chinese translation (thanks to dashinfantry)
+- Completed German and French translations
+
+* Mon Jan 06 2020 molan 1.0.3-3 [fork of Tooter 1.0.3]
+- Update and rename harbour-tooter-zh.ts to harbour-tooter-zh_CN.ts (thanks to dashinfantry)
+
+* Sat Dec 28 2019 molan 1.0.3-1 [fork of Tooter 1.0.3]
+- Fixed broken Mastodon login (app built with Sailfish SDK 2.4)
+- Fixed crash on certain notifications
+
* Sun Jan 27 2019 Dusko Angirevic 1.0.3-0
- Remorse popup added for account removal
- Updated translations
diff --git a/rpm/harbour-tooter.spec b/rpm/harbour-tooter.spec
index 520b70c..4c576ba 100644
--- a/rpm/harbour-tooter.spec
+++ b/rpm/harbour-tooter.spec
@@ -13,8 +13,8 @@ Name: harbour-tooter
%{!?qtc_make:%define qtc_make make}
%{?qtc_builddir:%define _builddir %qtc_builddir}
Summary: Tooter
-Version: 1.0.3
-Release: 0
+Version: 1.0.4
+Release: 1
Group: Qt/Qt
License: LICENSE
URL: http://example.org/
diff --git a/rpm/harbour-tooter.yaml b/rpm/harbour-tooter.yaml
index edf95f4..093166c 100644
--- a/rpm/harbour-tooter.yaml
+++ b/rpm/harbour-tooter.yaml
@@ -1,7 +1,7 @@
Name: harbour-tooter
Summary: Tooter
-Version: 1.0.3
-Release: 0
+Version: 1.0.4
+Release: 1
# The contents of the Group field should be one of the groups listed here:
# https://github.com/mer-tools/spectacle/blob/master/data/GROUPS
Group: Qt/Qt
diff --git a/translations/harbour-tooter-de.ts b/translations/harbour-tooter-de.ts
index 51c1f01..e6f310d 100644
--- a/translations/harbour-tooter-de.ts
+++ b/translations/harbour-tooter-de.ts
@@ -20,51 +20,12 @@
hat gesagt
-
- Browser
-
-
- Öffne in Browser
-
-
-
- Web-Modus
-
-
-
- Lese-Modus
-
-
-
- Kopiere URL
-
-
Conversation
Konversation
-
-
- Inhaltswarnung!
-
-
-
- öffentlich
-
-
-
- nicht aufgeführt
-
-
-
- nur Follower
-
-
-
- direkt
-
Löschen
@@ -77,6 +38,30 @@
Tippen um einzufügen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -96,7 +81,7 @@
LoginPage
-
+ Login
@@ -104,11 +89,11 @@
-
+ Gib eine Mastadon Instance URL ein
-
+ Mastodon ist ein freies, auf OpenSource begründetes Soziales Netzwerk. Es bietet eine dezentralisierte Alternative zu den kommerziellen Plattformen, vermeidet aber das Risiko, dass ein einzelnes Unternehmen das Monopol auf deine gesamte Kommunikation erhält. Wähle selbst einen Server (Instanz) der du vertraust - egal welche du wählst, du kannst mit allen kommunizieren. Oder du betreibst deine eigene Mastodon Instanz und verbindest dich nahtlos mit dem Mastodon Netzwerk.
@@ -230,51 +215,83 @@
Anhänger
+
+
+
+
+
+
+
+
Settings
- Einstellungen
+ Einstellungen
-
+ Account löschen
-
+ Account hinzufügen
-
+ Der App Autorisierung entziehen und Account entfernen
-
+ Autorisiere diese App deinen Mastodon Account in deinem Namen zu nutzen
-
+ Lade Bilder in den Toots
-
+ Deaktiviere diese Option um deinen Datenverbindung zu schonen
-
+ Übersetzen
-
+ Nutze Transifex um bei der Übersetzung in deine Sprache zu helfen
-
+ Credits
+ UI/UX Design und Implementierung
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translations/harbour-tooter-el.ts b/translations/harbour-tooter-el.ts
index 9be4361..c3f464a 100644
--- a/translations/harbour-tooter-el.ts
+++ b/translations/harbour-tooter-el.ts
@@ -20,51 +20,12 @@
είπε
-
- Browser
-
-
- Άνοιγμα στον φυλλομετρητή
-
-
-
- Λειτουργία ιστού
-
-
-
- Λειτουργία ανάγνωσης
-
-
-
- Αντιγραφή διεύθυνσης URL
-
-
Conversation
Συνομιλία
-
-
- Προειδοποίηση περιεχομένου!
-
-
-
- δημόσιο
-
-
-
- μη καταχωρημένο
-
-
-
- μόνο αυτοί που σας ακολουθούν
-
-
-
- απευθείας
-
Διαγραφή
@@ -77,6 +38,30 @@
Κτυπήστε για εισαγωγή
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -96,7 +81,7 @@
LoginPage
-
+ Σύνδεση
@@ -230,51 +215,83 @@
Σας ακολουθούν
+
+
+
+
+
+
+
+
Settings
- Ρυθμίσεις
+ Ρυθμίσεις
-
+ Αφαίρεση λογαριασμού
-
+ Προσθήκη λογαριασμού
-
+ Άρση της αδειοδότησης της εφαρμογής και αφαίρεση του λογαριασμού σας
-
+ Να επιτρέπεται στην εφαρμογή να χρησιμοποιεί τον λογαριασμό σας στο Mastodon εκ μέρους σας
-
+ Φόρτωση των εικόνων στα toot
-
+ Απενεργοποιήστε αυτήν την επιλογή αν θέλετε να διατηρήσετε την σύνδεση των δεδομένων σας
-
+ Μετάφραση
-
+ Χρησιμοποιήστε το Transifex για να βοηθήσετε την μετάφραση της εφαρμογής στην γλώσσα σας
-
+ Ευχαριστίες
+ UI/UX σχεδιασμός και ανάπτυξη
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translations/harbour-tooter-es.ts b/translations/harbour-tooter-es.ts
index 8bbcec9..7f6acfd 100644
--- a/translations/harbour-tooter-es.ts
+++ b/translations/harbour-tooter-es.ts
@@ -20,51 +20,12 @@
dijo
-
- Browser
-
-
- Abrir en navegador
-
-
-
- Modo Web
-
-
-
- Modo lectura
-
-
-
- Copiar URL
-
-
Conversation
Conversación
-
-
- Advertencia de contenido
-
-
-
- público
-
-
-
- sin federar
-
-
-
- sólo seguidores
-
-
-
- directo
-
Borrar
@@ -77,6 +38,30 @@
Toca para insertar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -96,23 +81,23 @@
LoginPage
-
+ Acceso
-
+ Instancia
-
+ Introduce URL de una instancia de Mastodon
-
+ Mastodon es una red social gratuita y de código abierto. Una alternativa descentralizada a las plataformas comerciales, evita los riesgos de una única compañía que monopolice tu comunicación. Elije un servidor en el que confíes — cualquiera que elijas, puede interactuar con todos los demás. Cualquiera puede ejecutar su propia instancia de Mastodon y participar en la red social sin problemas.
-
+ Volver a cargar
@@ -230,51 +215,83 @@
Seguidores
+
+
+
+
+
+
+
+
Settings
- Ajustes
+ Ajustes
-
+ Eliminar cuenta
-
+ Añadir cuenta
-
+ Retira la autorización a esta aplicación y elimina tu cuenta
-
+ Autoriza a esta aplicación a usar tu cuenta de Mastodon en tu nombre
-
+ Cargar imágenes en toots
-
+ Deshabilita esta opción si quieres ahorrar en tu conexión de datos
-
+ Traducir
-
+ Usa Transifex para ayudar en la traducción a tu idioma de esta aplicación
-
+ Créditos
+ Diseño UI/UX y desarrollo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translations/harbour-tooter-fi.ts b/translations/harbour-tooter-fi.ts
index 8a9fe60..daf06a7 100644
--- a/translations/harbour-tooter-fi.ts
+++ b/translations/harbour-tooter-fi.ts
@@ -20,51 +20,12 @@
-
- Browser
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Conversation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -77,6 +38,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -230,6 +215,14 @@
+
+
+
+
+
+
+
+
Settings
@@ -277,6 +270,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Toot
diff --git a/translations/harbour-tooter-fr.ts b/translations/harbour-tooter-fr.ts
index dc04704..d41d682 100644
--- a/translations/harbour-tooter-fr.ts
+++ b/translations/harbour-tooter-fr.ts
@@ -20,51 +20,12 @@
a dit
-
- Browser
-
-
- Ouvrir dans le navigateur
-
-
-
- Vue internet
-
-
-
- Mode lecture
-
-
-
- Copier l'URL
-
-
Conversation
Conversation
-
-
- Contenu sensible !
-
-
-
- public
-
-
-
- non listé
-
-
-
- abonnés seulement
-
-
-
- direct
-
Supprimer
@@ -77,6 +38,30 @@
Appuyez pour insérer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -96,23 +81,23 @@
LoginPage
-
+ Login
-
+ Instance
-
+ Saisissez l’URL d’une instance Mastodon
-
+ Mastodon est un réseau libre et open source. Il s’agit d'une alternative aux plateformes commerciales, pour éviter qu'une seule entreprise monopolise vos communications. Choisissez un serveur dans lequel vous avez confiance - quelque que soit votre choix vous pourrez interagir avec d’autres personnes. Tout le monde peut monter sa propre instance Mastodon et participer rendre le réseau plus robuste.
-
+ Recharger
@@ -230,51 +215,83 @@
Abonnés
+
+
+
+
+
+
+
+
Settings
- Paramètres
+ Préférences
-
+ Supprimer le compte
-
+ Ajouter un compte
-
+ Supprimer votre compte de l'application
-
+ Autoriser cette application à utiliser votre compte Mastodon en votre nom
-
+ Charger les images des pouets
-
+ Désactivez cette option si vous souhaitez économiser votre consommation de données
-
+ Traduire
-
+ Utilisez Transifex pour aider à la traduction de l'application dans votre langue
-
+ Crédits
+ design et développement de l'interface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translations/harbour-tooter-nl.ts b/translations/harbour-tooter-nl.ts
index 115d648..ef0f5d3 100644
--- a/translations/harbour-tooter-nl.ts
+++ b/translations/harbour-tooter-nl.ts
@@ -20,51 +20,12 @@
zei
-
- Browser
-
-
- Openen in browser
-
-
-
- Webmodus
-
-
-
- Leesmodus
-
-
-
- Kopieer URL
-
-
Conversation
Gesprek
-
-
- Gevoelige inhoud!
-
-
-
- openbaar
-
-
-
- niet op lijst
-
-
-
- alleen volgers
-
-
-
- direct
-
Verwijderen
@@ -77,6 +38,30 @@
Tikken om in te voegen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -96,23 +81,23 @@
LoginPage
-
+ Inloggen
-
+ Instantie
-
+ Voer de URL van een Mastodon-instantie in
-
+ Mastodon is een vrij sociaal netwerk. Als gedecentraliseerd alternatief voor commerciële platformen, vermijdt het de risico’s van een enkel bedrijf dat je communicatie monopoliseert. Kies een server die je vertrouwt — welke je ook kiest, je kunt met iedereen communiceren. Iedereen kan zelf een Mastodon-instantie hebben en naadloos deelnemen aan het sociale netwerk.
-
+ Herladen
@@ -230,51 +215,83 @@
Volgers
+
+
+
+
+
+
+
+
Settings
- Instellingen
+ Instellingen
-
+ Verwijderen account
-
+ Toevoegen account
-
+ Trek autorisaties van deze app in en verwijder je account
-
+ Autoriseer deze app om je Mastodon namens jou te gebruiken
-
+ Laden afbeeldingen in toots
-
+ Schakel deze optie uit als je je dataverbinding wilt behouden
-
+ Vertalen
-
+ Gebruik Transifex om deze app te helpen vertalen in jouw taal
-
+ Credits
+ UI/UX ontwerp en ontwikkeling
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translations/harbour-tooter-nl_BE.ts b/translations/harbour-tooter-nl_BE.ts
index 385fa6c..878cbfc 100644
--- a/translations/harbour-tooter-nl_BE.ts
+++ b/translations/harbour-tooter-nl_BE.ts
@@ -20,51 +20,12 @@
zei
-
- Browser
-
-
- Openen in browser
-
-
-
- Webmodus
-
-
-
- Leesmodus
-
-
-
- URL kopiëren
-
-
Conversation
Gesprek
-
-
- Gevoeligen inhoud!
-
-
-
- openbaar
-
-
-
- niet op lijst
-
-
-
- alleen volgers
-
-
-
- direct
-
Verwijderen
@@ -77,6 +38,30 @@
Tikt voor in te voegen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -96,23 +81,23 @@
LoginPage
-
+ Inloggen
-
+ Instantie
-
+ Voert den URL van een Mastodon-instantie in
-
+ Mastodon is e vrij sociaal netwerk. Als gedecentraliseerd alternatief voor commerciële platformen, vermijdt het de risico’s van één enkel bedrijf dat uw communicatie monopoliseert. Kiest ne server die ge vertrouwt — dewelken dat ge ook kiest, ge kunt met iedereen communiceren. Iedereen kan zelf een Mastodon-instantie hebben en naadloos deelnemen aan het sociaal netwerk.
-
+ Herladen
@@ -230,51 +215,83 @@
Volgers
+
+
+
+
+
+
+
+
Settings
- Instellingen
+ Instellingen
-
+ Account verwijderen
-
+ Account toevoegen
-
+ Trekt autorisaties van dezen app in en verwijdert uwen account
-
+ Autoriseert dezen app voor uwe Mastodon-account namens u te gebruiken
-
+ Afbeeldingen in toots laden
-
+ Schakelt dees optie uit als ge uw verbinding wilt behouden
-
+ Vertalen
-
+ Gebruikt Transifex voor te helpen met dezen app in uw taal te vertalen
-
+ Credits
+ UI/UX-ontwerp en -ontwikkeling
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translations/harbour-tooter-oc.ts b/translations/harbour-tooter-oc.ts
index 0f43a2a..2b226a0 100644
--- a/translations/harbour-tooter-oc.ts
+++ b/translations/harbour-tooter-oc.ts
@@ -20,51 +20,12 @@
a dich
-
- Browser
-
-
- Dobrir dins lo navigator
-
-
-
- Mòde Web
-
-
-
- Mòde lectura
-
-
-
- Copiar l'URL
-
-
Conversation
Discutida
-
-
- Contengut sensible !
-
-
-
- public
-
-
-
- pas listat
-
-
-
- seguidors solament
-
-
-
- dirècte
-
Escafar
@@ -77,6 +38,30 @@
Tustejar per inserir
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -96,7 +81,7 @@
LoginPage
-
+ Connexion
@@ -104,11 +89,11 @@
-
+ Picatz l’URL d’una instància Mastodon
-
+ Mastodon es un malhum liure e open source. Es una alternativa descentralizada a las plataformas comercialas, per empachar qu'una sola entrepresa monopolize vòstras comunicacions. Causissètz un servidor que vos fisatz - qualque siá vòstre causida poiretz interagir amb los autres. Tot lo monde pòt montar sa pròpria instància Mastodon e atal participar a construire un malhum mai solid.
@@ -230,51 +215,83 @@
Seguidors
+
+
+
+
+
+
+
+
Settings
- Parmètres
+ Paramètres
-
+ Levar un compte
-
+ Ajustar un compte
-
+ Revocar l’aplicacion e levar vòstre compte
-
+ Autorizar aquesta aplicacion a utilizar vòstre compte Mastodon per vos
-
+ Cargar los imatges dels tuts
-
+ Desactivar aquesta opcion per estalviar vòstra connexion de donadas
-
+ Traduire
-
+ Utilizar Transifex per ajudar a traduire l’aplicacion dins vòstra lenga
-
+ Crèdits
+ UI/UX design e desvlopament
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translations/harbour-tooter-pl.ts b/translations/harbour-tooter-pl.ts
index 60c7451..6efba16 100644
--- a/translations/harbour-tooter-pl.ts
+++ b/translations/harbour-tooter-pl.ts
@@ -1,95 +1,80 @@
-
+
API
- dodał(a) do ulubionych
+
- zaczął(-ęła) Cię śledzić
+
- podbił(a)
+
- napisał(a)
-
-
-
- Browser
-
-
- Otwórz w przeglądarce
-
-
-
- Tryb sieci
-
-
-
- Tryb czytania
-
-
-
- Kopiuj URL
+
Conversation
- Konwersacja
-
-
-
- Ostrzeżenie o zawartości!
-
-
-
- publiczny
-
-
-
- niewidoczny
-
-
-
- tylko dla śledzących
-
-
-
- bezpośredni
+
- Usuń
+
- Emoji
+
- Dotknij aby wstawić
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
- Błąd ładowania
+
ImageUploader
- Plik %1 nie istnieje
+
@@ -119,123 +104,131 @@
MainPage
- Strona główna
+
- Powiadomienia
+
- Nowy wpis
+
- Szukaj
+
- @użytkownik lub #tag
+
- Lokalne
+
- Globalne
+
MiniStatus
- podbił(a)
+
- dodał(a) do ulubionych
+
- zaczął(-ęła) Cię śledzić
+
MyList
- Załaduj więcej
+
- Ustawienia
+
- Ładowanie
+
- proszę czekać…
+
Profile
- Przestań śledzić
+
- Wysłano prośbę o możliwość śledzenia!
+
- Śledzisz
+
- Wycisz
+
- Unmute
+
- Unblock
+
- Block
+
- Statuses
+
- Favourites
+
- Follow
+
- Summary
+
- Followers
+
+
+
+
+
+
+
+
+
Settings
- Ustawienia
+
@@ -277,39 +270,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Toot
- podbił(a)
+
- dodał(a) do ulubionych
+
- zaczął(-ęła Cię śledzić)
+
VisualContainer
- Cofnij podbicie
+
- Podbij
+
- Usuń z ulubionych
+
- Dodaj do ulubionych
+
diff --git a/translations/harbour-tooter-ru.ts b/translations/harbour-tooter-ru.ts
index ee37bee..21152ef 100644
--- a/translations/harbour-tooter-ru.ts
+++ b/translations/harbour-tooter-ru.ts
@@ -20,51 +20,12 @@
сказал
-
- Browser
-
-
- Открыть в браузере
-
-
-
- Веб-режим
-
-
-
- Режим чтения
-
-
-
- Копировать URL
-
-
Conversation
Беседа
-
-
- Предупреждение о содержании!
-
-
-
- публика
-
-
-
- не указан
-
-
-
- только последователи
-
-
-
- непосредственный
-
Удалить
@@ -77,6 +38,30 @@
Нажмите, чтобы вставить
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -96,7 +81,7 @@
LoginPage
-
+ Авторизоваться
@@ -104,11 +89,11 @@
-
+ Введите URL-адрес экземпляра Mastodon
-
+ Mastodon - бесплатная социальная сеть с открытым исходным кодом. Децентрализованная альтернатива коммерческим платформам позволяет избежать рисков, связанных с тем, что одна компания монополизирует ваше общение. Выберите сервер, которому вы доверяете - в зависимости от того, что вы выберете, вы можете взаимодействовать со всеми остальными. Любой может запустить свой собственный экземпляр Mastodon и беспрепятственно участвовать в социальной сети.
@@ -230,51 +215,83 @@
Читают
+
+
+
+
+
+
+
+
Settings
- Настройки
+ Настройки
-
+ Удалить учетную запись
-
+ Добавить аккаунт
-
+ удалить учетную запись с устройства
-
+ Уполномочить это приложение использовать свою учетную запись Mastodon от вашего имени
-
+ Загружать изображения
-
+ Отключите эту опцию, если вы хотите сохранить подключение к данным
-
+ Переведите
-
+ Используйте Transifex, чтобы помочь с переводом приложения на ваш язык
-
+ Зачет
+ Дизайн и разработка UI / UX
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translations/harbour-tooter-sr.ts b/translations/harbour-tooter-sr.ts
index 48ef2cb..f4006bb 100644
--- a/translations/harbour-tooter-sr.ts
+++ b/translations/harbour-tooter-sr.ts
@@ -20,51 +20,12 @@
каже
-
- Browser
-
-
- Отвори у прегледнику веба
-
-
-
- Прегледник веба
-
-
-
- Мод за читање
-
-
-
- Kopiraj link
-
-
Conversation
Разговор
-
-
- Упозорење на садржај
-
-
-
- јавно
-
-
-
- не приказано
-
-
-
- само за пратиоце
-
-
-
- директна порука
-
Обриши
@@ -77,6 +38,30 @@
Тапни за убацивање
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -96,23 +81,23 @@
LoginPage
-
+ Пријава
-
+ Инстанца
-
+ Унесите URL ваше Мастодон инстанце
-
+ Mastodon је бесплатна, open-source друштвена мрежа. Децентрализована алтернатива комерцијалним платформама која избегава ризике једне компаније која монополизује вашу комуникацију. Одаберите сервер у који имате поверења и без обзира на ваш избор - комуницирајте с осталим корисницима других мрежа. Свако може водити сопствену инстанцу Mastodon мреже и учестовати у комуникацији с другим инстанцама.
-
+ освежи
@@ -230,51 +215,83 @@
Пратиоци
+
+
+
+
+
+
+
+
Settings
- Подешавања
+ Подешавања
-
+ Уклони налог
-
+ Додај налог
-
+ Укините дозволе за кориштење и уклоните налог с телефона
-
+ Дозволите овој апликацији да користи ваш Mastodon налог
-
+ Прикажи слике у објавама
-
+ Искључите ову опцију уколико желите да уштедите на преносу података
-
+ Преведи
-
+ Користите Transifex и помозите у преводу апликације на други језик
-
+ Спомен плоча
+ интерфејс дизајн и развој
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translations/harbour-tooter-sv.ts b/translations/harbour-tooter-sv.ts
index 16be25c..e91a9cf 100644
--- a/translations/harbour-tooter-sv.ts
+++ b/translations/harbour-tooter-sv.ts
@@ -20,51 +20,12 @@
sade
-
- Browser
-
-
- Öppna i webbläsare
-
-
-
- Webbläge
-
-
-
- Läsläge
-
-
-
- Kopiera URL
-
-
Conversation
Konversation
-
-
- Innehållsvarning!
-
-
-
- publik
-
-
-
- olistad
-
-
-
- endast följare
-
-
-
- direkt
-
Radera
@@ -77,6 +38,30 @@
Tryck för att infoga
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -96,7 +81,7 @@
LoginPage
-
+ Logga in
@@ -104,11 +89,11 @@
-
+ Fyll i URL till Mastodoninstans
-
+ Mastodon är ett fritt och öppet socialt nätverk byggt på öppen källkod. Ett decentraliserat alternativ till kommersiella plattformar, vilket undviker att ett ensamt företag monopoliserar din kommunikation. Välj en server du litar på --- beroende på vilken du väljer, kan du interagera med alla andra. Vem som helst kan köra deras egen Mastodoninstans och delta i nätverket. Även du!
@@ -230,51 +215,83 @@
Följare
+
+
+
+
+
+
+
+
Settings
- Inställningar
+ Inställningar
-
+ Radera konto
-
+ Lägg till konto
-
+ Avauktorisera denna app och radera ditt konto
-
+ Godkänn denna app att använda ditt Mastodon-konto på dina vägnar
-
+ Ladda bilder i toots
-
+ Inaktivera det här alternativet om du vill behålla din dataanslutning
-
+ Översätt
-
+ Använd Transifex för att hjälpa med app-översättningar till ditt språk
-
+ Erkännanden
+ UI/UX design och utveckling
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translations/harbour-tooter-zh.ts b/translations/harbour-tooter-zh_CN.ts
similarity index 79%
rename from translations/harbour-tooter-zh.ts
rename to translations/harbour-tooter-zh_CN.ts
index f9bedda..417161c 100644
--- a/translations/harbour-tooter-zh.ts
+++ b/translations/harbour-tooter-zh_CN.ts
@@ -1,6 +1,6 @@
-
+
API
@@ -13,7 +13,7 @@
- 推出的
+ 推起的
@@ -47,7 +47,7 @@
- 内容警告
+ 内容警告!
@@ -89,29 +89,34 @@
ImageUploader
- 文件%1 不存在
+ 文件 %1 不存在
LoginPage
-
+ 登录
-
+ 实例
-
+ 输入一个 Mastodon 实例链接
-
+ Mastodon 是一个自由且开源的社交网络。一个去中心的商业平台的替代品。它能够避免某个公司垄断你的通讯方式的风险。选择一个你所信任的服务器——无论你选择什么,你都可以和其他人进行互动。任何人都能运行他们自己的 Mastodon 实例,然后无缝加入社交网站。
+
+ 重新加载
+
+
+
@@ -150,7 +155,7 @@
MiniStatus
- 推出的
+ 推起的
@@ -184,11 +189,12 @@
Profile
+
未关注
- 关注请求已寄出
+ 关注请求已寄出!
@@ -230,59 +236,67 @@
关注者
+
+
+ 简介
+
+
+
+ 在浏览器打开个人简介
+
Settings
- 设置
+ 设置
-
+ 移除账户
-
+ 添加账户
-
+ 取消对此软件的授权并移除你的账户
-
+ 授权此软件使用你的 Mastodon 账户
-
+ 在嘟嘟加载图片
-
+ 如果你想保护你的数据连接 请禁用此操作
-
+ 翻译
-
+ 使用 Transifex 帮助翻译此软件到你所使用的语言。
-
+ 信誉
-
+ UI/UX 设计及开发
Toot
- 推出的
+ 推起的
@@ -297,14 +311,15 @@
VisualContainer
- 取消推出
+ 取消推起
- 推出
+ 推起
+
取消收藏
diff --git a/translations/harbour-tooter.ts b/translations/harbour-tooter.ts
index c580d4b..03bddc9 100644
--- a/translations/harbour-tooter.ts
+++ b/translations/harbour-tooter.ts
@@ -20,51 +20,12 @@
said
-
- Browser
-
-
- Open in Browser
-
-
-
- Web mode
-
-
-
- Reading mode
-
-
-
- Copy URL
-
-
Conversation
Conversation
-
-
- Content warning!
-
-
-
- public
-
-
-
- unlisted
-
-
-
- followers only
-
-
-
- direct
-
Delete
@@ -77,6 +38,30 @@
Tap to insert
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ImageFullScreen
@@ -230,6 +215,14 @@
Followers
+
+
+
+
+
+
+
+
Settings
@@ -277,6 +270,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Toot