diff --git a/harbour-tooterb.pro b/harbour-tooterb.pro index adf1b3e..0a7baa2 100644 --- a/harbour-tooterb.pro +++ b/harbour-tooterb.pro @@ -9,8 +9,8 @@ # - icon definition filename in desktop file must be changed # - translation filenames have to be changed -# The name of your application -TARGET = harbour-tooterb +# The name of your application +TARGET = harbour-tooterb CONFIG += sailfishapp @@ -23,7 +23,7 @@ PKGCONFIG += \ DEFINES += "APPVERSION=\\\"$${SPECVERSION}\\\"" DEFINES += "APPNAME=\\\"$${TARGET}\\\"" -!exists( src/dbusAdaptor.h ) { +!exists( src/dbusAdaptor.h ) { system(qdbusxml2cpp config/ba.dysko.harbour.tooterb.xml -i dbus.h -a src/dbusAdaptor) } @@ -37,10 +37,9 @@ dbus_services.path = /usr/share/dbus-1/services/ dbus_services.files = config/ba.dysko.harbour.tooterb.service interfaces.path = /usr/share/dbus-1/interfaces/ -interfaces.files = config/ba.dysko.harbour.tooterb.xml +interfaces.files = config/ba.dysko.harbourb.tooter.xml -SOURCES += \ - src/harbour-tooterb.cpp +SOURCES += src/harbour-tooterb.cpp SOURCES += src/imageuploader.cpp SOURCES += src/filedownloader.cpp SOURCES += src/notifications.cpp @@ -52,10 +51,9 @@ HEADERS += src/filedownloader.h HEADERS += src/notifications.h HEADERS += src/dbusAdaptor.h HEADERS += src/dbus.h - + DISTFILES += qml/harbour-tooterb.qml \ - config/icon-lock-harbour-tooterb.png \ - qml/images/tooterb.svg \ + qml/pages/components/InfoBanner.qml \ qml/pages/components/VisualContainer.qml \ qml/pages/components/MiniStatus.qml \ qml/pages/components/MiniHeader.qml \ @@ -77,19 +75,21 @@ DISTFILES += qml/harbour-tooterb.qml \ qml/lib/API.js \ qml/images/notification.svg \ qml/images/verified.svg \ - qml/images/boosted.svg \ + qml/images/boosted.svg \ + qml/images/tooter.svg \ qml/images/emojiselect.svg \ qml/images/icon-m-profile.svg \ qml/images/icon-l-profile.svg \ qml/lib/Mastodon.js \ - qml/lib/Worker.js \ + qml/lib/Worker.js \ + config/icon-lock-harbour-tooterb.png \ config/x-harbour.tooterb.activity.conf \ rpm/harbour-tooterb.changes \ rpm/harbour-tooterb.changes.run.in \ rpm/harbour-tooterb.spec \ rpm/harbour-tooterb.yaml \ translations/*.ts \ - harbour-tooterb.desktop + harbour-tooter.desktop SAILFISHAPP_ICONS = 86x86 108x108 128x128 172x172 @@ -100,7 +100,7 @@ CONFIG += sailfishapp_i18n # German translation is enabled as an example. If you aren't # planning to localize your app, remember to comment out the # following TRANSLATIONS line. And also do not forget to -# modify the localized app name in the the .desktop file. +# modify the localized app name in the the .desktop file. TRANSLATIONS += translations/harbour-tooterb-de.ts TRANSLATIONS += translations/harbour-tooterb-el.ts TRANSLATIONS += translations/harbour-tooterb-es.ts 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 c530e50..14ecbb5 100644 --- a/qml/pages/Conversation.qml +++ b/qml/pages/Conversation.qml @@ -4,16 +4,18 @@ import harbour.tooterb.Uploader 1.0 import "../lib/API.js" as Logic import "./components/" + Page { id: conversationPage - property string type + property string headerTitle: "" + 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 string uri: "" + property string toot_id: "" + property string toot_url: "" property int tootMaxChar: 500; property ListModel mdl allowedOrientations: Orientation.All @@ -41,6 +43,10 @@ Page { } } + InfoBanner { + id: sentBanner + } + ListModel { id: mediaModel onCountChanged: { @@ -63,7 +69,7 @@ Page { SilicaListView { id: conversationList header: PageHeader { - title: qsTr("Conversation") + title: headerTitle // pageTitle pushed from MainPage.qml or VisualContainer.qml } clip: true anchors { @@ -92,13 +98,15 @@ Page { } } PullDownMenu { - MenuItem { + visible: type == "reply" && toot_url != "" + /* MenuItem { text: qsTr("Open in Browser") - onClicked: Qt.openUrlExternally(uri); - } + onClicked: Qt.openUrlExternally(toot_url); + } */ + // ! url isn't always fetched. Needs a solution. MenuItem { - text: qsTr("Copy URL to Clipboard") - onClicked: Clipboard.text = uri; + text: qsTr("Copy Link to Clipboard") + onClicked: Clipboard.text = toot_url; } } } @@ -115,7 +123,6 @@ Page { anchors.fill: parent model: suggestedModel clip: true - delegate: ItemUser { onClicked: { var start = toot.cursorPosition @@ -219,7 +226,6 @@ Page { || description.charAt( 0) == '#') ? description + ' ' : '' height: Math.max(270, Math.min(900, implicitHeight)) - //height: implicitHeight horizontalAlignment: Text.AlignLeft placeholderText: qsTr("What's on your mind?") font.pixelSize: Theme.fontSizeSmall @@ -315,7 +321,6 @@ Page { } } IconButton { - id: btnContentWarning anchors { top: toot.bottom @@ -437,11 +442,11 @@ Page { msg.params['spoiler_text'] = warningContent.text } - worker.sendMessage(msg) - warningContent.text = "" - toot.text = "" - mediaModel.clear() - pageStack.pop() + worker.sendMessage(msg) + warningContent.text = "" + toot.text = "" + 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 e676870..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 }) } } @@ -246,7 +248,7 @@ Page { visible: !isPortrait ? true : !infoPanel.open icon.source: "image://theme/icon-l-add" onClicked: { - pageStack.push(Qt.resolvedUrl("Conversation.qml"), {title: qsTr("New Toot"), type: "new"}) + pageStack.push(Qt.resolvedUrl("Conversation.qml"), {headerTitle: qsTr("New Toot"), type: "new"}) } } diff --git a/qml/pages/Profile.qml b/qml/pages/Profile.qml index 02bbf4b..3bd6832 100644 --- a/qml/pages/Profile.qml +++ b/qml/pages/Profile.qml @@ -17,7 +17,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: ""; property bool locked : false; @@ -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/", @@ -141,6 +142,7 @@ Page { title: display_name description: username image: profileImage + bg: profileBackground } anchors { @@ -157,7 +159,6 @@ Page { conf: Logic.conf } - ExpandingSectionGroup { id: expander //currentIndex: 0 @@ -271,10 +272,10 @@ Page { 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') + + // function still missing for user accounts + // } else if (test.length === 4 && test[3][0] === "@" ) { + } else { Qt.openUrlExternally(link); } 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 new file mode 100644 index 0000000..a9a0148 --- /dev/null +++ b/qml/pages/components/InfoBanner.qml @@ -0,0 +1,61 @@ +import QtQuick 2.0 +import Sailfish.Silica 1.0 + + +DockedPanel { + id: root + z: 100 + width: parent.width + height: content.height + dock: Dock.Top + + Rectangle { + id: content + width: root.width + height: infoLabel.height + 5*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*2 + right: parent.right + rightMargin: Theme.horizontalPageMargin + 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 2183842..46e499a 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 46dbc2a..8ae8b1b 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 @@ -138,13 +137,21 @@ 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(" Conversation - - Conversation - Konversation - Delete Löschen @@ -63,19 +59,19 @@ Was gibt's Neues? - Open in Browser - Im Browser öffnen + Toot sent! + Toot gesendet! - Copy URL to Clipboard - Link in Zwischenablage kopieren + Copy Link to Clipboard + Link kopieren ImageFullScreen Error loading - Fehler beim Laden + Ladefehler diff --git a/translations/harbour-tooterb-el.ts b/translations/harbour-tooterb-el.ts index 32602ff..104a1fd 100644 --- a/translations/harbour-tooterb-el.ts +++ b/translations/harbour-tooterb-el.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - Συνομιλία - Delete Διαγραφή @@ -63,11 +59,11 @@ - Open in Browser + Toot sent! - Copy URL to Clipboard + Copy Link to Clipboard @@ -75,7 +71,7 @@ ImageFullScreen Error loading - Σφάλμα φόρτωσης + diff --git a/translations/harbour-tooterb-es.ts b/translations/harbour-tooterb-es.ts index 237c1cd..195b8f5 100644 --- a/translations/harbour-tooterb-es.ts +++ b/translations/harbour-tooterb-es.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - Conversación - Delete Borrar @@ -63,19 +59,19 @@ ¿En qué estás pensando? - Open in Browser - Abrir en el navegador + Toot sent! + - Copy URL to Clipboard - Copiar enlace + Copy Link to Clipboard + ImageFullScreen Error loading - Error al cargar + diff --git a/translations/harbour-tooterb-fi.ts b/translations/harbour-tooterb-fi.ts index 9a0dedd..50a5f73 100644 --- a/translations/harbour-tooterb-fi.ts +++ b/translations/harbour-tooterb-fi.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - - Delete @@ -63,11 +59,11 @@ - Open in Browser + Toot sent! - Copy URL to Clipboard + Copy Link to Clipboard diff --git a/translations/harbour-tooterb-fr.ts b/translations/harbour-tooterb-fr.ts index a8e9d4a..baafe35 100644 --- a/translations/harbour-tooterb-fr.ts +++ b/translations/harbour-tooterb-fr.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - Conversation - Delete Supprimer @@ -63,11 +59,11 @@ Qu'avez-vous en tête? - Open in Browser - Ouvrir dans le navigateur + Toot sent! + Pouet envoyé ! - Copy URL to Clipboard + Copy Link to Clipboard Copier le lien @@ -75,7 +71,7 @@ ImageFullScreen Error loading - Erreur de chargement + diff --git a/translations/harbour-tooterb-it.ts b/translations/harbour-tooterb-it.ts index f80e651..b8739d0 100644 --- a/translations/harbour-tooterb-it.ts +++ b/translations/harbour-tooterb-it.ts @@ -28,62 +28,57 @@ Conversation - - Conversation - Conversazione - - - - Open in Browser - Aprire nel browser - - - - Copy URL to Clipboard + + 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 @@ -91,9 +86,9 @@ ImageFullScreen - + Error loading - Errore caricamento + Errore durante caricamento @@ -107,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 @@ -135,37 +130,37 @@ MainPage - + Home Home - + Notifications Notifiche - + Local Locale - + Federated Federazione - + Search Cerca - + @user or #term @utente o #termine - + New Toot Nuovo toot @@ -279,7 +274,7 @@ Biografia - + Open Profile in Browser Aprire profile nel browser @@ -398,22 +393,22 @@ VisualContainer - + Unboost Annulla condivisione - + Boost Condividi - + Unfavorite Annulla apprezzamento - + Favorite Apprezzato diff --git a/translations/harbour-tooterb-nl.ts b/translations/harbour-tooterb-nl.ts index eb9aa5a..9c3e4b0 100644 --- a/translations/harbour-tooterb-nl.ts +++ b/translations/harbour-tooterb-nl.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - Gesprek - Delete Verwijderen @@ -63,11 +59,11 @@ - Open in Browser + Toot sent! - Copy URL to Clipboard + Copy Link to Clipboard @@ -75,7 +71,7 @@ ImageFullScreen Error loading - Fout bij laden + diff --git a/translations/harbour-tooterb-nl_BE.ts b/translations/harbour-tooterb-nl_BE.ts index 73037f8..25d9369 100644 --- a/translations/harbour-tooterb-nl_BE.ts +++ b/translations/harbour-tooterb-nl_BE.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - Gesprek - Delete Verwijderen @@ -63,11 +59,11 @@ - Open in Browser + Toot sent! - Copy URL to Clipboard + Copy Link to Clipboard @@ -75,7 +71,7 @@ ImageFullScreen Error loading - Fout bij laden + diff --git a/translations/harbour-tooterb-oc.ts b/translations/harbour-tooterb-oc.ts index 125efa0..3319228 100644 --- a/translations/harbour-tooterb-oc.ts +++ b/translations/harbour-tooterb-oc.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - Discutida - Delete Escafar @@ -63,11 +59,11 @@ - Open in Browser + Toot sent! - Copy URL to Clipboard + Copy Link to Clipboard @@ -75,7 +71,7 @@ ImageFullScreen Error loading - Error en cargar + diff --git a/translations/harbour-tooterb-pl.ts b/translations/harbour-tooterb-pl.ts index b202e27..4d7fe81 100644 --- a/translations/harbour-tooterb-pl.ts +++ b/translations/harbour-tooterb-pl.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - Konwersacja - Delete Usuń @@ -63,11 +59,11 @@ - Open in Browser + Toot sent! - Copy URL to Clipboard + Copy Link to Clipboard @@ -75,7 +71,7 @@ ImageFullScreen Error loading - Błąd ładowania + diff --git a/translations/harbour-tooterb-ru.ts b/translations/harbour-tooterb-ru.ts index 8594169..d47095f 100644 --- a/translations/harbour-tooterb-ru.ts +++ b/translations/harbour-tooterb-ru.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - Беседа - Delete Удалить @@ -63,11 +59,11 @@ - Open in Browser + Toot sent! - Copy URL to Clipboard + Copy Link to Clipboard @@ -75,7 +71,7 @@ ImageFullScreen Error loading - Ошибка при загрузке + diff --git a/translations/harbour-tooterb-sr.ts b/translations/harbour-tooterb-sr.ts index 1729d96..52a0d2c 100644 --- a/translations/harbour-tooterb-sr.ts +++ b/translations/harbour-tooterb-sr.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - Разговор - Delete Обриши @@ -63,11 +59,11 @@ - Open in Browser + Toot sent! - Copy URL to Clipboard + Copy Link to Clipboard @@ -75,7 +71,7 @@ ImageFullScreen Error loading - Greška u učitavanju + diff --git a/translations/harbour-tooterb-sv.ts b/translations/harbour-tooterb-sv.ts index cc7ea04..5cd3f54 100644 --- a/translations/harbour-tooterb-sv.ts +++ b/translations/harbour-tooterb-sv.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - Konversation - Delete Radera @@ -63,11 +59,11 @@ - Open in Browser + Toot sent! - Copy URL to Clipboard + Copy Link to Clipboard @@ -75,7 +71,7 @@ ImageFullScreen Error loading - Problem att ladda + diff --git a/translations/harbour-tooterb-zh_CN.ts b/translations/harbour-tooterb-zh_CN.ts index b21c4e3..b92289e 100644 --- a/translations/harbour-tooterb-zh_CN.ts +++ b/translations/harbour-tooterb-zh_CN.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - 对话 - Delete 删除 @@ -63,11 +59,11 @@ 有何想法? - Open in Browser - 在浏览器打开 + Toot sent! + - Copy URL to Clipboard + Copy Link to Clipboard 复制链接到剪切板 @@ -75,7 +71,7 @@ ImageFullScreen Error loading - 加载错误 + diff --git a/translations/harbour-tooterb.ts b/translations/harbour-tooterb.ts index c7f0ef2..0bf8406 100644 --- a/translations/harbour-tooterb.ts +++ b/translations/harbour-tooterb.ts @@ -22,10 +22,6 @@ Conversation - - Conversation - Conversation - Delete Delete @@ -63,11 +59,11 @@ - Open in Browser + Toot sent! - Copy URL to Clipboard + Copy Link to Clipboard @@ -75,7 +71,7 @@ ImageFullScreen Error loading - +