Merge pull request #69 from molan-git/develop

release 1.0.5
This commit is contained in:
molan-git 2020-06-10 16:43:33 +02:00 committed by GitHub
commit 3df6f76e57
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
48 changed files with 3552 additions and 2443 deletions

View file

@ -1,11 +1,6 @@
[Desktop Entry] [Desktop Entry]
Type=Application Type=Application
X-Nemo-Application-Type=silica-qt5 X-Nemo-Application-Type=silica-qt5
Icon=harbour-tooterb Icon=harbour-tooter
Exec=harbour-tooterb Exec=harbour-tooter
Name=Tooter β Name=Tooter β
# translation example:
# your app name in German locale (de)
#
# Remember to comment out the following line, if you do not want to use
# a different app name in German locale (de).

View file

@ -9,7 +9,6 @@
# - icon definition filename in desktop file must be changed # - icon definition filename in desktop file must be changed
# - translation filenames have to be changed # - translation filenames have to be changed
# The name of your application
TARGET = harbour-tooterb TARGET = harbour-tooterb
CONFIG += sailfishapp CONFIG += sailfishapp
@ -39,21 +38,27 @@ dbus_services.files = config/ba.dysko.harbour.tooterb.service
interfaces.path = /usr/share/dbus-1/interfaces/ interfaces.path = /usr/share/dbus-1/interfaces/
interfaces.files = config/ba.dysko.harbourb.tooterb.xml interfaces.files = config/ba.dysko.harbourb.tooterb.xml
SOURCES += src/harbour-tooterb.cpp SOURCES += src/harbour-tooterb.cpp \
SOURCES += src/imageuploader.cpp src/imageuploader.cpp \
SOURCES += src/filedownloader.cpp src/filedownloader.cpp \
SOURCES += src/notifications.cpp src/notifications.cpp \
SOURCES += src/dbusAdaptor.cpp src/dbusAdaptor.cpp \
SOURCES += src/dbus.cpp src/dbus.cpp
HEADERS += src/imageuploader.h HEADERS += src/imageuploader.h \
HEADERS += src/filedownloader.h src/filedownloader.h \
HEADERS += src/notifications.h src/notifications.h \
HEADERS += src/dbusAdaptor.h src/dbusAdaptor.h \
HEADERS += src/dbus.h src/dbus.h
DISTFILES += qml/harbour-tooterb.qml \ DISTFILES += qml/harbour-tooterb.qml \
qml/images/tooterb-cover.svg \
qml/pages/ConversationPage.qml \
qml/pages/ProfilePage.qml \
qml/pages/SettingsPage.qml \
qml/pages/components/InfoBanner.qml \ qml/pages/components/InfoBanner.qml \
qml/pages/components/MediaFullScreen.qml \
qml/pages/components/ProfileImage.qml \
qml/pages/components/VisualContainer.qml \ qml/pages/components/VisualContainer.qml \
qml/pages/components/MiniStatus.qml \ qml/pages/components/MiniStatus.qml \
qml/pages/components/MiniHeader.qml \ qml/pages/components/MiniHeader.qml \
@ -63,21 +68,14 @@ DISTFILES += qml/harbour-tooterb.qml \
qml/pages/components/ProfileHeader.qml \ qml/pages/components/ProfileHeader.qml \
qml/pages/components/MediaBlock.qml \ qml/pages/components/MediaBlock.qml \
qml/pages/components/MyImage.qml \ qml/pages/components/MyImage.qml \
qml/pages/components/ImageFullScreen.qml \
qml/cover/CoverPage.qml \ qml/cover/CoverPage.qml \
qml/pages/MainPage.qml \ qml/pages/MainPage.qml \
qml/pages/LoginPage.qml \ qml/pages/LoginPage.qml \
qml/pages/Conversation.qml \
qml/pages/components/Toot.qml \ qml/pages/components/Toot.qml \
qml/pages/Browser.qml \ qml/pages/Browser.qml \
qml/pages/Profile.qml \
qml/pages/Settings.qml \
qml/lib/API.js \ qml/lib/API.js \
qml/images/notification.svg \ qml/images/icon-s-following \
qml/images/verified.svg \ qml/images/icon-m-emoji.svg \
qml/images/boosted.svg \
qml/images/tooterb.svg \
qml/images/emojiselect.svg \
qml/images/icon-m-profile.svg \ qml/images/icon-m-profile.svg \
qml/images/icon-l-profile.svg \ qml/images/icon-l-profile.svg \
qml/lib/Mastodon.js \ qml/lib/Mastodon.js \
@ -97,21 +95,18 @@ SAILFISHAPP_ICONS = 86x86 108x108 128x128 172x172
# following CONFIG line # following CONFIG line
CONFIG += sailfishapp_i18n CONFIG += sailfishapp_i18n
# German translation is enabled as an example. If you aren't TRANSLATIONS += translations/harbour-tooterb.ts \
# planning to localize your app, remember to comment out the translations/harbour-tooterb-de.ts \
# following TRANSLATIONS line. And also do not forget to translations/harbour-tooterb-el.ts \
# modify the localized app name in the the .desktop file. translations/harbour-tooterb-es.ts \
TRANSLATIONS += translations/harbour-tooterb-de.ts translations/harbour-tooterb-fr.ts \
TRANSLATIONS += translations/harbour-tooterb-el.ts translations/harbour-tooterb-it.ts \
TRANSLATIONS += translations/harbour-tooterb-es.ts translations/harbour-tooterb-nl.ts \
TRANSLATIONS += translations/harbour-tooterb-fi.ts translations/harbour-tooterb-nl_BE.ts \
TRANSLATIONS += translations/harbour-tooterb-fr.ts translations/harbour-tooterb-oc.ts \
TRANSLATIONS += translations/harbour-tooterb-nl.ts translations/harbour-tooterb-pl.ts \
TRANSLATIONS += translations/harbour-tooterb-nl_BE.ts translations/harbour-tooterb-ru.ts \
TRANSLATIONS += translations/harbour-tooterb-oc.ts translations/harbour-tooterb-sr.ts \
TRANSLATIONS += translations/harbour-tooterb-pl.ts translations/harbour-tooterb-sv.ts \
TRANSLATIONS += translations/harbour-tooterb-ru.ts translations/harbour-tooterb-zh_CN.ts
TRANSLATIONS += translations/harbour-tooterb-sr.ts
TRANSLATIONS += translations/harbour-tooterb-sv.ts
TRANSLATIONS += translations/harbour-tooterb-zh_CN.ts
TRANSLATIONS += translations/harbour-tooterb-it.ts

View file

@ -30,9 +30,9 @@
import QtQuick 2.0 import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
import "../lib/API.js" as Logic import "../lib/API.js" as Logic
CoverBackground { CoverBackground {
onStatusChanged: { onStatusChanged: {
switch (status ){ switch (status ){
@ -46,20 +46,21 @@ CoverBackground {
break; break;
} }
} }
Image { Image {
id: bg id: bg
source: "../images/tooterb-cover.svg"
horizontalAlignment: Image.AlignLeft
verticalAlignment: Image.AlignBottom
fillMode: Image.PreserveAspectFit
anchors { anchors {
bottom : parent.bottom bottom : parent.bottom
left: parent.left left: parent.left
right: parent.right right: parent.right
top: parent.top top: parent.top
} }
horizontalAlignment: Image.AlignLeft
verticalAlignment: Image.AlignBottom
fillMode: Image.PreserveAspectFit
source: "../images/tooterb.svg"
} }
Timer { Timer {
id: timer id: timer
interval: 60*1000 interval: 60*1000
@ -70,33 +71,34 @@ CoverBackground {
Image { Image {
id: iconNot id: iconNot
source: "image://theme/icon-s-alarm?" + Theme.highlightColor
anchors { anchors {
left: parent.left left: parent.left
top: parent.top top: parent.top
leftMargin: Theme.paddingLarge leftMargin: Theme.paddingLarge
topMargin: Theme.paddingLarge topMargin: Theme.paddingLarge
} }
source: "image://theme/icon-s-alarm?" + Theme.highlightColor
} }
Label { Label {
id: notificationsLbl id: notificationsLbl
text: " "
color: Theme.highlightColor
anchors { anchors {
left: iconNot.right left: iconNot.right
leftMargin: Theme.paddingMedium leftMargin: Theme.paddingMedium
verticalCenter: iconNot.verticalCenter verticalCenter: iconNot.verticalCenter
} }
text: " "
color: Theme.highlightColor
} }
Label { Label {
text: "Tooter β"
color: Theme.secondaryColor
anchors { anchors {
right: parent.right right: parent.right
rightMargin: Theme.paddingLarge rightMargin: Theme.paddingLarge
verticalCenter: iconNot.verticalCenter verticalCenter: iconNot.verticalCenter
} }
text: "Tooter β"
color: Theme.primaryColor
} }
signal activateapp(string person, string notice) signal activateapp(string person, string notice)
@ -112,8 +114,11 @@ CoverBackground {
CoverAction { CoverAction {
iconSource: "image://theme/icon-cover-new" iconSource: "image://theme/icon-cover-new"
onTriggered: { onTriggered: {
pageStack.push(Qt.resolvedUrl("./../pages/Conversation.qml"), {}) pageStack.push(Qt.resolvedUrl("./../pages/ConversationPage.qml"), {
appWindow.activate(); headerTitle: qsTr("New Toot"),
type: "new"
})
appWindow.activate()
} }
} }
} }
@ -135,5 +140,5 @@ CoverBackground {
notificationsLbl.text = notificationsNum; notificationsLbl.text = notificationsNum;
Logic.conf.notificationLastID = notificationLastID; Logic.conf.notificationLastID = notificationLastID;
} }
}
}

View file

@ -33,41 +33,39 @@ import Sailfish.Silica 1.0
import "pages" import "pages"
import "./lib/API.js" as Logic import "./lib/API.js" as Logic
ApplicationWindow ApplicationWindow {
{
id: appWindow id: appWindow
//initialPage: Component { FirstPage { } }
cover: Qt.resolvedUrl("cover/CoverPage.qml") cover: Qt.resolvedUrl("cover/CoverPage.qml")
allowedOrientations: defaultAllowedOrientations allowedOrientations: defaultAllowedOrientations
Component.onCompleted: { Component.onCompleted: {
var obj = {}; var obj = {}
Logic.mediator.installTo(obj); Logic.mediator.installTo(obj)
obj.subscribe('confLoaded', function(){ obj.subscribe('confLoaded', function() {
console.log('confLoaded'); console.log('confLoaded');
//console.log(JSON.stringify(Logic.conf)) //console.log(JSON.stringify(Logic.conf))
if (!Logic.conf['notificationLastID']) if (!Logic.conf['notificationLastID'])
Logic.conf['notificationLastID'] = 0; Logic.conf['notificationLastID'] = 0
if (Logic.conf['instance']) { if (Logic.conf['instance']) {
Logic.api = new Logic.MastodonAPI({ instance: Logic.conf['instance'], api_user_token: "" }); Logic.api = Logic.mastodonAPI({
"instance": Logic.conf['instance'],
"api_user_token": ""
})
} }
if (Logic.conf['login']) { if (Logic.conf['login']) {
//Logic.conf['notificationLastID'] = 0 //Logic.conf['notificationLastID'] = 0
Logic.api.setConfig("api_user_token", Logic.conf['api_user_token']) Logic.api.setConfig("api_user_token", Logic.conf['api_user_token'])
//accounts/verify_credentials //accounts/verify_credentials
Logic.api.get('instance', [], function(data) { Logic.api.get('instance', [], function(data) {
console.log(JSON.stringify(data)) console.log(JSON.stringify(data))
pageStack.push(Qt.resolvedUrl("./pages/MainPage.qml"), {}) pageStack.push(Qt.resolvedUrl("./pages/MainPage.qml"), {})
}); })
//pageStack.push(Qt.resolvedUrl("./pages/Conversation.qml"), {})
//
//
//pageStack.push(Qt.resolvedUrl("./pages/Conversation.qml"), {})
} else { } else {
pageStack.push(Qt.resolvedUrl("./pages/LoginPage.qml"), {}) pageStack.push(Qt.resolvedUrl("./pages/LoginPage.qml"), {})
} }
})
});
Logic.init() Logic.init()
} }
@ -75,19 +73,18 @@ ApplicationWindow
//Logic.conf.notificationLastID = 0; //Logic.conf.notificationLastID = 0;
Logic.saveData() Logic.saveData()
} }
Connections Connections {
{ target: Dbus
target: Dbus onViewtoot: {
onViewtoot: console.log(key, "dbus onViewtoot")
{
console.log(key, "dbus onViewtoot")
}
onActivateapp:
{
console.log ("dbus activate app")
pageStack.pop(pageStack.find( function(page){ return (page._depth === 0) }))
activate()
}
} }
} onActivateapp: {
console.log ("dbus activate app")
pageStack.pop(pageStack.find( function(page) {
return (page._depth === 0)
}))
activate()
}
}
}

View file

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 36 36" enable-background="new 0 0 36 36" xml:space="preserve">
<g>
<g>
<path fill="#FFFFFF" d="M28.8,12.5c-1.8,0-4.6,0-6.3,0c-0.5,0-1.5,0-0.8-1.1c1-1.9,3-5.9,4.3-8.1c0.7-1.1,0.8-1.8-0.4-1.8
c-2.7,0-9.1,0-12,0c-1.1,0-1.6,0.5-2.1,1.6c-1.4,3.5-4.7,12.1-5.9,15.7c-0.4,1.2,0.3,1.7,1.2,1.7c1.8,0,5,0,6.7,0
c0.6,0,1.2,0.1,0.8,1.4c-0.8,2.3-2,7-2.8,9.7c0,0-0.8,3.7,2.4,0.8C18.1,28.2,25.4,17.7,29,14C29.7,13.4,29.7,12.5,28.8,12.5z
M20.7,21.1c-2.2,2.8-4.4,5.7-6.3,7.8c0.1-0.2,0.1-0.5,0.2-0.7c0.6-2.1,1.2-4.3,1.7-5.7l0,0l0,0c0.3-1.2,0.2-2.1-0.3-2.9
c-0.5-0.7-1.4-1.1-2.4-1.1H7.9c1.3-3.7,3.9-10.4,5.2-13.8l0.3-0.8c0.1-0.2,0.2-0.3,0.2-0.4c0,0,0,0,0,0h10
c-1.2,2.2-2.7,5.2-3.6,6.9c-0.7,1.3-0.5,2.2-0.2,2.8c0.7,1.3,2.2,1.3,2.7,1.3h3.4C24.4,16.3,22.6,18.6,20.7,21.1z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

Before

Width:  |  Height:  |  Size: 886 B

After

Width:  |  Height:  |  Size: 886 B

View file

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<title>Artboard 1</title>
<g>
<rect x="-2" y="-2" width="36.2" height="36.2" fill="#fff" fill-opacity="0"/>
<g>
<path d="M22.9,11.3a6.8,6.8,0,1,1-6.8-6.8A6.74,6.74,0,0,1,22.9,11.3Z" fill="#fff"/>
<g opacity="0.6">
<path d="M28,26.6v.6H4.3v-.6a6.23,6.23,0,0,1,6.2-6.2H21.8A6.24,6.24,0,0,1,28,26.3Z" fill="#fff"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 451 B

View file

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="15 0 60 60" enable-background="new 15 0 60 60" xml:space="preserve">
<path id="Home" display="none" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linejoin="round" stroke-miterlimit="10" d="
M42,7.7l-18.6,15c-0.3,0.3-0.5,0.7-0.5,1V52c0,0.8,0.7,1.4,1.4,1.4h12.4c0.8,0,1.4-0.7,1.4-1.4V34.1c0-0.7,0.7-1.4,1.4-1.4h11.1
c0.8,0,1.4,0.7,1.4,1.4V52c0,0.8,0.7,1.4,1.4,1.4h12.4c0.8,0,1.4-0.7,1.4-1.4V23.7c0-0.4-0.2-0.8-0.5-1l-18.5-15
C46.3,6.2,43.7,6.2,42,7.7z"/>
<g id="Local" display="none">
<circle display="inline" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linejoin="round" stroke-miterlimit="10" cx="45" cy="26.1" r="6.9"/>
<path display="inline" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linejoin="round" stroke-miterlimit="10" d="M45,6.8
c10.7,0,19.3,8.6,19.3,19.3c0,2.8-0.6,5.4-1.7,7.9c-0.8,2-2.1,3.8-3.6,5.3l-14,14l-14.1-14c-1.5-1.6-2.7-3.4-3.6-5.3
c-1-2.4-1.7-5.1-1.7-7.9C25.7,15.4,34.3,6.8,45,6.8z"/>
</g>
<g id="Federation" display="none">
<circle display="inline" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-miterlimit="10" cx="45" cy="30" r="23.4"/>
<ellipse display="inline" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-miterlimit="10" cx="45" cy="30" rx="12.4" ry="23.4"/>
<path display="inline" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-miterlimit="10" d="M61.5,13.4
c-2.6,4.1-9.5,6.9-16.5,6.9s-13.9-2.8-16.5-6.9"/>
<path display="inline" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-miterlimit="10" d="M28.5,46.6
c2.6-4.1,9.5-6.9,16.5-6.9s13.9,2.8,16.5,6.9"/>
<line display="inline" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-miterlimit="10" x1="21.6" y1="30" x2="68.4" y2="30"/>
<line display="inline" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-miterlimit="10" x1="45" y1="6.6" x2="45" y2="53.4"/>
</g>
<g id="Search" display="none">
<circle display="inline" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linejoin="round" stroke-miterlimit="10" cx="42.3" cy="27.3" r="19.3"/>
<line display="inline" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linejoin="round" stroke-miterlimit="10" x1="67" y1="52" x2="56.1" y2="41.1"/>
</g>
<path id="Notification_1_" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-linejoin="round" stroke-miterlimit="10" d="
M56.3,49.9c1.9,2.2,4.6,3.5,7.7,3.5c2.1,0,3.9-0.6,5.5-1.7c-3.2-1.8-5.4-5-6.1-8.7c2.5-3.8,3.9-8.2,3.9-13
C67.4,17.1,56.9,6.6,44,6.6S20.5,17,20.5,29.9S31,53.3,43.8,53.3C48.5,53.3,52.8,52,56.3,49.9z"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 227.9 240.1" enable-background="new 0 0 227.9 240.1" xml:space="preserve">
<g>
<path opacity="0.5" fill="#FFFFFF" d="M122.2,119.8c0,0,0,0.3-0.1,0.9c-0.1,0.6-0.2,1.5-0.3,2.7c-0.2,2.4-0.5,5.8-0.6,10
c-0.2,8.3,0.1,19.5,2.5,30.2c0.6,2.7,1.4,5.3,2.3,7.8c0.9,2.5,2,4.9,3.2,7.1c0.6,1.1,1.2,2.2,2,3.2c0.7,1,1.4,1.9,2.2,2.8
c1.5,1.8,3.2,3.2,4.8,4.5c1.7,1.2,3.4,2.2,5,2.8c1.5,0.8,3.1,1.1,4.3,1.5c2.5,0.5,3.9,0.8,3.9,0.8s-1.4,0.1-4.1,0.3
c-1.3-0.1-2.9,0-4.7-0.4c-1.9-0.2-3.9-0.8-6.1-1.6c-2.2-0.9-4.5-2-6.8-3.6c-1.1-0.8-2.3-1.6-3.3-2.6c-1.1-0.9-2.2-1.9-3.2-3
c-2.1-2.1-4-4.6-5.8-7.1c-1.7-2.6-3.4-5.3-4.9-8.1c-5.9-11.2-9.4-23.2-11.6-32.3c-1.1-4.6-1.8-8.4-2.2-11.2
c-0.2-1.4-0.4-2.5-0.5-3.2c-0.1-0.8-0.2-1.2-0.2-1.2l0-0.4c-0.8-6.7,4-12.9,10.7-13.7c6.7-0.8,12.9,4,13.7,10.7
C122.4,117.7,122.4,118.8,122.2,119.8z"/>
<g opacity="0.2">
<path fill="#FFFFFF" d="M43.7,12.5c3-1.1,6.1-2.1,9.2-3.1c-3.6-2-10.7-4.7-24.8-5.5C28.1,3.9,40.4,7.9,43.7,12.5z"/>
<path fill="#FFFFFF" d="M151.5,156.8v-33.4c-3.7,0-7.3,0-9.7,0c6,0,8.5-5.5,9.5-11c-1.5-34.8-21.5-67.6-55.1-83.7
c-6.9-3.3-14-5.7-21.2-7.3c12-5,26.5-7.4,26.5-7.4c-17.7-0.7-32.2,1.9-43.2,5.2c-0.6,0-1.2,0-1.8,0C67.8,10.9,87.2,5.4,87.2,5.4
c-27.8,0-55.5,12.7-72.8,22c-0.7,0-1.4-0.1-2-0.1c-30.8,0-55.9,25-55.9,55.9c0,5.3,0.8,10.5,2.2,15.3c-0.4,2-0.6,4.1-0.9,6.1
l-31.6,31.6V246H54.3h14h19.6h20v-93.7c0,0,4.6,77.8,32.3,77.8c4.3,0,8.4,0,11.5,0v-16.4c-3.7,0-7.3,0-9.7,0c6.3,0,8.7-6,9.7-11.8
v-33.4c-3.7,0-7.3,0-9.7,0C148.1,168.5,150.6,162.5,151.5,156.8z"/>
</g>
<path opacity="0.2" d="M98.6,124.4c-0.2-1.4-0.4-2.5-0.5-3.2c-0.1-0.8-0.2-1.2-0.2-1.2l0-0.4c-0.8-6.7,4-12.9,10.7-13.7
c6.7-0.8,12.9,4,13.7,10.7c0.1,1.1,0.1,2.2,0,3.3c0,0,0,0.3-0.1,0.9c-0.1,0.6-0.2,1.5-0.3,2.7c-0.1,1.1-0.2,2.5-0.3,4.1
c2.1-2.6,3.4-5.8,3.4-9.4c0-8.2-6.6-14.8-14.8-14.8c-8.2,0-14.8,6.6-14.8,14.8c0,3.8,1.5,7.2,3.8,9.9
C99,126.7,98.8,125.4,98.6,124.4z"/>
<path opacity="0.2" d="M89.5,76.4c18.5,26.1-10.2,54.9-36.4,36.4c-0.7-0.5-1.4-1.2-1.9-1.9C32.7,84.7,61.5,56,87.6,74.5
C88.4,75,89,75.7,89.5,76.4z"/>
<circle opacity="0.5" fill="#FFFFFF" cx="74.7" cy="83.5" r="13.8"/>
<circle opacity="0.5" cx="78" cy="83.5" r="6.4"/>
<path opacity="0.2" d="M12.4,139c-30.8,0-55.9-25-55.9-55.9c0-1.2,0.1-2.3,0.2-3.5C-45,84.7-46,90-46,95.5
c0,26.8,21.7,48.6,48.6,48.6c9.4,0,18.2-2.7,25.6-7.4C23.2,138.2,17.9,139,12.4,139z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
<path fill="#FFFFFF" d="M47.7,22.5c-0.2-0.8-0.5-1.6-1-2.3c-0.5-0.7-1-1.3-1.6-1.9s-1.3-1-2.1-1.4c0.1-0.2,0.2-0.5,0.3-0.7
c0-0.3,0.1-0.5,0.2-0.8s0.1-0.5,0.1-0.8s0-0.6,0.1-0.8c0-1.3-0.3-2.5-0.7-3.6c-0.4-1.1-1-2.1-1.9-2.9s-1.7-1.5-2.8-2
c-1-0.5-2.2-0.7-3.4-0.7c-0.3,0-0.5,0-0.8,0c-0.3,0-0.5,0.1-0.8,0.1c-0.2,0-0.5,0.1-0.8,0.2S32.1,5,31.9,5.1
c-0.4-0.8-0.9-1.4-1.4-2.1s-1.1-1.2-1.8-1.6s-1.4-0.8-2.2-1C25.7,0.1,24.9,0,24,0c-0.8,0-1.7,0.1-2.5,0.4S20,1,19.3,1.4
c-0.7,0.4-1.3,1-1.8,1.6c-0.6,0.6-1,1.3-1.3,2.1c-0.3-0.1-0.5-0.2-0.8-0.2c-0.2-0.1-0.5-0.1-0.8-0.2c-0.3,0-0.5-0.1-0.8-0.1
c-0.2,0-0.5,0-0.8,0c-1.1,0-2.3,0.2-3.4,0.7c-1.1,0.5-2,1.1-2.8,2S5.5,9,5,10.1s-0.7,2.3-0.7,3.6c0,0.3,0,0.5,0,0.8s0.1,0.6,0.1,0.8
c0,0.3,0.1,0.5,0.2,0.8c0.1,0.3,0.2,0.5,0.2,0.7c-0.7,0.4-1.3,0.9-2,1.4s-1.2,1.2-1.6,1.9c-0.4,0.7-0.7,1.5-1,2.3
C0.1,23.4,0,24.3,0,25.2c0,0.8,0.1,1.7,0.3,2.5s0.5,1.5,0.9,2.2s0.8,1.3,1.4,1.9s1.2,1,1.8,1.4c0,0.1,0,0.2,0,0.3s-0.1,0.2,0,0.3
c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0,0.3c0,1.2,0.2,2.4,0.7,3.5C5.5,39,6.2,40,6.9,40.8s1.7,1.5,2.8,2s2.2,0.7,3.4,0.7
c0.3,0,0.6,0,0.8,0c0.2,0,0.5-0.1,0.8-0.1c0.3,0,0.5-0.1,0.8-0.2c0.2-0.1,0.5-0.2,0.8-0.3c0.3,0.8,0.7,1.5,1.3,2.1
c0.6,0.6,1.2,1.2,1.8,1.6c0.7,0.5,1.4,0.8,2.2,1.1s1.6,0.4,2.5,0.4c0.9,0,1.7-0.1,2.5-0.4c0.8-0.2,1.5-0.6,2.2-1.1s1.3-1,1.8-1.6
c0.5-0.6,1-1.3,1.4-2.1c0.2,0.1,0.5,0.2,0.7,0.3c0.3,0.1,0.5,0.2,0.8,0.2c0.2,0,0.5,0.1,0.8,0.1c0.3,0,0.5,0,0.8,0
c1.2,0,2.4-0.2,3.4-0.7s2-1.1,2.8-2s1.4-1.8,1.9-2.9c0.4-1.1,0.7-2.3,0.7-3.5c0-0.1-0.1-0.2,0-0.3s0-0.2,0-0.3c0-0.1,0-0.2,0-0.3
s0-0.2-0.1-0.3c0.7-0.4,1.3-0.9,1.9-1.4c0.5-0.6,1-1.2,1.4-1.9c0.4-0.7,0.7-1.4,0.9-2.2c0.2-0.8,0.3-1.6,0.3-2.5
C48,24.3,47.9,23.4,47.7,22.5z M35.8,18.5c-0.2,0.3-0.3,0.6-0.5,0.8h-0.1L22,32.6c0,0-0.1,0,0,0s0,0,0,0c-0.1,0.1-0.2,0.2-0.4,0.3
c-0.2,0.1-0.3,0.2-0.4,0.2c-0.1,0-0.3,0.1-0.5,0.1c-0.2,0-0.3,0.1-0.4,0.1c-0.2,0-0.4,0-0.5-0.1c-0.1,0-0.3-0.1-0.5-0.1
c-0.2,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.3-0.2-0.4-0.3l-5.7-5.8c-0.3-0.2-0.5-0.5-0.6-0.8c-0.1-0.3-0.2-0.6-0.2-0.9c0-0.3,0-0.6,0.2-0.9
c0.2-0.3,0.3-0.6,0.5-0.9c0.3-0.2,0.6-0.4,0.9-0.5s0.6-0.2,0.9-0.2c0.4,0,0.7,0.1,0.9,0.2c0.3,0.1,0.6,0.3,0.9,0.5l3.9,4l11.7-11.6
c0.2-0.2,0.4-0.4,0.8-0.5s0.7-0.2,0.9-0.2s0.6,0.1,0.9,0.2s0.6,0.3,0.8,0.5c0.3,0.3,0.5,0.6,0.6,0.9c0.1,0.3,0.2,0.6,0.2,0.9
C36.1,17.9,36,18.2,35.8,18.5z"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -88,7 +88,6 @@ var tootParser = function(data){
ret.display_name = data.account.display_name ret.display_name = data.account.display_name
ret.avatar_static = data.account.avatar_static ret.avatar_static = data.account.avatar_static
ret.favourited = data.favourited ? true : false ret.favourited = data.favourited ? true : false
ret.favourites_count = data.favourites_count ? data.favourites_count : 0 ret.favourites_count = data.favourites_count ? data.favourites_count : 0
@ -100,7 +99,6 @@ var tootParser = function(data){
ret.sensitive = data.sensitive ? true : false ret.sensitive = data.sensitive ? true : false
ret.visibility = data.visibility ? data.visibility : false ret.visibility = data.visibility ? data.visibility : false
console.log(ret) console.log(ret)
} }
var test = 1; var test = 1;

View file

@ -3,7 +3,7 @@
// do whatever you want with it // do whatever you want with it
// but please don't hurt it (and keep this header) // but please don't hurt it (and keep this header)
var MastodonAPI = function(config) { var mastodonAPI = function(config) {
var apiBase = config.instance + "/api/v1/"; var apiBase = config.instance + "/api/v1/";
return { return {
setConfig: function (key, value) { setConfig: function (key, value) {
@ -56,8 +56,8 @@ var MastodonAPI = function(config) {
http.setRequestHeader("Connection", "close"); http.setRequestHeader("Connection", "close");
http.onreadystatechange = function() { // Call a function when the state changes. http.onreadystatechange = function() { // Call a function when the state changes.
if (http.readyState == 4) { if (http.readyState === 4) {
if (http.status == 200) { if (http.status === 200) {
console.log("Successful GET API request to " +apiBase+endpoint); console.log("Successful GET API request to " +apiBase+endpoint);
callback(JSON.parse(http.response),http.status) callback(JSON.parse(http.response),http.status)
} else { } else {
@ -91,8 +91,8 @@ var MastodonAPI = function(config) {
http.setRequestHeader("Connection", "close"); http.setRequestHeader("Connection", "close");
http.onreadystatechange = function() { // Call a function when the state changes. http.onreadystatechange = function() { // Call a function when the state changes.
if (http.readyState == 4) { if (http.readyState === 4) {
if (http.status == 200) { if (http.status === 200) {
console.log("Successful POST API request to " +apiBase+endpoint); console.log("Successful POST API request to " +apiBase+endpoint);
callback(JSON.parse(http.response),http.status) callback(JSON.parse(http.response),http.status)
} else { } else {
@ -180,8 +180,8 @@ var MastodonAPI = function(config) {
http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http.onreadystatechange = function() { // Call a function when the state changes. http.onreadystatechange = function() { // Call a function when the state changes.
if (http.readyState == 4) { if (http.readyState === 4) {
if (http.status == 200) { if (http.status === 200) {
console.log("Registered Application: " + http.response); console.log("Registered Application: " + http.response);
callback(http.response) callback(http.response)
} else { } else {
@ -221,8 +221,8 @@ var MastodonAPI = function(config) {
http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http.onreadystatechange = function() { // Call a function when the state changes. http.onreadystatechange = function() { // Call a function when the state changes.
if (http.readyState == 4) { if (http.readyState === 4) {
if (http.status == 200) { if (http.status === 200) {
console.log("Got Token: " + http.response); console.log("Got Token: " + http.response);
callback(http.response) callback(http.response)
} else { } else {
@ -236,7 +236,7 @@ var MastodonAPI = function(config) {
}; };
// node.js // node.js
if (typeof module !== 'undefined') { module.exports = MastodonAPI; }; if (typeof module !== 'undefined') { module.exports = mastodonAPI; };
String.prototype.replaceAll = function(search, replacement) { String.prototype.replaceAll = function(search, replacement) {
var target = this; var target = this;

View file

@ -22,7 +22,7 @@ WorkerScript.onMessage = function(msg) {
if (typeof msg.conf['loadImages'] !== "undefined") if (typeof msg.conf['loadImages'] !== "undefined")
loadImages = msg.conf['loadImages'] loadImages = msg.conf['loadImages']
var API = MastodonAPI({ instance: msg.conf.instance, api_user_token: msg.conf.api_user_token}); var API = mastodonAPI({ instance: msg.conf.instance, api_user_token: msg.conf.api_user_token});
if (msg.method === "POST"){ if (msg.method === "POST"){
API.post(msg.action, msg.params, function(data) { API.post(msg.action, msg.params, function(data) {
if (msg.bgAction){ if (msg.bgAction){
@ -91,7 +91,7 @@ WorkerScript.onMessage = function(msg) {
addDataToModel (msg.model, "append", items); addDataToModel (msg.model, "append", items);
items = []; items = [];
} else if (data[i].hasOwnProperty("content")){ } else if (data[i].hasOwnProperty("content")){
//console.log("Is toot... parsing...") //console.log("Is toot... parsing...")
item = parseToot(data[i]); item = parseToot(data[i]);
item['id'] = item['status_id'] item['id'] = item['status_id']
@ -190,7 +190,7 @@ function parseNotification(data){
item = parseAccounts(item, "", data["account"]) item = parseAccounts(item, "", data["account"])
item = parseAccounts(item, "reblog_", data["account"]) item = parseAccounts(item, "reblog_", data["account"])
item['content'] = data['account']['note'] item['content'] = data['account']['note']
item['typeIcon'] = "image://theme/icon-s-installed" item['typeIcon'] = "../../images/icon-s-following.svg"
item['attachments'] = [] item['attachments'] = []
break; break;
@ -298,13 +298,13 @@ function addEmojis(item, data){
var emoji, i; var emoji, i;
for (i = 0; i < data["emojis"].length; i++){ for (i = 0; i < data["emojis"].length; i++){
emoji = data["emojis"][i]; emoji = data["emojis"][i];
item['content'] = item['content'].replaceAll(":"+emoji.shortcode+":", "<img src=\"" + emoji.static_url+"\" align=\"middle\" width=\"24\" height=\"24\">") item['content'] = item['content'].replaceAll(":"+emoji.shortcode+":", "<img src=\"" + emoji.static_url+"\" align=\"top\" width=\"50\" height=\"50\">")
//console.log(JSON.stringify(data["emojis"][i])) //console.log(JSON.stringify(data["emojis"][i]))
} }
if (data["reblog"]) if (data["reblog"])
for (i = 0; i < data["reblog"]["emojis"].length; i++){ for (i = 0; i < data["reblog"]["emojis"].length; i++){
emoji = data["reblog"]["emojis"][i]; emoji = data["reblog"]["emojis"][i];
item['content'] = item['content'].replaceAll(":"+emoji.shortcode+":", "<img src=\"" + emoji.static_url+"\" align=\"middle\" width=\"24\" height=\"24\">") item['content'] = item['content'].replaceAll(":"+emoji.shortcode+":", "<img src=\"" + emoji.static_url+"\" align=\"top\" width=\"50\" height=\"50\">")
} }
return item; return item;

View file

@ -7,17 +7,20 @@ import "./components/"
Page { Page {
id: conversationPage id: conversationPage
property string headerTitle: "" property string headerTitle: ""
property string type property string type
property alias title: header.title property alias title: header.title
property alias description: header.description property alias description: header.description
property alias avatar: header.image property alias avatar: header.image
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 string toot_url: ""
property string toot_uri: ""
property int tootMaxChar: 500; property int tootMaxChar: 500;
property ListModel mdl property ListModel mdl
allowedOrientations: Orientation.All allowedOrientations: Orientation.All
onSuggestedUserChanged: { onSuggestedUserChanged: {
console.log(suggestedUser) console.log(suggestedUser)
@ -43,10 +46,6 @@ Page {
} }
} }
InfoBanner {
id: sentBanner
}
ListModel { ListModel {
id: mediaModel id: mediaModel
onCountChanged: { onCountChanged: {
@ -66,18 +65,21 @@ Page {
id: header id: header
visible: false visible: false
} }
SilicaListView {
id: conversationList SilicaListView {
id: myList
header: PageHeader { header: PageHeader {
title: headerTitle // pageTitle pushed from MainPage.qml or VisualContainer.qml title: headerTitle // pageTitle pushed from MainPage.qml or VisualContainer.qml
} }
clip: true clip: true
anchors { anchors.top: parent.top
top: parent.top anchors.left: parent.left
bottom: panel.top anchors.right: parent.right
left: parent.left anchors.bottom: if (panel.open == true) {
right: parent.right panel.top
} } else {
hiddenPanel.top
}
model: mdl model: mdl
section { section {
property: 'section' property: 'section'
@ -97,33 +99,53 @@ Page {
} }
} }
} }
PullDownMenu { PullDownMenu {
visible: type == "reply" && toot_url != "" id: pulleyConversation
/* MenuItem { visible: type === "reply" //&& toot_url !== ""
text: qsTr("Open in Browser") MenuItem {
onClicked: Qt.openUrlExternally(toot_url); text: qsTr("Copy Link to Clipboard")
} */ onClicked: if (toot_url === "") {
// ! url isn't always fetched. Needs a solution.
MenuItem { var test = toot_uri.split("/")
text: qsTr("Copy Link to Clipboard") console.log(toot_uri)
onClicked: Clipboard.text = toot_url; console.log(JSON.stringify(test))
} console.log(JSON.stringify(test.length))
} if (test.length === 8 && (test[7] === "activity")) {
} var urialt = toot_uri.replace("activity", "")
Clipboard.text = urialt
}
else Clipboard.text = toot_uri
} else onClicked: Clipboard.text = toot_url
}
}
}
Rectangle { Rectangle {
id: predictionList id: predictionList
visible: false visible: false
anchors.bottom: panel.top color: Theme.highlightDimmerColor
anchors.left: parent.left height: parent.height - panel.height - (Theme.paddingLarge * 4.5)
anchors.right: panel.right anchors {
height: suggestedModel.count > 6 ? Theme.itemSizeMedium * 6 : Theme.itemSizeMedium * suggestedModel.count left: panel.left
color: Theme.highlightDimmerColor right: panel.right
bottom: if (panel.open == true) {
panel.top
} else {
hiddenPanel.top
}
}
SilicaListView { SilicaListView {
anchors.fill: parent rotation: 180
anchors.fill: parent
model: suggestedModel model: suggestedModel
clip: true clip: true
quickScroll: false
VerticalScrollDecorator {}
delegate: ItemUser { delegate: ItemUser {
rotation: 180
onClicked: { onClicked: {
var start = toot.cursorPosition var start = toot.cursorPosition
while (toot.text[start] !== "@" && start > 0) { while (toot.text[start] !== "@" && start > 0) {
@ -142,26 +164,22 @@ Page {
} }
} }
onCountChanged: { onCountChanged: {
positionViewAtIndex(suggestedModel.count - 1, ListView.End) positionViewAtBeginning(suggestedModel.count - 1, ListView.Beginning)
} }
} }
} }
DockedPanel { DockedPanel {
id: panel id: panel
open: true
onExpandedChanged: {
if (!expanded) {
show()
}
}
width: parent.width width: parent.width
height: progressBar.height + toot.height + (mediaModel.count ? uploadedImages.height : 0) height: progressBar.height + toot.height + (mediaModel.count ? uploadedImages.height : 0)
+ btnContentWarning.height + Theme.paddingMedium + btnContentWarning.height + Theme.paddingMedium
+ (warningContent.visible ? warningContent.height : 0) + (warningContent.visible ? warningContent.height : 0)
dock: Dock.Bottom dock: Dock.Bottom
Rectangle { open: true
animationDuration: 200
Rectangle {
width: parent.width width: parent.width
height: progressBar.height height: progressBar.height
color: Theme.highlightBackgroundColor color: Theme.highlightBackgroundColor
@ -172,15 +190,16 @@ Page {
top: parent.top top: parent.top
} }
} }
Rectangle { Rectangle {
id: progressBar id: progressBar
width: toot.text.length ? panel.width * (toot.text.length / tootMaxChar) : 0 width: toot.text.length ? panel.width * (toot.text.length / tootMaxChar) : 0
height: Theme.itemSizeSmall * 0.05 height: Theme.itemSizeSmall * 0.05
color: Theme.highlightBackgroundColor color: Theme.highlightBackgroundColor
opacity: 0.7 opacity: 0.7
anchors { anchors {
left: parent.left left: parent.left
top: parent.top top: parent.top
} }
} }
@ -189,7 +208,7 @@ Page {
visible: false visible: false
height: visible ? implicitHeight : 0 height: visible ? implicitHeight : 0
anchors { anchors {
top: parent.top top: parent.top
topMargin: Theme.paddingMedium topMargin: Theme.paddingMedium
left: parent.left left: parent.left
right: parent.right right: parent.right
@ -201,10 +220,9 @@ Page {
placeholderColor: palette.highlightColor placeholderColor: palette.highlightColor
color: palette.highlightColor color: palette.highlightColor
horizontalAlignment: Text.AlignLeft horizontalAlignment: Text.AlignLeft
EnterKey.onClicked: { EnterKey.onClicked: {}
//tweet()
}
} }
TextInput { TextInput {
id: textOperations id: textOperations
visible: false visible: false
@ -221,17 +239,19 @@ Page {
} }
autoScrollEnabled: true autoScrollEnabled: true
labelVisible: false labelVisible: false
//focus: true text: description !== "" && (description.charAt(0) === '@'
text: description !== "" && (description.charAt(0) == '@'
|| description.charAt( || description.charAt(
0) == '#') ? description + ' ' : '' 0) === '#') ? description + ' ' : ''
height: Math.max(270, Math.min(900, implicitHeight)) height: if (type !== "reply") {
Math.max(conversationPage.height / 3, Math.min(conversationPage.height * 0.65, implicitHeight))
}
else {
Math.max(conversationPage.height / 4, Math.min(conversationPage.height * 0.65, implicitHeight))
}
horizontalAlignment: Text.AlignLeft horizontalAlignment: Text.AlignLeft
placeholderText: qsTr("What's on your mind?") placeholderText: qsTr("What's on your mind?")
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
EnterKey.onClicked: { EnterKey.onClicked: {}
//tweet()
}
onTextChanged: { onTextChanged: {
textOperations.text = toot.text textOperations.text = toot.text
textOperations.cursorPosition = toot.cursorPosition textOperations.cursorPosition = toot.cursorPosition
@ -247,45 +267,51 @@ Page {
} }
} }
} }
IconButton { IconButton {
id: btnSmileys id: btnSmileys
property string selection
onSelectionChanged: {
console.log(selection)
}
property string selection
opacity: 0.7
icon {
color: Theme.secondaryColor
width: Theme.iconSizeSmallPlus
fillMode: Image.PreserveAspectFit
source: "../../qml/images/icon-m-emoji.svg"
}
anchors { anchors {
top: warningContent.bottom top: warningContent.bottom
bottom: bottom.top bottom: bottom.top
right: parent.right right: parent.right
rightMargin: Theme.paddingSmall rightMargin: Theme.paddingSmall
} }
opacity: 0.8 onSelectionChanged: { console.log(selection) }
icon.source: "../../qml/images/emojiselect.svg" + (pressed ? Theme.highlightColor : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor)) onClicked: pageStack.push(emojiSelect)
onClicked: pageStack.push(firstWizardPage)
} }
SilicaGridView { SilicaGridView {
id: uploadedImages id: uploadedImages
width: parent.width width: parent.width
anchors.top: bottom.toot anchors.top: bottom.toot
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
height: mediaModel.count ? Theme.itemSizeSmall : 0 height: mediaModel.count ? Theme.itemSizeExtraLarge : 0
model: mediaModel model: mediaModel
cellWidth: uploadedImages.width / 4 cellWidth: uploadedImages.width / 4
cellHeight: Theme.itemSizeSmall cellHeight: Theme.itemSizeExtraLarge
delegate: BackgroundItem { delegate: BackgroundItem {
id: myDelegate id: myDelegate
width: uploadedImages.cellWidth width: uploadedImages.cellWidth
height: uploadedImages.cellHeight height: uploadedImages.cellHeight
RemorseItem { RemorseItem {
id: remorse id: remorse
} }
Image { Image {
anchors.fill: parent anchors.fill: parent
fillMode: Image.PreserveAspectCrop fillMode: Image.PreserveAspectCrop
source: model.preview_url source: model.preview_url
} }
onClicked: { onClicked: {
var idx = index var idx = index
console.log(idx) console.log(idx)
@ -303,7 +329,6 @@ Page {
duration: 800 duration: 800
} }
} }
remove: Transition { remove: Transition {
NumberAnimation { NumberAnimation {
property: "opacity" property: "opacity"
@ -320,6 +345,7 @@ Page {
} }
} }
} }
IconButton { IconButton {
id: btnContentWarning id: btnContentWarning
anchors { anchors {
@ -332,6 +358,7 @@ Page {
+ (pressed ? Theme.highlightColor : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor)) + (pressed ? Theme.highlightColor : (warningContent.visible ? Theme.secondaryHighlightColor : Theme.primaryColor))
onClicked: warningContent.visible = !warningContent.visible onClicked: warningContent.visible = !warningContent.visible
} }
IconButton { IconButton {
id: btnAddImage id: btnAddImage
enabled: mediaModel.count < 4 enabled: mediaModel.count < 4
@ -357,21 +384,18 @@ Page {
}) })
} }
} }
ImageUploader { ImageUploader {
id: imageUploader id: imageUploader
onProgressChanged: { onProgressChanged: {
console.log("progress " + progress) console.log("progress " + progress)
uploadProgress.width = parent.width * progress uploadProgress.width = parent.width * progress
} }
onSuccess: { onSuccess: {
uploadProgress.width = 0 uploadProgress.width = 0
console.log(replyData) console.log(replyData)
mediaModel.append(JSON.parse(replyData)) mediaModel.append(JSON.parse(replyData))
} }
onFailure: { onFailure: {
uploadProgress.width = 0 uploadProgress.width = 0
btnAddImage.enabled = true btnAddImage.enabled = true
@ -379,15 +403,16 @@ Page {
console.log(statusText) console.log(statusText)
} }
} }
ComboBox { ComboBox {
id: privacy id: privacy
anchors { anchors {
top: toot.bottom top: toot.bottom
topMargin: -Theme.paddingSmall * 1.5 topMargin: -Theme.paddingSmall * 1.5
left: btnAddImage.right left: btnAddImage.right
right: btnSend.left right: btnSend.left
} }
menu: ContextMenu { menu: ContextMenu {
MenuItem { MenuItem {
text: qsTr("Public") text: qsTr("Public")
} }
@ -421,7 +446,6 @@ Page {
console.log(mediaModel.get(k).id) console.log(mediaModel.get(k).id)
media_ids.push(mediaModel.get(k).id) media_ids.push(mediaModel.get(k).id)
} }
var msg = { var msg = {
"action": 'statuses', "action": 'statuses',
"method": 'POST', "method": 'POST',
@ -445,7 +469,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!"))
} }
} }
@ -453,11 +477,12 @@ Page {
Rectangle { Rectangle {
id: uploadProgress id: uploadProgress
color: Theme.highlightBackgroundColor color: Theme.highlightBackgroundColor
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.left: parent.left anchors.left: parent.left
height: 3 height: Theme.itemSizeSmall * 0.05
} }
} }
Component.onCompleted: { Component.onCompleted: {
toot.cursorPosition = toot.text.length toot.cursorPosition = toot.text.length
if (mdl.count > 0) { if (mdl.count > 0) {
@ -490,157 +515,66 @@ Page {
"conf": Logic.conf "conf": Logic.conf
}) })
} }
Component {
id: firstWizardPage
Dialog { BackgroundItem {
id: emoticonsDialog id: hiddenPanel
canAccept: false //selector.currentIndex >= 0 visible: !panel.open
height: Theme.paddingLarge * 0.5
width: parent.width
opacity: enabled ? 0.6 : 0.0
Behavior on opacity { FadeAnimator { duration: 400 } }
anchors {
horizontalCenter: parent.horizontalCenter
bottom: parent.bottom
}
//acceptDestination: conversationPage MouseArea {
onAcceptPendingChanged: { anchors.fill: parent
if (acceptPending) { onClicked: panel.open = !panel.open
}
// Tell the destination page what the selected category is Rectangle {
// acceptDestinationInstance.category = selector.value id: hiddenPanelBackground
} width: parent.width
} height: parent.height
color: Theme.highlightBackgroundColor
opacity: 0.4
anchors.fill: parent
}
SilicaGridView { Rectangle {
id: gridView id: progressBarBackground
anchors.fill: parent width: parent.width
cellWidth: gridView.width / 6 height: progressBarHiddenPanel.height
cellHeight: cellWidth color: Theme.highlightBackgroundColor
header: PageHeader { opacity: 0.2
title: qsTr("Emojis") anchors {
description: qsTr("Tap to insert") left: parent.left
} right: parent.right
model: ListModel { top: parent.top
ListElement { section: "smileys"; glyph: "😁" } }
ListElement { section: "smileys"; glyph: "😂" } }
ListElement { section: "smileys"; glyph: "😃" }
ListElement { section: "smileys"; glyph: "😄" }
ListElement { section: "smileys"; glyph: "😅" }
ListElement { section: "smileys"; glyph: "😆" }
ListElement { section: "smileys"; glyph: "😉" }
ListElement { section: "smileys"; glyph: "😊" }
ListElement { section: "smileys"; glyph: "😋" }
ListElement { section: "smileys"; glyph: "😌" }
ListElement { section: "smileys"; glyph: "😍" }
ListElement { section: "smileys"; glyph: "😏" }
ListElement { section: "smileys"; glyph: "😒" }
ListElement { section: "smileys"; glyph: "😓" }
ListElement { section: "smileys"; glyph: "😔" }
ListElement { section: "smileys"; glyph: "😖" }
ListElement { section: "smileys"; glyph: "😘" }
ListElement { section: "smileys"; glyph: "😚" }
ListElement { section: "smileys"; glyph: "😜" }
ListElement { section: "smileys"; glyph: "😝" }
ListElement { section: "smileys"; glyph: "😞" }
ListElement { section: "smileys"; glyph: "😠" }
ListElement { section: "smileys"; glyph: "😡" }
ListElement { section: "smileys"; glyph: "😢" }
ListElement { section: "smileys"; glyph: "😣" }
ListElement { section: "smileys"; glyph: "😤" }
ListElement { section: "smileys"; glyph: "😥" }
ListElement { section: "smileys"; glyph: "😨" }
ListElement { section: "smileys"; glyph: "😩" }
ListElement { section: "smileys"; glyph: "😪" }
ListElement { section: "smileys"; glyph: "😫" }
ListElement { section: "smileys"; glyph: "😭" }
ListElement { section: "smileys"; glyph: "😰" }
ListElement { section: "smileys"; glyph: "😱" }
ListElement { section: "smileys"; glyph: "😲" }
ListElement { section: "smileys"; glyph: "😳" }
ListElement { section: "smileys"; glyph: "😵" }
ListElement { section: "smileys"; glyph: "😷" }
ListElement { section: "smileys"; glyph: "😸" }
ListElement { section: "smileys"; glyph: "😹" }
ListElement { section: "smileys"; glyph: "😺" }
ListElement { section: "smileys"; glyph: "😻" }
ListElement { section: "smileys"; glyph: "😼" }
ListElement { section: "smileys"; glyph: "😽" }
ListElement { section: "smileys"; glyph: "😾" }
ListElement { section: "smileys"; glyph: "😿" }
ListElement { section: "smileys"; glyph: "🙀" }
ListElement { section: "smileys"; glyph: "🙅" }
ListElement { section: "smileys"; glyph: "🙆" }
ListElement { section: "smileys"; glyph: "🙇" }
ListElement { section: "smileys"; glyph: "🙈" }
ListElement { section: "smileys"; glyph: "🙉" }
ListElement { section: "smileys"; glyph: "🙊" }
ListElement { section: "smileys"; glyph: "🙋" }
ListElement { section: "smileys"; glyph: "🙌" }
ListElement { section: "smileys"; glyph: "🙍" }
ListElement { section: "smileys"; glyph: "🙎" }
ListElement { section: "smileys"; glyph: "🙏" }
ListElement { section: "Transport and map"; glyph: "🚀" } Rectangle {
ListElement { section: "Transport and map"; glyph: "🚃" } id: progressBarHiddenPanel
ListElement { section: "Transport and map"; glyph: "🚀" } width: toot.text.length ? panel.width * (toot.text.length / tootMaxChar) : 0
ListElement { section: "Transport and map"; glyph: "🚄" } height: Theme.itemSizeSmall * 0.05
ListElement { section: "Transport and map"; glyph: "🚅" } color: Theme.highlightBackgroundColor
ListElement { section: "Transport and map"; glyph: "🚇" } opacity: 0.7
ListElement { section: "Transport and map"; glyph: "🚉" } anchors {
ListElement { section: "Transport and map"; glyph: "🚌" } left: parent.left
ListElement { section: "Transport and map"; glyph: "🚏" } top: parent.top
ListElement { section: "Transport and map"; glyph: "🚑" } }
ListElement { section: "Transport and map"; glyph: "🚒" } }
ListElement { section: "Transport and map"; glyph: "🚓" }
ListElement { section: "Transport and map"; glyph: "🚕" }
ListElement { section: "Transport and map"; glyph: "🚗" }
ListElement { section: "Transport and map"; glyph: "🚙" }
ListElement { section: "Transport and map"; glyph: "🚚" }
ListElement { section: "Transport and map"; glyph: "🚢" }
ListElement { section: "Transport and map"; glyph: "🚨" }
ListElement { section: "Transport and map"; glyph: "🚩" }
ListElement { section: "Transport and map"; glyph: "🚪" }
ListElement { section: "Transport and map"; glyph: "🚫" }
ListElement { section: "Transport and map"; glyph: "🚬" }
ListElement { section: "Transport and map"; glyph: "🚭" }
ListElement { section: "Transport and map"; glyph: "🚲" }
ListElement { section: "Transport and map"; glyph: "🚶" }
ListElement { section: "Transport and map"; glyph: "🚹" }
ListElement { section: "Transport and map"; glyph: "🚺" }
ListElement { section: "Transport and map"; glyph: "🚻" }
ListElement { section: "Transport and map"; glyph: "🚼" }
ListElement { section: "Transport and map"; glyph: "🚽" }
ListElement { section: "Transport and map"; glyph: "🚾" }
ListElement { section: "Transport and map"; glyph: "🛀" }
ListElement { section: "Horoscope Signs"; glyph: "♈" } }
ListElement { section: "Horoscope Signs"; glyph: "♉" }
ListElement { section: "Horoscope Signs"; glyph: "♊" } EmojiSelect {
ListElement { section: "Horoscope Signs"; glyph: "♋" } id: emojiSelect
ListElement { section: "Horoscope Signs"; glyph: "♌" }
ListElement { section: "Horoscope Signs"; glyph: "♍" }
ListElement { section: "Horoscope Signs"; glyph: "♎" }
ListElement { section: "Horoscope Signs"; glyph: "♏" }
ListElement { section: "Horoscope Signs"; glyph: "♐" }
ListElement { section: "Horoscope Signs"; glyph: "♑" }
ListElement { section: "Horoscope Signs"; glyph: "♒" }
ListElement { section: "Horoscope Signs"; glyph: "♓" }
}
delegate: BackgroundItem {
width: gridView.cellWidth
height: gridView.cellHeight
Label {
anchors.centerIn: parent
color: (highlighted ? Theme.secondaryHighlightColor : Theme.secondaryColor)
font.pixelSize: Theme.fontSizeLarge
text: glyph
}
onClicked: {
var cursorPosition = toot.cursorPosition
toot.text = toot.text.substring(
0, cursorPosition) + model.glyph + toot.text.substring(
cursorPosition)
toot.cursorPosition = cursorPosition + model.glyph.length
emoticonsDialog.canAccept = true
emoticonsDialog.accept()
}
}
}
}
} }
InfoBanner {
id: sentBanner
}
} }

View file

@ -1,33 +1,3 @@
/*
Copyright (C) 2013 Jolla Ltd.
Contact: Thomas Perl <thomas.perl@jollamobile.com>
All rights reserved.
You may use this file under the terms of BSD license as follows:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Jolla Ltd nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
import QtQuick 2.0 import QtQuick 2.0
import QtWebKit 3.0 import QtWebKit 3.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
@ -61,14 +31,13 @@ Page {
focus: true focus: true
label: qsTr("Enter a valid Mastodon instance URL") label: qsTr("Enter a valid Mastodon instance URL")
text: "https://" text: "https://"
placeholderText: "https://mastodon.social"
width: parent.width width: parent.width
validator: RegExpValidator { regExp: /^(ftp|http|https):\/\/[^ "]+$/ } validator: RegExpValidator { regExp: /^(ftp|http|https):\/\/[^ "]+$/ }
EnterKey.enabled: instance.acceptableInput; EnterKey.enabled: instance.acceptableInput;
EnterKey.highlighted: instance.acceptableInput; EnterKey.highlighted: instance.acceptableInput;
EnterKey.iconSource: "image://theme/icon-m-accept" EnterKey.iconSource: "image://theme/icon-m-accept"
EnterKey.onClicked: { EnterKey.onClicked: {
Logic.api = new Logic.MastodonAPI({ instance: instance.text, api_user_token: "" }); Logic.api = Logic.mastodonAPI({ instance: instance.text, api_user_token: "" });
Logic.api.registerApplication("Tooter", Logic.api.registerApplication("Tooter",
'http://localhost/harbour-tooter', // redirect uri, we will need this later on 'http://localhost/harbour-tooter', // redirect uri, we will need this later on
["read", "write", "follow"], //scopes ["read", "write", "follow"], //scopes
@ -192,5 +161,5 @@ Page {
} }
} }
} }
}
}

View file

@ -1,33 +1,3 @@
/*
Copyright (C) 2013 Jolla Ltd.
Contact: Thomas Perl <thomas.perl@jollamobile.com>
All rights reserved.
You may use this file under the terms of BSD license as follows:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Jolla Ltd nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
import QtQuick 2.0 import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
import "../lib/API.js" as Logic import "../lib/API.js" as Logic
@ -36,8 +6,9 @@ import "./components/"
Page { Page {
id: mainPage id: mainPage
property bool isFirstPage: true property bool isFirstPage: true
property bool isTablet: true; //Screen.sizeCategory >= Screen.Large property bool isTablet: true //Screen.sizeCategory >= Screen.Large
// The effective value will be restricted by ApplicationWindow.allowedOrientations // The effective value will be restricted by ApplicationWindow.allowedOrientations
allowedOrientations: Orientation.All allowedOrientations: Orientation.All
@ -61,7 +32,7 @@ Page {
VisualItemModel { VisualItemModel {
id: visualModel id: visualModel
MyList{ MyList{
id: tlHome; id: tlHome
title: qsTr("Home") title: qsTr("Home")
type: "timelines/home" type: "timelines/home"
mdl: Logic.modelTLhome mdl: Logic.modelTLhome
@ -69,51 +40,62 @@ Page {
height: parent.itemHeight height: parent.itemHeight
onOpenDrawer: infoPanel.open = setDrawer onOpenDrawer: infoPanel.open = setDrawer
} }
MyList{ MyList{
id: tlNotifications; id: tlNotifications
title: qsTr("Notifications") title: qsTr("Notifications")
type: "notifications" type: "notifications"
notifier: true notifier: true
mdl: Logic.modelTLnotifications mdl: Logic.modelTLnotifications
width: parent.itemWidth width: parent.itemWidth
height: parent.itemHeight height: parent.itemHeight
onOpenDrawer: infoPanel.open = setDrawer onOpenDrawer: infoPanel.open = setDrawer
} }
MyList{ MyList{
id: tlLocal; id: tlLocal
title: qsTr("Local") title: qsTr("Local")
type: "timelines/public?local=true" type: "timelines/public?local=true"
//params: ["local", true] //params: ["local", true]
mdl: Logic.modelTLlocal mdl: Logic.modelTLlocal
width: parent.itemWidth width: parent.itemWidth
height: parent.itemHeight height: parent.itemHeight
onOpenDrawer: infoPanel.open = setDrawer onOpenDrawer: infoPanel.open = setDrawer
} }
MyList{ MyList{
id: tlPublic; id: tlPublic
title: qsTr("Federated") title: qsTr("Federated")
type: "timelines/public" type: "timelines/public"
mdl: Logic.modelTLpublic mdl: Logic.modelTLpublic
width: parent.itemWidth width: parent.itemWidth
height: parent.itemHeight height: parent.itemHeight
onOpenDrawer: infoPanel.open = setDrawer onOpenDrawer: infoPanel.open = setDrawer
} }
Item { Item {
id: tlSearch; id: tlSearch
property ListModel mdl: ListModel {}
property string search
width: parent.itemWidth width: parent.itemWidth
height: parent.itemHeight height: parent.itemHeight
property ListModel mdl: ListModel {}
property string search;
onSearchChanged: { onSearchChanged: {
console.log(search) console.log(search)
loader.sourceComponent = loading loader.sourceComponent = loading
loader.sourceComponent = search.charAt(0) === "@" ? userListComponent : tagListComponent if (search.charAt(0) === "@") {
loader.sourceComponent = userListComponent
} else if (search.charAt(0) === "#") {
loader.sourceComponent = tagListComponent
} else { loader.sourceComponent = wordListComponent}
} }
Loader { Loader {
id: loader id: loader
anchors.fill: parent anchors.fill: parent
} }
Column { Column {
id: headerContainer id: headerContainer
width: tlSearch.width width: tlSearch.width
@ -133,6 +115,7 @@ Page {
} }
} }
} }
Component { Component {
id: loading id: loading
BusyIndicator { BusyIndicator {
@ -141,6 +124,7 @@ Page {
running: true running: true
} }
} }
Component { Component {
id: tagListComponent id: tagListComponent
MyList { MyList {
@ -165,6 +149,7 @@ Page {
} }
} }
} }
Component { Component {
id: userListComponent id: userListComponent
MyList { MyList {
@ -185,7 +170,7 @@ Page {
delegate: ItemUser { delegate: ItemUser {
onClicked: { onClicked: {
pageStack.push(Qt.resolvedUrl("Profile.qml"), { pageStack.push(Qt.resolvedUrl("ProfilePage.qml"), {
"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,
@ -203,11 +188,33 @@ Page {
} }
} }
Component {
id: wordListComponent
MyList {
id: view3
mdl: ListModel {}
width: parent.width
height: parent.height
onOpenDrawer: infoPanel.open = setDrawer
anchors.fill: parent
currentIndex: -1 // otherwise currentItem will steal focus
header: Item {
id: header
width: headerContainer.width
height: headerContainer.height
Component.onCompleted: headerContainer.parent = header
}
delegate: VisualContainer
Component.onCompleted: {
view3.type = "timelines/tag/"+tlSearch.search
view3.loadData("append")
}
}
}
} }
} }
SlideshowView { SlideshowView {
id: slideshow id: slideshow
width: parent.width width: parent.width
@ -218,12 +225,9 @@ Page {
onCurrentIndexChanged: { onCurrentIndexChanged: {
navigation.slideshowIndexChanged(currentIndex) navigation.slideshowIndexChanged(currentIndex)
} }
anchors { anchors {
fill: parent fill: parent
leftMargin: 0
top: parent.top top: parent.top
topMargin: 0
rightMargin: mainPage.isPortrait ? 0 : infoPanel.visibleSize rightMargin: mainPage.isPortrait ? 0 : infoPanel.visibleSize
bottomMargin: mainPage.isPortrait ? infoPanel.visibleSize : 0 bottomMargin: mainPage.isPortrait ? infoPanel.visibleSize : 0
} }
@ -233,22 +237,22 @@ Page {
} }
IconButton { IconButton {
anchors { id: newToot
right: (mainPage.isPortrait ? parent.right : infoPanel.left)
bottom: (mainPage.isPortrait ? infoPanel.top : parent.bottom)
margins: {
left: Theme.paddingLarge
bottom: Theme.paddingLarge
}
}
id: newTweet
width: Theme.iconSizeLarge width: Theme.iconSizeLarge
height: width height: width
visible: !isPortrait ? true : !infoPanel.open visible: !isPortrait ? true : !infoPanel.open
icon.source: "image://theme/icon-l-add" icon.source: "image://theme/icon-l-add"
anchors {
right: (mainPage.isPortrait ? parent.right : infoPanel.left)
rightMargin: Theme.paddingLarge
bottom: (mainPage.isPortrait ? infoPanel.top : parent.bottom)
bottomMargin: Theme.paddingLarge
}
onClicked: { onClicked: {
pageStack.push(Qt.resolvedUrl("Conversation.qml"), {headerTitle: qsTr("New Toot"), type: "new"}) pageStack.push(Qt.resolvedUrl("ConversationPage.qml"), {
headerTitle: qsTr("New Toot"),
type: "new"
})
} }
} }
@ -268,11 +272,12 @@ Page {
navigation.navigateTo('search') navigation.navigateTo('search')
} else { } else {
Qt.openUrlExternally(href); Qt.openUrlExternally(href)
} }
} }
Component.onCompleted: { Component.onCompleted: {
console.log("aaa") console.log("aaa")
} }
}
}

View file

@ -1,305 +0,0 @@
import QtQuick 2.0
import Sailfish.Silica 1.0
import "../lib/API.js" as Logic
import "./components/"
import QtGraphicalEffects 1.0
Page {
property ListModel tweets;
property string display_name : "";
property string username : "";
property string profileImage : "";
property int user_id;
property int statuses_count;
property int following_count;
property int followers_count;
property int favourites_count;
property int reblogs_count;
property int count_moments;
property string profileBackground: "";
property string note: "";
property string url: "";
property bool locked : false;
property date created_at;
property bool following : false;
property bool requested : false;
property bool followed_by : false;
property bool blocking : false;
property bool muting : false;
property bool domain_blocking : false;
WorkerScript {
id: worker
source: "../lib/Worker.js"
onMessage: {
console.log(JSON.stringify(messageObject))
if(messageObject.action.indexOf("accounts/search") > -1 ){
user_id = messageObject.data.id
followers_count = messageObject.data.followers_count
following_count = messageObject.data.following_count
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/",
'params' : [ {name: "id", data: user_id}],
'conf' : Logic.conf
};
worker.sendMessage(msg);
list.loadData("prepend")
}
if(messageObject.action === "accounts/relationships/"){
console.log(JSON.stringify(messageObject))
following= messageObject.data.following
requested= messageObject.data.requested
followed_by= messageObject.data.followed_by
blocking= messageObject.data.blocking
muting= messageObject.data.muting
domain_blocking= messageObject.data.domain_blocking
}
switch (messageObject.key) {
case 'followers_count':
followers_count = messageObject.data
break;
case 'following_count':
following_count = messageObject.data
break;
case 'acct':
// line below was commented out, reason unknown
// username = messageObject.data
break;
case 'locked':
locked = messageObject.data
break;
case 'created_at':
created_at = messageObject.data
break;
case 'statuses_count':
statuses_count = messageObject.data
break;
case 'note':
note = messageObject.data
break;
case 'url':
url = messageObject.data
break;
case 'following':
following = messageObject.data
followers_count = followers_count + (following ? 1 : - 1)
break;
case 'muting':
muting = messageObject.data
break;
case 'muting':
muting = messageObject.data
break;
case 'blocking':
blocking = messageObject.data
followers_count = followers_count + (blocking ? -1 : 0)
break;
case 'followed_by':
followed_by = messageObject.data
break;
}
}
}
// The effective value will be restricted by ApplicationWindow.allowedOrientations
allowedOrientations: Orientation.All
Component.onCompleted: {
var msg;
if (user_id) {
msg = {
'action' : "accounts/relationships/",
'params' : [ {name: "id", data: user_id}],
'conf' : Logic.conf
};
worker.sendMessage(msg);
msg = {
'action' : "accounts/"+user_id,
'conf' : Logic.conf
};
worker.sendMessage(msg);
} else {
var instance = Logic.conf['instance'].split("//")
msg = {
'action' : "accounts/search?limit=1&q="+username.replace("@"+instance[1], ""),
'conf' : Logic.conf
};
worker.sendMessage(msg);
}
}
MyList {
id: list
header: ProfileHeader {
id: header
title: display_name
description: username
image: profileImage
bg: profileBackground
}
anchors {
top: parent.top
bottom: expander.top
left: parent.left
right: parent.right
}
clip: true
mdl: ListModel {}
type: "accounts/"+user_id+"/statuses"
vars: {}
conf: Logic.conf
}
ExpandingSectionGroup {
id: expander
//currentIndex: 0
anchors {
bottom: parent.bottom
left: parent.left
right: parent.right
}
ExpandingSection {
title: qsTr("Summary")
content.sourceComponent: Column {
spacing: Theme.paddingMedium
anchors.bottomMargin: Theme.paddingLarge
DetailItem {
visible: followers_count ? true : false
label: qsTr("Followers")
value: followers_count
}
DetailItem {
visible: following_count ? true : false
label: qsTr("Following")
value: (following_count)
}
DetailItem {
visible: statuses_count ? true : false
label: qsTr("Statuses")
value: (statuses_count)
}
DetailItem {
visible: favourites_count ? true : false
label: qsTr("Favourites")
value: (favourites_count)
}
Column {
spacing: Theme.paddingMedium
anchors.horizontalCenter: parent.horizontalCenter
Button {
id: btnFollow
text: (following ? qsTr("Unfollow") : (requested ? qsTr("Follow request sent!") : qsTr("Follow")))
onClicked: {
var msg = {
'method' : 'POST',
'params' : [],
'action' : "accounts/" + user_id + (following ? '/unfollow':'/follow'),
'conf' : Logic.conf
};
worker.sendMessage(msg);
}
}
Button {
id: btnMute
text: (muting ? qsTr("Unmute") : qsTr("Mute"))
onClicked: {
var msg = {
'method' : 'POST',
'params' : [],
'action' : "accounts/" + user_id + (muting ? '/unmute':'/mute'),
'conf' : Logic.conf
};
worker.sendMessage(msg);
}
}
Button {
id: btnBlock
text: (blocking ? qsTr("Unblock") : qsTr("Block") )
onClicked: {
var msg = {
'method' : 'POST',
'params' : [],
'action' : "accounts/" + user_id + (blocking ? '/unblock':'/block'),
'conf' : Logic.conf
};
worker.sendMessage(msg);
}
}
}
Label {
text: " "
}
}
}
ExpandingSection {
title: qsTr("Bio")
content.sourceComponent: Column {
spacing: Theme.paddingMedium
anchors.bottomMargin: Theme.paddingLarge
Text {
x: Theme.horizontalPageMargin
width: parent.width - ( 2 * Theme.horizontalPageMargin )
id: txtnote
text: note
font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.secondaryColor
linkColor: Theme.secondaryHighlightColor
wrapMode: Text.Wrap
anchors {
horizontalCenter: parent.horizontalCenter
}
onLinkActivated: {
var test = link.split("/")
console.log(link)
console.log(JSON.stringify(test))
console.log(JSON.stringify(test.length))
if (test.length === 5 && (test[3] === "tags" || test[3] === "tag") ) {
pageStack.pop(pageStack.find(function(page) {
var check = page.isFirstPage === true;
if (check)
page.onLinkActivated(link)
return check;
}));
send(link)
// function still missing for user accounts
// } else if (test.length === 4 && test[3][0] === "@" ) {
} else {
Qt.openUrlExternally(link);
}
}
}
Column {
spacing: Theme.paddingMedium
anchors.horizontalCenter: parent.horizontalCenter
Button {
text: qsTr("Open Profile in Browser")
onClicked: {
Qt.openUrlExternally(url);
}
}
}
Label {
text: " "
}
}
}
}
}

397
qml/pages/ProfilePage.qml Normal file
View file

@ -0,0 +1,397 @@
import QtQuick 2.0
import Sailfish.Silica 1.0
import QtGraphicalEffects 1.0
import "../lib/API.js" as Logic
import "./components/"
Page {
id: profilePage
property ListModel tweets
property string display_name: ""
property string username: ""
property string profileImage: ""
property string profileBackground: ""
property string note: ""
property string url: ""
property string user_id: ""
property int statuses_count
property int following_count
property int followers_count
property int favourites_count
property int reblogs_count
property int count_moments
property bool locked: false
property bool bot: false
property bool following: false
property bool requested: false
property bool followed_by: false
property bool blocking: false
property bool muting: false
property bool domain_blocking: false
property date created_at
WorkerScript {
id: worker
source: "../lib/Worker.js"
onMessage: {
console.log(JSON.stringify(messageObject))
if(messageObject.action.indexOf("accounts/search") > -1 ){
user_id = messageObject.data.id
followers_count = messageObject.data.followers_count
following_count = messageObject.data.following_count
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/",
'params' : [ {name: "id", data: user_id}],
'conf' : Logic.conf
};
worker.sendMessage(msg);
list.loadData("prepend")
}
if(messageObject.action === "accounts/relationships/"){
console.log(JSON.stringify(messageObject))
following= messageObject.data.following
requested= messageObject.data.requested
followed_by= messageObject.data.followed_by
blocking= messageObject.data.blocking
muting= messageObject.data.muting
domain_blocking= messageObject.data.domain_blocking
}
switch (messageObject.key) {
case 'followers_count':
followers_count = messageObject.data
break;
case 'following_count':
following_count = messageObject.data
break;
case 'acct':
// line below was commented out, reason unknown
// username = messageObject.data
break;
case 'locked':
locked = messageObject.data
break;
case 'bot':
bot = messageObject.data
break;
case 'created_at':
created_at = messageObject.data
break;
case 'statuses_count':
statuses_count = messageObject.data
break;
case 'note':
note = messageObject.data
break;
case 'url':
url = messageObject.data
break;
case 'following':
following = messageObject.data
followers_count = followers_count + (following ? 1 : - 1)
break;
case 'muting':
muting = messageObject.data
break;
case 'blocking':
blocking = messageObject.data
followers_count = followers_count + (blocking ? -1 : 0)
break;
case 'followed_by':
followed_by = messageObject.data
break;
}
}
}
// The effective value will be restricted by ApplicationWindow.allowedOrientations
allowedOrientations: Orientation.All
Component.onCompleted: {
var msg
if (user_id) {
msg = {
'action' : "accounts/relationships/",
'params' : [ {name: "id", data: user_id}],
'conf' : Logic.conf
}
worker.sendMessage(msg)
msg = {
'action' : "accounts/"+user_id,
'conf' : Logic.conf
}
worker.sendMessage(msg)
} else {
var instance = Logic.conf['instance'].split("//")
msg = {
'action' : "accounts/search?limit=1&q="+username.replace("@"+instance[1], ""),
'conf' : Logic.conf
}
worker.sendMessage(msg)
}
}
MyList {
id: list
header: ProfileHeader {
id: profileHeader
title: display_name
description: username
image: profileImage
bg: profileBackground
}
clip: true
mdl: ListModel {}
type: "accounts/"+user_id+"/statuses"
vars: {}
conf: Logic.conf
anchors {
top: parent.top
bottom: profileExpander.top
left: parent.left
right: parent.right
}
}
ExpandingSectionGroup { // ProfilePage ExpandingSection
id: profileExpander
anchors {
bottom: parent.bottom
left: parent.left
right: parent.right
}
ExpandingSection {
id: expandingSection1
title:
//: If there's no good translation for "About", use "Details" (in details about profile).
qsTr("About")
content.sourceComponent: Column {
height: Math.min( txtContainer, parent.height * 0.7 )
spacing: Theme.paddingLarge
Item {
id: txtContainer
width: parent.width
height: Math.min( txtNote.height, parent.height * 0.55 )
visible: {
if ((note.text === "") || ( note.text === "<p></p>" )) {
false
} else {
true
}
}
SilicaFlickable {
id: txtFlickable
contentWidth: parent.width
contentHeight: txtNote.height
anchors.fill: parent
clip: true
VerticalScrollDecorator {}
Label {
id: txtNote
text: note
textFormat: Text.StyledText
color: Theme.secondaryColor
font.pixelSize: Theme.fontSizeExtraSmall
linkColor: Theme.highlightColor
wrapMode: Text.Wrap
width: parent.width - ( 2 * Theme.horizontalPageMargin )
anchors.horizontalCenter: parent.horizontalCenter
onLinkActivated: {
var test = link.split("/")
console.log(link)
console.log(JSON.stringify(test))
console.log(JSON.stringify(test.length))
if (test.length === 5 && (test[3] === "tags" || test[3] === "tag") ) {
pageStack.pop(pageStack.find(function(page) {
var check = page.isFirstPage === true;
if (check)
page.onLinkActivated(link)
return check;
}));
send(link)
} else if (test.length === 4 && test[3][0] === "@" ) {
pageStack.pop(pageStack.find(function(page) {
var check = page.isFirstPage === true;
if (check)
page.onLinkActivated(link)
return check;
}));
} else {
Qt.openUrlExternally(link);
}
}
}
}
}
Item { // dummy item for spacing
height: Theme.paddingSmall
}
Row {
id: statsRow
spacing: Theme.paddingLarge
anchors.horizontalCenter: parent.horizontalCenter
anchors.leftMargin: Theme.paddingLarge
anchors.rightMargin: Theme.paddingLarge
Text {
id: txtFollowers
visible: followers_count ? true : false
text: followers_count+" "+
//: Will show as: "35 Followers"
qsTr("Followers")
font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.highlightColor
wrapMode: Text.Wrap
}
Text {
id: txtFollowing
visible: following_count ? true : false
text: following_count+" "+
//: Will show as: "23 Following"
qsTr("Following")
font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.highlightColor
wrapMode: Text.Wrap
}
Text {
id: txtStatuses
visible: statuses_count ? true : false
text: statuses_count+" "+
//: Will show as: "115 Statuses"
qsTr("Statuses")
font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.highlightColor
wrapMode: Text.Wrap
}
/*Text {
id: txtFavourites
visible: favourites_count ? true : false
text: favourites_count+" "+
//: Will show as: "56 Favourites"
qsTr("Favourites")
font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.highlightColor
wrapMode: Text.Wrap
} */
}
Item { // dummy item for spacing
height: Theme.paddingSmall
}
ButtonLayout {
id: btnLayout
Button {
id: btnMention
preferredWidth: Theme.buttonWidthSmall
text: "Mention"
onClicked: {
pageStack.push(Qt.resolvedUrl("ConversationPage.qml"), {
headerTitle: qsTr("Mention"),
description: "@"+username,
type: "new"
})
}
}
Button {
id: btnFollow
preferredWidth: Theme.buttonWidthSmall
text: (following ?
//: Is a button. Keep it as short as possible.
qsTr("Unfollow") : (requested ?
//: Is a button. Keep it as short as possible.
qsTr("Requested") :
//: Is a button. Keep it as short as possible.
qsTr("Follow")))
color: (following ? highlightColor : (requested ? palette.errorColor : palette.primaryColor))
onClicked: {
var msg = {
'method' : 'POST',
'params' : [],
'action' : "accounts/" + user_id + (following ? '/unfollow':'/follow'),
'conf' : Logic.conf
};
worker.sendMessage(msg);
// to-do: create notification banner "Follow request sent!"
}
}
Button {
id: btnMute
preferredWidth: Theme.buttonWidthSmall
text: (muting ?
//: Is a button. Keep it as short as possible.
qsTr("Unmute") :
//: Is a button. Keep it as short as possible.
qsTr("Mute"))
color: (muting ? palette.errorColor : palette.primaryColor)
onClicked: {
var msg = {
'method' : 'POST',
'params' : [],
'action' : "accounts/" + user_id + (muting ? '/unmute':'/mute'),
'conf' : Logic.conf
};
worker.sendMessage(msg);
}
}
Button {
id: btnBlock
preferredWidth: Theme.buttonWidthSmall
text: (blocking ?
//: Is a button. Keep it as short as possible.
qsTr("Unblock") :
//: Is a button. Keep it as short as possible.
qsTr("Block") )
color: (blocking ? palette.errorColor : palette.primaryColor)
onClicked: {
var msg = {
'method' : 'POST',
'params' : [],
'action' : "accounts/" + user_id + (blocking ? '/unblock':'/block'),
'conf' : Logic.conf
};
worker.sendMessage(msg);
}
}
}
Button {
id: btnBrowser
text: qsTr("Open in Browser")
preferredWidth: Theme.buttonWidthMedium
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
Qt.openUrlExternally(url)
}
}
Rectangle { // dummy item for spacing
height: Theme.paddingSmall
width: parent.width
opacity: 0
}
}
}
}
}

View file

@ -2,84 +2,132 @@ import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
import "../lib/API.js" as Logic import "../lib/API.js" as Logic
Page { Page {
id: settingsPage
allowedOrientations: Orientation.All
SilicaFlickable { SilicaFlickable {
anchors.fill: parent
contentHeight: column.height + Theme.paddingLarge contentHeight: column.height + Theme.paddingLarge
contentWidth: parent.width contentWidth: parent.width
anchors.fill: parent
RemorsePopup { id: remorsePopup } RemorsePopup { id: remorsePopup }
VerticalScrollDecorator {} VerticalScrollDecorator {}
Column { Column {
id: column id: column
spacing: Theme.paddingSmall spacing: Theme.paddingMedium
width: parent.width width: parent.width
PageHeader { PageHeader {
title: qsTr("Settings") title: qsTr("Settings")
} }
Column {
// No spacing in this column SectionHeader { text: qsTr("Options")}
IconTextSwitch {
text: qsTr("Load Images in Toots")
description: qsTr("Disable this option if you want to preserve your data connection")
icon.source: "image://theme/icon-m-image"
enabled: true
checked: typeof Logic.conf['loadImages'] !== "undefined" && Logic.conf['loadImages']
onClicked: {
Logic.conf['loadImages'] = checked
}
}
SectionHeader { text: qsTr("Account")}
Item {
id: removeAccount
width: parent.width width: parent.width
IconTextSwitch { height: txtRemoveAccount.height + btnRemoveAccount.height + Theme.paddingLarge
id: removeAccount anchors {
text: Logic.conf['login'] ? qsTr("Remove Account") : qsTr("Add Account") left: parent.left
description: Logic.conf['login'] ? qsTr("Deauthorize this app and remove your account") : qsTr("Authorize this app to access your Mastodon account") leftMargin: Theme.horizontalPageMargin
icon.source: Logic.conf['login'] ? "image://theme/icon-m-contact" : "image://theme/icon-m-add" right: parent.right
rightMargin: Theme.paddingLarge
onCheckedChanged: {
remorsePopup.execute(removeAccount.text, function() {
busy = true;
checked = false;
timer1.start();
if (Logic.conf['login']) {
Logic.conf['login'] = false
Logic.conf['instance'] = null;
Logic.conf['api_user_token'] = null;
}
pageStack.push(Qt.resolvedUrl("LoginPage.qml"))
})
}
/* busy = true;
checked = false;
timer1.start()
}*/
Timer {
id: timer1
interval: 4700
onTriggered: parent.busy = false
}
} }
IconTextSwitch {
//enabled: false Icon {
checked: typeof Logic.conf['loadImages'] !== "undefined" && Logic.conf['loadImages'] id: icnRemoveAccount
text: qsTr("Load images in toots") color: Theme.highlightColor
description: qsTr("Disable this option if you want to preserve your data connection") width: Theme.iconSizeMedium
icon.source: "image://theme/icon-m-image" fillMode: Image.PreserveAspectFit
onClicked: { source: Logic.conf['login'] ? "image://theme/icon-m-contact" : "image://theme/icon-m-add"
Logic.conf['loadImages'] = checked anchors.right: parent.right
}
} }
IconTextSwitch {
text: qsTr("Translate") Column {
description: qsTr("Use Transifex to help with app translation to your language") id: clnRemoveAccount
icon.source: "image://theme/icon-m-font-size" spacing: Theme.paddingMedium
onCheckedChanged: { anchors {
busy = true; left: parent.left
checked = false; right: icnRemoveAccount.left
Qt.openUrlExternally("https://www.transifex.com/dysko/tooter/");
timer2.start()
} }
Timer {
id: timer2 Button {
interval: 4700 id: btnRemoveAccount
onTriggered: parent.busy = false text: Logic.conf['login'] ? qsTr("Remove Account") : qsTr("Add Account")
width: Theme.buttonWidthMedium
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
remorsePopup.execute(btnRemoveAccount.text, function() {
if (Logic.conf['login']) {
Logic.conf['login'] = false
Logic.conf['instance'] = null;
Logic.conf['api_user_token'] = null;
}
pageStack.push(Qt.resolvedUrl("LoginPage.qml"))
})
}
Timer {
id: timer1
interval: 4700
onTriggered: parent.busy = false
}
}
Label {
id: txtRemoveAccount
text: Logic.conf['login'] ? qsTr("Deauthorize this app from using your account and remove account data from phone") : qsTr("Authorize this app to access your Mastodon account")
font.pixelSize: Theme.fontSizeExtraSmall
wrapMode: Text.Wrap
color: Theme.highlightColor
anchors {
left: parent.left
right: parent.right
rightMargin: Theme.paddingLarge + icnRemoveAccount
}
} }
} }
} }
SectionHeader {
text: qsTr("Translate")
}
LinkedLabel {
id: translateLbl
//: 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.
text: qsTr("Use")+" "+"<a href='https://www.transifex.com/dysko/tooter/'>Transifex</a>"+" "+qsTr("to help with app translation to your language.")
textFormat: Text.StyledText
color: Theme.highlightColor
linkColor: Theme.primaryColor
font.family: Theme.fontFamilyHeading
font.pixelSize: Theme.fontSizeExtraSmall
wrapMode: Text.Wrap
anchors {
left: parent.left
leftMargin: Theme.horizontalPageMargin
right: parent.right
rightMargin: Theme.paddingLarge
}
}
SectionHeader { SectionHeader {
text: qsTr("Credits") text: qsTr("Credits")
} }
@ -89,52 +137,61 @@ Page {
anchors { anchors {
left: parent.left left: parent.left
right: parent.right right: parent.right
rightMargin: Theme.horizontalPageMargin rightMargin: Theme.paddingLarge
} }
Repeater { Repeater {
model: ListModel { model: ListModel {
ListElement { ListElement {
name: "Duško Angirević" name: "Duško Angirević"
desc: qsTr("UI/UX design and development") desc: qsTr("UI/UX design and development")
mastodon: "dysko@mastodon.social" mastodon: "dysko@mastodon.social"
mail: "" mail: ""
} }
ListElement { ListElement {
name: "Miodrag Nikolić" name: "Miodrag Nikolić"
desc: qsTr("Visual identity") desc: qsTr("Visual identity")
mastodon: "" mastodon: ""
mail: "micotakis@gmail.com" mail: "micotakis@gmail.com"
} }
ListElement { ListElement {
name: "Molan" name: "Molan"
desc: qsTr("Development and translations") desc: qsTr("Development and translations")
mastodon: "" mastodon: "molan@fosstodon.org"
mail: "mol_an@sunrise.ch" mail: ""
} }
ListElement { ListElement {
name: "Quentin PAGÈS / Quenti ♏" name: "Quentin PAGÈS / Quenti ♏"
desc: qsTr("Occitan & French translation") desc: qsTr("Occitan & French translation")
mastodon: "Quenti@framapiaf.org" mastodon: "Quenti@framapiaf.org"
mail: "" mail: ""
} }
ListElement { ListElement {
name: "Luchy Kon / dashinfantry" name: "Luchy Kon / dashinfantry"
desc: qsTr("Chinese translation") desc: qsTr("Chinese translation")
mastodon: "" mastodon: ""
mail: "dashinfantry@gmail.com" mail: "dashinfantry@gmail.com"
} }
ListElement { ListElement {
name: "André Koot" name: "André Koot"
desc: qsTr("Dutch translation") desc: qsTr("Dutch translation")
mastodon: "meneer@mastodon.social" mastodon: "meneer@mastodon.social"
mail: "https://twitter.com/meneer" mail: "https://twitter.com/meneer"
} }
ListElement { ListElement {
name: "CarmenFdez" name: "CarmenFdez"
desc: qsTr("Spanish translation") desc: qsTr("Spanish translation")
mastodon: "" mastodon: ""
mail: "" mail: ""
} }
ListElement { ListElement {
name: "Mohamed-Touhami MAHDI" name: "Mohamed-Touhami MAHDI"
desc: qsTr("Added README file") desc: qsTr("Added README file")
@ -146,31 +203,29 @@ Page {
Item { Item {
width: parent.width width: parent.width
height: Theme.itemSizeMedium height: Theme.itemSizeMedium
IconButton { IconButton {
id: btn id: btn
icon.source: "image://theme/" + (model.mastodon !== "" ? "icon-m-outline-chat" : "icon-m-mail") + "?" + (pressed
? Theme.highlightColor : Theme.primaryColor)
anchors { anchors {
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
right: parent.right right: parent.right
} }
icon.source: "image://theme/" + (model.mastodon !== "" ? "icon-m-contact" : "icon-m-mail") + "?" + (pressed
? Theme.highlightColor
: Theme.primaryColor)
onClicked: { onClicked: {
if (model.mastodon !== ""){ if (model.mastodon !== ""){
var m = Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject'); var m = Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject');
pageStack.push(Qt.resolvedUrl("Conversation.qml"), { pageStack.push(Qt.resolvedUrl("ConversationPage.qml"), {
toot_id: 0, headerTitle: "Mention",
title: model.name,
description: '@'+model.mastodon, description: '@'+model.mastodon,
avatar: "", type: "new"
mdl: m,
type: "reply"
}) })
} else { } else {
Qt.openUrlExternally("mailto:"+model.mail); Qt.openUrlExternally("mailto:"+model.mail);
} }
} }
} }
Column { Column {
anchors { anchors {
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
@ -183,9 +238,10 @@ Page {
Label { Label {
id: lblName id: lblName
text: model.name text: model.name
color: Theme.secondaryColor color: Theme.highlightColor
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
} }
Label { Label {
text: model.desc text: model.desc
color: Theme.secondaryHighlightColor color: Theme.secondaryHighlightColor
@ -197,4 +253,5 @@ Page {
} }
} }
} }
} }

View file

@ -0,0 +1,166 @@
import QtQuick 2.0
import Sailfish.Silica 1.0
Component {
id: emojiComponent
Dialog {
id: emoticonsDialog
canAccept: false //selector.currentIndex >= 0
onAcceptPendingChanged: {
if (acceptPending) {
// Tell the destination page what the selected category is
// acceptDestinationInstance.category = selector.value
}
}
SilicaGridView {
id: gridView
header: PageHeader {
title: qsTr("Emojis")
description: qsTr("Tap to insert")
}
cellWidth: gridView.width / 6
cellHeight: cellWidth
anchors.fill: parent
model: ListModel {
ListElement { section: "smileys"; glyph: "😁" }
ListElement { section: "smileys"; glyph: "😂" }
ListElement { section: "smileys"; glyph: "😃" }
ListElement { section: "smileys"; glyph: "😄" }
ListElement { section: "smileys"; glyph: "😅" }
ListElement { section: "smileys"; glyph: "😆" }
ListElement { section: "smileys"; glyph: "😉" }
ListElement { section: "smileys"; glyph: "😊" }
ListElement { section: "smileys"; glyph: "😋" }
ListElement { section: "smileys"; glyph: "😎" }
ListElement { section: "smileys"; glyph: "😌" }
ListElement { section: "smileys"; glyph: "😍" }
ListElement { section: "smileys"; glyph: "😘" }
ListElement { section: "smileys"; glyph: "😏" }
ListElement { section: "smileys"; glyph: "😒" }
ListElement { section: "smileys"; glyph: "😓" }
ListElement { section: "smileys"; glyph: "😔" }
ListElement { section: "smileys"; glyph: "😖" }
ListElement { section: "smileys"; glyph: "😚" }
ListElement { section: "smileys"; glyph: "😜" }
ListElement { section: "smileys"; glyph: "😝" }
ListElement { section: "smileys"; glyph: "😞" }
ListElement { section: "smileys"; glyph: "😠" }
ListElement { section: "smileys"; glyph: "😡" }
ListElement { section: "smileys"; glyph: "😢" }
ListElement { section: "smileys"; glyph: "😣" }
ListElement { section: "smileys"; glyph: "😤" }
ListElement { section: "smileys"; glyph: "😥" }
ListElement { section: "smileys"; glyph: "😨" }
ListElement { section: "smileys"; glyph: "😩" }
ListElement { section: "smileys"; glyph: "😪" }
ListElement { section: "smileys"; glyph: "😫" }
ListElement { section: "smileys"; glyph: "😭" }
ListElement { section: "smileys"; glyph: "😰" }
ListElement { section: "smileys"; glyph: "😱" }
ListElement { section: "smileys"; glyph: "😲" }
ListElement { section: "smileys"; glyph: "😳" }
ListElement { section: "smileys"; glyph: "😵" }
ListElement { section: "smileys"; glyph: "😷" }
ListElement { section: "smileys"; glyph: "😸" }
ListElement { section: "smileys"; glyph: "😹" }
ListElement { section: "smileys"; glyph: "😺" }
ListElement { section: "smileys"; glyph: "😻" }
ListElement { section: "smileys"; glyph: "😼" }
ListElement { section: "smileys"; glyph: "😽" }
ListElement { section: "smileys"; glyph: "😾" }
ListElement { section: "smileys"; glyph: "😿" }
ListElement { section: "smileys"; glyph: "🙀" }
ListElement { section: "People and Fantasy"; glyph: "🙅" }
ListElement { section: "People and Fantasy"; glyph: "🙆" }
ListElement { section: "People and Fantasy"; glyph: "🙇" }
ListElement { section: "People and Fantasy"; glyph: "🙈" }
ListElement { section: "People and Fantasy"; glyph: "🙉" }
ListElement { section: "People and Fantasy"; glyph: "🙊" }
ListElement { section: "People and Fantasy"; glyph: "🙋" }
ListElement { section: "People and Fantasy"; glyph: "🙍" }
ListElement { section: "People and Fantasy"; glyph: "🙎" }
ListElement { section: "People and Fantasy"; glyph: "👍" }
ListElement { section: "People and Fantasy"; glyph: "👎" }
ListElement { section: "People and Fantasy"; glyph: "🙌" }
ListElement { section: "People and Fantasy"; glyph: "✊" }
ListElement { section: "People and Fantasy"; glyph: "💪" }
ListElement { section: "People and Fantasy"; glyph: "👉" }
ListElement { section: "People and Fantasy"; glyph: "🙏" }
ListElement { section: "Transport and Map"; glyph: "🚀" }
ListElement { section: "Transport and Map"; glyph: "🚃" }
ListElement { section: "Transport and Map"; glyph: "🚀" }
ListElement { section: "Transport and Map"; glyph: "🚄" }
ListElement { section: "Transport and Map"; glyph: "🚅" }
ListElement { section: "Transport and Map"; glyph: "🚇" }
ListElement { section: "Transport and Map"; glyph: "🚉" }
ListElement { section: "Transport and Map"; glyph: "🚌" }
ListElement { section: "Transport and Map"; glyph: "🚏" }
ListElement { section: "Transport and Map"; glyph: "🚑" }
ListElement { section: "Transport and Map"; glyph: "🚒" }
ListElement { section: "Transport and Map"; glyph: "🚓" }
ListElement { section: "Transport and Map"; glyph: "🚕" }
ListElement { section: "Transport and Map"; glyph: "🚗" }
ListElement { section: "Transport and Map"; glyph: "🚙" }
ListElement { section: "Transport and Map"; glyph: "🚚" }
ListElement { section: "Transport and Map"; glyph: "🚢" }
ListElement { section: "Transport and Map"; glyph: "🚨" }
ListElement { section: "Transport and Map"; glyph: "🚩" }
ListElement { section: "Transport and Map"; glyph: "🚪" }
ListElement { section: "Transport and Map"; glyph: "🚫" }
ListElement { section: "Transport and Map"; glyph: "🚬" }
ListElement { section: "Transport and Map"; glyph: "🚭" }
ListElement { section: "Transport and Map"; glyph: "🚲" }
ListElement { section: "Transport and Map"; glyph: "🚶" }
ListElement { section: "Transport and Map"; glyph: "🚹" }
ListElement { section: "Transport and Map"; glyph: "🚺" }
ListElement { section: "Transport and Map"; glyph: "🚻" }
ListElement { section: "Transport and Map"; glyph: "🚼" }
ListElement { section: "Transport and Map"; glyph: "🚽" }
ListElement { section: "Transport and Map"; glyph: "🚾" }
ListElement { section: "Transport and Map"; glyph: "🛀" }
ListElement { section: "Horoscope Signs"; glyph: "♈" }
ListElement { section: "Horoscope Signs"; glyph: "♉" }
ListElement { section: "Horoscope Signs"; glyph: "♊" }
ListElement { section: "Horoscope Signs"; glyph: "♋" }
ListElement { section: "Horoscope Signs"; glyph: "♌" }
ListElement { section: "Horoscope Signs"; glyph: "♍" }
ListElement { section: "Horoscope Signs"; glyph: "♎" }
ListElement { section: "Horoscope Signs"; glyph: "♏" }
ListElement { section: "Horoscope Signs"; glyph: "♐" }
ListElement { section: "Horoscope Signs"; glyph: "♑" }
ListElement { section: "Horoscope Signs"; glyph: "♒" }
ListElement { section: "Horoscope Signs"; glyph: "♓" }
}
delegate: BackgroundItem {
width: gridView.cellWidth
height: gridView.cellHeight
Label {
text: glyph
font.pixelSize: Theme.fontSizeLarge
color: (highlighted ? Theme.secondaryHighlightColor : Theme.secondaryColor)
anchors.centerIn: parent
}
onClicked: {
var cursorPosition = toot.cursorPosition
toot.text = toot.text.substring(
0, cursorPosition) + model.glyph + toot.text.substring(
cursorPosition)
toot.cursorPosition = cursorPosition + model.glyph.length
emoticonsDialog.canAccept = true
emoticonsDialog.accept()
}
}
VerticalScrollDecorator {flickable: listEmojis }
}
}
}

View file

@ -3,29 +3,25 @@ import Sailfish.Silica 1.0
DockedPanel { DockedPanel {
id: root id: root
z: 100 dock: Dock.Top
width: parent.width width: parent.width
height: content.height height: content.height
dock: Dock.Top
Rectangle { Rectangle {
id: content id: content
width: root.width
height: infoLabel.height + 5*Theme.paddingMedium
//anchors.topMargin: 20
color: Theme.highlightBackgroundColor color: Theme.highlightBackgroundColor
opacity: 1.0 width: root.width
height: infoLabel.height + 2 * Theme.paddingMedium
Label { Label {
id: infoLabel id: infoLabel
text : "" text : ""
color: Theme.primaryColor
font.family: Theme.fontFamilyHeading font.family: Theme.fontFamilyHeading
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
//font.weight: Font.Bold color: Theme.primaryColor
width: parent.width
wrapMode: Text.WrapAnywhere wrapMode: Text.WrapAnywhere
width: parent.width
anchors { anchors {
left: parent.left left: parent.left
leftMargin: Theme.horizontalPageMargin*2 leftMargin: Theme.horizontalPageMargin*2
@ -34,6 +30,7 @@ DockedPanel {
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
} }
} }
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
@ -51,11 +48,12 @@ DockedPanel {
Timer { Timer {
id: autoClose id: autoClose
interval: 6000 interval: 4500
running: false running: false
onTriggered: { onTriggered: {
root.hide() root.hide()
stop() stop()
} }
} }
} }

View file

@ -4,9 +4,11 @@ import Sailfish.Silica 1.0
BackgroundItem { BackgroundItem {
id: delegate id: delegate
signal openUser (string notice) signal openUser (string notice)
height: Theme.itemSizeMedium
width: parent.width width: parent.width
height: Theme.itemSizeMedium
Rectangle { Rectangle {
id: avatar id: avatar
@ -23,6 +25,7 @@ BackgroundItem {
anchors.fill: parent anchors.fill: parent
source: model.account_avatar source: model.account_avatar
} }
BusyIndicator { BusyIndicator {
size: BusyIndicatorSize.Small size: BusyIndicatorSize.Small
opacity: img.status === Image.Ready ? 0.0 : 1.0 opacity: img.status === Image.Ready ? 0.0 : 1.0
@ -30,16 +33,19 @@ BackgroundItem {
running: avatar.status !== Image.Ready; running: avatar.status !== Image.Ready;
anchors.centerIn: parent anchors.centerIn: parent
} }
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: pageStack.push(Qt.resolvedUrl("./../Profile.qml"), { onClicked: pageStack.push(Qt.resolvedUrl("./../ProfilePage.qml"), {
"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
}) })
} }
} }
Column { Column {
anchors.left: avatar.right anchors.left: avatar.right
anchors.leftMargin: Theme.paddingLarge anchors.leftMargin: Theme.paddingLarge
@ -63,6 +69,8 @@ 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
}) })
} }

View file

@ -4,10 +4,12 @@ import QtMultimedia 5.0
Item { Item {
id: holder
property ListModel model property ListModel model
property double wRatio : 16/9 property double wRatio : 16/9
property double hRatio : 9/16 property double hRatio : 9/16
id: holder
width: width width: width
height: height height: height
Component.onCompleted: { Component.onCompleted: {
@ -92,6 +94,7 @@ Item {
} }
} }
} }
MyImage { MyImage {
id: placeholder2 id: placeholder2
width: 2 width: 2
@ -110,6 +113,7 @@ Item {
} }
} }
} }
MyImage { MyImage {
id: placeholder3 id: placeholder3
width: 2 width: 2
@ -128,6 +132,7 @@ Item {
} }
} }
} }
MyImage { MyImage {
id: placeholder4 id: placeholder4
width: 2 width: 2
@ -146,8 +151,5 @@ Item {
} }
} }
} }
} }

View file

@ -2,11 +2,14 @@ import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
import QtMultimedia 5.0 import QtMultimedia 5.0
FullscreenContentPage { FullscreenContentPage {
id: imagePage id: mediaPage
property string type: "" property string type: ""
property string previewURL: "" property string previewURL: ""
property string mediaURL: "" property string mediaURL: ""
allowedOrientations: Orientation.All allowedOrientations: Orientation.All
Component.onCompleted: function(){ Component.onCompleted: function(){
console.log(type) console.log(type)
@ -14,51 +17,35 @@ FullscreenContentPage {
console.log(mediaURL) console.log(mediaURL)
if (type != 'gifv' && type != 'video') { if (type != 'gifv' && type != 'video') {
imagePreview.source = mediaURL imagePreview.source = mediaURL
imageFlickable.visible = true; imageFlickable.visible = true
} else { } else {
video.source = mediaURL video.source = mediaURL
video.fillMode = VideoOutput.PreserveAspectFit video.fillMode = VideoOutput.PreserveAspectFit
video.play() video.play()
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
anchors.fill: parent
contentWidth: imageContainer.width; contentHeight: imageContainer.height
clip: true clip: true
contentWidth: imageContainer.width
contentHeight: imageContainer.height
anchors.fill: parent
Image { Image {
id: videoPreview id: videoPreview
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
anchors.fill: parent anchors.fill: parent
source: previewURL source: previewURL
} }
Video { Video {
id: video id: video
anchors.fill: parent anchors.fill: parent
onErrorStringChanged: function(){ onErrorStringChanged: function(){
videoError.visible = true; videoError.visible = true
} }
onStatusChanged: { onStatusChanged: {
console.log(status) console.log(status)
@ -71,7 +58,6 @@ FullscreenContentPage {
return; return;
} }
} }
onPlaybackStateChanged: { onPlaybackStateChanged: {
console.log(playbackState) console.log(playbackState)
switch (playbackState){ switch (playbackState){
@ -82,11 +68,10 @@ FullscreenContentPage {
playerIcon.icon.source = "image://theme/icon-m-play" playerIcon.icon.source = "image://theme/icon-m-play"
return; return;
case MediaPlayer.StoppedState: case MediaPlayer.StoppedState:
playerIcon.icon.source = "image://theme/icon-m-stop" playerIcon.icon.source = "image://theme/icon-m-reload"
return; return;
} }
} }
onPositionChanged: function(){ onPositionChanged: function(){
//console.log(duration) //console.log(duration)
//console.log(bufferProgress) //console.log(bufferProgress)
@ -97,20 +82,23 @@ FullscreenContentPage {
playerProgress.minimumValue = 0 playerProgress.minimumValue = 0
playerProgress.value = position playerProgress.value = position
} }
} }
onStopped: function() {
onStopped: function(){ if (video.duration < 30000)
play() video.play()
else
video.stop()
} }
IconButton { IconButton {
id: playerIcon id: playerIcon
anchors.left: parent.left
anchors.bottom: parent.bottom
anchors.leftMargin: Theme.paddingLarge
anchors.bottomMargin: Theme.paddingLarge*1.5
icon.source: "image://theme/icon-m-play" icon.source: "image://theme/icon-m-play"
anchors {
left: parent.left
bottom: parent.bottom
leftMargin: Theme.horizontalPageMargin
bottomMargin: Theme.horizontalPageMargin
}
onClicked: function() { onClicked: function() {
if (video.playbackState === MediaPlayer.PlayingState) if (video.playbackState === MediaPlayer.PlayingState)
video.pause() video.pause()
@ -120,49 +108,17 @@ FullscreenContentPage {
} }
ProgressBar { ProgressBar {
indeterminate: true
id: playerProgress id: playerProgress
anchors.left: playerIcon.right indeterminate: true
anchors.right: videoDlBtn.left width: 400
anchors.verticalCenter: playerIcon.verticalCenter anchors {
anchors.leftMargin: 0 verticalCenter: playerIcon.verticalCenter
anchors.bottomMargin: Theme.paddingLarge*1.5 left: playerIcon.right
} right: parent.right
IconButton { rightMargin: Theme.horizontalPageMargin + Theme.iconSizeMedium
id: videoDlBtn bottomMargin: Theme.horizontalPageMargin
visible: true
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.rightMargin: Theme.paddingLarge
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]);
} }
} }
Rectangle {
visible: videoError.text != ""
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
color: Theme.highlightDimmerColor
height: videoError.height + 2*Theme.paddingMedium
width: parent.width
Label {
anchors.centerIn: parent
id: videoError
width: parent.width - 2*Theme.paddingMedium
wrapMode: Text.Wrap
height: contentHeight
visible: false;
font.pixelSize: Theme.fontSizeSmall;
text: video.errorString
color: Theme.highlightColor
}
}
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
@ -173,16 +129,43 @@ FullscreenContentPage {
video.play() video.play()
} }
} }
Rectangle {
visible: videoError.text != ""
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
color: Theme.highlightDimmerColor
height: videoError.height + 2*Theme.paddingMedium
width: parent.width
Label {
id: videoError
visible: false
text: video.errorString
font.pixelSize: Theme.fontSizeSmall
color: Theme.highlightColor
wrapMode: Text.Wrap
width: parent.width - 2*Theme.paddingMedium
height: contentHeight
anchors.centerIn: parent
}
}
} }
} }
Flickable { Flickable {
id: imageFlickable id: imageFlickable
visible: false visible: false
anchors.fill: parent contentWidth: imageContainer.width
contentWidth: imageContainer.width; contentHeight: imageContainer.height contentHeight: imageContainer.height
clip: true clip: true
onHeightChanged: if (imagePreview.status === Image.Ready) imagePreview.fitToScreen(); anchors.fill: parent
onHeightChanged: if (imagePreview.status === Image.Ready) {
imagePreview.fitToScreen()
}
Item { Item {
id: imageContainer id: imageContainer
@ -191,18 +174,21 @@ FullscreenContentPage {
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, imageFlickable.width, imageFlickable.height)
pinchArea.minScale = scale pinchArea.minScale = scale
prevScale = scale prevScale = scale
} }
anchors.centerIn: parent
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
cache: true cache: true
asynchronous: true asynchronous: true
sourceSize.height: 1000; sourceSize.width: mediaPage.width
smooth: false smooth: true
anchors.centerIn: parent
onStatusChanged: { onStatusChanged: {
if (status == Image.Ready) { if (status == Image.Ready) {
fitToScreen() fitToScreen()
@ -235,14 +221,16 @@ FullscreenContentPage {
PinchArea { PinchArea {
id: pinchArea id: pinchArea
opacity: 0.3
property real minScale: 1.0 property real minScale: 1.0
property real maxScale: 3.0 property real maxScale: 3.0
opacity: 0.3
anchors.fill: parent anchors.fill: parent
enabled: imagePreview.status === Image.Ready enabled: imagePreview.status === Image.Ready
pinch.target: imagePreview pinch.target: imagePreview
pinch.minimumScale: minScale * 0.5 // This is to create "bounce back effect" pinch.minimumScale: minScale * 0.5 // This is to create "bounce back effect"
pinch.maximumScale: maxScale * 1.5 // when over zoomed pinch.maximumScale: maxScale * 1.5 // when over zoomed}
onPinchFinished: { onPinchFinished: {
imageFlickable.returnToBounds() imageFlickable.returnToBounds()
@ -255,6 +243,7 @@ FullscreenContentPage {
bounceBackAnimation.start() bounceBackAnimation.start()
} }
} }
NumberAnimation { NumberAnimation {
id: bounceBackAnimation id: bounceBackAnimation
target: imagePreview target: imagePreview
@ -281,35 +270,56 @@ FullscreenContentPage {
Component { Component {
id: loadingIndicator id: loadingIndicator
Item { Item {
width: mediaPage.width
height: childrenRect.height height: childrenRect.height
width: imagePage.width
ProgressCircle { ProgressCircle {
id: imageLoadingIndicator id: imageLoadingIndicator
anchors.horizontalCenter: parent.horizontalCenter
progressValue: imagePreview.progress progressValue: imagePreview.progress
progressColor: inAlternateCycle ? Theme.highlightColor : Theme.highlightDimmerColor
backgroundColor: inAlternateCycle ? Theme.highlightDimmerColor : Theme.highlightColor
anchors.horizontalCenter: parent.horizontalCenter
} }
} }
} }
} }
Component { Component {
id: failedLoading id: failedLoading
Text { Text {
font.pixelSize: Theme.fontSizeSmall;
text: qsTr("Error loading") text: qsTr("Error loading")
font.pixelSize: Theme.fontSizeSmall;
color: Theme.highlightColor color: Theme.highlightColor
} }
} }
IconButton { IconButton {
visible: true id: dismissBtn
anchors.right: parent.right icon.source: "image://theme/icon-m-dismiss"
anchors.bottom: parent.bottom anchors {
anchors.rightMargin: Theme.paddingLarge top: parent.top
anchors.bottomMargin: Theme.paddingLarge*1.5 topMargin: Theme.horizontalPageMargin
icon.source: "image://theme/icon-m-device-download" right: parent.right
rightMargin: Theme.horizontalPageMargin
}
onClicked: pageStack.pop()
}
IconButton {
id: mediaDlBtn
anchors {
right: parent.right
rightMargin: Theme.horizontalPageMargin
bottom: parent.bottom
bottomMargin: Theme.horizontalPageMargin
}
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]);
} }
} }
VerticalScrollDecorator { flickable: imageFlickable } VerticalScrollDecorator { flickable: imageFlickable }
} }

View file

@ -1,70 +1,72 @@
import QtQuick 2.0 import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
Item { Item {
id: miniheader id: miniHeader
height: lblName.height height: lblName.height
width: parent.width width: parent.width
Label { Label {
id: lblName id: lblName
text:
if (account_display_name === "") {
account_username.split('@')[0]
}
else account_display_name
font.weight: Font.Bold
font.pixelSize: Theme.fontSizeSmall
color: if (myList.type === "notifications" && ( model.type === "favourite" || model.type === "reblog" )) {
(pressed ? Theme.secondaryHighlightColor : (!highlight ? Theme.secondaryColor : Theme.secondaryHighlightColor))
} else (pressed ? Theme.highlightColor : (!highlight ? Theme.primaryColor : Theme.secondaryColor))
truncationMode: TruncationMode.Fade
width: contentWidth > parent.width /2 ? parent.width /2 : contentWidth
anchors { anchors {
left: parent.left left: parent.left
leftMargin: Theme.paddingMedium leftMargin: Theme.paddingMedium
} }
text:
if (account_display_name === "") {
account_username.split('@')[0]
}
else account_display_name
width: contentWidth > parent.width /2 ? parent.width /2 : contentWidth
truncationMode: TruncationMode.Fade
font.weight: Font.Bold
font.pixelSize: Theme.fontSizeSmall
color: (pressed ? Theme.highlightColor : Theme.primaryColor)
} }
Image { Image {
id: iconVerified id: icnLocked
visible: account_locked
opacity: 0.8
source: "image://theme/icon-s-secure?" + (pressed ? Theme.highlightColor : Theme.primaryColor)
width: account_locked ? Theme.iconSizeExtraSmall*0.8 : 0
height: width
y: Theme.paddingLarge y: Theme.paddingLarge
anchors { anchors {
left: lblName.right left: lblName.right
leftMargin: Theme.paddingSmall leftMargin: Theme.paddingSmall
verticalCenter: lblName.verticalCenter verticalCenter: lblName.verticalCenter
} }
visible: account_locked
width: account_locked ? Theme.iconSizeExtraSmall*0.8 : 0
opacity: 0.8
height: width
source: "image://theme/icon-s-secure?" + (pressed
? Theme.highlightColor
: Theme.primaryColor)
} }
Label { Label {
id: lblScreenName id: lblScreenName
text: '@'+account_username
font.pixelSize: Theme.fontSizeExtraSmall
color: (pressed ? Theme.secondaryHighlightColor : Theme.secondaryColor)
truncationMode: TruncationMode.Fade
anchors { anchors {
left: iconVerified.right left: icnLocked.right
right: lblDate.left right: lblDate.left
leftMargin: Theme.paddingMedium leftMargin: Theme.paddingMedium
baseline: lblName.baseline baseline: lblName.baseline
} }
truncationMode: TruncationMode.Fade
text: '@'+account_username
font.pixelSize: Theme.fontSizeExtraSmall
color: (pressed ? Theme.secondaryHighlightColor : Theme.secondaryColor)
} }
Label {
Label {
id: lblDate id: lblDate
color: (pressed ? Theme.highlightColor : Theme.primaryColor)
text: Format.formatDate(created_at, new Date() - created_at < 60*60*1000 ? Formatter.DurationElapsedShort : Formatter.TimeValueTwentyFourHours) text: Format.formatDate(created_at, new Date() - created_at < 60*60*1000 ? Formatter.DurationElapsedShort : Formatter.TimeValueTwentyFourHours)
font.pixelSize: Theme.fontSizeExtraSmall font.pixelSize: Theme.fontSizeExtraSmall
color: (pressed ? Theme.highlightColor : Theme.primaryColor)
horizontalAlignment: Text.AlignRight horizontalAlignment: Text.AlignRight
anchors { anchors {
right: parent.right right: parent.right
baseline: lblName.baseline
rightMargin: Theme.horizontalPageMargin rightMargin: Theme.horizontalPageMargin
baseline: lblName.baseline
} }
} }
} }

View file

@ -1,13 +1,19 @@
import QtQuick 2.0 import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
Item { Item {
id: ministatus id: miniStatus
visible: true visible: true
height: icon.height+Theme.paddingMedium height: icon.height+Theme.paddingMedium
width: parent.width width: parent.width
Image { Icon {
id: icon id: icon
visible: type.length
color: Theme.highlightColor
width: Theme.iconSizeExtraSmall
height: width
source: typeof typeIcon !== "undefined" ? typeIcon : ""
anchors { anchors {
top: parent.top top: parent.top
topMargin: Theme.paddingMedium topMargin: Theme.paddingMedium
@ -15,12 +21,8 @@ Item {
left: parent.left left: parent.left
leftMargin: Theme.horizontalPageMargin + Theme.iconSizeMedium - width leftMargin: Theme.horizontalPageMargin + Theme.iconSizeMedium - width
} }
visible: type.length
width: Theme.iconSizeExtraSmall
height: width
source: typeof typeIcon !== "undefined" ? typeIcon : ""
} }
Label { Label {
id: lblRtByName id: lblRtByName
visible: type.length visible: type.length
@ -42,12 +44,11 @@ Item {
action = qsTr('followed you'); action = qsTr('followed you');
break; break;
default: default:
ministatus.visible = false miniStatus.visible = false
action = type; action = type;
} }
return typeof reblog_account_username !== "undefined" ? '@' + reblog_account_username + ' ' + action : '' return typeof reblog_account_username !== "undefined" ? '@' + reblog_account_username + ' ' + action : ''
} }
font.pixelSize: Theme.fontSizeExtraSmall font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.highlightColor color: Theme.highlightColor
} }

View file

@ -2,34 +2,41 @@ import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
import QtMultimedia 5.0 import QtMultimedia 5.0
Item { Item {
id: myImage
property string type : "" property string type : ""
property string previewURL: "" property string previewURL: ""
property string mediaURL: "" property string mediaURL: ""
Rectangle { Rectangle {
opacity: 0.2 opacity: 0.2
anchors.fill: parent
color: Theme.highlightDimmerColor color: Theme.highlightDimmerColor
anchors.fill: parent
} }
Image { Image {
anchors.centerIn: parent
source: "image://theme/icon-m-image" source: "image://theme/icon-m-image"
anchors.centerIn: parent
} }
Rectangle { Rectangle {
id: progressRec id: progressRec
anchors.bottom: parent.bottom
width: 0 width: 0
height: Theme.paddingSmall height: Theme.paddingSmall
color: Theme.highlightBackgroundColor color: Theme.highlightBackgroundColor
anchors.bottom: parent.bottom
} }
Image { Image {
id: img id: img
anchors.fill: parent
fillMode: Image.PreserveAspectCrop
asynchronous: true asynchronous: true
opacity: status === Image.Ready ? 1.0 : 0.0 opacity: status === Image.Ready ? 1.0 : 0.0
Behavior on opacity { FadeAnimator {} } Behavior on opacity { FadeAnimator {} }
source: previewURL source: previewURL
fillMode: Image.PreserveAspectCrop
anchors.fill: parent
onProgressChanged: { onProgressChanged: {
if (progress != 1) if (progress != 1)
progressRec.width = parent.width * progress progressRec.width = parent.width * progress
@ -38,36 +45,47 @@ Item {
} }
} }
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
pageStack.push(Qt.resolvedUrl("./ImageFullScreen.qml"), {"previewURL": previewURL, "mediaURL": mediaURL, "type": type}) pageStack.push(Qt.resolvedUrl("./MediaFullScreen.qml"), {
"previewURL": previewURL,
"mediaURL": mediaURL,
"type": type
})
} }
} }
Image { Image {
id: videoIcon
visible: type === "video" || type === "gifv" visible: type === "video" || type === "gifv"
anchors.centerIn: parent
source: "image://theme/icon-l-play" source: "image://theme/icon-l-play"
anchors.centerIn: parent
} }
BusyIndicator { BusyIndicator {
id: mediaLoader
size: BusyIndicatorSize.Large size: BusyIndicatorSize.Large
running: img.status !== Image.Ready running: img.status !== Image.Ready
opacity: img.status === Image.Ready ? 0.0 : 1.0 opacity: img.status === Image.Ready ? 0.0 : 1.0
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
} }
Rectangle { Rectangle {
anchors.fill: parent id: mediaWarning
color: Theme.highlightDimmerColor 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 { Image {
source: "image://theme/icon-l-attention?"+Theme.highlightColor source: "image://theme/icon-l-attention?"+Theme.highlightColor
anchors.centerIn: parent anchors.centerIn: parent
} }
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: parent.visible = false; onClicked: parent.visible = false
} }
} }
} }

View file

@ -3,9 +3,11 @@ import Sailfish.Silica 1.0
import "../../lib/API.js" as Logic import "../../lib/API.js" as Logic
import "." import "."
SilicaListView { SilicaListView {
id: myList id: myList
property string type;
property string type
property string title property string title
property string vwPlaceholderText: qsTr("Loading") property string vwPlaceholderText: qsTr("Loading")
property string vwPlaceholderHint: qsTr("please wait...") property string vwPlaceholderHint: qsTr("please wait...")
@ -13,21 +15,21 @@ SilicaListView {
property ListModel mdl: [] property ListModel mdl: []
property variant params: [] property variant params: []
property var locale: Qt.locale() property var locale: Qt.locale()
property bool autoLoadMore : true; property bool autoLoadMore: true
property bool loadStarted : false; property bool loadStarted: false
property int scrollOffset; property int scrollOffset
property string action: "" property string action: ""
property variant vars property variant vars
property variant conf property variant conf
property bool notifier : false; property bool notifier: false
model: mdl model: mdl
signal notify (string what, int num) signal notify (string what, int num)
onNotify: { onNotify: {
console.log(what + " - " + num) console.log(what + " - " + num)
} }
signal openDrawer (bool setDrawer) signal openDrawer (bool setDrawer)
onOpenDrawer: { onOpenDrawer: {
//console.log("Open drawer: " + setDrawer) //console.log("Open drawer: " + setDrawer)
@ -38,18 +40,16 @@ SilicaListView {
} }
BusyIndicator {
size: BusyIndicatorSize.Large
running: myList.model.count === 0 && !viewPlaceHolder.visible
anchors.centerIn: parent
}
header: PageHeader { header: PageHeader {
title: myList.title title: myList.title
description: myList.description description: myList.description
} }
BusyIndicator {
size: BusyIndicatorSize.Large
running: myList.model.count === 0 && !viewPlaceHolder.visible
anchors.centerIn: parent
}
ViewPlaceholder { ViewPlaceholder {
id: viewPlaceHolder id: viewPlaceHolder
@ -62,7 +62,17 @@ SilicaListView {
MenuItem { MenuItem {
text: qsTr("Settings") text: qsTr("Settings")
onClicked: { onClicked: {
pageStack.push(Qt.resolvedUrl("../Settings.qml"), {}) pageStack.push(Qt.resolvedUrl("../SettingsPage.qml"), {})
}
}
MenuItem {
text: qsTr("New Toot")
onClicked: {
pageStack.push(Qt.resolvedUrl("../ConversationPage.qml"), {
//headerTitle: "New Toot",
type: "new"
})
} }
} }
@ -73,14 +83,6 @@ SilicaListView {
} }
} }
} }
clip: true
section {
property: 'section'
delegate: SectionHeader {
height: Theme.itemSizeExtraSmall
text: Format.formatDate(section, Formatter.DateMedium)
}
}
delegate: VisualContainer { delegate: VisualContainer {
} //Toot {} } //Toot {}
@ -95,10 +97,9 @@ SilicaListView {
} }
onCountChanged: { onCountChanged: {
loadStarted = false; loadStarted = false
/*contentY = scrollOffset /*contentY = scrollOffset
console.log("CountChanged!")*/ console.log("CountChanged!")*/
} }
footer: Item{ footer: Item{
@ -114,6 +115,7 @@ SilicaListView {
loadData("append") loadData("append")
} }
} }
BusyIndicator { BusyIndicator {
size: BusyIndicatorSize.Small size: BusyIndicatorSize.Small
running: loadStarted; running: loadStarted;
@ -121,17 +123,18 @@ SilicaListView {
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
} }
} }
onContentYChanged: { onContentYChanged: {
if (Math.abs(contentY - scrollOffset) > Theme.itemSizeMedium) { if (Math.abs(contentY - scrollOffset) > Theme.itemSizeMedium) {
openDrawer(contentY - scrollOffset > 0 ? false : true ) openDrawer(contentY - scrollOffset > 0 ? false : true )
scrollOffset = contentY scrollOffset = contentY
} }
if(contentY+height > footerItem.y && !loadStarted && autoLoadMore){ if(contentY+height > footerItem.y && !loadStarted && autoLoadMore){
loadData("append") loadData("append")
loadStarted = true; loadStarted = true
} }
} }
VerticalScrollDecorator {} VerticalScrollDecorator {}
WorkerScript { WorkerScript {
@ -144,7 +147,6 @@ SilicaListView {
if (messageObject.fireNotification && notifier){ if (messageObject.fireNotification && notifier){
Logic.notifier(messageObject.data) Logic.notifier(messageObject.data)
} }
} }
} }
@ -159,17 +161,18 @@ SilicaListView {
loadData("prepend") loadData("prepend")
} }
} }
function loadData(mode){ function loadData(mode){
var p = []; var p = []
if (params.length) if (params.length)
for(var i = 0; i<params.length; i++) for(var i = 0; i<params.length; i++)
p.push(params[i]) p.push(params[i])
if (mode === "append" && model.count){ if (mode === "append" && model.count){
p.push({name: 'max_id', data: model.get(model.count-1).id}); p.push({name: 'max_id', data: model.get(model.count-1).id})
} }
if (mode === "prepend" && model.count){ if (mode === "prepend" && model.count){
p.push({name:'since_id', data: model.get(0).id}); p.push({name:'since_id', data: model.get(0).id})
} }
var msg = { var msg = {
@ -181,7 +184,7 @@ SilicaListView {
}; };
console.log(JSON.stringify(msg)) console.log(JSON.stringify(msg))
if (type !== "") if (type !== "")
worker.sendMessage(msg); worker.sendMessage(msg)
} }
} }

View file

@ -2,15 +2,18 @@ import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
SilicaGridView { SilicaGridView {
signal slideshowShow(int vIndex); id: gridView
signal slideshowIndexChanged(int vIndex);
property bool isPortrait: false
signal slideshowShow(int vIndex)
signal slideshowIndexChanged(int vIndex)
onSlideshowIndexChanged: { onSlideshowIndexChanged: {
navigateTo(vIndex) navigateTo(vIndex)
} }
id: gridView
property bool isPortrait: false
ListModel { ListModel {
id: listModel id: listModel
ListElement { ListElement {
@ -20,12 +23,14 @@ SilicaGridView {
active: true active: true
unread: false unread: false
} }
ListElement { ListElement {
icon: "image://theme/icon-m-alarm" icon: "image://theme/icon-m-alarm"
slug: "notifications" slug: "notifications"
name: "Notifications" name: "Notifications"
active: false active: false
} }
ListElement { ListElement {
icon: "image://theme/icon-m-whereami" icon: "image://theme/icon-m-whereami"
slug: "local" slug: "local"
@ -33,6 +38,7 @@ SilicaGridView {
active: false active: false
unread: false unread: false
} }
ListElement { ListElement {
icon: "image://theme/icon-m-website" icon: "image://theme/icon-m-website"
slug: "federated" slug: "federated"
@ -40,6 +46,7 @@ SilicaGridView {
active: false active: false
unread: false unread: false
} }
ListElement { ListElement {
icon: "image://theme/icon-m-search" icon: "image://theme/icon-m-search"
slug: "search" slug: "search"
@ -49,16 +56,13 @@ SilicaGridView {
} }
} }
model: listModel model: listModel
anchors.fill: parent
currentIndex: -1 currentIndex: -1
cellWidth: isPortrait ? gridView.width : gridView.width / model.count cellWidth: isPortrait ? gridView.width : gridView.width / model.count
cellHeight: isPortrait ? gridView.height/model.count : gridView.height cellHeight: isPortrait ? gridView.height/model.count : gridView.height
anchors.fill: parent
delegate: BackgroundItem { delegate: BackgroundItem {
clip: true
id: rectangle id: rectangle
clip: true
width: gridView.cellWidth width: gridView.cellWidth
height: gridView.cellHeight height: gridView.cellHeight
GridView.onAdd: AddAnimation { GridView.onAdd: AddAnimation {
@ -67,28 +71,33 @@ SilicaGridView {
GridView.onRemove: RemoveAnimation { GridView.onRemove: RemoveAnimation {
target: rectangle target: rectangle
} }
GlassItem { GlassItem {
id: effect id: effect
visible: !isPortrait && unread visible: !isPortrait && unread
dimmed: true
color: Theme.highlightColor
width: Theme.itemSizeMedium width: Theme.itemSizeMedium
height: Theme.itemSizeMedium height: Theme.itemSizeMedium
dimmed: true anchors {
anchors.bottom: parent.bottom bottom: parent.bottom
anchors.bottomMargin: -height/2 bottomMargin: -height/2
anchors.horizontalCenter: parent.horizontalCenter horizontalCenter: parent.horizontalCenter
color: Theme.highlightColor }
} }
GlassItem { GlassItem {
id: effect2 id: effect2
visible: isPortrait && unread visible: isPortrait && unread
dimmed: false
color: Theme.highlightColor
width: Theme.itemSizeMedium width: Theme.itemSizeMedium
height: Theme.itemSizeMedium height: Theme.itemSizeMedium
dimmed: false anchors {
anchors.right: parent.right; right: parent.right
anchors.rightMargin: -height/2; rightMargin: -height/2
anchors.verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
color: Theme.highlightColor }
} }
OpacityRampEffect { OpacityRampEffect {
@ -96,68 +105,59 @@ SilicaGridView {
offset: 0.5 offset: 0.5
} }
/*Image {
source: model.icon + (highlighted
? Theme.highlightColor
: (model.active ? Theme.primaryColor : Theme.secondaryHighlightColor))
anchors.centerIn: parent
}*/
ColorOverlay { ColorOverlay {
anchors.fill: image source: image
source: image color: (highlighted ? Theme.highlightColor : (model.active ? Theme.primaryColor : Theme.secondaryHighlightColor))
color: (highlighted ? Theme.highlightColor : (model.active ? Theme.primaryColor : Theme.secondaryHighlightColor)) anchors.fill: image
} }
Image { Image {
id: image id: image
visible: false
source: model.icon // +'?'+ (highlighted ? Theme.highlightColor : (model.active ? Theme.primaryColor : Theme.secondaryHighlightColor))
sourceSize.width: Theme.iconSizeMedium sourceSize.width: Theme.iconSizeMedium
sourceSize.height: Theme.iconSizeMedium sourceSize.height: Theme.iconSizeMedium
source: model.icon// +'?'+ (highlighted ? Theme.highlightColor : (model.active ? Theme.primaryColor : Theme.secondaryHighlightColor))
anchors.centerIn: parent anchors.centerIn: parent
visible: false
// smooth: true
} }
Text { Text {
anchors.bottom: parent.bottom
anchors.bottomMargin: Theme.paddingSmall
anchors.left: parent.left
anchors.right: parent.right
horizontalAlignment: Text.AlignHCenter
visible: false visible: false
text: model.name text: model.name
font.pixelSize: Theme.fontSizeExtraSmall/2 font.pixelSize: Theme.fontSizeExtraSmall/2
color: (highlighted color: (highlighted
? Theme.highlightColor ? Theme.highlightColor
: (model.active ? Theme.primaryColor : Theme.secondaryHighlightColor)) : (model.active ? Theme.primaryColor : Theme.secondaryHighlightColor))
horizontalAlignment: Text.AlignHCenter
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
bottomMargin: Theme.paddingSmall
}
} }
Label { Label {
id: label id: label
visible: false visible: false
anchors {
bottom: parent.bottom
}
horizontalAlignment : Text.AlignHCente
width: parent.width
color: (highlighted ? Theme.highlightColor : Theme.secondaryHighlightColor) color: (highlighted ? Theme.highlightColor : Theme.secondaryHighlightColor)
text: { text: {
return model.name.toUpperCase(); return model.name.toUpperCase();
} }
font.pixelSize: Theme.fontSizeExtraSmall
font { font.family: Theme.fontFamilyHeading
pixelSize: Theme.fontSizeExtraSmall width: parent.width
family: Theme.fontFamilyHeading horizontalAlignment : Text.AlignHCenter
} anchors.bottom: parent.bottom
} }
onClicked: { onClicked: {
slideshowShow(index) slideshowShow(index)
console.log(index) console.log(index)
navigateTo(model.slug) navigateTo(model.slug)
effect.state = "right" effect.state = "right"
} }
} }
function navigateTo(slug){ function navigateTo(slug){
for(var i = 0; i < listModel.count; i++){ for(var i = 0; i < listModel.count; i++){
if (listModel.get(i).slug === slug || i===slug) if (listModel.get(i).slug === slug || i===slug)
@ -166,8 +166,9 @@ SilicaGridView {
listModel.setProperty(i, 'active', false); listModel.setProperty(i, 'active', false);
} }
console.log(slug) console.log(slug)
} }
VerticalScrollDecorator {} VerticalScrollDecorator {}
} }

View file

@ -1,83 +1,161 @@
import QtQuick 2.0 import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
Item { Item {
id: header id: profileHeader
property int value: 0;
property string title: ""; property int value: 0
property string description: ""; property string title: ""
property string image: ""; property string description: ""
property string bg: ""; property string image: ""
property string bg: ""
width: parent.width width: parent.width
height: icon.height + Theme.paddingLarge*2 height: if (bot === true) {
avatarImage.height + Theme.paddingLarge*2 + infoLbl.height + Theme.paddingLarge
} else avatarImage.height + Theme.paddingLarge*2
Rectangle { Rectangle {
id: bgImage id: bgImage
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 }
} }
anchors.fill: parent
Image { Image {
anchors.fill: bgImage
asynchronous: true asynchronous: true
fillMode: Image.PreserveAspectCrop fillMode: Image.PreserveAspectCrop
source: bg source: bg
opacity: 0.8 opacity: 0.8
anchors.fill: parent
} }
} }
Image { Image {
id: icon id: avatarImage
asynchronous: true
source:
if (avatarImage.status === Image.Error)
source = "../../images/icon-l-profile.svg?" + (pressed
? Theme.highlightColor
: Theme.primaryColor)
else image
width: description === "" ? Theme.iconSizeMedium : Theme.iconSizeLarge
height: width
anchors { anchors {
left: parent.left left: parent.left
leftMargin: Theme.paddingLarge leftMargin: Theme.paddingLarge
top: parent.top top: parent.top
topMargin: Theme.paddingLarge topMargin: Theme.paddingLarge
} }
asynchronous: true
width: description === "" ? Theme.iconSizeMedium : Theme.iconSizeLarge Button {
height: width id: imageButton
source: opacity: 0
if (icon.status === Image.Error) width: Theme.iconSizeExtraLarge * 1.2
source = "../../images/icon-l-profile.svg?" + (pressed anchors {
? Theme.highlightColor top: parent.top
: Theme.primaryColor) left: parent.left
else image bottom: parent.bottom
}
onClicked: {
pageStack.push(Qt.resolvedUrl("ProfileImage.qml"), {
"image": image
})
}
}
} }
Column { Column {
anchors { anchors {
left: icon.right top: parent.top
topMargin: Theme.paddingLarge
left: avatarImage.right
leftMargin: Theme.paddingLarge leftMargin: Theme.paddingLarge
right: parent.right right: parent.right
rightMargin: Theme.paddingLarge rightMargin: Theme.paddingLarge
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
} }
Label { Label {
id: ttl id: profileTitle
text: text: if (title === "") {
if (title === "") { description.split('@')[0]
description.split('@')[0] }
} else title
else title
height: contentHeight
color: Theme.highlightColor
font.pixelSize: Theme.fontSizeLarge font.pixelSize: Theme.fontSizeLarge
font.family: Theme.fontFamilyHeading font.family: Theme.fontFamilyHeading
horizontalAlignment: Text.AlignRight color: Theme.highlightColor
truncationMode: TruncationMode.Fade truncationMode: TruncationMode.Fade
width: parent.width width: parent.width
height: contentHeight
horizontalAlignment: Text.AlignRight
} }
Label { Label {
height: description === "" ? 0 : contentHeight id: profileDescription
text: "@"+description text: "@"+description
color: Theme.secondaryHighlightColor
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
font.family: Theme.fontFamilyHeading font.family: Theme.fontFamilyHeading
horizontalAlignment: Text.AlignRight color: Theme.secondaryHighlightColor
truncationMode: TruncationMode.Fade truncationMode: TruncationMode.Fade
width: parent.width width: parent.width
height: description === "" ? 0 : contentHeight
horizontalAlignment: Text.AlignRight
} }
} }
Row {
id: infoLbl
spacing: Theme.paddingLarge
layoutDirection: Qt.RightToLeft
height: Theme.iconSizeSmall + Theme.paddingSmall
anchors {
top: avatarImage.bottom
topMargin: Theme.paddingLarge
left: parent.left
leftMargin: Theme.paddingLarge
right: parent.right
rightMargin: Theme.paddingLarge
}
/* Rectangle {
id: followingBg
visible: (following ? true : false)
radius: Theme.paddingSmall
color: Theme.secondaryHighlightColor
width: followingLbl.width + 2*Theme.paddingLarge
height: parent.height
Label {
id: followingLbl
text: qsTr("Follows you")
font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.primaryColor
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
}
} */
Rectangle {
id: botBg
visible: (bot ? true : false)
radius: Theme.paddingSmall
color: Theme.secondaryHighlightColor
width: botLbl.width + 2*Theme.paddingLarge
height: parent.height
Label {
id: botLbl
text: qsTr("Bot")
font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.primaryColor
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
}
}
}
} }

View file

@ -0,0 +1,28 @@
import QtQuick 2.0
import Sailfish.Silica 1.0
FullscreenContentPage {
id: profileImage
property string image: ""
allowedOrientations: Orientation.All
Image {
source: image
fillMode: Image.PreserveAspectFit
anchors.fill: parent
}
IconButton {
icon.source: "image://theme/icon-m-dismiss"
anchors {
top: profileImage.top
topMargin: Theme.horizontalPageMargin
right: parent.right
rightMargin: Theme.horizontalPageMargin
}
onClicked: pageStack.pop()
}
}

View file

@ -2,32 +2,33 @@ import QtQuick 2.0
import Sailfish.Silica 1.0 import Sailfish.Silica 1.0
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
BackgroundItem {
signal send (string notice)
BackgroundItem {
id: delegate id: delegate
//property string text: "0"
width: parent.width signal send (string notice)
signal navigateTo(string link) signal navigateTo(string link)
width: parent.width
height: lblText.paintedHeight + (lblText.text.length > 0 ? Theme.paddingLarge : 0 )+ lblName.paintedHeight + (type.length ? Theme.paddingLarge + iconRT.height : 0) + Theme.paddingLarge height: lblText.paintedHeight + (lblText.text.length > 0 ? Theme.paddingLarge : 0 )+ lblName.paintedHeight + (type.length ? Theme.paddingLarge + iconRT.height : 0) + Theme.paddingLarge
Image { Image {
id: iconRT id: iconRT
y: Theme.paddingLarge y: Theme.paddingLarge
anchors { anchors.right: avatar.right
right: avatar.right
}
visible: type.length visible: type.length
width: Theme.iconSizeExtraSmall width: Theme.iconSizeExtraSmall
height: width height: width
source: "../../images/boosted.svg" source: "../../images/boosted.svg"
} }
Label { Label {
id: lblRtByName id: lblRtByName
visible: type.length visible: type.length
anchors { anchors.left: lblName.left
left: lblName.left anchors.bottom: iconRT.bottom
bottom: iconRT.bottom font.pixelSize: Theme.fontSizeExtraSmall
} color: Theme.secondaryColor
text: { text: {
var action; var action;
switch(type){ switch(type){
@ -45,10 +46,8 @@ BackgroundItem {
} }
return '@' + retweetScreenName + ' ' + action return '@' + retweetScreenName + ' ' + action
} }
font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.secondaryColor
} }
Image { Image {
id: avatar id: avatar
x: Theme.horizontalPageMargin x: Theme.horizontalPageMargin
@ -62,71 +61,70 @@ BackgroundItem {
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
pageStack.push(Qt.resolvedUrl("../Profile.qml"), { pageStack.push(Qt.resolvedUrl("../ProfilePage.qml"), {
"display_name": account_display_name, "display_name": account_display_name,
"username": account_username, "username": account_username,
"profileImage": account_avatar "profileImage": account_avatar
}) })
} }
} }
} }
Label { Label {
id: lblName id: lblName
text: account_display_name
font.weight: Font.Bold
font.pixelSize: Theme.fontSizeSmall
color: (pressed ? Theme.highlightColor : Theme.primaryColor)
anchors { anchors {
top: avatar.top top: avatar.top
topMargin: 0 topMargin: 0
left: avatar.right left: avatar.right
leftMargin: Theme.paddingMedium leftMargin: Theme.paddingMedium
} }
text: account_display_name
font.weight: Font.Bold
font.pixelSize: Theme.fontSizeSmall
color: (pressed ? Theme.highlightColor : Theme.primaryColor)
} }
Image { Image {
id: iconVerified id: iconLocked
visible: account_locked
y: Theme.paddingLarge y: Theme.paddingLarge
opacity: 0.8
source: "image://theme/icon-s-secure?" + (pressed
? Theme.highlightColor
: Theme.primaryColor)
width: account_locked ? Theme.iconSizeExtraSmall*0.8 : 0
height: width
anchors { anchors {
left: lblName.right left: lblName.right
leftMargin: Theme.paddingSmall leftMargin: Theme.paddingSmall
verticalCenter: lblName.verticalCenter verticalCenter: lblName.verticalCenter
} }
visible: account_locked
width: account_locked ? Theme.iconSizeExtraSmall*0.8 : 0
opacity: 0.8
height: width
source: "image://theme/icon-s-secure?" + (pressed
? Theme.highlightColor
: Theme.primaryColor)
} }
Label { Label {
id: lblScreenName id: lblScreenName
anchors {
left: iconVerified.right
right: lblDate.left
leftMargin: Theme.paddingMedium
baseline: lblName.baseline
}
truncationMode: TruncationMode.Fade truncationMode: TruncationMode.Fade
text: '@'+account_username text: '@'+account_username
font.pixelSize: Theme.fontSizeExtraSmall font.pixelSize: Theme.fontSizeExtraSmall
color: (pressed ? Theme.secondaryHighlightColor : Theme.secondaryColor) color: (pressed ? Theme.secondaryHighlightColor : Theme.secondaryColor)
anchors {
left: iconLocked.right
right: lblDate.left
leftMargin: Theme.paddingMedium
baseline: lblName.baseline
}
} }
Label { Label {
id: lblDate
function timestamp() { function timestamp() {
var txt = Format.formatDate(created_at, Formatter.Timepoint) var txt = Format.formatDate(created_at, Formatter.Timepoint)
var elapsed = Format.formatDate(created_at, Formatter.DurationElapsedShort) var elapsed = Format.formatDate(created_at, Formatter.DurationElapsedShort)
return (elapsed ? elapsed : txt ) return (elapsed ? elapsed : txt )
} }
id: lblDate
color: (pressed ? Theme.highlightColor : Theme.primaryColor)
text: Format.formatDate(created_at, new Date() - created_at < 60*60*1000 ? Formatter.DurationElapsedShort : Formatter.TimeValueTwentyFourHours) text: Format.formatDate(created_at, new Date() - created_at < 60*60*1000 ? Formatter.DurationElapsedShort : Formatter.TimeValueTwentyFourHours)
font.pixelSize: Theme.fontSizeExtraSmall font.pixelSize: Theme.fontSizeExtraSmall
color: (pressed ? Theme.highlightColor : Theme.primaryColor)
horizontalAlignment: Text.AlignRight horizontalAlignment: Text.AlignRight
anchors { anchors {
right: parent.right right: parent.right
@ -135,15 +133,8 @@ BackgroundItem {
} }
} }
Label { Text {
id: lblText id: lblText
anchors {
left: lblName.left
right: parent.right
top: lblScreenName.bottom
topMargin: Theme.paddingSmall
rightMargin: Theme.paddingLarge
}
height: content.length ? paintedHeight : 0 height: content.length ? paintedHeight : 0
onLinkActivated: { onLinkActivated: {
console.log(link) console.log(link)
@ -154,34 +145,40 @@ BackgroundItem {
"profileImage": "" "profileImage": ""
}) })
} else if (link[0] === "#") { } else if (link[0] === "#") {
pageStack.pop(pageStack.find(function(page) { pageStack.pop(pageStack.find(function(page) {
var check = page.isFirstPage === true; var check = page.isFirstPage === true;
if (check) if (check)
page.onLinkActivated(link) page.onLinkActivated(link)
return check; return check;
})); }));
send(link) send(link)
} else { } else {
Qt.openUrlExternally(link); Qt.openUrlExternally(link);
} }
} }
text: content text: content
textFormat: Text.RichText textFormat: Text.RichText
font.pixelSize: Theme.fontSizeSmall
color: (pressed ? Theme.highlightColor : Theme.primaryColor)
linkColor : Theme.highlightColor linkColor : Theme.highlightColor
wrapMode: Text.Wrap wrapMode: Text.Wrap
maximumLineCount: 6 maximumLineCount: 6
font.pixelSize: Theme.fontSizeSmall anchors {
color: (pressed ? Theme.highlightColor : Theme.primaryColor) left: lblName.left
right: parent.right
top: lblScreenName.bottom
topMargin: Theme.paddingSmall
rightMargin: Theme.paddingLarge
}
} }
onClicked: { onClicked: {
pageStack.push(Qt.resolvedUrl("../Conversation.qml"), { pageStack.push(Qt.resolvedUrl("../ConversationPage.qml"), {
headerTitle: "Conversation",
toot_id: id, toot_id: id,
title: account_display_name, toot_url: status_url,
description: '@'+account_username, //title: account_display_name,
description: '@'+account_acc,
avatar: account_avatar, avatar: account_avatar,
type: "reply" type: "reply"
}) })

View file

@ -2,24 +2,48 @@ import QtQuick 2.2
import Sailfish.Silica 1.0 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)
width: parent.width width: parent.width
height: mnu.height + miniHeader.height + (typeof attachments !== "undefined" && attachments.count ? media.height + Theme.paddingLarge + Theme.paddingMedium: Theme.paddingLarge) + lblContent.height + Theme.paddingLarge + (ministatus.visible ? ministatus.height : 0) height: if (myList.type === "notifications" && ( model.type === "favourite" || model.type === "reblog" )) {
mnu.height + miniHeader.height + Theme.paddingLarge + lblContent.height + Theme.paddingLarge + (miniStatus.visible ? miniStatus.height : 0)
} else mnu.height + miniHeader.height + (typeof attachments !== "undefined" && attachments.count ? media.height + Theme.paddingLarge + Theme.paddingMedium: Theme.paddingLarge) + lblContent.height + Theme.paddingLarge + (miniStatus.visible ? miniStatus.height : 0) + (iconDirectMsg.visible ? iconDirectMsg.height : 0)
Rectangle { Rectangle {
x: 0; id: bgDirect
y: 0; x: 0
visible: status_visibility == 'direct' y: 0
visible: status_visibility === "direct"
width: parent.width width: parent.width
height: parent.height height: parent.height
opacity: 0.3 opacity: 0.3
color: Theme.highlightBackgroundColor; gradient: Gradient {
GradientStop { position: -1.5; color: "transparent" }
GradientStop { position: 0.6; color: Theme.highlightBackgroundColor }
}
}
Rectangle {
id: bgNotifications
x: 0
y: 0
visible: myList.type === "notifications" && ( model.type === "favourite" || model.type === "reblog" )
width: parent.width
height: parent.height
opacity: 0.5
gradient: Gradient {
GradientStop { position: -0.5; color: "transparent" }
GradientStop { position: 0.4; color: Theme.highlightDimmerColor }
}
} }
MiniStatus { MiniStatus {
id: ministatus id: miniStatus
anchors { anchors {
leftMargin: Theme.horizontalPageMargin leftMargin: Theme.horizontalPageMargin
rightMargin: Theme.horizontalPageMargin rightMargin: Theme.horizontalPageMargin
@ -30,30 +54,31 @@ BackgroundItem {
Image { Image {
id: avatar id: avatar
anchors { visible: true
top: ministatus.visible ? ministatus.bottom : parent.top
topMargin: ministatus.visible ? Theme.paddingMedium : Theme.paddingLarge
left: parent.left
leftMargin: Theme.horizontalPageMargin
}
opacity: status === Image.Ready ? 1.0 : 0.0 opacity: status === Image.Ready ? 1.0 : 0.0
Behavior on opacity { FadeAnimator {} } Behavior on opacity { FadeAnimator {} }
asynchronous: true asynchronous: true
width: Theme.iconSizeMedium
height: width
smooth: true smooth: true
source: account_avatar source: account_avatar
visible: true width: Theme.iconSizeMedium
height: width
anchors {
top: miniStatus.visible ? miniStatus.bottom : parent.top
topMargin: miniStatus.visible ? Theme.paddingMedium : Theme.paddingLarge
left: parent.left
leftMargin: Theme.horizontalPageMargin
}
onStatusChanged: { onStatusChanged: {
if (avatar.status === Image.Error) if (avatar.status === Image.Error)
source = "../../images/icon-m-profile.svg?" + (pressed source = "../../images/icon-m-profile.svg?" + (pressed
? Theme.highlightColor ? Theme.highlightColor
: Theme.primaryColor) : Theme.primaryColor)
} }
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
pageStack.push(Qt.resolvedUrl("../Profile.qml"), { pageStack.push(Qt.resolvedUrl("../ProfilePage.qml"), {
"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,
@ -61,22 +86,45 @@ BackgroundItem {
"profileBackground": model.account_header "profileBackground": model.account_header
}) })
} }
} }
Rectangle {
visible: myList.type === "notifications" && ( model.type === "favourite" || model.type === "reblog" )
opacity: 0.5
color: Theme.highlightDimmerColor
anchors.fill: avatar
}
Image { Image {
id: iconTR id: iconTR
visible: typeof status_reblogged !== "undefined" && status_reblogged
width: Theme.iconSizeExtraSmall
height: width
source: "image://theme/icon-s-retweet"
anchors { anchors {
top: avatar.bottom top: avatar.bottom
topMargin: Theme.paddingMedium topMargin: Theme.paddingMedium
left: avatar.left left: avatar.left
} }
visible: typeof status_reblogged !== "undefined" && status_reblogged }
width: Theme.iconSizeExtraSmall
Image {
id: iconDirectMsg
visible: status_visibility === "direct"
width: Theme.iconSizeMedium
height: width height: width
source: "image://theme/icon-s-retweet" source: "image://theme/icon-m-mail"
} anchors {
horizontalCenter: avatar.horizontalCenter
top: avatar.bottom
topMargin: Theme.paddingMedium
left: avatar.left
}
}
Rectangle { Rectangle {
color: Theme.highlightDimmerColor id: bgReblogAvatar
color: Theme.secondaryColor
width: Theme.iconSizeSmall width: Theme.iconSizeSmall
height: width height: width
visible: typeof status_reblog !== "undefined" && status_reblog visible: typeof status_reblog !== "undefined" && status_reblog
@ -86,18 +134,21 @@ BackgroundItem {
left: parent.left left: parent.left
leftMargin: -width/3 leftMargin: -width/3
} }
Image { Image {
id: reblogAvatar
asynchronous: true asynchronous: true
width: Theme.iconSizeSmall
height: width
smooth: true smooth: true
opacity: status === Image.Ready ? 1.0 : 0.0 opacity: status === Image.Ready ? 1.0 : 0.0
Behavior on opacity { FadeAnimator {} } Behavior on opacity { FadeAnimator {} }
source: typeof reblog_account_avatar !== "undefined" ? reblog_account_avatar : '' source: typeof reblog_account_avatar !== "undefined" ? reblog_account_avatar : ''
visible: typeof status_reblog !== "undefined" && status_reblog visible: typeof status_reblog !== "undefined" && status_reblog
width: Theme.iconSizeSmall
height: width
} }
} }
} }
MiniHeader { MiniHeader {
id: miniHeader id: miniHeader
anchors { anchors {
@ -106,8 +157,23 @@ BackgroundItem {
right: parent.right right: parent.right
} }
} }
Text { Text {
id: lblContent id: lblContent
visible: model.type !== "follow"
text: content.replace(new RegExp("<a ", 'g'), '<a style="text-decoration: none; color:'+(pressed ? Theme.secondaryColor : Theme.highlightColor)+'" ')
textFormat: Text.RichText
font.pixelSize: Theme.fontSizeSmall
linkColor: if (myList.type === "notifications" && ( model.type === "favourite" || model.type === "reblog" )) {
Theme.secondaryHighlightColor
} else Theme.highlightColor
wrapMode: Text.Wrap
color: if (myList.type === "notifications" && ( model.type === "favourite" || model.type === "reblog" )) {
(pressed ? Theme.secondaryHighlightColor : (!highlight ? Theme.secondaryColor : Theme.secondaryHighlightColor))
} else (pressed ? Theme.highlightColor : (!highlight ? Theme.primaryColor : Theme.secondaryColor))
height: if (model.type === "follow") {
Theme.paddingLarge
} else content.length ? (contentWarningLabel.paintedHeight > paintedHeight ? contentWarningLabel.paintedHeight : paintedHeight) : 0
anchors { anchors {
left: miniHeader.left left: miniHeader.left
leftMargin: Theme.paddingMedium leftMargin: Theme.paddingMedium
@ -117,7 +183,6 @@ BackgroundItem {
topMargin: Theme.paddingSmall topMargin: Theme.paddingSmall
bottomMargin: Theme.paddingLarge bottomMargin: Theme.paddingLarge
} }
height: content.length ? (contentWarningLabel.paintedHeight > paintedHeight ? contentWarningLabel.paintedHeight : paintedHeight) : 0
onLinkActivated: { onLinkActivated: {
var test = link.split("/") var test = link.split("/")
console.log(link) console.log(link)
@ -134,36 +199,32 @@ BackgroundItem {
send(link) send(link)
// temporary solution for access to user profiles via toots // temporary solution for access to user profiles via toots
} else if (test.length === 4 && test[3][0] === "@" ) { } else if (test.length === 4 && test[3][0] === "@" ) {
tlSearch.search = decodeURIComponent("@"+test[3].substring(1)+"@"+test[2]) pageStack.pop(pageStack.find(function(page) {
slideshow.positionViewAtIndex(4, ListView.SnapToItem) var check = page.isFirstPage === true;
navigation.navigateTo('search') if (check)
page.onLinkActivated(link)
// Original component return check;
/* 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)+'" ')
linkColor : Theme.highlightColor
wrapMode: Text.Wrap
textFormat: Text.RichText
font.pixelSize: Theme.fontSizeSmall
color: (pressed ? Theme.highlightColor : (!highlight ? Theme.primaryColor : Theme.secondaryColor))
Rectangle { Rectangle {
anchors.fill: parent
radius: 2 radius: 2
color: Theme.highlightDimmerColor color: Theme.highlightDimmerColor
visible: status_spoiler_text.length > 0 visible: status_spoiler_text.length > 0
anchors.fill: parent
Label { Label {
id: contentWarningLabel id: contentWarningLabel
text: model.status_spoiler_text
font.pixelSize: Theme.fontSizeExtraSmall font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.highlightColor
truncationMode: TruncationMode.Fade
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
width: parent.width
anchors { anchors {
topMargin: Theme.paddingSmall topMargin: Theme.paddingSmall
left: parent.left left: parent.left
@ -173,15 +234,11 @@ BackgroundItem {
rightMargin: Theme.paddingMedium rightMargin: Theme.paddingMedium
bottomMargin: Theme.paddingSmall bottomMargin: Theme.paddingSmall
} }
width: parent.width
truncationMode: TruncationMode.Fade
color: Theme.highlightColor
wrapMode: Text.Wrap
text: model.status_spoiler_text
} }
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: parent.visible = false; onClicked: parent.visible = false
} }
} }
@ -189,6 +246,9 @@ BackgroundItem {
MediaBlock { MediaBlock {
id: media id: media
visible: myList.type !== "notifications" && ( model.type !== "favourite" || model.type !== "reblog" )
model: typeof attachments !== "undefined" ? attachments : Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject');
height: Theme.iconSizeExtraLarge * 2
anchors { anchors {
left: lblContent.left left: lblContent.left
right: lblContent.right right: lblContent.right
@ -196,14 +256,15 @@ BackgroundItem {
topMargin: Theme.paddingSmall topMargin: Theme.paddingSmall
bottomMargin: Theme.paddingLarge bottomMargin: Theme.paddingLarge
} }
model: typeof attachments !== "undefined" ? attachments : Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject');
height: 100
} }
ContextMenu { ContextMenu {
id: mnu id: mnu
MenuItem { MenuItem {
enabled: model.type !== "follow" id: mnuBoost
visible: model.type !== "follow"
enabled: status_visibility !== "direct"
text: typeof model.reblogged !== "undefined" && model.reblogged ? qsTr("Unboost") : qsTr("Boost") text: typeof model.reblogged !== "undefined" && model.reblogged ? qsTr("Unboost") : qsTr("Boost")
onClicked: { onClicked: {
var status = typeof model.reblogged !== "undefined" && model.reblogged var status = typeof model.reblogged !== "undefined" && model.reblogged
@ -217,30 +278,34 @@ BackgroundItem {
model.reblogs_count = !status ? model.reblogs_count+1 : (model.reblogs_count > 0 ? model.reblogs_count-1 : model.reblogs_count); model.reblogs_count = !status ? model.reblogs_count+1 : (model.reblogs_count > 0 ? model.reblogs_count-1 : model.reblogs_count);
model.reblogged = !model.reblogged model.reblogged = !model.reblogged
} }
Image { Image {
id: icRT id: icRT
source: "image://theme/icon-s-retweet?" + (!model.reblogged ? Theme.highlightColor : Theme.primaryColor)
width: Theme.iconSizeExtraSmall
height: width
anchors { anchors {
leftMargin: Theme.horizontalPageMargin leftMargin: Theme.horizontalPageMargin
left: parent.left left: parent.left
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
} }
width: Theme.iconSizeExtraSmall
height: width
source: "image://theme/icon-s-retweet?" + (!model.reblogged ? Theme.highlightColor : Theme.primaryColor)
} }
Label { Label {
text: reblogs_count
font.pixelSize: Theme.fontSizeExtraSmall
color: !model.reblogged ? Theme.highlightColor : Theme.primaryColor
anchors { anchors {
left: icRT.right left: icRT.right
leftMargin: Theme.paddingMedium leftMargin: Theme.paddingMedium
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
} }
text: reblogs_count
font.pixelSize: Theme.fontSizeExtraSmall
color: !model.reblogged ? Theme.highlightColor : Theme.primaryColor
} }
} }
MenuItem { MenuItem {
enabled: model.type !== "follow" id: mnuFavourite
visible: model.type !== "follow" || model.status_visibility !== "direct"
text: typeof model.favourited !== "undefined" && model.favourited ? qsTr("Unfavorite") : qsTr("Favorite") text: typeof model.favourited !== "undefined" && model.favourited ? qsTr("Unfavorite") : qsTr("Favorite")
onClicked: { onClicked: {
var status = typeof model.favourited !== "undefined" && model.favourited var status = typeof model.favourited !== "undefined" && model.favourited
@ -254,6 +319,7 @@ BackgroundItem {
model.favourites_count = !status ? model.favourites_count+1 : (model.favourites_count > 0 ? model.favourites_count-1 : model.favourites_count); model.favourites_count = !status ? model.favourites_count+1 : (model.favourites_count > 0 ? model.favourites_count-1 : model.favourites_count);
model.favourited = !model.favourited model.favourited = !model.favourited
} }
Image { Image {
id: icFA id: icFA
anchors { anchors {
@ -265,15 +331,41 @@ BackgroundItem {
height: width height: width
source: "image://theme/icon-s-favorite?" + (!model.favourited ? Theme.highlightColor : Theme.primaryColor) source: "image://theme/icon-s-favorite?" + (!model.favourited ? Theme.highlightColor : Theme.primaryColor)
} }
Label { Label {
text: favourites_count
font.pixelSize: Theme.fontSizeExtraSmall
color: !model.favourited ? Theme.highlightColor : Theme.primaryColor
anchors { anchors {
left: icFA.right left: icFA.right
leftMargin: Theme.paddingMedium leftMargin: Theme.paddingMedium
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
} }
text: favourites_count }
font.pixelSize: Theme.fontSizeExtraSmall }
color: !model.favourited ? Theme.highlightColor : Theme.primaryColor
MenuItem {
id: mnuMention
visible: model.type === "follow"
text: qsTr("Mention")
onClicked: {
pageStack.push(Qt.resolvedUrl("../ConversationPage.qml"), {
headerTitle: "Mention",
description: "@"+reblog_account_acct,
type: "new"
})
}
Image {
id: icMT
anchors {
leftMargin: Theme.horizontalPageMargin
left: parent.left
verticalCenter: parent.verticalCenter
}
width: Theme.iconSizeExtraSmall
height: width
source: "image://theme/icon-s-chat?" + (!model.favourited ? Theme.highlightColor : Theme.primaryColor)
} }
} }
} }
@ -282,10 +374,11 @@ BackgroundItem {
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")
m.append(mdl.get(index)) m.append(mdl.get(index))
pageStack.push(Qt.resolvedUrl("../Conversation.qml"), { pageStack.push(Qt.resolvedUrl("../ConversationPage.qml"), {
headerTitle: "Conversation", headerTitle: "Conversation",
toot_id: status_id, toot_id: status_id,
toot_url: status_url, toot_url: status_url,
toot_uri: status_uri,
title: account_display_name, title: account_display_name,
description: '@'+account_acct, description: '@'+account_acct,
avatar: account_avatar, avatar: account_avatar,

View file

@ -17,7 +17,7 @@ class Notifications : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit Notifications(QObject *parent = 0); explicit Notifications(QObject *parent = nullptr);
Q_INVOKABLE void notify(QString appName, QString summary, QString body, bool preview, QString ts, QString issuekey); Q_INVOKABLE void notify(QString appName, QString summary, QString body, bool preview, QString ts, QString issuekey);
}; };

View file

@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation>Löschen</translation> <translation>Link kopieren</translation>
</message>
<message>
<source>Emojis</source>
<translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Tippen um einzufügen</translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation>Inhaltswarnung</translation> <translation>Inhaltswarnung</translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation>Was gibt&apos;s Neues?</translation>
</message>
<message>
<source>Delete</source>
<translation>Löschen</translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation>Öffentlich</translation> <translation>Öffentlich</translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation>Direktnachricht</translation> <translation>Direktnachricht</translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation>Was gibt&apos;s Neues?</translation>
</message>
<message> <message>
<source>Toot sent!</source> <source>Toot sent!</source>
<translation>Toot gesendet!</translation> <translation>Toot gesendet!</translation>
</message> </message>
</context>
<context>
<name>CoverPage</name>
<message> <message>
<source>Copy Link to Clipboard</source> <source>New Toot</source>
<translation>Link kopieren</translation> <translation>Neuer Toot</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>EmojiSelect</name>
<message> <message>
<source>Error loading</source> <source>Emojis</source>
<translation>Ladefehler</translation> <translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Tippen um einzufügen</translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation>Föderation</translation> <translation>Föderation</translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation>Ladefehler</translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,72 +178,110 @@
<source>please wait...</source> <source>please wait...</source>
<translation>bitte warten...</translation> <translation>bitte warten...</translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>Neuer Toot</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Entfolgen</translation> <translation>Folgt dir</translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>Folge-Anfrage gesendet!</translation> <translation>Bot</translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation>Details</translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Folgende</translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Folgt</translation> <translation>Folgt</translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation>Stummschalten</translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Beiträge</translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Entfolgen</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Angefragt</translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Folgen</translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<translation>Nicht stummschalten</translation> <extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Nicht stumm schalten</translation>
</message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Stumm schalten</translation>
</message> </message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Nicht blockieren</translation> <translation>Nicht blockieren</translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Blockieren</translation> <translation>Blockieren</translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation>Beiträge</translation> <translation>Im Browser öffnen</translation>
</message> </message>
<message> <message>
<source>Favourites</source> <source>Mention</source>
<translation>Favoriten</translation> <translation>Erwähnen</translation>
</message>
<message>
<source>Follow</source>
<translation>Folgen</translation>
</message>
<message>
<source>Summary</source>
<translation>Zusammenfassung</translation>
</message>
<message>
<source>Followers</source>
<translation>Folgende</translation>
</message>
<message>
<source>Bio</source>
<translation>Bio</translation>
</message>
<message>
<source>Open Profile in Browser</source>
<translation>Profil im Browser öffnen</translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation>Einstellungen</translation> <translation>Einstellungen</translation>
</message> </message>
<message>
<source>Options</source>
<translation>Optionen</translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation>Bilder in Toots laden</translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation>Diese Option deaktivieren um Datenvolumen zu sparen</translation>
</message>
<message>
<source>Account</source>
<translation>Konto</translation>
</message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
<translation>Konto entfernen</translation> <translation>Konto entfernen</translation>
@ -243,7 +291,7 @@
<translation>Konto hinzufügen</translation> <translation>Konto hinzufügen</translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation>Konto entfernen und für diese Anwendung deaktivieren</translation> <translation>Konto entfernen und für diese Anwendung deaktivieren</translation>
</message> </message>
<message> <message>
@ -251,8 +299,8 @@
<translation>Zugriff durch diese Anwendung auf eigenes Mastodon-Konto erlauben</translation> <translation>Zugriff durch diese Anwendung auf eigenes Mastodon-Konto erlauben</translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation>Diese Option deaktivieren um Datenvolumen zu sparen</translation> <translation>Übersetzungen</translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Credits</source>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation>Visuelle Identität</translation> <translation>Visuelle Identität</translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation>Entwicklung und Übersetzungen</translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation>Französische Übersetzung</translation> <translation>Französische Übersetzung</translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation>Chinesische Übersetzung</translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation>Niederländische Übersetzung</translation> <translation>Niederländische Übersetzung</translation>
@ -283,24 +339,13 @@
<translation>Erstellung README-Datei</translation> <translation>Erstellung README-Datei</translation>
</message> </message>
<message> <message>
<source>Chinese translation</source> <source>Use</source>
<translation>Chinesische Übersetzung</translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Benutze</translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>to help with app translation to your language.</source>
<translation>Bilder in Toots laden</translation> <translation>um bei den Übersetzungen mitzuhelfen.</translation>
</message>
<message>
<source>Translate</source>
<translation>Übersetzungen</translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation>Transifex benutzen um bei den Übersetzungen mitzuhelfen</translation>
</message>
<message>
<source>Development and translations</source>
<translation>Entwicklung und Übersetzungen</translation>
</message> </message>
</context> </context>
<context> <context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation>Favorisieren</translation> <translation>Favorisieren</translation>
</message> </message>
<message>
<source>Mention</source>
<translation>Erwähnen</translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation>Διαγραφή</translation> <translation type="unfinished"></translation>
</message>
<message>
<source>Emojis</source>
<translation>Emoji</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Κτυπήστε για εισαγωγή</translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation>Διαγραφή</translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<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>CoverPage</name>
<message> <message>
<source>Error loading</source> <source>New Toot</source>
<translation type="unfinished"></translation> <translation>Νέος</translation>
</message>
</context>
<context>
<name>EmojiSelect</name>
<message>
<source>Emojis</source>
<translation>Emoji</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Κτυπήστε για εισαγωγή</translation>
</message> </message>
</context> </context>
<context> <context>
@ -128,13 +131,20 @@
</message> </message>
<message> <message>
<source>Local</source> <source>Local</source>
<translation type="unfinished"></translation> <translation>Τοπικός</translation>
</message> </message>
<message> <message>
<source>Federated</source> <source>Federated</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,72 +178,110 @@
<source>please wait...</source> <source>please wait...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>Νέος</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Αναίρεση παρακολούθησης</translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>Η αίτηση παρακολούθησης εστάλη!</translation> <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Σας ακολουθούν</translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Σε παρακολούθηση</translation> <translation>Σε παρακολούθηση</translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation>Σίγαση</translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Κατάσταση</translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Αναίρεση παρακολούθησης</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Παρακολούθηση</translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Αναίρεση σίγασης</translation> <translation>Αναίρεση σίγασης</translation>
</message> </message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Σίγαση</translation>
</message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Αναίρεση φραγής</translation> <translation>Αναίρεση φραγής</translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Φραγή</translation> <translation>Φραγή</translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation>Κατάσταση</translation>
</message>
<message>
<source>Favourites</source>
<translation>Σελιδοδείκτες</translation>
</message>
<message>
<source>Follow</source>
<translation>Παρακολούθηση</translation>
</message>
<message>
<source>Summary</source>
<translation>Σύνοψη</translation>
</message>
<message>
<source>Followers</source>
<translation>Σας ακολουθούν</translation>
</message>
<message>
<source>Bio</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Open Profile in Browser</source> <source>Mention</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation>Ρυθμίσεις</translation> <translation>Ρυθμίσεις</translation>
</message> </message>
<message>
<source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation>Απενεργοποιήστε αυτήν την επιλογή αν θέλετε να διατηρήσετε την σύνδεση των δεδομένων σας</translation>
</message>
<message>
<source>Account</source>
<translation>λογαριασμού</translation>
</message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
<translation>Αφαίρεση λογαριασμού</translation> <translation>Αφαίρεση λογαριασμού</translation>
@ -243,7 +291,7 @@
<translation>Προσθήκη λογαριασμού</translation> <translation>Προσθήκη λογαριασμού</translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation>Άρση της αδειοδότησης της εφαρμογής και αφαίρεση του λογαριασμού σας</translation> <translation>Άρση της αδειοδότησης της εφαρμογής και αφαίρεση του λογαριασμού σας</translation>
</message> </message>
<message> <message>
@ -251,8 +299,8 @@
<translation>Να επιτρέπεται στην εφαρμογή να χρησιμοποιεί τον λογαριασμό σας στο Mastodon εκ μέρους σας</translation> <translation>Να επιτρέπεται στην εφαρμογή να χρησιμοποιεί τον λογαριασμό σας στο Mastodon εκ μέρους σας</translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation>Απενεργοποιήστε αυτήν την επιλογή αν θέλετε να διατηρήσετε την σύνδεση των δεδομένων σας</translation> <translation>Μετάφραση</translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Credits</source>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -283,24 +339,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Chinese translation</source> <source>Use</source>
<translation type="unfinished"></translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Χρησιμοποιήστε το</translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>to help with app translation to your language.</source>
<translation type="unfinished"></translation> <translation>για να βοηθήσετε την μετάφραση της εφαρμογής στην γλώσσα σας.</translation>
</message>
<message>
<source>Translate</source>
<translation>Μετάφραση</translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation>Χρησιμοποιήστε το Transifex για να βοηθήσετε την μετάφραση της εφαρμογής στην γλώσσα σας</translation>
</message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation>Σελιδοδείκτης</translation> <translation>Σελιδοδείκτης</translation>
</message> </message>
<message>
<source>Mention</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation>Borrar</translation> <translation>Copiar enlace al portapapeles</translation>
</message>
<message>
<source>Emojis</source>
<translation>Emoticonos</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Toca para insertar</translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation>Escribe aquí tu advertencia</translation> <translation>Escribe aquí tu advertencia</translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation>¿En qué estás pensando?</translation>
</message>
<message>
<source>Delete</source>
<translation>Borrar</translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation>Público</translation> <translation>Público</translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation>Directo</translation> <translation>Directo</translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation>¿En qué estás pensando?</translation>
</message>
<message> <message>
<source>Toot sent!</source> <source>Toot sent!</source>
<translation>¡Toot enviado!</translation> <translation>¡Toot enviado!</translation>
</message> </message>
</context>
<context>
<name>CoverPage</name>
<message> <message>
<source>Copy Link to Clipboard</source> <source>New Toot</source>
<translation>Copiar enlace al portapapeles</translation> <translation>Nuevo toot</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>EmojiSelect</name>
<message> <message>
<source>Error loading</source> <source>Emojis</source>
<translation>Error al cargar</translation> <translation>Emoticonos</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Toca para insertar</translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation>Federada</translation> <translation>Federada</translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation>Error al cargar</translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,72 +178,110 @@
<source>please wait...</source> <source>please wait...</source>
<translation>por favor, espera...</translation> <translation>por favor, espera...</translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>Nuevo toot</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Dejar de seguir</translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>¡Solicitud de seguidor enviada!</translation> <translation>Bot</translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation>Detalles</translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Seguidores</translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Siguiendo</translation> <translation>Siguiendo</translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation>Silenciar</translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Estados</translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Dejar de seguir</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Seguir</translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Dejar de silenciar</translation> <translation>Dejar de silenciar</translation>
</message> </message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Silenciar</translation>
</message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Desbloquear</translation> <translation>Desbloquear</translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Bloquear</translation> <translation>Bloquear</translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation>Estados</translation> <translation>Abrir en el navegador</translation>
</message> </message>
<message> <message>
<source>Favourites</source> <source>Mention</source>
<translation>Favoritos</translation> <translation type="unfinished"></translation>
</message>
<message>
<source>Follow</source>
<translation>Seguir</translation>
</message>
<message>
<source>Summary</source>
<translation>Resumen</translation>
</message>
<message>
<source>Followers</source>
<translation>Seguidores</translation>
</message>
<message>
<source>Bio</source>
<translation>Bio</translation>
</message>
<message>
<source>Open Profile in Browser</source>
<translation>Abrir perfil en el navegador</translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation>Ajustes</translation> <translation>Ajustes</translation>
</message> </message>
<message>
<source>Options</source>
<translation>Opciones</translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation>Cargar imágenes en messages</translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation>Deshabilita esta opción si quieres ahorrar en tu conexión de datos</translation>
</message>
<message>
<source>Account</source>
<translation>Cuenta</translation>
</message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
<translation>Eliminar cuenta</translation> <translation>Eliminar cuenta</translation>
@ -243,7 +291,7 @@
<translation>Añadir cuenta</translation> <translation>Añadir cuenta</translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation>Retira la autorización a esta aplicación y elimina tu cuenta</translation> <translation>Retira la autorización a esta aplicación y elimina tu cuenta</translation>
</message> </message>
<message> <message>
@ -251,8 +299,8 @@
<translation>Autoriza a esta aplicación para usar tu cuenta de Mastodon en tu nombre</translation> <translation>Autoriza a esta aplicación para usar tu cuenta de Mastodon en tu nombre</translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation>Deshabilita esta opción si quieres ahorrar en tu conexión de datos</translation> <translation>Traducir</translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Credits</source>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation>Identidad visual</translation> <translation>Identidad visual</translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation>Desarrollo y traducciones</translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation>Traducción al occitano y francés</translation> <translation>Traducción al occitano y francés</translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation>Traducción al chino</translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation>Traducción al holandés</translation> <translation>Traducción al holandés</translation>
@ -283,24 +339,13 @@
<translation>Añadido archivo README</translation> <translation>Añadido archivo README</translation>
</message> </message>
<message> <message>
<source>Chinese translation</source> <source>Use</source>
<translation>Traducción al chino</translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Usar</translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>to help with app translation to your language.</source>
<translation>Cargar imágenes en messages</translation> <translation>para ayudar con traducciones.</translation>
</message>
<message>
<source>Translate</source>
<translation>Traducir</translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation>Usar Transifex para ayudar con traducciones</translation>
</message>
<message>
<source>Development and translations</source>
<translation>Desarrollo y traducciones</translation>
</message> </message>
</context> </context>
<context> <context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation>Marcar como favorito</translation> <translation>Marcar como favorito</translation>
</message> </message>
<message>
<source>Mention</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation>Supprimer</translation> <translation>Copier le lien</translation>
</message>
<message>
<source>Emojis</source>
<translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Appuyez pour insérer</translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation>Rédigez votre alerte ici</translation> <translation>Rédigez votre alerte ici</translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation>Qu&apos;avez-vous en tête?</translation>
</message>
<message>
<source>Delete</source>
<translation>Supprimer</translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation>Public</translation> <translation>Public</translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation>Direct</translation> <translation>Direct</translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation>Qu&apos;avez-vous en tête?</translation>
</message>
<message> <message>
<source>Toot sent!</source> <source>Toot sent!</source>
<translation>Pouet envoyé !</translation> <translation>Pouet envoyé !</translation>
</message> </message>
</context>
<context>
<name>CoverPage</name>
<message> <message>
<source>Copy Link to Clipboard</source> <source>New Toot</source>
<translation>Copier le lien</translation> <translation>Nouveau pouet</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>EmojiSelect</name>
<message> <message>
<source>Error loading</source> <source>Emojis</source>
<translation type="unfinished"></translation> <translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Appuyez pour insérer</translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation>Fil public global</translation> <translation>Fil public global</translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation>Erreur au chargement</translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,72 +178,110 @@
<source>please wait...</source> <source>please wait...</source>
<translation>patientez...</translation> <translation>patientez...</translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>Nouveau pouet</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Ne plus suivre</translation> <translation>Vous suit</translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>Demande dabonnement envoyée !</translation> <translation>Bot</translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation>Détails</translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Abonné(e)s</translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Abonnements</translation> <translation>Abonnements</translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation>Masquer</translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Pouets</translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Ne plus suivre</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Demandé</translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Suivre</translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Démasquer</translation> <translation>Démasquer</translation>
</message> </message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Masquer</translation>
</message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Débloquer</translation> <translation>Débloquer</translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Bloquer</translation> <translation>Bloquer</translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation>Pouets</translation>
</message>
<message>
<source>Favourites</source>
<translation>Favoris</translation>
</message>
<message>
<source>Follow</source>
<translation>Suivre</translation>
</message>
<message>
<source>Summary</source>
<translation>Résumé</translation>
</message>
<message>
<source>Followers</source>
<translation>Abonné(e)s</translation>
</message>
<message>
<source>Bio</source>
<translation>Bio</translation>
</message>
<message>
<source>Open Profile in Browser</source>
<translation>Ouvrir dans le navigateur</translation> <translation>Ouvrir dans le navigateur</translation>
</message> </message>
<message>
<source>Mention</source>
<translation>Mentionner</translation>
</message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation>Paramètres</translation> <translation>Paramètres</translation>
</message> </message>
<message>
<source>Options</source>
<translation>Options</translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation>Charger images dans les pouets</translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation>Désactiver cette option pour économiser des données mobiles</translation>
</message>
<message>
<source>Account</source>
<translation>Compte</translation>
</message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
<translation>Déconnecter votre compte</translation> <translation>Déconnecter votre compte</translation>
@ -243,7 +291,7 @@
<translation>Ajouter compte</translation> <translation>Ajouter compte</translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation>Désautoriser cette application et enlever votre compte</translation> <translation>Désautoriser cette application et enlever votre compte</translation>
</message> </message>
<message> <message>
@ -251,8 +299,8 @@
<translation>Autoriser laccès à votre compte pour cette application</translation> <translation>Autoriser laccès à votre compte pour cette application</translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation>Désactiver cette option pour économiser des données mobiles</translation> <translation>Traduire</translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Credits</source>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation>Identité visuelle</translation> <translation>Identité visuelle</translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation>Développement et traductions</translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation>Traduction français</translation> <translation>Traduction français</translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation>Traduction chinoise</translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation>Traduction néerlandaise</translation> <translation>Traduction néerlandaise</translation>
@ -278,29 +334,18 @@
<source>Spanish translation</source> <source>Spanish translation</source>
<translation>Traduction espagnole</translation> <translation>Traduction espagnole</translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation>Traduction chinoise</translation>
</message>
<message> <message>
<source>Added README file</source> <source>Added README file</source>
<translation>Fichier README ajouté</translation> <translation>Fichier README ajouté</translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>Use</source>
<translation>Charger images dans les pouets</translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Utiliser</translation>
</message> </message>
<message> <message>
<source>Translate</source> <source>to help with app translation to your language.</source>
<translation>Traduire</translation> <translation>pour aider à traduire cette application.</translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation>Utiliser Transifex pour aider à traduire cette application</translation>
</message>
<message>
<source>Development and translations</source>
<translation>Développement et traductions</translation>
</message> </message>
</context> </context>
<context> <context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation>Ajouter aux favoris</translation> <translation>Ajouter aux favoris</translation>
</message> </message>
<message>
<source>Mention</source>
<translation>Mentionner</translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -4,93 +4,96 @@
<context> <context>
<name>API</name> <name>API</name>
<message> <message>
<location filename="../qml/lib/API.js" line="158"/> <location filename="../qml/lib/API.js" line="156"/>
<source>favourited</source> <source>favourited</source>
<translation>ha apprezzato</translation> <translation>ha apprezzato</translation>
</message> </message>
<message> <message>
<location filename="../qml/lib/API.js" line="169"/> <location filename="../qml/lib/API.js" line="167"/>
<source>followed you</source> <source>followed you</source>
<translation>ha iniziato a seguirti</translation> <translation>ha iniziato a seguirti</translation>
</message> </message>
<message> <message>
<location filename="../qml/lib/API.js" line="179"/> <location filename="../qml/lib/API.js" line="177"/>
<source>boosted</source> <source>boosted</source>
<translation>ha condiviso</translation> <translation>ha condiviso</translation>
</message> </message>
<message> <message>
<location filename="../qml/lib/API.js" line="187"/>
<location filename="../qml/lib/API.js" line="189"/> <location filename="../qml/lib/API.js" line="189"/>
<location filename="../qml/lib/API.js" line="191"/>
<source>said</source> <source>said</source>
<translation>ha detto</translation> <translation>ha detto</translation>
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="108"/> <location filename="../qml/pages/ConversationPage.qml" line="107"/>
<source>Copy Link to Clipboard</source> <source>Copy Link to Clipboard</source>
<translation>Copia link</translation> <translation>Copia link</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="200"/> <location filename="../qml/pages/ConversationPage.qml" line="219"/>
<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="230"/> <location filename="../qml/pages/ConversationPage.qml" line="252"/>
<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="293"/> <location filename="../qml/pages/ConversationPage.qml" line="319"/>
<source>Delete</source> <source>Delete</source>
<translation>Elimina</translation> <translation>Elimina</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="392"/> <location filename="../qml/pages/ConversationPage.qml" line="417"/>
<source>Public</source> <source>Public</source>
<translation>Pubblico</translation> <translation>Pubblico</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="395"/> <location filename="../qml/pages/ConversationPage.qml" line="420"/>
<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="398"/> <location filename="../qml/pages/ConversationPage.qml" line="423"/>
<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="401"/> <location filename="../qml/pages/ConversationPage.qml" line="426"/>
<source>Direct</source> <source>Direct</source>
<translation>Diretto</translation> <translation>Diretto</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="449"/> <location filename="../qml/pages/ConversationPage.qml" line="473"/>
<source>Toot sent!</source> <source>Toot sent!</source>
<translation>Toot è stato pubblicato!</translation> <translation>Toot è stato pubblicato!</translation>
</message> </message>
</context>
<context>
<name>CoverPage</name>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="515"/> <location filename="../qml/cover/CoverPage.qml" line="118"/>
<source>New Toot</source>
<translation>Nuovo toot</translation>
</message>
</context>
<context>
<name>EmojiSelect</name>
<message>
<location filename="../qml/pages/components/EmojiSelect.qml" line="21"/>
<source>Emojis</source> <source>Emojis</source>
<translation>Emojis</translation> <translation>Emojis</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Conversation.qml" line="516"/> <location filename="../qml/pages/components/EmojiSelect.qml" line="22"/>
<source>Tap to insert</source> <source>Tap to insert</source>
<translation>Tap per inserire</translation> <translation>Tap per inserire</translation>
</message> </message>
</context> </context>
<context>
<name>ImageFullScreen</name>
<message>
<location filename="../qml/pages/components/ImageFullScreen.qml" line="298"/>
<source>Error loading</source>
<translation>Errore durante caricamento</translation>
</message>
</context>
<context> <context>
<name>ImageUploader</name> <name>ImageUploader</name>
<message> <message>
@ -102,27 +105,27 @@
<context> <context>
<name>LoginPage</name> <name>LoginPage</name>
<message> <message>
<location filename="../qml/pages/LoginPage.qml" line="52"/> <location filename="../qml/pages/LoginPage.qml" line="22"/>
<source>Login</source> <source>Login</source>
<translation>Accesso</translation> <translation>Accesso</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/LoginPage.qml" line="56"/> <location filename="../qml/pages/LoginPage.qml" line="26"/>
<source>Instance</source> <source>Instance</source>
<translation>Istanza</translation> <translation>Istanza</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/LoginPage.qml" line="62"/> <location filename="../qml/pages/LoginPage.qml" line="32"/>
<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="119"/> <location filename="../qml/pages/LoginPage.qml" line="88"/>
<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="190"/> <location filename="../qml/pages/LoginPage.qml" line="159"/>
<source>Reload</source> <source>Reload</source>
<translation>Ricarica</translation> <translation>Ricarica</translation>
</message> </message>
@ -130,55 +133,63 @@
<context> <context>
<name>MainPage</name> <name>MainPage</name>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="65"/> <location filename="../qml/pages/MainPage.qml" line="36"/>
<source>Home</source> <source>Home</source>
<translation>Home</translation> <translation>Home</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="74"/> <location filename="../qml/pages/MainPage.qml" line="46"/>
<source>Notifications</source> <source>Notifications</source>
<translation>Notifiche</translation> <translation>Notifiche</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="84"/> <location filename="../qml/pages/MainPage.qml" line="57"/>
<source>Local</source> <source>Local</source>
<translation>Locale</translation> <translation>Locale</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="94"/> <location filename="../qml/pages/MainPage.qml" line="68"/>
<source>Federated</source> <source>Federated</source>
<translation>Federazione</translation> <translation>Federazione</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="121"/> <location filename="../qml/pages/MainPage.qml" line="103"/>
<source>Search</source> <source>Search</source>
<translation>Cerca</translation> <translation>Cerca</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/MainPage.qml" line="126"/> <location filename="../qml/pages/MainPage.qml" line="108"/>
<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="251"/> <location filename="../qml/pages/MainPage.qml" line="253"/>
<source>New Toot</source> <source>New Toot</source>
<translation>Nuovo toot</translation> <translation>Nuovo toot</translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<location filename="../qml/pages/components/MediaFullScreen.qml" line="290"/>
<source>Error loading</source>
<translation>Errore durante caricamento</translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
<location filename="../qml/pages/components/MiniStatus.qml" line="36"/> <location filename="../qml/pages/components/MiniStatus.qml" line="38"/>
<source>boosted</source> <source>boosted</source>
<translation>ha condiviso</translation> <translation>ha condiviso</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/components/MiniStatus.qml" line="39"/> <location filename="../qml/pages/components/MiniStatus.qml" line="41"/>
<source>favourited</source> <source>favourited</source>
<translation>ha apprezzato</translation> <translation>ha apprezzato</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/components/MiniStatus.qml" line="42"/> <location filename="../qml/pages/components/MiniStatus.qml" line="44"/>
<source>followed you</source> <source>followed you</source>
<translation>ha iniziato a seguirti</translation> <translation>ha iniziato a seguirti</translation>
</message> </message>
@ -186,12 +197,12 @@
<context> <context>
<name>MyList</name> <name>MyList</name>
<message> <message>
<location filename="../qml/pages/components/MyList.qml" line="10"/> <location filename="../qml/pages/components/MyList.qml" line="12"/>
<source>Loading</source> <source>Loading</source>
<translation>Caricamento</translation> <translation>Caricamento</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/components/MyList.qml" line="11"/> <location filename="../qml/pages/components/MyList.qml" line="13"/>
<source>please wait...</source> <source>please wait...</source>
<translation>Attendere un momento...</translation> <translation>Attendere un momento...</translation>
</message> </message>
@ -202,172 +213,212 @@
</message> </message>
<message> <message>
<location filename="../qml/pages/components/MyList.qml" line="70"/> <location filename="../qml/pages/components/MyList.qml" line="70"/>
<source>New Toot</source>
<translation>Nuovo toot</translation>
</message>
<message>
<location filename="../qml/pages/components/MyList.qml" line="80"/>
<source>Load more</source> <source>Load more</source>
<translation>Caricare altri</translation> <translation>Caricare altri</translation>
</message> </message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<location filename="../qml/pages/Profile.qml" line="171"/> <location filename="../qml/pages/components/ProfileHeader.qml" line="135"/>
<source>Summary</source> <source>Follows you</source>
<translation>Sintesi</translation> <translation>Ti segue</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Profile.qml" line="177"/> <location filename="../qml/pages/components/ProfileHeader.qml" line="153"/>
<source>Followers</source> <source>Bot</source>
<translation>Seguaci</translation> <translation>Bot</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="182"/>
<source>Following</source>
<translation>Segue</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="187"/>
<source>Statuses</source>
<translation>Toots</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="192"/>
<source>Favourites</source>
<translation>Apprezzati</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="201"/>
<source>Unfollow</source>
<translation>Smetti di seguire</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="201"/>
<source>Follow request sent!</source>
<translation>Richiesta di seguito inviata!</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="201"/>
<source>Follow</source>
<translation>Segui</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="214"/>
<source>Unmute</source>
<translation>Non silenziare</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="214"/>
<source>Mute</source>
<translation>Silenzia</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="227"/>
<source>Unblock</source>
<translation>Sblocca</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="227"/>
<source>Block</source>
<translation>Blocca</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="246"/>
<source>Bio</source>
<translation>Biografia</translation>
</message>
<message>
<location filename="../qml/pages/Profile.qml" line="290"/>
<source>Open Profile in Browser</source>
<translation>Aprire profile nel browser</translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>ProfilePage</name>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="19"/> <location filename="../qml/pages/ProfilePage.qml" line="175"/>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation>Dettagli</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="255"/>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Seguaci</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="266"/>
<source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Segue</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="277"/>
<source>Statuses</source>
<extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Toots</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="307"/>
<source>Mention</source>
<translation>Menzionare</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="319"/>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Smetti di seguire</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="321"/>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Richiesto</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="323"/>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Segui</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="342"/>
<source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Non silenziare</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="344"/>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Silenzia</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="362"/>
<source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Sblocca</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="364"/>
<source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Blocca</translation>
</message>
<message>
<location filename="../qml/pages/ProfilePage.qml" line="380"/>
<source>Open in Browser</source>
<translation>Aprire nel browser</translation>
</message>
</context>
<context>
<name>SettingsPage</name>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="25"/>
<source>Settings</source> <source>Settings</source>
<translation>Impostazione</translation> <translation>Impostazioni</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="26"/> <location filename="../qml/pages/SettingsPage.qml" line="28"/>
<source>Remove Account</source> <source>Options</source>
<translation>Rimozione del account</translation> <translation>Opzioni</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="26"/> <location filename="../qml/pages/SettingsPage.qml" line="31"/>
<source>Add Account</source> <source>Load Images in Toots</source>
<translation>Aggiungi account</translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="27"/>
<source>Deauthorize this app and remove your account</source>
<translation>Annullare l&apos;autorizzazione dell&apos;app e rimuovere l&apos;account</translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="27"/>
<source>Authorize this app to access your Mastodon account</source>
<translation>Autorizzare l&apos;app all&apos;utilizzo del conto Mastodon</translation>
</message>
<message>
<location filename="../qml/pages/Settings.qml" line="59"/>
<source>Load images in toots</source>
<translation>Caricare immagini nei toots</translation> <translation>Caricare immagini nei toots</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="60"/> <location filename="../qml/pages/SettingsPage.qml" line="32"/>
<source>Disable this option if you want to preserve your data connection</source> <source>Disable this option if you want to preserve your data connection</source>
<translation>Disabilitare questa opzione per conservare connessione dati</translation> <translation>Disabilitare questa opzione per conservare connessione dati</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="67"/> <location filename="../qml/pages/SettingsPage.qml" line="41"/>
<source>Account</source>
<translation>Account</translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="73"/>
<source>Remove Account</source>
<translation>Rimozione del account</translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="73"/>
<source>Add Account</source>
<translation>Aggiungi account</translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="96"/>
<source>Deauthorize this app from using your account and remove account data from phone</source>
<translation>Annullare l&apos;autorizzazione dell&apos;app e rimuovere l&apos;account</translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="96"/>
<source>Authorize this app to access your Mastodon account</source>
<translation>Autorizzare l&apos;app all&apos;utilizzo del conto Mastodon</translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="110"/>
<source>Translate</source> <source>Translate</source>
<translation>Tradurre</translation> <translation>Tradurre</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="68"/> <location filename="../qml/pages/SettingsPage.qml" line="116"/>
<source>Use Transifex to help with app translation to your language</source> <source>Use</source>
<translation>Utilizzare Transifex per aiutare nella traduzione dell&apos;app</translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Utilizzare</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="84"/> <location filename="../qml/pages/SettingsPage.qml" line="116"/>
<source>to help with app translation to your language.</source>
<translation>per aiutare nella traduzione dell&apos;app.</translation>
</message>
<message>
<location filename="../qml/pages/SettingsPage.qml" line="132"/>
<source>Credits</source> <source>Credits</source>
<translation>Sviluppo</translation> <translation>Sviluppo</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="98"/> <location filename="../qml/pages/SettingsPage.qml" line="148"/>
<source>UI/UX design and development</source> <source>UI/UX design and development</source>
<translation>Design UI/UX e sviluppo</translation> <translation>Design UI/UX e sviluppo</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="104"/> <location filename="../qml/pages/SettingsPage.qml" line="155"/>
<source>Visual identity</source> <source>Visual identity</source>
<translation>Identità visiva</translation> <translation>Identità visiva</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="110"/> <location filename="../qml/pages/SettingsPage.qml" line="162"/>
<source>Development and translations</source> <source>Development and translations</source>
<translation>Sviluppo e traduzioni</translation> <translation>Sviluppo e traduzioni</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="116"/> <location filename="../qml/pages/SettingsPage.qml" line="169"/>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation>Traduzione francese e occitanica</translation> <translation>Traduzione francese e occitanica</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="122"/> <location filename="../qml/pages/SettingsPage.qml" line="176"/>
<source>Chinese translation</source> <source>Chinese translation</source>
<translation>Traduzione cinese</translation> <translation>Traduzione cinese</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="128"/> <location filename="../qml/pages/SettingsPage.qml" line="183"/>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation>Traduzione olandese</translation> <translation>Traduzione olandese</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="134"/> <location filename="../qml/pages/SettingsPage.qml" line="190"/>
<source>Spanish translation</source> <source>Spanish translation</source>
<translation>Traduzione spagnola</translation> <translation>Traduzione spagnola</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/Settings.qml" line="140"/> <location filename="../qml/pages/SettingsPage.qml" line="197"/>
<source>Added README file</source> <source>Added README file</source>
<translation>Aggiunto file README</translation> <translation>Aggiunto file README</translation>
</message> </message>
@ -375,17 +426,17 @@
<context> <context>
<name>Toot</name> <name>Toot</name>
<message> <message>
<location filename="../qml/pages/components/Toot.qml" line="35"/> <location filename="../qml/pages/components/Toot.qml" line="36"/>
<source>boosted</source> <source>boosted</source>
<translation>ha condiviso</translation> <translation>ha condiviso</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/components/Toot.qml" line="38"/> <location filename="../qml/pages/components/Toot.qml" line="39"/>
<source>favourited</source> <source>favourited</source>
<translation>ha apprezzato</translation> <translation>ha apprezzato</translation>
</message> </message>
<message> <message>
<location filename="../qml/pages/components/Toot.qml" line="41"/> <location filename="../qml/pages/components/Toot.qml" line="42"/>
<source>followed you</source> <source>followed you</source>
<translation>ha iniziato a seguirti</translation> <translation>ha iniziato a seguirti</translation>
</message> </message>
@ -393,24 +444,29 @@
<context> <context>
<name>VisualContainer</name> <name>VisualContainer</name>
<message> <message>
<location filename="../qml/pages/components/VisualContainer.qml" line="207"/> <location filename="../qml/pages/components/VisualContainer.qml" line="267"/>
<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="207"/> <location filename="../qml/pages/components/VisualContainer.qml" line="267"/>
<source>Boost</source> <source>Boost</source>
<translation>Condividi</translation> <translation>Condividi</translation>
</message> </message>
<message> <message>s
<location filename="../qml/pages/components/VisualContainer.qml" line="244"/> <location filename="../qml/pages/components/VisualContainer.qml" line="308"/>
<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="244"/> <location filename="../qml/pages/components/VisualContainer.qml" line="308"/>
<source>Favorite</source> <source>Favorite</source>
<translation>Apprezzato</translation> <translation>Apprezzato</translation>
</message> </message>
<message>
<location filename="../qml/pages/components/VisualContainer.qml" line="349"/>
<source>Mention</source>
<translation>Menzionare</translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation>Verwijderen</translation> <translation>Linkadres kopiëren</translation>
</message>
<message>
<source>Emojis</source>
<translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Tikken om in te voegen</translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation>Verwijderen</translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<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>CoverPage</name>
<message> <message>
<source>Error loading</source> <source>New Toot</source>
<translation type="unfinished"></translation> <translation>Nieuwe Toot</translation>
</message>
</context>
<context>
<name>EmojiSelect</name>
<message>
<source>Emojis</source>
<translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Tikken om in te voegen</translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation>Gefedereerd</translation> <translation>Gefedereerd</translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,72 +178,110 @@
<source>please wait...</source> <source>please wait...</source>
<translation>even geduld</translation> <translation>even geduld</translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>Nieuwe Toot</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Ontvolgen</translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>Volgverzoek verstuurd!</translation> <translation>Bot</translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation>Gegevens</translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Volgers</translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Volgend</translation> <translation>Volgend</translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation>Dempen</translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Statussen</translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Ontvolgen</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Gevraagd</translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Volgen</translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Ontdempen</translation> <translation>Ontdempen</translation>
</message> </message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Dempen</translation>
</message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Deblokkeren</translation> <translation>Deblokkeren</translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Blokkeren</translation> <translation>Blokkeren</translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation>Statussen</translation> <translation>Open een Browser</translation>
</message> </message>
<message> <message>
<source>Favourites</source> <source>Mention</source>
<translation>Favorieten</translation> <translation type="unfinished">Vermelden</translation>
</message>
<message>
<source>Follow</source>
<translation>Volgen</translation>
</message>
<message>
<source>Summary</source>
<translation>Samenvatting</translation>
</message>
<message>
<source>Followers</source>
<translation>Volgers</translation>
</message>
<message>
<source>Bio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open Profile in Browser</source>
<translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation>Instellingen</translation> <translation>Instellingen</translation>
</message> </message>
<message>
<source>Options</source>
<translation>Opties</translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation>Laden afbeeldingen in toots</translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation>Schakel deze optie uit als je je dataverbinding wilt behouden</translation>
</message>
<message>
<source>Account</source>
<translation>Account</translation>
</message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
<translation>Verwijderen account</translation> <translation>Verwijderen account</translation>
@ -243,7 +291,7 @@
<translation>Toevoegen account</translation> <translation>Toevoegen account</translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation>Trek autorisaties van deze app in en verwijder je account</translation> <translation>Trek autorisaties van deze app in en verwijder je account</translation>
</message> </message>
<message> <message>
@ -251,8 +299,8 @@
<translation>Autoriseer deze app om je Mastodon namens jou te gebruiken</translation> <translation>Autoriseer deze app om je Mastodon namens jou te gebruiken</translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation>Schakel deze optie uit als je je dataverbinding wilt behouden</translation> <translation>Vertalen</translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Credits</source>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation>Ontwikkeling en vertalingen</translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -283,24 +339,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Chinese translation</source> <source>Use</source>
<translation type="unfinished"></translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Gebruik</translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>to help with app translation to your language.</source>
<translation>Laden afbeeldingen in toots</translation> <translation>om deze app te helpen vertalen in jouw taal.</translation>
</message>
<message>
<source>Translate</source>
<translation>Vertalen</translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation>Gebruik Transifex om deze app te helpen vertalen in jouw taal</translation>
</message>
<message>
<source>Development and translations</source>
<translation>Ontwikkeling en vertalingen</translation>
</message> </message>
</context> </context>
<context> <context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation>Markeren als favoriet</translation> <translation>Markeren als favoriet</translation>
</message> </message>
<message>
<source>Mention</source>
<translation>Vermelden</translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation>Verwijderen</translation> <translation type="unfinished"></translation>
</message>
<message>
<source>Emojis</source>
<translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Tikt voor in te voegen</translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation>Verwijderen</translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<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>CoverPage</name>
<message> <message>
<source>Error loading</source> <source>New Toot</source>
<translation type="unfinished"></translation> <translation>Nieuwen toot</translation>
</message>
</context>
<context>
<name>EmojiSelect</name>
<message>
<source>Emojis</source>
<translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Tikt voor in te voegen</translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation>Gefedereerd</translation> <translation>Gefedereerd</translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,72 +178,110 @@
<source>please wait...</source> <source>please wait...</source>
<translation>efkens geduld</translation> <translation>efkens geduld</translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>Nieuwen toot</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Ontvolgen</translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>Volgverzoek verzonden!</translation> <translation>Bot</translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Volgers</translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Volgend</translation> <translation>Volgend</translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation>Dempen</translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Statussen</translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Ontvolgen</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Volgen</translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Ontdempen</translation> <translation>Ontdempen</translation>
</message> </message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Dempen</translation>
</message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Deblokkeren</translation> <translation>Deblokkeren</translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Blokkeren</translation> <translation>Blokkeren</translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation>Statussen</translation>
</message>
<message>
<source>Favourites</source>
<translation>Duimen</translation>
</message>
<message>
<source>Follow</source>
<translation>Volgen</translation>
</message>
<message>
<source>Summary</source>
<translation>Samenvatting</translation>
</message>
<message>
<source>Followers</source>
<translation>Volgers</translation>
</message>
<message>
<source>Bio</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Open Profile in Browser</source> <source>Mention</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation>Instellingen</translation> <translation>Instellingen</translation>
</message> </message>
<message>
<source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation>Afbeeldingen in toots laden</translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation>Schakelt dees optie uit als ge uw verbinding wilt behouden</translation>
</message>
<message>
<source>Account</source>
<translation>Account</translation>
</message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
<translation>Account verwijderen</translation> <translation>Account verwijderen</translation>
@ -243,7 +291,7 @@
<translation>Account toevoegen</translation> <translation>Account toevoegen</translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation>Trekt autorisaties van dezen app in en verwijdert uwen account</translation> <translation>Trekt autorisaties van dezen app in en verwijdert uwen account</translation>
</message> </message>
<message> <message>
@ -251,8 +299,8 @@
<translation>Autoriseert dezen app voor uwe Mastodon-account namens u te gebruiken</translation> <translation>Autoriseert dezen app voor uwe Mastodon-account namens u te gebruiken</translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation>Schakelt dees optie uit als ge uw verbinding wilt behouden</translation> <translation>Vertalen</translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Credits</source>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -283,24 +339,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Chinese translation</source> <source>Use</source>
<translation type="unfinished"></translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Gebruikt</translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>to help with app translation to your language.</source>
<translation>Afbeeldingen in toots laden</translation> <translation>voor te helpen met dezen app in uw taal te vertalen.</translation>
</message>
<message>
<source>Translate</source>
<translation>Vertalen</translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation>Gebruikt Transifex voor te helpen met dezen app in uw taal te vertalen</translation>
</message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation>Duim toevoegen</translation> <translation>Duim toevoegen</translation>
</message> </message>
<message>
<source>Mention</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation>Escafar</translation> <translation type="unfinished"></translation>
</message>
<message>
<source>Emojis</source>
<translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Tustejar per inserir</translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation>Escafar</translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<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>CoverPage</name>
<message> <message>
<source>Error loading</source> <source>New Toot</source>
<translation type="unfinished"></translation> <translation>Nòu Tut</translation>
</message>
</context>
<context>
<name>EmojiSelect</name>
<message>
<source>Emojis</source>
<translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Tustejar per inserir</translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation>Federat</translation> <translation>Federat</translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,72 +178,110 @@
<source>please wait...</source> <source>please wait...</source>
<translation>esperatz....</translation> <translation>esperatz....</translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>Nòu Tut</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Quitar de seguir</translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>Demanda de seguir enviada !</translation> <translation>Bot</translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Seguidors</translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Abonaments</translation> <translation>Abonaments</translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation>Amagar</translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Estatuts</translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Quitar de seguir</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Seguir</translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Mostrar</translation> <translation>Mostrar</translation>
</message> </message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Amagar</translation>
</message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Desblocar</translation> <translation>Desblocar</translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Blocar</translation> <translation>Blocar</translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation>Estatuts</translation>
</message>
<message>
<source>Favourites</source>
<translation>Favorits</translation>
</message>
<message>
<source>Follow</source>
<translation>Seguir</translation>
</message>
<message>
<source>Summary</source>
<translation>Resumit</translation>
</message>
<message>
<source>Followers</source>
<translation>Seguidors</translation>
</message>
<message>
<source>Bio</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Open Profile in Browser</source> <source>Mention</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation>Parmètres</translation> <translation>Parmètres</translation>
</message> </message>
<message>
<source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation>Cargar los imatges dels tuts</translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation>Desactivar aquesta opcion per estalviar vòstra connexion de donadas</translation>
</message>
<message>
<source>Account</source>
<translation>Compte</translation>
</message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
<translation>Levar un compte</translation> <translation>Levar un compte</translation>
@ -243,7 +291,7 @@
<translation>Ajustar un compte</translation> <translation>Ajustar un compte</translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation>Revocar laplicacion e levar vòstre compte</translation> <translation>Revocar laplicacion e levar vòstre compte</translation>
</message> </message>
<message> <message>
@ -251,8 +299,8 @@
<translation>Autorizar aquesta aplicacion a utilizar vòstre compte Mastodon per vos</translation> <translation>Autorizar aquesta aplicacion a utilizar vòstre compte Mastodon per vos</translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation>Desactivar aquesta opcion per estalviar vòstra connexion de donadas</translation> <translation>Traduire</translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Credits</source>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -283,24 +339,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Chinese translation</source> <source>Use</source>
<translation type="unfinished"></translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Utilizar</translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>to help with app translation to your language.</source>
<translation>Cargar los imatges dels tuts</translation> <translation>per ajudar a traduire laplicacion dins vòstra lenga.</translation>
</message>
<message>
<source>Translate</source>
<translation>Traduire</translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation>Utilizar Transifex per ajudar a traduire laplicacion dins vòstra lenga</translation>
</message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation>Ajustar als favorits</translation> <translation>Ajustar als favorits</translation>
</message> </message>
<message>
<source>Mention</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -5,7 +5,7 @@
<name>API</name> <name>API</name>
<message> <message>
<source>favourited</source> <source>favourited</source>
<translation type="unfinished">dodał(a) do ulubionych</translation> <translation>dodał(a) do ulubionych</translation>
</message> </message>
<message> <message>
<source>followed you</source> <source>followed you</source>
@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation>Usuń</translation> <translation type="unfinished"></translation>
</message>
<message>
<source>Emojis</source>
<translation>Emoji</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Dotknij aby wstawić</translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation>Usuń</translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<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>CoverPage</name>
<message> <message>
<source>Error loading</source> <source>New Toot</source>
<translation type="unfinished"></translation> <translation>Nowy wpis</translation>
</message>
</context>
<context>
<name>EmojiSelect</name>
<message>
<source>Emojis</source>
<translation>Emoji</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Dotknij aby wstawić</translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation>Globalne</translation> <translation>Globalne</translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,71 +178,109 @@
<source>please wait...</source> <source>please wait...</source>
<translation>proszę czekać</translation> <translation>proszę czekać</translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>Nowy wpis</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Przestań śledzić</translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>Wysłano prośbę o możliwość śledzenia!</translation> <translation>Bot</translation>
</message> </message>
</context>
<context>
<name>ProfilePage</name>
<message> <message>
<source>Following</source> <source>About</source>
<translation>Śledzisz</translation> <extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
</message> <translation type="unfinished"></translation>
<message>
<source>Mute</source>
<translation>Wycisz</translation>
</message>
<message>
<source>Unmute</source>
<translation>Unmute</translation>
</message>
<message>
<source>Unblock</source>
<translation>Unblock</translation>
</message>
<message>
<source>Block</source>
<translation>Block</translation>
</message>
<message>
<source>Statuses</source>
<translation>Statuses</translation>
</message>
<message>
<source>Favourites</source>
<translation>Favourites</translation>
</message>
<message>
<source>Follow</source>
<translation>Follow</translation>
</message>
<message>
<source>Summary</source>
<translation>Summary</translation>
</message> </message>
<message> <message>
<source>Followers</source> <source>Followers</source>
<translation>Followers</translation> <extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
</message>
<message>
<source>Bio</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Open Profile in Browser</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Śledzisz</translation>
</message>
<message>
<source>Statuses</source>
<extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Przestań śledzić</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Wycisz</translation>
</message>
<message>
<source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open in Browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mention</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation type="unfinished">Ustawienia</translation> <translation>Ustawienia</translation>
</message>
<message>
<source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Account</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
@ -243,7 +291,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -251,7 +299,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -283,23 +339,12 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Chinese translation</source> <source>Use</source>
<extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>to help with app translation to your language.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Translate</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Mention</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation>Удалить</translation> <translation type="unfinished"></translation>
</message>
<message>
<source>Emojis</source>
<translation>айликов</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Нажмите, чтобы вставить</translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation>Удалить</translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<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>CoverPage</name>
<message> <message>
<source>Error loading</source> <source>New Toot</source>
<translation type="unfinished"></translation> <translation>Новый</translation>
</message>
</context>
<context>
<name>EmojiSelect</name>
<message>
<source>Emojis</source>
<translation>айликов</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Нажмите, чтобы вставить</translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation>Федеративные</translation> <translation>Федеративные</translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,72 +178,110 @@
<source>please wait...</source> <source>please wait...</source>
<translation>Пожалуйста, подождите...</translation> <translation>Пожалуйста, подождите...</translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>Новый</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Отписаться</translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>Следуйте запрошенному запросу!</translation> <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Читают</translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Следующий</translation> <translation>Следующий</translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation>Безгласный</translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Статусы</translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Отписаться</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Следить</translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Нет безгласный</translation> <translation>Нет безгласный</translation>
</message> </message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Безгласный</translation>
</message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Открыть</translation> <translation>Открыть</translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Блокировать</translation> <translation>Блокировать</translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation>Статусы</translation>
</message>
<message>
<source>Favourites</source>
<translation>Избранные</translation>
</message>
<message>
<source>Follow</source>
<translation>Следить</translation>
</message>
<message>
<source>Summary</source>
<translation>Резюме</translation>
</message>
<message>
<source>Followers</source>
<translation>Читают</translation>
</message>
<message>
<source>Bio</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Open Profile in Browser</source> <source>Mention</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation>Настройки</translation> <translation>Настройки</translation>
</message> </message>
<message>
<source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation>Загружать изображения</translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation>Отключите эту опцию, если вы хотите сохранить подключение к данным</translation>
</message>
<message>
<source>Account</source>
<translation>Aккаунт</translation>
</message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
<translation>Удалить учетную запись</translation> <translation>Удалить учетную запись</translation>
@ -243,7 +291,7 @@
<translation>Добавить аккаунт</translation> <translation>Добавить аккаунт</translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation>удалить учетную запись с устройства</translation> <translation>удалить учетную запись с устройства</translation>
</message> </message>
<message> <message>
@ -251,8 +299,8 @@
<translation>Уполномочить это приложение использовать свою учетную запись Mastodon от вашего имени</translation> <translation>Уполномочить это приложение использовать свою учетную запись Mastodon от вашего имени</translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation>Отключите эту опцию, если вы хотите сохранить подключение к данным</translation> <translation>Переведите</translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Credits</source>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -283,24 +339,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Chinese translation</source> <source>Use</source>
<translation type="unfinished"></translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Используйте</translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>to help with app translation to your language.</source>
<translation>Загружать изображения</translation> <translation>чтобы помочь с переводом приложения на ваш язык.</translation>
</message>
<message>
<source>Translate</source>
<translation>Переведите</translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation>Используйте Transifex, чтобы помочь с переводом приложения на ваш язык</translation>
</message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation>Избранные</translation> <translation>Избранные</translation>
</message> </message>
<message>
<source>Mention</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation>Обриши</translation> <translation type="unfinished"></translation>
</message>
<message>
<source>Emojis</source>
<translation>Емотикони</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Тапни за убацивање</translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation>Обриши</translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<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>CoverPage</name>
<message> <message>
<source>Error loading</source> <source>New Toot</source>
<translation type="unfinished"></translation> <translation>Novi toot</translation>
</message>
</context>
<context>
<name>EmojiSelect</name>
<message>
<source>Emojis</source>
<translation>Емотикони</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Тапни за убацивање</translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation>Федеративна</translation> <translation>Федеративна</translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,72 +178,110 @@
<source>please wait...</source> <source>please wait...</source>
<translation>молимо вас, сачекајте...</translation> <translation>молимо вас, сачекајте...</translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>Novi toot</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Одпрати</translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>Захтјев за праћењем поднесен!</translation> <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Пратиоци</translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Пратите</translation> <translation>Пратите</translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation>Утишај</translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Статуси</translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Одпрати</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Прати</translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Укини утишање</translation> <translation>Укини утишање</translation>
</message> </message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Утишај</translation>
</message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Одблокирати</translation> <translation>Одблокирати</translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Блокирати</translation> <translation>Блокирати</translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation>Статуси</translation>
</message>
<message>
<source>Favourites</source>
<translation>Омиљени</translation>
</message>
<message>
<source>Follow</source>
<translation>Прати</translation>
</message>
<message>
<source>Summary</source>
<translation>Детаљи</translation>
</message>
<message>
<source>Followers</source>
<translation>Пратиоци</translation>
</message>
<message>
<source>Bio</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Open Profile in Browser</source> <source>Mention</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation>Подешавања</translation> <translation>Подешавања</translation>
</message> </message>
<message>
<source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation>Прикажи слике у објавама</translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation>Искључите ову опцију уколико желите да уштедите на преносу података</translation>
</message>
<message>
<source>Account</source>
<translation>Hалог</translation>
</message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
<translation>Уклони налог</translation> <translation>Уклони налог</translation>
@ -243,7 +291,7 @@
<translation>Додај налог</translation> <translation>Додај налог</translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation>Укините дозволе за кориштење и уклоните налог с телефона</translation> <translation>Укините дозволе за кориштење и уклоните налог с телефона</translation>
</message> </message>
<message> <message>
@ -251,8 +299,8 @@
<translation>Дозволите овој апликацији да користи ваш Mastodon налог</translation> <translation>Дозволите овој апликацији да користи ваш Mastodon налог</translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation>Искључите ову опцију уколико желите да уштедите на преносу података</translation> <translation>Преведи</translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Credits</source>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -283,24 +339,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Chinese translation</source> <source>Use</source>
<translation type="unfinished"></translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Користите</translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>to help with app translation to your language.</source>
<translation>Прикажи слике у објавама</translation> <translation>и помозите у преводу апликације на други језик.</translation>
</message>
<message>
<source>Translate</source>
<translation>Преведи</translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation>Користите Transifex и помозите у преводу апликације на други језик</translation>
</message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Mention</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation>Radera</translation> <translation type="unfinished"></translation>
</message>
<message>
<source>Emojis</source>
<translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Tryck för att infoga</translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation>Radera</translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<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>CoverPage</name>
<message> <message>
<source>Error loading</source> <source>New Toot</source>
<translation type="unfinished"></translation> <translation>Ny toot</translation>
</message>
</context>
<context>
<name>EmojiSelect</name>
<message>
<source>Emojis</source>
<translation>Emojis</translation>
</message>
<message>
<source>Tap to insert</source>
<translation>Tryck för att infoga</translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation>Förenade</translation> <translation>Förenade</translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,72 +178,110 @@
<source>please wait...</source> <source>please wait...</source>
<translation>Vänligen vänta...</translation> <translation>Vänligen vänta...</translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>Ny toot</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Sluta följa</translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>Följarförfrågan har skickats!</translation> <translation>Bot</translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Följare</translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Följer</translation> <translation>Följer</translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation>Tysta</translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Statusar</translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Sluta följa</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Följ</translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Avtysta</translation> <translation>Avtysta</translation>
</message> </message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Tysta</translation>
</message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Avblockera</translation> <translation>Avblockera</translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Blockera</translation> <translation>Blockera</translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation>Statusar</translation>
</message>
<message>
<source>Favourites</source>
<translation>Favoriter</translation>
</message>
<message>
<source>Follow</source>
<translation>Följ</translation>
</message>
<message>
<source>Summary</source>
<translation>Översikt</translation>
</message>
<message>
<source>Followers</source>
<translation>Följare</translation>
</message>
<message>
<source>Bio</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Open Profile in Browser</source> <source>Mention</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation>Inställningar</translation> <translation>Inställningar</translation>
</message> </message>
<message>
<source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation>Ladda bilder i toots</translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation>Inaktivera det här alternativet om du vill behålla din dataanslutning</translation>
</message>
<message>
<source>Account</source>
<translation>Konto</translation>
</message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
<translation>Radera konto</translation> <translation>Radera konto</translation>
@ -243,16 +291,16 @@
<translation>Lägg till konto</translation> <translation>Lägg till konto</translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation>Avauktorisera denna app och radera ditt konto</translation> <translation>Avauktorisera denna app och radera ditt konto</translation>
</message> </message>
<message> <message>
<source>Authorize this app to access your Mastodon account</source> <source>Authorize this app to access your Mastodon account</source>
<translation>Godkänn denna app att använda ditt Mastodon-konto dina vägnar</translation> <translation>Godkänn denna app att använda ditt Mastodon-konto dina vägnar</translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation>Inaktivera det här alternativet om du vill behålla din dataanslutning</translation> <translation>Översätt</translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Credits</source>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -283,24 +339,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Chinese translation</source> <source>Use</source>
<translation type="unfinished"></translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Använd</translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>to help with app translation to your language.</source>
<translation>Ladda bilder i toots</translation> <translation>för att hjälpa med app-översättningar till ditt språk.</translation>
</message>
<message>
<source>Translate</source>
<translation>Översätt</translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Development and translations</source>
<translation>Använd Transifex för att hjälpa med app-översättningar till ditt språk</translation>
</message> </message>
</context> </context>
<context> <context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation>Favorisera</translation> <translation>Favorisera</translation>
</message> </message>
<message>
<source>Mention</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -21,23 +21,23 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message> <message>
<source>Delete</source> <source>Copy Link to Clipboard</source>
<translation></translation> <translation></translation>
</message>
<message>
<source>Emojis</source>
<translation></translation>
</message>
<message>
<source>Tap to insert</source>
<translation></translation>
</message> </message>
<message> <message>
<source>Write your warning here</source> <source>Write your warning here</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation>?</translation>
</message>
<message>
<source>Delete</source>
<translation></translation>
</message>
<message> <message>
<source>Public</source> <source>Public</source>
<translation></translation> <translation></translation>
@ -54,24 +54,27 @@
<source>Direct</source> <source>Direct</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>What&apos;s on your mind?</source>
<translation>?</translation>
</message>
<message> <message>
<source>Toot sent!</source> <source>Toot sent!</source>
<translation></translation> <translation></translation>
</message> </message>
</context>
<context>
<name>CoverPage</name>
<message> <message>
<source>Copy Link to Clipboard</source> <source>New Toot</source>
<translation></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
<name>ImageFullScreen</name> <name>EmojiSelect</name>
<message> <message>
<source>Error loading</source> <source>Emojis</source>
<translation></translation> <translation></translation>
</message>
<message>
<source>Tap to insert</source>
<translation></translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation></translation> <translation></translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation></translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,72 +178,110 @@
<source>please wait...</source> <source>please wait...</source>
<translation>......</translation> <translation>......</translation>
</message> </message>
<message>
<source>New Toot</source>
<translation></translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation></translation> <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation></translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation></translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation></translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation></translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation></translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation></translation>
</message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation></translation>
</message>
<message>
<source>Favourites</source>
<translation></translation>
</message>
<message>
<source>Follow</source>
<translation></translation>
</message>
<message>
<source>Summary</source>
<translation></translation>
</message>
<message>
<source>Followers</source>
<translation></translation>
</message>
<message>
<source>Bio</source>
<translation></translation>
</message>
<message>
<source>Open Profile in Browser</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Mention</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load Images in Toots</source>
<translation></translation>
</message>
<message>
<source>Disable this option if you want to preserve your data connection</source>
<translation></translation>
</message>
<message>
<source>Account</source>
<translation></translation>
</message>
<message> <message>
<source>Remove Account</source> <source>Remove Account</source>
<translation></translation> <translation></translation>
@ -243,7 +291,7 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Deauthorize this app and remove your account</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
@ -251,8 +299,8 @@
<translation>使 Mastodon </translation> <translation>使 Mastodon </translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Translate</source>
<translation></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Credits</source>
@ -266,10 +314,18 @@
<source>Visual identity</source> <source>Visual identity</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Development and translations</source>
<translation></translation>
</message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Occitan &amp; French translation</source>
<translation>西</translation> <translation>西</translation>
</message> </message>
<message>
<source>Chinese translation</source>
<translation></translation>
</message>
<message> <message>
<source>Dutch translation</source> <source>Dutch translation</source>
<translation></translation> <translation></translation>
@ -283,24 +339,13 @@
<translation> README </translation> <translation> README </translation>
</message> </message>
<message> <message>
<source>Chinese translation</source> <source>Use</source>
<translation></translation> <extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Load images in toots</source> <source>to help with app translation to your language.</source>
<translation></translation> <translation type="unfinished"></translation>
</message>
<message>
<source>Translate</source>
<translation></translation>
</message>
<message>
<source>Use Transifex to help with app translation to your language</source>
<translation>使 Transifex </translation>
</message>
<message>
<source>Development and translations</source>
<translation></translation>
</message> </message>
</context> </context>
<context> <context>
@ -336,5 +381,9 @@
<source>Favorite</source> <source>Favorite</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Mention</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1"> <TS version="2.1" language="en">
<context> <context>
<name>API</name> <name>API</name>
<message> <message>
@ -21,11 +21,53 @@
</message> </message>
</context> </context>
<context> <context>
<name>Conversation</name> <name>ConversationPage</name>
<message>
<source>Copy Link to Clipboard</source>
<translation>Copy Link to Clipboard</translation>
</message>
<message>
<source>Write your warning here</source>
<translation>Write your warning here</translation>
</message>
<message>
<source>What&apos;s on your mind?</source>
<translation>What&apos;s on your mind?</translation>
</message>
<message> <message>
<source>Delete</source> <source>Delete</source>
<translation>Delete</translation> <translation>Delete</translation>
</message> </message>
<message>
<source>Public</source>
<translation>Public</translation>
</message>
<message>
<source>Unlisted</source>
<translation>Unlisted</translation>
</message>
<message>
<source>Followers-only</source>
<translation>Followers-only</translation>
</message>
<message>
<source>Direct</source>
<translation>Direct</translation>
</message>
<message>
<source>Toot sent!</source>
<translation>Toot sent!</translation>
</message>
</context>
<context>
<name>CoverPage</name>
<message>
<source>New Toot</source>
<translation>New Toot</translation>
</message>
</context>
<context>
<name>EmojiSelect</name>
<message> <message>
<source>Emojis</source> <source>Emojis</source>
<translation>Emojis</translation> <translation>Emojis</translation>
@ -34,45 +76,6 @@
<source>Tap to insert</source> <source>Tap to insert</source>
<translation>Tap to insert</translation> <translation>Tap to insert</translation>
</message> </message>
<message>
<source>Write your warning here</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unlisted</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Followers-only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Direct</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toot sent!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy Link to Clipboard</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ImageFullScreen</name>
<message>
<source>Error loading</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ImageUploader</name> <name>ImageUploader</name>
@ -85,23 +88,23 @@
<name>LoginPage</name> <name>LoginPage</name>
<message> <message>
<source>Login</source> <source>Login</source>
<translation type="unfinished"></translation> <translation>Login</translation>
</message> </message>
<message> <message>
<source>Instance</source> <source>Instance</source>
<translation type="unfinished"></translation> <translation>Instance</translation>
</message> </message>
<message> <message>
<source>Enter a valid Mastodon instance URL</source> <source>Enter a valid Mastodon instance URL</source>
<translation type="unfinished"></translation> <translation>Enter a valid Mastodon instance URL</translation>
</message> </message>
<message> <message>
<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 type="unfinished"></translation> <translation>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.</translation>
</message> </message>
<message> <message>
<source>Reload</source> <source>Reload</source>
<translation type="unfinished"></translation> <translation>Reload</translation>
</message> </message>
</context> </context>
<context> <context>
@ -135,6 +138,13 @@
<translation></translation> <translation></translation>
</message> </message>
</context> </context>
<context>
<name>MediaFullScreen</name>
<message>
<source>Error loading</source>
<translation>Error loading</translation>
</message>
</context>
<context> <context>
<name>MiniStatus</name> <name>MiniStatus</name>
<message> <message>
@ -168,139 +178,174 @@
<source>please wait...</source> <source>please wait...</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>New Toot</source>
<translation>New Toot</translation>
</message>
</context> </context>
<context> <context>
<name>Profile</name> <name>ProfileHeader</name>
<message> <message>
<source>Unfollow</source> <source>Follows you</source>
<translation>Unfollow</translation> <translation>Follows you</translation>
</message> </message>
<message> <message>
<source>Follow request sent!</source> <source>Bot</source>
<translation>Follow request sent!</translation> <translation>Bot</translation>
</message>
</context>
<context>
<name>ProfilePage</name>
<message>
<source>About</source>
<extracomment>If there&apos;s no good translation for &quot;About&quot;, use &quot;Details&quot; (in details about profile).</extracomment>
<translation>About</translation>
</message>
<message>
<source>Followers</source>
<extracomment>Will show as: &quot;35 Followers&quot;</extracomment>
<translation>Followers</translation>
</message> </message>
<message> <message>
<source>Following</source> <source>Following</source>
<extracomment>Will show as: &quot;23 Following&quot;</extracomment>
<translation>Following</translation> <translation>Following</translation>
</message> </message>
<message> <message>
<source>Mute</source> <source>Statuses</source>
<translation>Mute</translation> <extracomment>Will show as: &quot;115 Statuses&quot;</extracomment>
<translation>Statuses</translation>
</message>
<message>
<source>Unfollow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Unfollow</translation>
</message>
<message>
<source>Requested</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Requested</translation>
</message>
<message>
<source>Follow</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Follow</translation>
</message> </message>
<message> <message>
<source>Unmute</source> <source>Unmute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Unmute</translation> <translation>Unmute</translation>
</message> </message>
<message>
<source>Mute</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Mute</translation>
</message>
<message> <message>
<source>Unblock</source> <source>Unblock</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Unblock</translation> <translation>Unblock</translation>
</message> </message>
<message> <message>
<source>Block</source> <source>Block</source>
<extracomment>Is a button. Keep it as short as possible.</extracomment>
<translation>Block</translation> <translation>Block</translation>
</message> </message>
<message> <message>
<source>Statuses</source> <source>Open in Browser</source>
<translation>Statuses</translation> <translation>Open in Browser</translation>
</message> </message>
<message> <message>
<source>Favourites</source> <source>Mention</source>
<translation>Favourites</translation> <translation>Mention</translation>
</message>
<message>
<source>Follow</source>
<translation>Follow</translation>
</message>
<message>
<source>Summary</source>
<translation>Summary</translation>
</message>
<message>
<source>Followers</source>
<translation>Followers</translation>
</message>
<message>
<source>Bio</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open Profile in Browser</source>
<translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>Settings</name> <name>SettingsPage</name>
<message> <message>
<source>Settings</source> <source>Settings</source>
<translation type="unfinished">Settings</translation> <translation>Settings</translation>
</message> </message>
<message> <message>
<source>Remove Account</source> <source>Options</source>
<translation type="unfinished"></translation> <translation>Options</translation>
</message> </message>
<message> <message>
<source>Add Account</source> <source>Load Images in Toots</source>
<translation type="unfinished"></translation> <translation>Load Images in Toots</translation>
</message>
<message>
<source>Deauthorize this app and remove your account</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Authorize this app to access your Mastodon account</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Disable this option if you want to preserve your data connection</source> <source>Disable this option if you want to preserve your data connection</source>
<translation type="unfinished"></translation> <translation>Disable this option if you want to preserve your data connection</translation>
</message> </message>
<message> <message>
<source>Credits</source> <source>Account</source>
<translation type="unfinished"></translation> <translation>Account</translation>
</message> </message>
<message> <message>
<source>UI/UX design and development</source> <source>Remove Account</source>
<translation type="unfinished"></translation> <translation>Remove Account</translation>
</message> </message>
<message> <message>
<source>Visual identity</source> <source>Add Account</source>
<translation type="unfinished"></translation> <translation>Add Account</translation>
</message> </message>
<message> <message>
<source>Occitan &amp; French translation</source> <source>Deauthorize this app from using your account and remove account data from phone</source>
<translation type="unfinished"></translation> <translation>Deauthorize this app from using your account and remove account data from phone</translation>
</message> </message>
<message> <message>
<source>Dutch translation</source> <source>Authorize this app to access your Mastodon account</source>
<translation type="unfinished"></translation> <translation>Authorize this app to access your Mastodon account</translation>
</message>
<message>
<source>Spanish translation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Added README file</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chinese translation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Load images in toots</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Translate</source> <source>Translate</source>
<translation type="unfinished"></translation> <translation>Translate</translation>
</message> </message>
<message> <message>
<source>Use Transifex to help with app translation to your language</source> <source>Credits</source>
<translation type="unfinished"></translation> <translation>Credits</translation>
</message>
<message>
<source>UI/UX design and development</source>
<translation>UI/UX design and development</translation>
</message>
<message>
<source>Visual identity</source>
<translation>Visual identity</translation>
</message> </message>
<message> <message>
<source>Development and translations</source> <source>Development and translations</source>
<translation type="unfinished"></translation> <translation>Development and translations</translation>
</message>
<message>
<source>Occitan &amp; French translation</source>
<translation>Occitan &amp; French translation</translation>
</message>
<message>
<source>Chinese translation</source>
<translation>Chinese translation</translation>
</message>
<message>
<source>Dutch translation</source>
<translation>Dutch translation</translation>
</message>
<message>
<source>Spanish translation</source>
<translation>Spanish translation</translation>
</message>
<message>
<source>Added README file</source>
<translation>Added README file</translation>
</message>
<message>
<source>Use</source>
<extracomment>Full sentence for translation: &quot;Use Transifex to help with app translation to your language.&quot; - The word Transifex is a link and doesn&apos;t need translation.</extracomment>
<translation>Use</translation>
</message>
<message>
<source>to help with app translation to your language.</source>
<translation>to help with app translation to your language.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -322,19 +367,23 @@
<name>VisualContainer</name> <name>VisualContainer</name>
<message> <message>
<source>Unboost</source> <source>Unboost</source>
<translation type="unfinished"></translation> <translation>Unboost</translation>
</message> </message>
<message> <message>
<source>Boost</source> <source>Boost</source>
<translation type="unfinished"></translation> <translation>Boost</translation>
</message> </message>
<message> <message>
<source>Unfavorite</source> <source>Unfavorite</source>
<translation type="unfinished"></translation> <translation>Unfavourite</translation>
</message> </message>
<message> <message>
<source>Favorite</source> <source>Favorite</source>
<translation type="unfinished"></translation> <translation>Favourite</translation>
</message>
<message>
<source>Mention</source>
<translation>Mention</translation>
</message> </message>
</context> </context>
</TS> </TS>