From 41041a77aa35a92f0df906078c70b3660b1166f3 Mon Sep 17 00:00:00 2001 From: molan-git Date: Mon, 25 May 2020 17:54:02 +0200 Subject: [PATCH] ui-improvements New image/video viewer Send-message Profile background images --- qml/lib/Worker.js | 6 +- qml/pages/Conversation.qml | 16 ++++- qml/pages/LoginPage.qml | 10 +-- qml/pages/MainPage.qml | 4 +- qml/pages/Profile.qml | 13 ++-- qml/pages/components/ImageFullScreen.qml | 52 +++++++++------- qml/pages/components/InfoBanner.qml | 11 ++-- qml/pages/components/InfoBanner.qml.autosave | 61 ------------------ qml/pages/components/MediaBlock.qml | 2 - qml/pages/components/MiniHeader.qml | 1 - qml/pages/components/Navigation.qml | 2 - qml/pages/components/ProfileHeader.qml | 19 +++--- qml/pages/components/VisualContainer.qml | 26 ++++---- translations/harbour-tooter-de.ts | 8 ++- translations/harbour-tooter-el.ts | 6 +- translations/harbour-tooter-es.ts | 6 +- translations/harbour-tooter-fi.ts | 4 ++ translations/harbour-tooter-fr.ts | 8 ++- translations/harbour-tooter-it.ts | 65 +++++++++++--------- translations/harbour-tooter-nl.ts | 6 +- translations/harbour-tooter-nl_BE.ts | 6 +- translations/harbour-tooter-oc.ts | 6 +- translations/harbour-tooter-pl.ts | 6 +- translations/harbour-tooter-ru.ts | 6 +- translations/harbour-tooter-sr.ts | 6 +- translations/harbour-tooter-sv.ts | 6 +- translations/harbour-tooter-zh_CN.ts | 6 +- translations/harbour-tooter.ts | 6 +- 28 files changed, 197 insertions(+), 177 deletions(-) delete mode 100644 qml/pages/components/InfoBanner.qml.autosave diff --git a/qml/lib/Worker.js b/qml/lib/Worker.js index 15c13fd..8b53e8c 100644 --- a/qml/lib/Worker.js +++ b/qml/lib/Worker.js @@ -132,11 +132,13 @@ function parseAccounts(collection, prefix, data){ res[prefix + 'account_username'] = data["username"] res[prefix + 'account_acct'] = data["acct"] res[prefix + 'account_display_name'] = data["display_name"] + res[prefix + 'account_discoverable'] = data["discoverable"] res[prefix + 'account_locked'] = data["locked"] res[prefix + 'account_created_at'] = data["created_at"] res[prefix + 'account_avatar'] = data["avatar"] + res[prefix + 'account_header'] = data["header"] - // /console.log(JSON.stringify(res)) + // console.log(JSON.stringify(res)) return (res); } @@ -226,6 +228,7 @@ function parseToot (data){ item['highlight'] = false item['status_id'] = data["id"] item['status_uri'] = data["uri"] + item['status_url'] = data["url"] 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 @@ -236,6 +239,7 @@ function parseToot (data){ item['favourites_count'] = data["favourites_count"] item['reblogged'] = data["reblogged"] item['favourited'] = data["favourited"] + item['bookmarked'] = data["bookmarked"] item['status_sensitive'] = data["sensitive"] item['status_spoiler_text'] = data["spoiler_text"] item['status_visibility'] = data["visibility"] diff --git a/qml/pages/Conversation.qml b/qml/pages/Conversation.qml index 2aac1ad..0fb4c91 100644 --- a/qml/pages/Conversation.qml +++ b/qml/pages/Conversation.qml @@ -15,6 +15,7 @@ Page { property string suggestedUser: "" property ListModel suggestedModel property string toot_id: "" + property string toot_url: "" property int tootMaxChar: 500; property ListModel mdl allowedOrientations: Orientation.All @@ -96,6 +97,18 @@ Page { } } } + PullDownMenu { + visible: type == "reply" && toot_url != "" + /* MenuItem { + text: qsTr("Open in Browser") + onClicked: Qt.openUrlExternally(toot_url); + } */ + // ! url isn't always fetched. Needs a solution. + MenuItem { + text: qsTr("Copy Link to Clipboard") + onClicked: Clipboard.text = toot_url; + } + } } Rectangle { id: predictionList @@ -110,7 +123,6 @@ Page { anchors.fill: parent model: suggestedModel clip: true - delegate: ItemUser { onClicked: { var start = toot.cursorPosition @@ -433,7 +445,7 @@ Page { worker.sendMessage(msg) warningContent.text = "" toot.text = "" - mediaModel.clear() + mediaModel.clear(); sentBanner.showText(qsTr("Toot sent!")) } } diff --git a/qml/pages/LoginPage.qml b/qml/pages/LoginPage.qml index c3874fb..b1d2064 100644 --- a/qml/pages/LoginPage.qml +++ b/qml/pages/LoginPage.qml @@ -34,15 +34,11 @@ import Sailfish.Silica 1.0 import "../lib/API.js" as Logic - Page { id: loginPage - // The effective value will be restricted by ApplicationWindow.allowedOrientations allowedOrientations: Orientation.All - - SilicaFlickable { anchors.fill: parent contentHeight: column.height + Theme.paddingLarge @@ -52,8 +48,9 @@ Page { Column { id: column width: parent.width - - PageHeader { title: qsTr("Login") } + PageHeader { + title: qsTr("Login") + } SectionHeader { text: qsTr("Instance") @@ -83,7 +80,6 @@ Page { conf.instance = instance.text; conf.login = false; - /*conf['login'] = false; conf['mastodon_client_id'] = data['mastodon_client_id']; conf['mastodon_client_secret'] = data['mastodon_client_secret']; diff --git a/qml/pages/MainPage.qml b/qml/pages/MainPage.qml index 463b305..e273c23 100644 --- a/qml/pages/MainPage.qml +++ b/qml/pages/MainPage.qml @@ -57,6 +57,7 @@ Page { } } } + VisualItemModel { id: visualModel MyList{ @@ -188,7 +189,8 @@ Page { "display_name": model.account_display_name, "username": model.account_acct, "user_id": model.account_id, - "profileImage": model.account_avatar + "profileImage": model.account_avatar, + "profileBackground": model.account_header }) } } diff --git a/qml/pages/Profile.qml b/qml/pages/Profile.qml index 6d56f44..3f39db7 100644 --- a/qml/pages/Profile.qml +++ b/qml/pages/Profile.qml @@ -16,7 +16,7 @@ Page { property int favourites_count; property int reblogs_count; property int count_moments; - property string profile_background: ""; + property string profileBackground: ""; property string note: ""; property string url: ""; @@ -42,6 +42,7 @@ Page { username = messageObject.data.acct display_name = messageObject.data.display_name profileImage = messageObject.data.avatar_static + profileBackground = messageObject.data.header_static var msg = { 'action' : "accounts/relationships/", @@ -135,7 +136,6 @@ Page { } - MyList { id: list header: ProfileHeader { @@ -143,6 +143,7 @@ Page { title: display_name description: username image: profileImage + bg: profileBackground } anchors { @@ -159,7 +160,6 @@ Page { conf: Logic.conf } - ExpandingSectionGroup { id: expander //currentIndex: 0 @@ -275,10 +275,8 @@ Page { })); 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') + // function still missing for user accounts + // } else if (test.length === 4 && test[3][0] === "@" ) { } else { Qt.openUrlExternally(link); @@ -290,7 +288,6 @@ Page { spacing: Theme.paddingMedium anchors.horizontalCenter: parent.horizontalCenter Button { - id: btnUrl text: qsTr("Open Profile in Browser") onClicked: { Qt.openUrlExternally(url); diff --git a/qml/pages/components/ImageFullScreen.qml b/qml/pages/components/ImageFullScreen.qml index dba23a8..5384804 100644 --- a/qml/pages/components/ImageFullScreen.qml +++ b/qml/pages/components/ImageFullScreen.qml @@ -2,7 +2,7 @@ import QtQuick 2.0 import Sailfish.Silica 1.0 import QtMultimedia 5.0 -Page { +FullscreenContentPage { id: imagePage property string type: "" property string previewURL: "" @@ -22,6 +22,26 @@ Page { videoFlickable.visible = true; } } + + Item { + id: overlay + z: 100 + property bool active: true + enabled: active + anchors.fill: parent + opacity: active ? 1.0 : 0.0 + Behavior on opacity { FadeAnimator {}} + IconButton { + y: Theme.paddingLarge + anchors { + right: parent.right + rightMargin: Theme.horizontalPageMargin + } + icon.source: "image://theme/icon-m-dismiss" + onClicked: pageStack.pop() + } + } + Flickable { id: videoFlickable visible: false @@ -49,7 +69,6 @@ Page { case MediaPlayer.EndOfMedia: console.log("EndOfMedia") return; - } } @@ -68,7 +87,6 @@ Page { } } - onPositionChanged: function(){ //console.log(duration) //console.log(bufferProgress) @@ -81,15 +99,17 @@ Page { } } + onStopped: function(){ play() } + IconButton { id: playerIcon anchors.left: parent.left anchors.bottom: parent.bottom anchors.leftMargin: Theme.paddingLarge - anchors.bottomMargin: Theme.paddingMedium + anchors.bottomMargin: Theme.paddingLarge*1.5 icon.source: "image://theme/icon-m-play" onClicked: function() { if (video.playbackState === MediaPlayer.PlayingState) @@ -104,10 +124,9 @@ Page { id: playerProgress anchors.left: playerIcon.right anchors.right: videoDlBtn.left - anchors.verticalCenter: playerIcon.verticalCenter anchors.leftMargin: 0 - anchors.bottomMargin: Theme.paddingMedium + anchors.bottomMargin: Theme.paddingLarge*1.5 } IconButton { id: videoDlBtn @@ -115,9 +134,9 @@ Page { anchors.right: parent.right anchors.bottom: parent.bottom anchors.rightMargin: Theme.paddingLarge - anchors.bottomMargin: Theme.paddingMedium - //width: Theme.iconSizeMedium+Theme.paddingMedium*2 - icon.source: "image://theme/icon-m-cloud-download" + anchors.bottomMargin: Theme.paddingLarge*1.5 + icon.source: "image://theme/icon-m-device-download" + icon.opacity: 0.0 onClicked: { var filename = mediaURL.split("/"); FileDownloader.downloadFile(mediaURL, filename[filename.length-1]); @@ -135,7 +154,7 @@ Page { anchors.centerIn: parent id: videoError width: parent.width - 2*Theme.paddingMedium - wrapMode: Text.WordWrap + wrapMode: Text.Wrap height: contentHeight visible: false; font.pixelSize: Theme.fontSizeSmall; @@ -165,7 +184,6 @@ Page { clip: true onHeightChanged: if (imagePreview.status === Image.Ready) imagePreview.fitToScreen(); - Item { id: imageContainer width: Math.max(imagePreview.width * imagePreview.scale, imageFlickable.width) @@ -173,22 +191,18 @@ Page { Image { id: imagePreview - property real prevScale - function fitToScreen() { scale = Math.min(imageFlickable.width / width, imageFlickable.height / height, 1) pinchArea.minScale = scale prevScale = scale } - anchors.centerIn: parent fillMode: Image.PreserveAspectFit cache: true asynchronous: true sourceSize.height: 1000; smooth: false - onStatusChanged: { if (status == Image.Ready) { fitToScreen() @@ -224,7 +238,6 @@ Page { opacity: 0.3 property real minScale: 1.0 property real maxScale: 3.0 - anchors.fill: parent enabled: imagePreview.status === Image.Ready pinch.target: imagePreview @@ -267,11 +280,9 @@ Page { Component { id: loadingIndicator - Item { height: childrenRect.height width: imagePage.width - ProgressCircle { id: imageLoadingIndicator anchors.horizontalCenter: parent.horizontalCenter @@ -293,9 +304,8 @@ Page { anchors.right: parent.right anchors.bottom: parent.bottom anchors.rightMargin: Theme.paddingLarge - anchors.bottomMargin: Theme.paddingMedium - //width: Theme.iconSizeMedium+Theme.paddingMedium*2 - icon.source: "image://theme/icon-m-cloud-download" + anchors.bottomMargin: Theme.paddingLarge*1.5 + icon.source: "image://theme/icon-m-device-download" onClicked: { var filename = mediaURL.split("/"); FileDownloader.downloadFile(mediaURL, filename[filename.length-1]); diff --git a/qml/pages/components/InfoBanner.qml b/qml/pages/components/InfoBanner.qml index 3696c59..a9a0148 100644 --- a/qml/pages/components/InfoBanner.qml +++ b/qml/pages/components/InfoBanner.qml @@ -4,16 +4,15 @@ import Sailfish.Silica 1.0 DockedPanel { id: root - z: 100; - width: parent.width //- Theme.paddingLarge*4 - //x: Theme.paddingLarge*2 + z: 100 + width: parent.width height: content.height - dock: Dock.Bottom + dock: Dock.Top Rectangle { id: content width: root.width - height: infoLabel.height + 4*Theme.paddingMedium + height: infoLabel.height + 5*Theme.paddingMedium //anchors.topMargin: 20 color: Theme.highlightBackgroundColor opacity: 1.0 @@ -29,7 +28,7 @@ DockedPanel { wrapMode: Text.WrapAnywhere anchors { left: parent.left - leftMargin: Theme.horizontalPageMargin + leftMargin: Theme.horizontalPageMargin*2 right: parent.right rightMargin: Theme.horizontalPageMargin verticalCenter: parent.verticalCenter diff --git a/qml/pages/components/InfoBanner.qml.autosave b/qml/pages/components/InfoBanner.qml.autosave deleted file mode 100644 index 7921d05..0000000 --- a/qml/pages/components/InfoBanner.qml.autosave +++ /dev/null @@ -1,61 +0,0 @@ -import QtQuick 2.0 -import Sailfish.Silica 1.0 - - -DockedPanel { - id: root - z: 100; - width: parent.width - height: content.height - dock: Dock.Bottom - - Rectangle { - id: content - width: root.width - height: infoLabel.height + 4*Theme.paddingMedium - //anchors.topMargin: 20 - color: Theme.highlightBackgroundColor - opacity: 1.0 - - Label { - id: infoLabel - text : "" - color: Theme.primaryColor - font.family: Theme.fontFamilyHeading - font.pixelSize: Theme.fontSizeMedium - //font.weight: Font.Bold - width: parent.width - wrapMode: Text.WrapAnywhere - anchors { - left: parent.left - leftMargin: Theme.horizontalPageMargin - right: parent.right - rightMargin: Theme.ho rizontalPageMargin - verticalCenter: parent.verticalCenter - } - } - MouseArea { - anchors.fill: parent - onClicked: { - root.hide() - autoClose.stop() - } - } - } - - function showText(text) { - infoLabel.text = text - root.show() - autoClose.start() - } - - Timer { - id: autoClose - interval: 6000 - running: false - onTriggered: { - root.hide() - stop() - } - } -} diff --git a/qml/pages/components/MediaBlock.qml b/qml/pages/components/MediaBlock.qml index e31af8d..069f954 100644 --- a/qml/pages/components/MediaBlock.qml +++ b/qml/pages/components/MediaBlock.qml @@ -74,8 +74,6 @@ Item { } } - - MyImage { id: placeholder1 width: 2 diff --git a/qml/pages/components/MiniHeader.qml b/qml/pages/components/MiniHeader.qml index 6a9f6f9..06c420a 100644 --- a/qml/pages/components/MiniHeader.qml +++ b/qml/pages/components/MiniHeader.qml @@ -41,7 +41,6 @@ Item { : Theme.primaryColor) } - Label { id: lblScreenName anchors { diff --git a/qml/pages/components/Navigation.qml b/qml/pages/components/Navigation.qml index 30e5e81..b054e76 100644 --- a/qml/pages/components/Navigation.qml +++ b/qml/pages/components/Navigation.qml @@ -169,7 +169,5 @@ SilicaGridView { } - - VerticalScrollDecorator {} } diff --git a/qml/pages/components/ProfileHeader.qml b/qml/pages/components/ProfileHeader.qml index c1b53ae..f2a4ddf 100644 --- a/qml/pages/components/ProfileHeader.qml +++ b/qml/pages/components/ProfileHeader.qml @@ -10,21 +10,22 @@ Item { property string bg: ""; width: parent.width height: icon.height + Theme.paddingLarge*2 - /*Image { - anchors.fill: parent - asynchronous: true - fillMode: Image.PreserveAspectCrop - source: bg - opacity: 0.3 - }*/ + Rectangle { + id: bgImage anchors.fill: parent opacity: 0.2 gradient: Gradient { GradientStop { position: 0.0; color: Theme.highlightBackgroundColor } - GradientStop { position: 1.0; color: Theme.highlightBackgroundColor } + GradientStop { position: 1.0; color: Theme.highlightBackgroundColor } + } + Image { + anchors.fill: bgImage + asynchronous: true + fillMode: Image.PreserveAspectCrop + source: bg + opacity: 0.8 } - } Image { id: icon diff --git a/qml/pages/components/VisualContainer.qml b/qml/pages/components/VisualContainer.qml index d3a06e2..d05f36a 100644 --- a/qml/pages/components/VisualContainer.qml +++ b/qml/pages/components/VisualContainer.qml @@ -3,7 +3,6 @@ import Sailfish.Silica 1.0 import "../../lib/API.js" as Logic BackgroundItem { - id: delegate signal send (string notice) signal navigateTo(string link) @@ -28,6 +27,7 @@ BackgroundItem { topMargin: Theme.paddingMedium } } + Image { id: avatar anchors { @@ -50,7 +50,6 @@ BackgroundItem { ? Theme.highlightColor : Theme.primaryColor) } - MouseArea { anchors.fill: parent onClicked: { @@ -58,12 +57,12 @@ BackgroundItem { "display_name": model.account_display_name, "username": model.account_acct, "user_id": model.account_id, - "profileImage": model.account_avatar + "profileImage": model.account_avatar, + "profileBackground": model.account_header }) } } - Image { id: iconTR anchors { @@ -75,7 +74,7 @@ BackgroundItem { width: Theme.iconSizeExtraSmall height: width source: "image://theme/icon-s-retweet" - } + } Rectangle { color: Theme.highlightDimmerColor width: Theme.iconSizeSmall @@ -137,14 +136,19 @@ BackgroundItem { tlSearch.search = decodeURIComponent("@"+test[3].substring(1)+"@"+test[2]) slideshow.positionViewAtIndex(4, ListView.SnapToItem) navigation.navigateTo('search') - + // Original component + /* pageStack.push(Qt.resolvedUrl("../Profile.qml"), { + "name": "", + "username": test[3].substring(1)+"@"+test[2], + "profileImage": "" + }) */ } else { Qt.openUrlExternally(link); } } text: content.replace(new RegExp(" Toot sent! - + Toot gesendet! + + + Copy Link to Clipboard + Link kopieren ImageFullScreen Error loading - Fehler beim Laden + Ladefehler diff --git a/translations/harbour-tooter-el.ts b/translations/harbour-tooter-el.ts index c926c14..df485eb 100644 --- a/translations/harbour-tooter-el.ts +++ b/translations/harbour-tooter-el.ts @@ -62,12 +62,16 @@ Toot sent! + + Copy Link to Clipboard + + ImageFullScreen Error loading - Σφάλμα φόρτωσης + diff --git a/translations/harbour-tooter-es.ts b/translations/harbour-tooter-es.ts index c52d603..195b8f5 100644 --- a/translations/harbour-tooter-es.ts +++ b/translations/harbour-tooter-es.ts @@ -62,12 +62,16 @@ Toot sent! + + Copy Link to Clipboard + + ImageFullScreen Error loading - Error al cargar + diff --git a/translations/harbour-tooter-fi.ts b/translations/harbour-tooter-fi.ts index a1ec939..50a5f73 100644 --- a/translations/harbour-tooter-fi.ts +++ b/translations/harbour-tooter-fi.ts @@ -62,6 +62,10 @@ Toot sent! + + Copy Link to Clipboard + + ImageFullScreen diff --git a/translations/harbour-tooter-fr.ts b/translations/harbour-tooter-fr.ts index b3835ab..baafe35 100644 --- a/translations/harbour-tooter-fr.ts +++ b/translations/harbour-tooter-fr.ts @@ -60,14 +60,18 @@ Toot sent! - + Pouet envoyé ! + + + Copy Link to Clipboard + Copier le lien ImageFullScreen Error loading - Erreur de chargement + diff --git a/translations/harbour-tooter-it.ts b/translations/harbour-tooter-it.ts index e62798d..5b5be12 100644 --- a/translations/harbour-tooter-it.ts +++ b/translations/harbour-tooter-it.ts @@ -28,52 +28,57 @@ Conversation - + + Copy Link to Clipboard + Copia link + + + Write your warning here Contenuto avviso - + What's on your mind? A cosa stai pensando? - + Delete Elimina - + Public Pubblico - + Unlisted Non elencato - + Followers-only Solo ai seguaci - + Direct Diretto - + Toot sent! - + Toot è stato pubblicato! - + Emojis Emojis - + Tap to insert Tap per inserire @@ -81,9 +86,9 @@ ImageFullScreen - + Error loading - Errore caricamento + Errore durante caricamento @@ -97,27 +102,27 @@ LoginPage - + Login Accesso - + Instance Istanza - + Enter a valid Mastodon instance URL Inserire URL di una istanza Mastodon valida - + Mastodon is a free, open-source social network. A decentralized alternative to commercial platforms, it avoids the risks of a single company monopolizing your communication. Pick a server that you trust — whichever you choose, you can interact with everyone else. Anyone can run their own Mastodon instance and participate in the social network seamlessly. Mastodon è un servizio di rete sociale in software libero, costituito in una federazione d'istanze. Mastodon fa parte del più ampio Fediverso, permettendo ai suoi utenti di interagire anche con utenti su diverse piattaforme aperte che supportano lo stesso protocollo. - + Reload Ricarica @@ -125,37 +130,37 @@ MainPage - + Home Home - + Notifications Notifiche - + Local Locale - + Federated Federazione - + Search Cerca - + @user or #term @utente o #termine - + New Toot Nuovo toot @@ -269,7 +274,7 @@ Biografia - + Open Profile in Browser Aprire profile nel browser @@ -388,22 +393,22 @@ VisualContainer - + Unboost Annulla condivisione - + Boost Condividi - + Unfavorite Annulla apprezzamento - + Favorite Apprezzato diff --git a/translations/harbour-tooter-nl.ts b/translations/harbour-tooter-nl.ts index 768c5a8..9c3e4b0 100644 --- a/translations/harbour-tooter-nl.ts +++ b/translations/harbour-tooter-nl.ts @@ -62,12 +62,16 @@ Toot sent! + + Copy Link to Clipboard + + ImageFullScreen Error loading - Fout bij laden + diff --git a/translations/harbour-tooter-nl_BE.ts b/translations/harbour-tooter-nl_BE.ts index 035f8b9..25d9369 100644 --- a/translations/harbour-tooter-nl_BE.ts +++ b/translations/harbour-tooter-nl_BE.ts @@ -62,12 +62,16 @@ Toot sent! + + Copy Link to Clipboard + + ImageFullScreen Error loading - Fout bij laden + diff --git a/translations/harbour-tooter-oc.ts b/translations/harbour-tooter-oc.ts index cf6f401..3319228 100644 --- a/translations/harbour-tooter-oc.ts +++ b/translations/harbour-tooter-oc.ts @@ -62,12 +62,16 @@ Toot sent! + + Copy Link to Clipboard + + ImageFullScreen Error loading - Error en cargar + diff --git a/translations/harbour-tooter-pl.ts b/translations/harbour-tooter-pl.ts index 7e97caa..4d7fe81 100644 --- a/translations/harbour-tooter-pl.ts +++ b/translations/harbour-tooter-pl.ts @@ -62,12 +62,16 @@ Toot sent! + + Copy Link to Clipboard + + ImageFullScreen Error loading - Błąd ładowania + diff --git a/translations/harbour-tooter-ru.ts b/translations/harbour-tooter-ru.ts index 724ec09..d47095f 100644 --- a/translations/harbour-tooter-ru.ts +++ b/translations/harbour-tooter-ru.ts @@ -62,12 +62,16 @@ Toot sent! + + Copy Link to Clipboard + + ImageFullScreen Error loading - Ошибка при загрузке + diff --git a/translations/harbour-tooter-sr.ts b/translations/harbour-tooter-sr.ts index 6080c74..52a0d2c 100644 --- a/translations/harbour-tooter-sr.ts +++ b/translations/harbour-tooter-sr.ts @@ -62,12 +62,16 @@ Toot sent! + + Copy Link to Clipboard + + ImageFullScreen Error loading - Greška u učitavanju + diff --git a/translations/harbour-tooter-sv.ts b/translations/harbour-tooter-sv.ts index 3e411bf..5cd3f54 100644 --- a/translations/harbour-tooter-sv.ts +++ b/translations/harbour-tooter-sv.ts @@ -62,12 +62,16 @@ Toot sent! + + Copy Link to Clipboard + + ImageFullScreen Error loading - Problem att ladda + diff --git a/translations/harbour-tooter-zh_CN.ts b/translations/harbour-tooter-zh_CN.ts index fa8b314..b92289e 100644 --- a/translations/harbour-tooter-zh_CN.ts +++ b/translations/harbour-tooter-zh_CN.ts @@ -62,12 +62,16 @@ Toot sent! + + Copy Link to Clipboard + 复制链接到剪切板 + ImageFullScreen Error loading - 加载错误 + diff --git a/translations/harbour-tooter.ts b/translations/harbour-tooter.ts index bf8ce75..0bf8406 100644 --- a/translations/harbour-tooter.ts +++ b/translations/harbour-tooter.ts @@ -62,12 +62,16 @@ Toot sent! + + Copy Link to Clipboard + + ImageFullScreen Error loading - +