diff --git a/qml/images/icon-s-bookmark.svg b/qml/images/icon-s-bookmark.svg
index 6a7cba2..f05bf8a 100644
--- a/qml/images/icon-s-bookmark.svg
+++ b/qml/images/icon-s-bookmark.svg
@@ -2,8 +2,6 @@
icon-s-bookmark
-
-
-
+
diff --git a/qml/lib/API.js b/qml/lib/API.js
index 1f80f11..9fbfa12 100644
--- a/qml/lib/API.js
+++ b/qml/lib/API.js
@@ -9,6 +9,7 @@ var mediator = (function(){
mediator.channels[channel].push({ context : this, callback : fn });
return this;
};
+
var publish = function(channel){
if(!mediator.channels[channel]) return false;
var args = Array.prototype.slice.call(arguments, 1);
@@ -18,6 +19,7 @@ var mediator = (function(){
};
return this;
};
+
return {
channels : {},
publish : publish,
@@ -28,6 +30,7 @@ var mediator = (function(){
}
};
}());
+
var init = function(){
console.log("db.version: "+db.version);
if(db.version === '') {
@@ -103,6 +106,7 @@ var tootParser = function(data){
console.log(ret)
}
+
var test = 1;
Qt.include("Mastodon.js")
@@ -161,6 +165,7 @@ var notifier = function(item){
key: item.id
}
break;
+
case "follow":
msg = {
urgency: "critical",
@@ -182,6 +187,7 @@ var notifier = function(item){
key: item.id
}
break;
+
case "mention":
msg = {
urgency: "critical",
@@ -193,6 +199,7 @@ var notifier = function(item){
key: item.id
}
break;
+
default:
//console.log(JSON.stringify(messageObject.data))
return;
diff --git a/qml/lib/Mastodon.js b/qml/lib/Mastodon.js
index 55265be..97b5bcc 100644
--- a/qml/lib/Mastodon.js
+++ b/qml/lib/Mastodon.js
@@ -10,10 +10,12 @@ var mastodonAPI = function(config) {
// modify initial config afterwards
config[key] = value;
},
+
getConfig: function(key) {
//get config key
return config[key];
},
+
get: function (endpoint) {
// for GET API calls
// can be called with two or three parameters
@@ -67,6 +69,7 @@ var mastodonAPI = function(config) {
}
http.send();
},
+
post: function (endpoint) {
// for POST API calls
var postData, callback;
@@ -113,6 +116,7 @@ var mastodonAPI = function(config) {
}
});*/
},
+
delete: function (endpoint, callback) {
// for DELETE API calls.
$.ajax({
@@ -125,6 +129,7 @@ var mastodonAPI = function(config) {
}
});
},
+
stream: function (streamType, onData) {
// Event Stream Support
// websocket streaming is undocumented. i had to reverse engineer the fucking web client.
@@ -132,7 +137,7 @@ var mastodonAPI = function(config) {
// user for your local home TL and notifications
// public for your federated TL
// public:local for your home TL
- // hashtag&tag=fuckdonaldtrump for the stream of #fuckdonaldtrump
+ // hashtag&tag=mastodonrocks for the stream of #mastodonrocks
// callback gets called whenever new data ist recieved
// callback { event: (eventtype), payload: {mastodon object as described in the api docs} }
// eventtype could be notification (=notification) or update (= new toot in TL)
@@ -147,12 +152,10 @@ var mastodonAPI = function(config) {
onData(event);
};
es.onmessage = listener;
-
-
},
+
registerApplication: function (client_name, redirect_uri, scopes, website, callback) {
//register a new application
-
// OAuth Auth flow:
// First register the application
// 2) get a access code from a user (using the link, generation function below!)
@@ -191,10 +194,12 @@ var mastodonAPI = function(config) {
}
http.send(params);
},
+
generateAuthLink: function (client_id, redirect_uri, responseType, scopes) {
return config.instance + "/oauth/authorize?client_id=" + client_id + "&redirect_uri=" + redirect_uri +
"&response_type=" + responseType + "&scope=" + scopes.join("+");
},
+
getAccessTokenFromAuthCode: function (client_id, client_secret, redirect_uri, code, callback) {
/*$.ajax({
url: config.instance + "/oauth/token",
diff --git a/qml/lib/Worker.js b/qml/lib/Worker.js
index 268c024..6e8bb69 100644
--- a/qml/lib/Worker.js
+++ b/qml/lib/Worker.js
@@ -10,7 +10,7 @@ WorkerScript.onMessage = function(msg) {
console.log("Conf > " + JSON.stringify(msg.conf))
console.log("Params > " + JSON.stringify(msg.params))
- // order notifications in ASC order
+ /** order notifications in ASC order */
function orderNotifications(items){
for (var i = items.length-1; i > 0; i--) {
if (items[i].id > 0 ) //msg.conf.notificationLastID)
@@ -18,14 +18,17 @@ WorkerScript.onMessage = function(msg) {
}
}
+ /** Logged-in status */
if (!msg.conf || !msg.conf.login) {
console.log("Not loggedin")
return;
}
+ /** Load images */
if (typeof msg.conf['loadImages'] !== "undefined")
loadImages = msg.conf['loadImages']
+ /** POST statuses */
var API = mastodonAPI({ instance: msg.conf.instance, api_user_token: msg.conf.api_user_token});
if (msg.method === "POST"){
API.post(msg.action, msg.params, function(data) {
@@ -63,7 +66,7 @@ WorkerScript.onMessage = function(msg) {
} else if(msg.action === "notifications") {
// notification
- // console.log("Is notification... parsing...")
+ console.log("Get notification list")
console.log(JSON.stringify(data[i]))
item = parseNotification(data[i]);
items.push(item)
@@ -73,7 +76,9 @@ WorkerScript.onMessage = function(msg) {
console.log("ancestors")
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)
console.log(JSON.stringify(data[i][j]))
}
@@ -82,7 +87,7 @@ WorkerScript.onMessage = function(msg) {
//console.log(JSON.stringify(i))
} else if(msg.action.indexOf("statuses") >-1 && msg.action.indexOf("context") >-1 && i === "descendants") {
- // status ancestors toots - conversation
+ // status descendants toots - conversation
console.log("descendants")
for (var j = 0; j < data[i].length; j ++) {
item = parseToot(data[i][j]);
@@ -94,16 +99,19 @@ WorkerScript.onMessage = function(msg) {
}
addDataToModel (msg.model, "append", items);
items = [];
+
} else if (data[i].hasOwnProperty("content")){
- // console.log("Is toot... parsing...")
+ //console.log("Get Toot")
item = parseToot(data[i]);
item['id'] = item['status_id']
items.push(item)
+
} else {
WorkerScript.sendMessage({ 'action': msg.action, 'success': true, key: i, "data": data[i] })
}
}
}
+
if(msg.model && items.length)
addDataToModel(msg.model, msg.mode, items)
/*if(msg.action === "notifications")
@@ -123,11 +131,10 @@ function addDataToModel (model, mode, items) {
model.insert(0,items[i])
}
}
-
model.sync()
}
-// Get Account Data: Represents a user of Mastodon and their associated profile.
+/** Function: Get Account Data */
function parseAccounts(collection, prefix, data) {
var res = collection;
@@ -159,7 +166,7 @@ function parseAccounts(collection, prefix, data) {
return (res);
}
-// Get Notification Data
+/** Function: Get Notification Data */
function parseNotification(data){
//console.log(JSON.stringify(data))
var item = {
@@ -168,12 +175,12 @@ function parseNotification(data){
attachments: []
};
switch (item['type']){
+
case "mention":
if (!data.status) {
break;
}
item = parseToot(data.status)
- item['typeIcon'] = "image://theme/icon-s-retweet"
item['typeIcon'] = "image://theme/icon-s-alarm"
item['type'] = "mention"
break;
@@ -197,19 +204,18 @@ function parseNotification(data){
item = parseToot(data.status)
item = parseAccounts(item, "reblog_", data["account"])
item = parseAccounts(item, "", data["status"]["account"])
- item['status_reblog'] = true;
+ item['status_reblog'] = true
+ item['type'] = "favourite"
item['typeIcon'] = "image://theme/icon-s-favorite"
- item['type'] = "favourite";
- //item['retweetScreenName'] = item['reblog_account_username'];
break;
case "follow":
item['type'] = "follow";
item = parseAccounts(item, "", data["account"])
item = parseAccounts(item, "reblog_", data["account"])
- item['content'] = data['account']['note']
+ //item['content'] = data['account']['note']
item['typeIcon'] = "../../images/icon-s-follow.svg"
- item['attachments'] = []
+ //item['attachments'] = []
break;
default:
@@ -222,6 +228,7 @@ function parseNotification(data){
return item;
}
+/** Function: ?? */
function collect() {
var ret = {};
var len = arguments.length;
@@ -235,12 +242,13 @@ function collect() {
return ret;
}
+/** Function: Get Status date */
function getDate(dateStr) {
var ts = new Date(dateStr);
return new Date(ts.getFullYear(), ts.getMonth(), ts.getDate(), 0, 0, 0)
}
-// Get Status / Toot Data
+/** Function: Get Status data */
function parseToot (data) {
var i = 0;
var item = {};
@@ -264,12 +272,14 @@ function parseToot (data) {
item['status_bookmarked'] = data["bookmarked"]
item['status_content'] = data["content"]
+ item['attachments'] = data['media_attachments']
+
item['status_in_reply_to_id'] = data["in_reply_to_id"]
item['status_in_reply_to_account_id'] = data["in_reply_to_account_id"]
item['status_reblog'] = data["reblog"] ? true : false
item['section'] = getDate(data["created_at"])
- // If Toot is a Reblog
+ /** If Toot is a Reblog */
if(item['status_reblog']) {
item['type'] = "reblog";
item['typeIcon'] = "image://theme/icon-s-retweet"
@@ -281,14 +291,16 @@ function parseToot (data) {
} else {
item = parseAccounts(item, "", data["account"])
}
+
+ /** Replace HTML content */
item['content'] = data['content']
.replaceAll('', '')
.replaceAll('', '')
.replaceAll('', '')
.replaceAll('class=""', '');
- item['attachments'] = [];
- // Media attachements in Toots
+ /** Media attachements in Toots */
+ item['attachments'] = [];
for(i = 0; i < data['media_attachments'].length ; i++) {
var attachments = data['media_attachments'][i];
item['content'] = item['content'].replaceAll(attachments['text_url'], '')
@@ -301,7 +313,7 @@ function parseToot (data) {
item['attachments'].push(tmp)
}
- // Media attachements in Reblogs
+ /** Media attachements in Reblogs */
if(item['status_reblog']) {
for(i = 0; i < data['reblog']['media_attachments'].length ; i++) {
var attachments = data['reblog']['media_attachments'][i];
@@ -319,7 +331,7 @@ function parseToot (data) {
return addEmojis(item, data);
}
-// Display function for custom Emojis in Toots
+/** Function: Display custom Emojis in Toots */
function addEmojis(item, data) {
var emoji, i;
for (i = 0; i < data["emojis"].length; i++) {
diff --git a/qml/pages/ConversationPage.qml b/qml/pages/ConversationPage.qml
index 199e7ca..d65fa49 100644
--- a/qml/pages/ConversationPage.qml
+++ b/qml/pages/ConversationPage.qml
@@ -9,13 +9,13 @@ Page {
id: conversationPage
property string type
- property string description: ""
+ property string username: ""
property string headerTitle: ""
property string suggestedUser: ""
property ListModel suggestedModel
- property string toot_id: ""
- property string toot_url: ""
- property string toot_uri: ""
+ property string status_id: ""
+ property string status_url: ""
+ property string status_uri: ""
property int tootMaxChar: 500;
property bool bot: false //otherwise ReferenceError ProfileHeader.qml
property bool followed_by: false //otherwise ReferenceError ProfileHeader.qml
@@ -63,11 +63,6 @@ Page {
}
}
- ProfileHeader {
- id: header
- visible: false
- }
-
SilicaListView {
id: myList
header: PageHeader {
@@ -95,7 +90,7 @@ Page {
onCountChanged: {
if (mdl)
for (var i = 0; i < mdl.count; i++) {
- if (mdl.get(i).status_id === toot_id) {
+ if (mdl.get(i).status_id === status_id) {
console.log(mdl.get(i).status_id)
positionViewAtIndex(i, ListView.Center)
}
@@ -109,17 +104,17 @@ Page {
MenuItem {
//: Use the translation of "Copy Link" for a shorter PullDownMenu label
text: qsTr("Copy Link to Clipboard")
- onClicked: if (toot_url === "") {
- var test = toot_uri.split("/")
- console.log(toot_uri)
+ onClicked: if (status_url === "") {
+ var test = status_uri.split("/")
+ console.log(status_uri)
console.log(JSON.stringify(test))
console.log(JSON.stringify(test.length))
if (test.length === 8 && (test[7] === "activity")) {
- var urialt = toot_uri.replace("activity", "")
+ var urialt = status_uri.replace("activity", "")
Clipboard.text = urialt
}
- else Clipboard.text = toot_uri
- } else Clipboard.text = toot_url
+ else Clipboard.text = status_uri
+ } else Clipboard.text = status_url
}
MenuItem {
@@ -247,9 +242,9 @@ Page {
id: toot
autoScrollEnabled: true
labelVisible: false
- text: description !== "" && (description.charAt(0) === '@'
- || description.charAt(
- 0) === '#') ? description + ' ' : ''
+ text: username !== "" && (username.charAt(0) === '@'
+ || username.charAt(
+ 0) === '#') ? username + ' ' : ''
height: if (type !== "reply") {
Math.max(conversationPage.height / 3, Math.min(conversationPage.height * 0.65, implicitHeight))
}
@@ -320,6 +315,9 @@ Page {
height: uploadedImages.cellHeight
RemorseItem {
id: remorse
+ cancelText: ""
+
+
}
Image {
@@ -331,7 +329,7 @@ Page {
var idx = index
console.log(idx)
//mediaModel.remove(idx)
- remorse.execute(myDelegate, qsTr("Delete"), function () {
+ remorse.execute(myDelegate, "", function () {
mediaModel.remove(idx)
})
}
@@ -377,14 +375,14 @@ Page {
IconButton {
id: btnAddImage
enabled: mediaModel.count < 4
+ icon.source: "image://theme/icon-s-attach?"
+ + (pressed ? Theme.highlightColor : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
anchors {
top: toot.bottom
topMargin: -Theme.paddingSmall * 1.5
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
@@ -447,13 +445,13 @@ Page {
id: btnSend
icon.source: "image://theme/icon-m-send?"
+ (pressed ? Theme.highlightColor : Theme.primaryColor)
+ enabled: toot.text !== "" && toot.text.length < tootMaxChar && uploadProgress.width == 0
anchors {
top: toot.bottom
topMargin: -Theme.paddingSmall * 1.5
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 = []
@@ -473,8 +471,8 @@ Page {
},
"conf": Logic.conf
}
- if (toot_id)
- msg.params['in_reply_to_id'] = (toot_id) + ""
+ if (status_id)
+ msg.params['in_reply_to_id'] = (status_id) + ""
if (warningContent.visible && warningContent.text.length > 0) {
msg.params['sensitive'] = 1
@@ -492,9 +490,9 @@ Page {
Rectangle {
id: uploadProgress
color: Theme.highlightBackgroundColor
+ height: Theme.itemSizeSmall * 0.05
anchors.bottom: parent.bottom
anchors.left: parent.left
- height: Theme.itemSizeSmall * 0.05
}
}
diff --git a/qml/pages/components/ItemUser.qml b/qml/pages/components/ItemUser.qml
index edd79fa..4220a76 100644
--- a/qml/pages/components/ItemUser.qml
+++ b/qml/pages/components/ItemUser.qml
@@ -10,9 +10,8 @@ BackgroundItem {
width: parent.width
height: Theme.itemSizeMedium
- Rectangle {
+ Item {
id: avatar
- color: "transparent"
width: Theme.itemSizeExtraSmall
height: width
anchors.verticalCenter: parent.verticalCenter
@@ -50,7 +49,8 @@ BackgroundItem {
"following_count": model.account_following_count,
"statuses_count": model.account_statuses_count,
"locked": model.account_locked,
- "bot": model.account_bot
+ "bot": model.account_bot,
+ "group": model.account_group
})
}
}
diff --git a/qml/pages/components/MyImage.qml b/qml/pages/components/MyImage.qml
index 9b60c4d..2b07d73 100644
--- a/qml/pages/components/MyImage.qml
+++ b/qml/pages/components/MyImage.qml
@@ -11,12 +11,14 @@ Item {
property string mediaURL: ""
Rectangle {
- opacity: 0.2
+ opacity: 0.4
color: Theme.highlightDimmerColor
anchors.fill: parent
}
Image {
+ opacity: status !== Image.Ready ? 1.0 : 0.0
+ Behavior on opacity { FadeAnimator {} }
source: "image://theme/icon-m-image"
anchors.centerIn: parent
}
@@ -75,7 +77,7 @@ Item {
Rectangle {
id: mediaWarning
color: Theme.highlightDimmerColor
- visible: typeof status_sensitive != 'undefined' && status_sensitive ? true : false
+ visible: typeof status_sensitive != "undefined" && status_sensitive ? true : false
anchors.fill: parent
Image {
diff --git a/qml/pages/components/MyList.qml b/qml/pages/components/MyList.qml
index ec732a4..e31c2b6 100644
--- a/qml/pages/components/MyList.qml
+++ b/qml/pages/components/MyList.qml
@@ -29,7 +29,6 @@ SilicaListView {
onNotify: {
console.log(what + " - " + num)
}
-
signal openDrawer (bool setDrawer)
onOpenDrawer: {
//console.log("Open drawer: " + setDrawer)
@@ -39,7 +38,6 @@ SilicaListView {
console.log("LIST send signal emitted with notice: " + notice)
}
-
header: PageHeader {
title: myList.title
description: myList.description
@@ -77,7 +75,7 @@ SilicaListView {
}
MenuItem {
- text: qsTr("Load more")
+ text: qsTr("Reload")
onClicked: {
loadData("prepend")
}
@@ -101,7 +99,7 @@ SilicaListView {
console.log("CountChanged!")*/
}
- footer: Item{
+ footer: Item {
visible: autoLoadMore
width: parent.width
height: Theme.itemSizeLarge
@@ -181,6 +179,7 @@ SilicaListView {
'mode' : mode,
'conf' : Logic.conf
};
+
console.log(JSON.stringify(msg))
if (type !== "")
worker.sendMessage(msg)
diff --git a/qml/pages/components/VisualContainer.qml b/qml/pages/components/VisualContainer.qml
index f1362d0..3765689 100644
--- a/qml/pages/components/VisualContainer.qml
+++ b/qml/pages/components/VisualContainer.qml
@@ -43,7 +43,6 @@ BackgroundItem {
// Account avatar
Image {
id: avatar
- visible: true
opacity: status === Image.Ready ? 1.0 : 0.0
Behavior on opacity { FadeAnimator {} }
asynchronous: true
@@ -254,7 +253,6 @@ BackgroundItem {
anchors.fill: parent
onClicked: parent.visible = false
}
-
}
}
@@ -300,7 +298,7 @@ BackgroundItem {
Icon {
id: icRT
source: "image://theme/icon-s-retweet?" + (!model.status_reblogged ? Theme.highlightColor : Theme.primaryColor)
- width: Theme.iconSizeExtraSmall
+ width: Theme.iconSizeSmall
height: width
anchors {
leftMargin: Theme.horizontalPageMargin
@@ -310,8 +308,8 @@ BackgroundItem {
}
Label {
- text: status_reblogs_count // from API.js
- font.pixelSize: Theme.fontSizeExtraSmall
+ text: status_reblogs_count
+ font.pixelSize: Theme.fontSizeSmall
color: !model.status_reblogged ? Theme.highlightColor : Theme.primaryColor
anchors {
left: icRT.right
@@ -341,7 +339,7 @@ BackgroundItem {
Icon {
id: icFA
source: "image://theme/icon-s-favorite?" + (!model.status_favourited ? Theme.highlightColor : Theme.primaryColor)
- width: Theme.iconSizeExtraSmall
+ width: Theme.iconSizeSmall
height: width
anchors {
leftMargin: Theme.horizontalPageMargin
@@ -352,7 +350,7 @@ BackgroundItem {
Label {
text: status_favourites_count
- font.pixelSize: Theme.fontSizeExtraSmall
+ font.pixelSize: Theme.fontSizeSmall
color: !model.status_favourited ? Theme.highlightColor : Theme.primaryColor
anchors {
left: icFA.right
@@ -382,7 +380,7 @@ BackgroundItem {
id: icBM
source: "../../images/icon-s-bookmark.svg?"
color: !model.status_bookmarked ? Theme.highlightColor : Theme.primaryColor
- width: Theme.iconSizeExtraSmall
+ width: Theme.iconSizeSmall
height: width
anchors {
left: parent.left
@@ -408,7 +406,7 @@ BackgroundItem {
Icon {
id: icMT
source: "image://theme/icon-s-chat?" + (!model.status_favourited ? Theme.highlightColor : Theme.primaryColor)
- width: Theme.iconSizeExtraSmall
+ width: Theme.iconSizeSmall
height: width
anchors {
left: parent.left
@@ -419,21 +417,39 @@ BackgroundItem {
}
}
- // Open ConversationPage and show other Toots in thread (if available)
+ // Open ConversationPage and show other Toots in thread (if available) or ProfilePage if new Follower
onClicked: {
var m = Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject');
if (typeof mdl !== "undefined")
m.append(mdl.get(index))
- pageStack.push(Qt.resolvedUrl("../ConversationPage.qml"), {
- headerTitle: qsTr("Conversation"),
- "toot_id": status_id,
- "toot_url": status_url,
- "toot_uri": status_uri,
- "description": '@'+account_acct,
- mdl: m,
- type: "reply"
- })
+
+ if (model.type !== "follow") {
+ pageStack.push(Qt.resolvedUrl("../ConversationPage.qml"), {
+ headerTitle: qsTr("Conversation"),
+ "status_id": status_id,
+ "status_url": status_url,
+ "status_uri": status_uri,
+ "username": '@'+account_acct,
+ mdl: m,
+ type: "reply"
+ })
+ } else pageStack.push(Qt.resolvedUrl("../ProfilePage.qml"), {
+ "display_name": model.account_display_name,
+ "username": model.account_acct,
+ "user_id": model.account_id,
+ "profileImage": model.account_avatar,
+ "profileBackground": model.account_header,
+ "note": model.account_note,
+ "url": model.account_url,
+ "followers_count": model.account_followers_count,
+ "following_count": model.account_following_count,
+ "statuses_count": model.account_statuses_count,
+ "locked": model.account_locked,
+ "bot": model.account_bot,
+ "group": model.account_group
+ } )
}
+
onPressAndHold: {
console.log(JSON.stringify(mdl.get(index)))
mnu.open(delegate)
diff --git a/translations/harbour-tooter-de.ts b/translations/harbour-tooter-de.ts
index b82d09c..e97e5eb 100644
--- a/translations/harbour-tooter-de.ts
+++ b/translations/harbour-tooter-de.ts
@@ -35,10 +35,6 @@
Was gibt's Neues?
-
-
- Löschen
-
Öffentlich
@@ -172,10 +168,6 @@
MyList
-
-
- Lade mehr
-
Einstellungen
@@ -192,6 +184,10 @@
Neuer Toot
+
+
+ Neu laden
+
ProfileHeader
diff --git a/translations/harbour-tooter-el.ts b/translations/harbour-tooter-el.ts
index 8dd7c56..173f116 100644
--- a/translations/harbour-tooter-el.ts
+++ b/translations/harbour-tooter-el.ts
@@ -35,10 +35,6 @@
-
-
- Διαγραφή
-
@@ -114,7 +110,7 @@
-
+ Επαναφόρτωση
@@ -172,10 +168,6 @@
MyList
-
-
- Φόρτωση περισσοτέρων
-
Ρυθμίσεις
@@ -192,6 +184,10 @@
Νέος
+
+
+ Επαναφόρτωση
+
ProfileHeader
diff --git a/translations/harbour-tooter-es.ts b/translations/harbour-tooter-es.ts
index ce1675f..085fb00 100644
--- a/translations/harbour-tooter-es.ts
+++ b/translations/harbour-tooter-es.ts
@@ -35,10 +35,6 @@
¿En qué estás pensando?
-
-
- Borrar
-
Público
@@ -172,10 +168,6 @@
MyList
-
-
- Cargar más
-
Ajustes
@@ -192,6 +184,10 @@
Nuevo toot
+
+
+ Volver a cargar
+
ProfileHeader
diff --git a/translations/harbour-tooter-fr.ts b/translations/harbour-tooter-fr.ts
index e302031..5dfc7d3 100644
--- a/translations/harbour-tooter-fr.ts
+++ b/translations/harbour-tooter-fr.ts
@@ -35,10 +35,6 @@
Qu'avez-vous en tête?
-
-
- Supprimer
-
Public
@@ -172,10 +168,6 @@
MyList
-
-
- Charger plus
-
Paramètres
@@ -192,6 +184,10 @@
Nouveau pouet
+
+
+ Recharger
+
ProfileHeader
diff --git a/translations/harbour-tooter-it.ts b/translations/harbour-tooter-it.ts
index 76ed877..b18fcc5 100644
--- a/translations/harbour-tooter-it.ts
+++ b/translations/harbour-tooter-it.ts
@@ -35,10 +35,6 @@
A cosa stai pensando?
-
-
- Elimina
-
Pubblico
@@ -172,10 +168,6 @@
MyList
-
-
- Caricare altri
-
Impostazioni
@@ -192,6 +184,10 @@
Nuovo Toot
+
+
+ Ricarica
+
ProfileHeader
diff --git a/translations/harbour-tooter-nl.ts b/translations/harbour-tooter-nl.ts
index 45da362..654c222 100644
--- a/translations/harbour-tooter-nl.ts
+++ b/translations/harbour-tooter-nl.ts
@@ -35,10 +35,6 @@
Wat wil je kwijt?
-
-
- Verwijderen
-
Openbaar
@@ -172,10 +168,6 @@
MyList
-
-
- Meer laden
-
Instellingen
@@ -192,6 +184,10 @@
Nieuwe Toot
+
+
+ Herladen
+
ProfileHeader
diff --git a/translations/harbour-tooter-nl_BE.ts b/translations/harbour-tooter-nl_BE.ts
index c88c27f..f54b406 100644
--- a/translations/harbour-tooter-nl_BE.ts
+++ b/translations/harbour-tooter-nl_BE.ts
@@ -35,10 +35,6 @@
-
-
- Verwijderen
-
@@ -172,10 +168,6 @@
MyList
-
-
- Meer laden
-
Instellingen
@@ -192,6 +184,10 @@
Nieuwen toot
+
+
+ Herladen
+
ProfileHeader
diff --git a/translations/harbour-tooter-oc.ts b/translations/harbour-tooter-oc.ts
index 26a7f08..ffd232c 100644
--- a/translations/harbour-tooter-oc.ts
+++ b/translations/harbour-tooter-oc.ts
@@ -35,10 +35,6 @@
-
-
- Escafar
-
@@ -172,10 +168,6 @@
MyList
-
-
- Cargar mai
-
Parmètres
@@ -192,6 +184,10 @@
Nòu Tut
+
+
+
+
ProfileHeader
diff --git a/translations/harbour-tooter-pl.ts b/translations/harbour-tooter-pl.ts
index f8f3ef9..5a98dea 100644
--- a/translations/harbour-tooter-pl.ts
+++ b/translations/harbour-tooter-pl.ts
@@ -35,10 +35,6 @@
-
-
- Usuń
-
@@ -114,7 +110,7 @@
-
+ Załaduj ponownie
@@ -172,10 +168,6 @@
MyList
-
-
- Załaduj więcej
-
Ustawienia
@@ -192,6 +184,10 @@
Nowy wpis
+
+
+ Załaduj ponownie
+
ProfileHeader
diff --git a/translations/harbour-tooter-ru.ts b/translations/harbour-tooter-ru.ts
index 571b499..f8a5da6 100644
--- a/translations/harbour-tooter-ru.ts
+++ b/translations/harbour-tooter-ru.ts
@@ -25,48 +25,44 @@
Use the translation of "Copy Link" for a shorter PullDownMenu label
-
+ Копировать ссылку
-
+ Текст предупреждения
-
-
-
-
- Удалить
+ О чём думаете?
-
+ Публичный
-
+ Скрытый
-
+ Приватный
-
+ Адресованный
-
+ Поста отправлено!
"Reply" will show the Toot text entry Panel. "Hide Reply" closes it. Alternative: Use "Close Reply"
-
+ Ответ
-
+ Скрыть ответ
@@ -98,7 +94,7 @@
LoginPage
-
+ Авторизоваться
@@ -114,7 +110,7 @@
-
+ Перезарядка
@@ -152,7 +148,7 @@
MediaFullScreen
-
+ Ошибка загрузки
@@ -172,10 +168,6 @@
MyList
-
-
- Загрузи больше
-
Настройки
@@ -192,20 +184,24 @@
Новый
+
+
+ Перезагрузить
+
ProfileHeader
-
+ бот
-
+ Подписан(а) на вас
-
+ Группа
@@ -213,7 +209,7 @@
If there's no good translation for "About", use "Details" (in details about profile).
-
+ О профиль
@@ -238,7 +234,7 @@
Is a button. Keep it as short as possible.
-
+ Запрошенный
@@ -267,11 +263,11 @@
-
+ Открыть в браузере
-
+ Упоминание
@@ -282,7 +278,7 @@
-
+ Параметры
@@ -379,19 +375,19 @@
-
+ Упоминание
-
+ беседа
-
+ Убрать из закладок
-
+ Добавить в закладки
diff --git a/translations/harbour-tooter-sr.ts b/translations/harbour-tooter-sr.ts
index a8b3f4d..b631d8e 100644
--- a/translations/harbour-tooter-sr.ts
+++ b/translations/harbour-tooter-sr.ts
@@ -35,10 +35,6 @@
-
-
- Обриши
-
@@ -114,7 +110,7 @@
-
+ учитај још
@@ -172,10 +168,6 @@
MyList
-
-
- учитај још
-
Подешавања
@@ -192,6 +184,10 @@
Novi toot
+
+
+ учитај још
+
ProfileHeader
diff --git a/translations/harbour-tooter-sv.ts b/translations/harbour-tooter-sv.ts
index fab63f4..94b995c 100644
--- a/translations/harbour-tooter-sv.ts
+++ b/translations/harbour-tooter-sv.ts
@@ -35,10 +35,6 @@
-
-
- Radera
-
@@ -114,7 +110,7 @@
-
+ Ladda mer
@@ -172,10 +168,6 @@
MyList
-
-
- Ladda mer
-
Inställningar
@@ -192,6 +184,10 @@
Ny toot
+
+
+ Ladda mer
+
ProfileHeader
diff --git a/translations/harbour-tooter-zh_CN.ts b/translations/harbour-tooter-zh_CN.ts
index d41f95b..438c6d3 100644
--- a/translations/harbour-tooter-zh_CN.ts
+++ b/translations/harbour-tooter-zh_CN.ts
@@ -35,10 +35,6 @@
有何想法?
-
-
- 删除
-
公共区域
@@ -62,11 +58,11 @@
"Reply" will show the Toot text entry Panel. "Hide Reply" closes it. Alternative: Use "Close Reply"
-
+ 回复
-
+ 隐藏回复
@@ -172,10 +168,6 @@
MyList
-
-
- 加载更多
-
设置
@@ -192,20 +184,24 @@
新嘟嘟
+
+
+ 重新加载
+
ProfileHeader
-
+ 机器人
-
+ 关注你
-
+ 群组
@@ -213,7 +209,7 @@
If there's no good translation for "About", use "Details" (in details about profile).
-
+ 关于
@@ -238,7 +234,7 @@
Is a button. Keep it as short as possible.
-
+ 请求
@@ -271,7 +267,7 @@
-
+ 提及
@@ -282,7 +278,7 @@
-
+ 选项
@@ -314,7 +310,7 @@
-
+ 翻译
@@ -352,11 +348,11 @@
Full sentence for translation: "Use Transifex to help with app translation to your language." - The word Transifex is a link and doesn't need translation.
-
+ 使用
-
+ 以帮助翻译软件为你使用的语言.
@@ -379,19 +375,19 @@
-
+ 提及
-
+ 对话
-
+ 移除收藏
-
+ 收藏
diff --git a/translations/harbour-tooter.ts b/translations/harbour-tooter.ts
index 7940e30..6305016 100644
--- a/translations/harbour-tooter.ts
+++ b/translations/harbour-tooter.ts
@@ -35,10 +35,6 @@
What's on your mind?
-
-
- Delete
-
Public
@@ -172,10 +168,6 @@
MyList
-
-
- Load more
-
Settings
@@ -192,6 +184,10 @@
New Toot
+
+
+ Reload
+
ProfileHeader