ui-improvements

New image/video viewer
Send-message
Profile background images
This commit is contained in:
molan-git 2020-05-25 17:54:02 +02:00
parent c8ad3f02cc
commit 41041a77aa
28 changed files with 197 additions and 177 deletions

View file

@ -132,11 +132,13 @@ function parseAccounts(collection, prefix, data){
res[prefix + 'account_username'] = data["username"] res[prefix + 'account_username'] = data["username"]
res[prefix + 'account_acct'] = data["acct"] res[prefix + 'account_acct'] = data["acct"]
res[prefix + 'account_display_name'] = data["display_name"] res[prefix + 'account_display_name'] = data["display_name"]
res[prefix + 'account_discoverable'] = data["discoverable"]
res[prefix + 'account_locked'] = data["locked"] res[prefix + 'account_locked'] = data["locked"]
res[prefix + 'account_created_at'] = data["created_at"] res[prefix + 'account_created_at'] = data["created_at"]
res[prefix + 'account_avatar'] = data["avatar"] res[prefix + 'account_avatar'] = data["avatar"]
res[prefix + 'account_header'] = data["header"]
// /console.log(JSON.stringify(res)) // console.log(JSON.stringify(res))
return (res); return (res);
} }
@ -226,6 +228,7 @@ function parseToot (data){
item['highlight'] = false item['highlight'] = false
item['status_id'] = data["id"] item['status_id'] = data["id"]
item['status_uri'] = data["uri"] 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_id'] = data["in_reply_to_id"]
item['status_in_reply_to_account_id'] = data["in_reply_to_account_id"] item['status_in_reply_to_account_id'] = data["in_reply_to_account_id"]
item['status_reblog'] = data["reblog"] ? true : false item['status_reblog'] = data["reblog"] ? true : false
@ -236,6 +239,7 @@ function parseToot (data){
item['favourites_count'] = data["favourites_count"] item['favourites_count'] = data["favourites_count"]
item['reblogged'] = data["reblogged"] item['reblogged'] = data["reblogged"]
item['favourited'] = data["favourited"] item['favourited'] = data["favourited"]
item['bookmarked'] = data["bookmarked"]
item['status_sensitive'] = data["sensitive"] item['status_sensitive'] = data["sensitive"]
item['status_spoiler_text'] = data["spoiler_text"] item['status_spoiler_text'] = data["spoiler_text"]
item['status_visibility'] = data["visibility"] item['status_visibility'] = data["visibility"]

View file

@ -15,6 +15,7 @@ Page {
property string suggestedUser: "" property string suggestedUser: ""
property ListModel suggestedModel property ListModel suggestedModel
property string toot_id: "" property string toot_id: ""
property string toot_url: ""
property int tootMaxChar: 500; property int tootMaxChar: 500;
property ListModel mdl property ListModel mdl
allowedOrientations: Orientation.All 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 { Rectangle {
id: predictionList id: predictionList
@ -110,7 +123,6 @@ Page {
anchors.fill: parent anchors.fill: parent
model: suggestedModel model: suggestedModel
clip: true clip: true
delegate: ItemUser { delegate: ItemUser {
onClicked: { onClicked: {
var start = toot.cursorPosition var start = toot.cursorPosition
@ -433,7 +445,7 @@ Page {
worker.sendMessage(msg) worker.sendMessage(msg)
warningContent.text = "" warningContent.text = ""
toot.text = "" toot.text = ""
mediaModel.clear() mediaModel.clear();
sentBanner.showText(qsTr("Toot sent!")) sentBanner.showText(qsTr("Toot sent!"))
} }
} }

View file

@ -34,15 +34,11 @@ import Sailfish.Silica 1.0
import "../lib/API.js" as Logic import "../lib/API.js" as Logic
Page { Page {
id: loginPage id: loginPage
// The effective value will be restricted by ApplicationWindow.allowedOrientations // The effective value will be restricted by ApplicationWindow.allowedOrientations
allowedOrientations: Orientation.All allowedOrientations: Orientation.All
SilicaFlickable { SilicaFlickable {
anchors.fill: parent anchors.fill: parent
contentHeight: column.height + Theme.paddingLarge contentHeight: column.height + Theme.paddingLarge
@ -52,8 +48,9 @@ Page {
Column { Column {
id: column id: column
width: parent.width width: parent.width
PageHeader {
PageHeader { title: qsTr("Login") } title: qsTr("Login")
}
SectionHeader { SectionHeader {
text: qsTr("Instance") text: qsTr("Instance")
@ -83,7 +80,6 @@ Page {
conf.instance = instance.text; conf.instance = instance.text;
conf.login = false; conf.login = false;
/*conf['login'] = false; /*conf['login'] = false;
conf['mastodon_client_id'] = data['mastodon_client_id']; conf['mastodon_client_id'] = data['mastodon_client_id'];
conf['mastodon_client_secret'] = data['mastodon_client_secret']; conf['mastodon_client_secret'] = data['mastodon_client_secret'];

View file

@ -57,6 +57,7 @@ Page {
} }
} }
} }
VisualItemModel { VisualItemModel {
id: visualModel id: visualModel
MyList{ MyList{
@ -188,7 +189,8 @@ Page {
"display_name": model.account_display_name, "display_name": model.account_display_name,
"username": model.account_acct, "username": model.account_acct,
"user_id": model.account_id, "user_id": model.account_id,
"profileImage": model.account_avatar "profileImage": model.account_avatar,
"profileBackground": model.account_header
}) })
} }
} }

View file

@ -16,7 +16,7 @@ Page {
property int favourites_count; property int favourites_count;
property int reblogs_count; property int reblogs_count;
property int count_moments; property int count_moments;
property string profile_background: ""; property string profileBackground: "";
property string note: ""; property string note: "";
property string url: ""; property string url: "";
@ -42,6 +42,7 @@ Page {
username = messageObject.data.acct username = messageObject.data.acct
display_name = messageObject.data.display_name display_name = messageObject.data.display_name
profileImage = messageObject.data.avatar_static profileImage = messageObject.data.avatar_static
profileBackground = messageObject.data.header_static
var msg = { var msg = {
'action' : "accounts/relationships/", 'action' : "accounts/relationships/",
@ -135,7 +136,6 @@ Page {
} }
MyList { MyList {
id: list id: list
header: ProfileHeader { header: ProfileHeader {
@ -143,6 +143,7 @@ Page {
title: display_name title: display_name
description: username description: username
image: profileImage image: profileImage
bg: profileBackground
} }
anchors { anchors {
@ -159,7 +160,6 @@ Page {
conf: Logic.conf conf: Logic.conf
} }
ExpandingSectionGroup { ExpandingSectionGroup {
id: expander id: expander
//currentIndex: 0 //currentIndex: 0
@ -275,10 +275,8 @@ Page {
})); }));
send(link) send(link)
} else if (test.length === 4 && test[3][0] === "@" ) { // function still missing for user accounts
tlSearch.search = decodeURIComponent("@"+test[3].substring(1)+"@"+test[2]) // } else if (test.length === 4 && test[3][0] === "@" ) {
slideshow.positionViewAtIndex(4, ListView.SnapToItem)
navigation.navigateTo('search')
} else { } else {
Qt.openUrlExternally(link); Qt.openUrlExternally(link);
@ -290,7 +288,6 @@ Page {
spacing: Theme.paddingMedium spacing: Theme.paddingMedium
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
Button { Button {
id: btnUrl
text: qsTr("Open Profile in Browser") text: qsTr("Open Profile in Browser")
onClicked: { onClicked: {
Qt.openUrlExternally(url); Qt.openUrlExternally(url);

View file

@ -2,7 +2,7 @@ import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
import QtMultimedia 5.0 import QtMultimedia 5.0
Page { FullscreenContentPage {
id: imagePage id: imagePage
property string type: "" property string type: ""
property string previewURL: "" property string previewURL: ""
@ -22,6 +22,26 @@ Page {
videoFlickable.visible = true; 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 { Flickable {
id: videoFlickable id: videoFlickable
visible: false visible: false
@ -49,7 +69,6 @@ Page {
case MediaPlayer.EndOfMedia: case MediaPlayer.EndOfMedia:
console.log("EndOfMedia") console.log("EndOfMedia")
return; return;
} }
} }
@ -68,7 +87,6 @@ Page {
} }
} }
onPositionChanged: function(){ onPositionChanged: function(){
//console.log(duration) //console.log(duration)
//console.log(bufferProgress) //console.log(bufferProgress)
@ -81,15 +99,17 @@ Page {
} }
} }
onStopped: function(){ onStopped: function(){
play() play()
} }
IconButton { IconButton {
id: playerIcon id: playerIcon
anchors.left: parent.left anchors.left: parent.left
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.leftMargin: Theme.paddingLarge anchors.leftMargin: Theme.paddingLarge
anchors.bottomMargin: Theme.paddingMedium anchors.bottomMargin: Theme.paddingLarge*1.5
icon.source: "image://theme/icon-m-play" icon.source: "image://theme/icon-m-play"
onClicked: function() { onClicked: function() {
if (video.playbackState === MediaPlayer.PlayingState) if (video.playbackState === MediaPlayer.PlayingState)
@ -104,10 +124,9 @@ Page {
id: playerProgress id: playerProgress
anchors.left: playerIcon.right anchors.left: playerIcon.right
anchors.right: videoDlBtn.left anchors.right: videoDlBtn.left
anchors.verticalCenter: playerIcon.verticalCenter anchors.verticalCenter: playerIcon.verticalCenter
anchors.leftMargin: 0 anchors.leftMargin: 0
anchors.bottomMargin: Theme.paddingMedium anchors.bottomMargin: Theme.paddingLarge*1.5
} }
IconButton { IconButton {
id: videoDlBtn id: videoDlBtn
@ -115,9 +134,9 @@ Page {
anchors.right: parent.right anchors.right: parent.right
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.rightMargin: Theme.paddingLarge anchors.rightMargin: Theme.paddingLarge
anchors.bottomMargin: Theme.paddingMedium anchors.bottomMargin: Theme.paddingLarge*1.5
//width: Theme.iconSizeMedium+Theme.paddingMedium*2 icon.source: "image://theme/icon-m-device-download"
icon.source: "image://theme/icon-m-cloud-download" icon.opacity: 0.0
onClicked: { onClicked: {
var filename = mediaURL.split("/"); var filename = mediaURL.split("/");
FileDownloader.downloadFile(mediaURL, filename[filename.length-1]); FileDownloader.downloadFile(mediaURL, filename[filename.length-1]);
@ -135,7 +154,7 @@ Page {
anchors.centerIn: parent anchors.centerIn: parent
id: videoError id: videoError
width: parent.width - 2*Theme.paddingMedium width: parent.width - 2*Theme.paddingMedium
wrapMode: Text.WordWrap wrapMode: Text.Wrap
height: contentHeight height: contentHeight
visible: false; visible: false;
font.pixelSize: Theme.fontSizeSmall; font.pixelSize: Theme.fontSizeSmall;
@ -165,7 +184,6 @@ Page {
clip: true clip: true
onHeightChanged: if (imagePreview.status === Image.Ready) imagePreview.fitToScreen(); onHeightChanged: if (imagePreview.status === Image.Ready) imagePreview.fitToScreen();
Item { Item {
id: imageContainer id: imageContainer
width: Math.max(imagePreview.width * imagePreview.scale, imageFlickable.width) width: Math.max(imagePreview.width * imagePreview.scale, imageFlickable.width)
@ -173,22 +191,18 @@ Page {
Image { Image {
id: imagePreview id: imagePreview
property real prevScale property real prevScale
function fitToScreen() { function fitToScreen() {
scale = Math.min(imageFlickable.width / width, imageFlickable.height / height, 1) scale = Math.min(imageFlickable.width / width, imageFlickable.height / height, 1)
pinchArea.minScale = scale pinchArea.minScale = scale
prevScale = scale prevScale = scale
} }
anchors.centerIn: parent anchors.centerIn: parent
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
cache: true cache: true
asynchronous: true asynchronous: true
sourceSize.height: 1000; sourceSize.height: 1000;
smooth: false smooth: false
onStatusChanged: { onStatusChanged: {
if (status == Image.Ready) { if (status == Image.Ready) {
fitToScreen() fitToScreen()
@ -224,7 +238,6 @@ Page {
opacity: 0.3 opacity: 0.3
property real minScale: 1.0 property real minScale: 1.0
property real maxScale: 3.0 property real maxScale: 3.0
anchors.fill: parent anchors.fill: parent
enabled: imagePreview.status === Image.Ready enabled: imagePreview.status === Image.Ready
pinch.target: imagePreview pinch.target: imagePreview
@ -267,11 +280,9 @@ Page {
Component { Component {
id: loadingIndicator id: loadingIndicator
Item { Item {
height: childrenRect.height height: childrenRect.height
width: imagePage.width width: imagePage.width
ProgressCircle { ProgressCircle {
id: imageLoadingIndicator id: imageLoadingIndicator
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
@ -293,9 +304,8 @@ Page {
anchors.right: parent.right anchors.right: parent.right
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.rightMargin: Theme.paddingLarge anchors.rightMargin: Theme.paddingLarge
anchors.bottomMargin: Theme.paddingMedium anchors.bottomMargin: Theme.paddingLarge*1.5
//width: Theme.iconSizeMedium+Theme.paddingMedium*2 icon.source: "image://theme/icon-m-device-download"
icon.source: "image://theme/icon-m-cloud-download"
onClicked: { onClicked: {
var filename = mediaURL.split("/"); var filename = mediaURL.split("/");
FileDownloader.downloadFile(mediaURL, filename[filename.length-1]); FileDownloader.downloadFile(mediaURL, filename[filename.length-1]);

View file

@ -4,16 +4,15 @@ import Sailfish.Silica 1.0
DockedPanel { DockedPanel {
id: root id: root
z: 100; z: 100
width: parent.width //- Theme.paddingLarge*4 width: parent.width
//x: Theme.paddingLarge*2
height: content.height height: content.height
dock: Dock.Bottom dock: Dock.Top
Rectangle { Rectangle {
id: content id: content
width: root.width width: root.width
height: infoLabel.height + 4*Theme.paddingMedium height: infoLabel.height + 5*Theme.paddingMedium
//anchors.topMargin: 20 //anchors.topMargin: 20
color: Theme.highlightBackgroundColor color: Theme.highlightBackgroundColor
opacity: 1.0 opacity: 1.0
@ -29,7 +28,7 @@ DockedPanel {
wrapMode: Text.WrapAnywhere wrapMode: Text.WrapAnywhere
anchors { anchors {
left: parent.left left: parent.left
leftMargin: Theme.horizontalPageMargin leftMargin: Theme.horizontalPageMargin*2
right: parent.right right: parent.right
rightMargin: Theme.horizontalPageMargin rightMargin: Theme.horizontalPageMargin
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter

View file

@ -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()
}
}
}

View file

@ -74,8 +74,6 @@ Item {
} }
} }
MyImage { MyImage {
id: placeholder1 id: placeholder1
width: 2 width: 2

View file

@ -41,7 +41,6 @@ Item {
: Theme.primaryColor) : Theme.primaryColor)
} }
Label { Label {
id: lblScreenName id: lblScreenName
anchors { anchors {

View file

@ -169,7 +169,5 @@ SilicaGridView {
} }
VerticalScrollDecorator {} VerticalScrollDecorator {}
} }

View file

@ -10,21 +10,22 @@ Item {
property string bg: ""; property string bg: "";
width: parent.width width: parent.width
height: icon.height + Theme.paddingLarge*2 height: icon.height + Theme.paddingLarge*2
/*Image {
anchors.fill: parent
asynchronous: true
fillMode: Image.PreserveAspectCrop
source: bg
opacity: 0.3
}*/
Rectangle { Rectangle {
id: bgImage
anchors.fill: parent anchors.fill: parent
opacity: 0.2 opacity: 0.2
gradient: Gradient { gradient: Gradient {
GradientStop { position: 0.0; color: Theme.highlightBackgroundColor } 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 { Image {
id: icon id: icon

View file

@ -3,7 +3,6 @@ import Sailfish.Silica 1.0
import "../../lib/API.js" as Logic import "../../lib/API.js" as Logic
BackgroundItem { BackgroundItem {
id: delegate id: delegate
signal send (string notice) signal send (string notice)
signal navigateTo(string link) signal navigateTo(string link)
@ -28,6 +27,7 @@ BackgroundItem {
topMargin: Theme.paddingMedium topMargin: Theme.paddingMedium
} }
} }
Image { Image {
id: avatar id: avatar
anchors { anchors {
@ -50,7 +50,6 @@ BackgroundItem {
? Theme.highlightColor ? Theme.highlightColor
: Theme.primaryColor) : Theme.primaryColor)
} }
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
@ -58,12 +57,12 @@ BackgroundItem {
"display_name": model.account_display_name, "display_name": model.account_display_name,
"username": model.account_acct, "username": model.account_acct,
"user_id": model.account_id, "user_id": model.account_id,
"profileImage": model.account_avatar "profileImage": model.account_avatar,
"profileBackground": model.account_header
}) })
} }
} }
Image { Image {
id: iconTR id: iconTR
anchors { anchors {
@ -75,7 +74,7 @@ BackgroundItem {
width: Theme.iconSizeExtraSmall width: Theme.iconSizeExtraSmall
height: width height: width
source: "image://theme/icon-s-retweet" source: "image://theme/icon-s-retweet"
} }
Rectangle { Rectangle {
color: Theme.highlightDimmerColor color: Theme.highlightDimmerColor
width: Theme.iconSizeSmall width: Theme.iconSizeSmall
@ -137,14 +136,19 @@ BackgroundItem {
tlSearch.search = decodeURIComponent("@"+test[3].substring(1)+"@"+test[2]) tlSearch.search = decodeURIComponent("@"+test[3].substring(1)+"@"+test[2])
slideshow.positionViewAtIndex(4, ListView.SnapToItem) slideshow.positionViewAtIndex(4, ListView.SnapToItem)
navigation.navigateTo('search') navigation.navigateTo('search')
// Original component
/* pageStack.push(Qt.resolvedUrl("../Profile.qml"), {
"name": "",
"username": test[3].substring(1)+"@"+test[2],
"profileImage": ""
}) */
} else { } else {
Qt.openUrlExternally(link); Qt.openUrlExternally(link);
} }
} }
text: content.replace(new RegExp("<a ", 'g'), '<a style="text-decoration: none; color:'+(pressed ? Theme.secondaryColor : Theme.highlightColor)+'" ') text: content.replace(new RegExp("<a ", 'g'), '<a style="text-decoration: none; color:'+(pressed ? Theme.secondaryColor : Theme.highlightColor)+'" ')
linkColor : Theme.highlightColor linkColor : Theme.highlightColor
wrapMode: Text.WordWrap wrapMode: Text.Wrap
textFormat: Text.RichText textFormat: Text.RichText
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
color: (pressed ? Theme.highlightColor : (!highlight ? Theme.primaryColor : Theme.secondaryColor)) color: (pressed ? Theme.highlightColor : (!highlight ? Theme.primaryColor : Theme.secondaryColor))
@ -169,7 +173,7 @@ BackgroundItem {
width: parent.width width: parent.width
truncationMode: TruncationMode.Fade truncationMode: TruncationMode.Fade
color: Theme.highlightColor color: Theme.highlightColor
wrapMode: Text.WordWrap wrapMode: Text.Wrap
text: model.status_spoiler_text text: model.status_spoiler_text
} }
MouseArea { MouseArea {
@ -179,6 +183,7 @@ BackgroundItem {
} }
} }
MediaBlock { MediaBlock {
id: media id: media
anchors { anchors {
@ -191,6 +196,7 @@ BackgroundItem {
model: typeof attachments !== "undefined" ? attachments : Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject'); model: typeof attachments !== "undefined" ? attachments : Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject');
height: 100 height: 100
} }
ContextMenu { ContextMenu {
id: mnu id: mnu
MenuItem { MenuItem {
@ -269,9 +275,6 @@ BackgroundItem {
} }
} }
onClicked: { onClicked: {
var m = Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject'); var m = Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject');
if (typeof mdl !== "undefined") if (typeof mdl !== "undefined")
@ -279,6 +282,7 @@ BackgroundItem {
pageStack.push(Qt.resolvedUrl("../Conversation.qml"), { pageStack.push(Qt.resolvedUrl("../Conversation.qml"), {
headerTitle: "Conversation", headerTitle: "Conversation",
toot_id: status_id, toot_id: status_id,
toot_url: status_url,
title: account_display_name, title: account_display_name,
description: '@'+account_acct, description: '@'+account_acct,
avatar: account_avatar, avatar: account_avatar,

View file

@ -60,14 +60,18 @@
</message> </message>
<message> <message>
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation>Toot gesendet!</translation>
</message>
<message>
<source>Copy Link to Clipboard</source>
<translation>Link kopieren</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation>Fehler beim Laden</translation> <translation>Ladefehler</translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -62,12 +62,16 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation>Σφάλμα φόρτωσης</translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -62,12 +62,16 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation>Error al cargar</translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -62,6 +62,10 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>

View file

@ -60,14 +60,18 @@
</message> </message>
<message> <message>
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation>Pouet envoyé !</translation>
</message>
<message>
<source>Copy Link to Clipboard</source>
<translation>Copier le lien</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation>Erreur de chargement</translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -28,52 +28,57 @@
<context> <context>
<name>Conversation</name> <name>Conversation</name>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="188"/> <location filename="../qml/pages/Conversation.qml" line="108"/>
<source>Copy Link to Clipboard</source>
<translation>Copia link</translation>
</message>
<message>
<location filename="../qml/pages/Conversation.qml" line="200"/>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation>Contenuto avviso</translation> <translation>Contenuto avviso</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="218"/> <location filename="../qml/pages/Conversation.qml" line="230"/>
<source>What&apos;s on your mind?</source> <source>What&apos;s on your mind?</source>
<translation>A cosa stai pensando?</translation> <translation>A cosa stai pensando?</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="281"/> <location filename="../qml/pages/Conversation.qml" line="293"/>
<source>Delete</source> <source>Delete</source>
<translation>Elimina</translation> <translation>Elimina</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="380"/> <location filename="../qml/pages/Conversation.qml" line="392"/>
<source>Public</source> <source>Public</source>
<translation>Pubblico</translation> <translation>Pubblico</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="383"/> <location filename="../qml/pages/Conversation.qml" line="395"/>
<source>Unlisted</source> <source>Unlisted</source>
<translation>Non elencato</translation> <translation>Non elencato</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="386"/> <location filename="../qml/pages/Conversation.qml" line="398"/>
<source>Followers-only</source> <source>Followers-only</source>
<translation>Solo ai seguaci</translation> <translation>Solo ai seguaci</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="389"/> <location filename="../qml/pages/Conversation.qml" line="401"/>
<source>Direct</source> <source>Direct</source>
<translation>Diretto</translation> <translation>Diretto</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="437"/> <location filename="../qml/pages/Conversation.qml" line="449"/>
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation>Toot è stato pubblicato!</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="503"/> <location filename="../qml/pages/Conversation.qml" line="515"/>
<source>Emojis</source> <source>Emojis</source>
<translation>Emojis</translation> <translation>Emojis</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="504"/> <location filename="../qml/pages/Conversation.qml" line="516"/>
<source>Tap to insert</source> <source>Tap to insert</source>
<translation>Tap per inserire</translation> <translation>Tap per inserire</translation>
</message> </message>
@ -81,9 +86,9 @@
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<location filename="../qml/pages/components/ImageFullScreen.qml" line="287"/> <location filename="../qml/pages/components/ImageFullScreen.qml" line="298"/>
<source>Error loading</source> <source>Error loading</source>
<translation>Errore caricamento</translation> <translation>Errore durante caricamento</translation>
</message> </message>
</context> </context>
<context> <context>
@ -97,27 +102,27 @@
<context> <context>
<name>LoginPage</name> <name>LoginPage</name>
<message> <message>
<location filename="../qml/pages/LoginPage.qml" line="56"/> <location filename="../qml/pages/LoginPage.qml" line="52"/>
<source>Login</source> <source>Login</source>
<translation>Accesso</translation> <translation>Accesso</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/LoginPage.qml" line="59"/> <location filename="../qml/pages/LoginPage.qml" line="56"/>
<source>Instance</source> <source>Instance</source>
<translation>Istanza</translation> <translation>Istanza</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/LoginPage.qml" line="65"/> <location filename="../qml/pages/LoginPage.qml" line="62"/>
<source>Enter a valid Mastodon instance URL</source> <source>Enter a valid Mastodon instance URL</source>
<translation>Inserire URL di una istanza Mastodon valida</translation> <translation>Inserire URL di una istanza Mastodon valida</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/LoginPage.qml" line="123"/> <location filename="../qml/pages/LoginPage.qml" line="119"/>
<source>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.</source> <source>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.</source>
<translation>Mastodon è un servizio di rete sociale in software libero, costituito in una federazione d&apos;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.</translation> <translation>Mastodon è un servizio di rete sociale in software libero, costituito in una federazione d&apos;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.</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/LoginPage.qml" line="194"/> <location filename="../qml/pages/LoginPage.qml" line="190"/>
<source>Reload</source> <source>Reload</source>
<translation>Ricarica</translation> <translation>Ricarica</translation>
</message> </message>
@ -125,37 +130,37 @@
<context> <context>
<name>MainPage</name> <name>MainPage</name>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="64"/> <location filename="../qml/pages/MainPage.qml" line="65"/>
<source>Home</source> <source>Home</source>
<translation>Home</translation> <translation>Home</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="73"/> <location filename="../qml/pages/MainPage.qml" line="74"/>
<source>Notifications</source> <source>Notifications</source>
<translation>Notifiche</translation> <translation>Notifiche</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="83"/> <location filename="../qml/pages/MainPage.qml" line="84"/>
<source>Local</source> <source>Local</source>
<translation>Locale</translation> <translation>Locale</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="93"/> <location filename="../qml/pages/MainPage.qml" line="94"/>
<source>Federated</source> <source>Federated</source>
<translation>Federazione</translation> <translation>Federazione</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="120"/> <location filename="../qml/pages/MainPage.qml" line="121"/>
<source>Search</source> <source>Search</source>
<translation>Cerca</translation> <translation>Cerca</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="125"/> <location filename="../qml/pages/MainPage.qml" line="126"/>
<source>@user or #term</source> <source>@user or #term</source>
<translation>@utente o #termine</translation> <translation>@utente o #termine</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="249"/> <location filename="../qml/pages/MainPage.qml" line="251"/>
<source>New Toot</source> <source>New Toot</source>
<translation>Nuovo toot</translation> <translation>Nuovo toot</translation>
</message> </message>
@ -269,7 +274,7 @@
<translation>Biografia</translation> <translation>Biografia</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Profile.qml" line="294"/> <location filename="../qml/pages/Profile.qml" line="291"/>
<source>Open Profile in Browser</source> <source>Open Profile in Browser</source>
<translation>Aprire profile nel browser</translation> <translation>Aprire profile nel browser</translation>
</message> </message>
@ -388,22 +393,22 @@
<context> <context>
<name>VisualContainer</name> <name>VisualContainer</name>
<message> <message>
<location filename="../qml/pages/components/VisualContainer.qml" line="198"/> <location filename="../qml/pages/components/VisualContainer.qml" line="204"/>
<source>Unboost</source> <source>Unboost</source>
<translation>Annulla condivisione</translation> <translation>Annulla condivisione</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/components/VisualContainer.qml" line="198"/> <location filename="../qml/pages/components/VisualContainer.qml" line="204"/>
<source>Boost</source> <source>Boost</source>
<translation>Condividi</translation> <translation>Condividi</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/components/VisualContainer.qml" line="235"/> <location filename="../qml/pages/components/VisualContainer.qml" line="241"/>
<source>Unfavorite</source> <source>Unfavorite</source>
<translation>Annulla apprezzamento</translation> <translation>Annulla apprezzamento</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/components/VisualContainer.qml" line="235"/> <location filename="../qml/pages/components/VisualContainer.qml" line="241"/>
<source>Favorite</source> <source>Favorite</source>
<translation>Apprezzato</translation> <translation>Apprezzato</translation>
</message> </message>

View file

@ -62,12 +62,16 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation>Fout bij laden</translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -62,12 +62,16 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation>Fout bij laden</translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -62,12 +62,16 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation>Error en cargar</translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -62,12 +62,16 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation>Błąd ładowania</translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -62,12 +62,16 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation>Ошибка при загрузке</translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -62,12 +62,16 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation>Greška u učitavanju</translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -62,12 +62,16 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation>Problem att ladda</translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -62,12 +62,16 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -62,12 +62,16 @@
<source>Toot sent!</source> <source>Toot sent!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>ImageFullScreen</name>
<message> <message>
<source>Error loading</source> <source>Error loading</source>
<translation></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>