Syncing my fork to the original repository
This commit is contained in:
commit
375f269a51
72 changed files with 5943 additions and 684 deletions
|
@ -2,7 +2,7 @@
|
|||
A Telegram client for Sailfish OS
|
||||
|
||||
## Author
|
||||
Sebastian J. Wolf [sebastian@ygriega.de](mailto:sebastian@ygriega.de)
|
||||
Sebastian J. Wolf [sebastian@ygriega.de](mailto:sebastian@ygriega.de) and several contributors
|
||||
|
||||
## Contributions
|
||||
|
||||
|
@ -10,7 +10,7 @@ Fernschreiber wouldn't be the same without all the people helping in making it b
|
|||
|
||||
### Code (Features, Bugfixes, Optimizations etc.)
|
||||
- Chat list model, TDLib receiver, project dependencies: [Slava Monich](https://github.com/monich)
|
||||
- Location support, app initialization/registration with Telegram, project dependencies: [jgibbon](https://github.com/jgibbon)
|
||||
- Chat info page, location support, app initialization/registration with Telegram, project dependencies: [jgibbon](https://github.com/jgibbon)
|
||||
|
||||
### Logo/Icon
|
||||
- Designed by [Matteo](https://github.com/iamnomeutente)
|
||||
|
|
|
@ -34,13 +34,27 @@ SOURCES += src/harbour-fernschreiber.cpp \
|
|||
|
||||
DISTFILES += qml/harbour-fernschreiber.qml \
|
||||
qml/components/AudioPreview.qml \
|
||||
qml/components/ChatListViewItem.qml \
|
||||
qml/components/DocumentPreview.qml \
|
||||
qml/components/ImagePreview.qml \
|
||||
qml/components/InReplyToRow.qml \
|
||||
qml/components/LocationPreview.qml \
|
||||
qml/components/StickerPicker.qml \
|
||||
qml/components/PhotoTextsListItem.qml \
|
||||
qml/components/WebPagePreview.qml \
|
||||
qml/components/chatInformationPage/ChatInformationEditArea.qml \
|
||||
qml/components/chatInformationPage/ChatInformationProfilePicture.qml \
|
||||
qml/components/chatInformationPage/ChatInformationProfilePictureList.qml \
|
||||
qml/components/chatInformationPage/ChatInformationTabItemBase.qml \
|
||||
qml/components/chatInformationPage/ChatInformationTabItemDebug.qml \
|
||||
qml/components/chatInformationPage/ChatInformationTabItemMembersGroups.qml \
|
||||
qml/components/chatInformationPage/ChatInformationTabItemSettings.qml \
|
||||
qml/components/chatInformationPage/ChatInformationTabView.qml \
|
||||
qml/components/chatInformationPage/ChatInformationTextItem.qml \
|
||||
qml/components/chatInformationPage/EditGroupChatPermissionsColumn.qml \
|
||||
qml/components/chatInformationPage/EditSuperGroupSlowModeColumn.qml \
|
||||
qml/js/functions.js \
|
||||
qml/pages/ChatInformationPage.qml \
|
||||
qml/pages/ChatPage.qml \
|
||||
qml/pages/CoverPage.qml \
|
||||
qml/pages/InitializationPage.qml \
|
||||
|
@ -63,6 +77,7 @@ TRANSLATIONS += translations/harbour-fernschreiber-de.ts \
|
|||
translations/harbour-fernschreiber-it.ts \
|
||||
translations/harbour-fernschreiber-pl.ts \
|
||||
translations/harbour-fernschreiber-ru.ts \
|
||||
translations/harbour-fernschreiber-sv.ts \
|
||||
translations/harbour-fernschreiber-zh_CN.ts
|
||||
|
||||
contains(QT_ARCH, arm) {
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.1 KiB |
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
62
qml/components/ChatListViewItem.qml
Normal file
62
qml/components/ChatListViewItem.qml
Normal file
|
@ -0,0 +1,62 @@
|
|||
import QtQuick 2.5
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
import "../js/twemoji.js" as Emoji
|
||||
import "../js/functions.js" as Functions
|
||||
|
||||
PhotoTextsListItem {
|
||||
id: listItem
|
||||
pictureThumbnail {
|
||||
// forceElementUpdate: overviewPage.chatListCreated
|
||||
photoData: photo_small
|
||||
// replacementStringHint: primaryText.text
|
||||
}
|
||||
property int ownUserId
|
||||
|
||||
// chat title
|
||||
primaryText.text: title ? Emoji.emojify(title, Theme.fontSizeMedium) + ( display.notification_settings.mute_for > 0 ? Emoji.emojify(" 🔇", Theme.fontSizeMedium) : "" ) : qsTr("Unknown")
|
||||
// last user
|
||||
prologSecondaryText.text: is_channel ? "" : ( last_message_sender_id ? ( last_message_sender_id !== ownUserId ? Emoji.emojify(Functions.getUserName(tdLibWrapper.getUserInformation(last_message_sender_id)), primaryText.font.pixelSize) : qsTr("You") ) : qsTr("Unknown") )
|
||||
// last message
|
||||
secondaryText.text: last_message_text ? Emoji.emojify(last_message_text, Theme.fontSizeExtraSmall) : qsTr("Unknown")
|
||||
// message date
|
||||
tertiaryText.text: last_message_date ? Functions.getDateTimeElapsed(last_message_date) : qsTr("Unknown")
|
||||
unreadCount: unread_count
|
||||
|
||||
openMenuOnPressAndHold: true//chat_id != overviewPage.ownUserId
|
||||
menu: ContextMenu {
|
||||
MenuItem {
|
||||
visible: unread_count > 0
|
||||
onClicked: {
|
||||
tdLibWrapper.viewMessage(chat_id, display.last_message.id, true);
|
||||
}
|
||||
text: qsTr("Mark all messages as read")
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
visible: chat_id != listItem.ownUserId
|
||||
onClicked: {
|
||||
var newNotificationSettings = display.notification_settings;
|
||||
if (newNotificationSettings.mute_for > 0) {
|
||||
newNotificationSettings.mute_for = 0;
|
||||
} else {
|
||||
newNotificationSettings.mute_for = 6666666;
|
||||
}
|
||||
tdLibWrapper.setChatNotificationSettings(chat_id, newNotificationSettings);
|
||||
}
|
||||
text: display.notification_settings.mute_for > 0 ? qsTr("Unmute Chat") : qsTr("Mute Chat")
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
onClicked: {
|
||||
if(pageStack.depth > 2) {
|
||||
pageStack.pop(pageStack.find( function(page){ return(page._depth === 0)} ), PageStackAction.Immediate);
|
||||
}
|
||||
|
||||
pageStack.push(Qt.resolvedUrl("../pages/ChatInformationPage.qml"), { "chatInformation" : display});
|
||||
}
|
||||
text: model.display.type['@type'] === "chatTypePrivate" ? qsTr("User Info") : qsTr("Group Info")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
153
qml/components/PhotoTextsListItem.qml
Normal file
153
qml/components/PhotoTextsListItem.qml
Normal file
|
@ -0,0 +1,153 @@
|
|||
import QtQuick 2.5
|
||||
import Sailfish.Silica 1.0
|
||||
ListItem {
|
||||
|
||||
id: chatListViewItem
|
||||
|
||||
property alias primaryText: primaryText //usually chat name
|
||||
property alias prologSecondaryText: prologSecondaryText //usually last sender name
|
||||
property alias secondaryText: secondaryText //usually last message
|
||||
property alias tertiaryText: tertiaryText //usually last message date
|
||||
|
||||
property int unreadCount
|
||||
property alias pictureThumbnail: pictureThumbnail
|
||||
|
||||
contentHeight: mainRow.height + separator.height + 2 * Theme.paddingMedium
|
||||
contentWidth: parent.width
|
||||
|
||||
|
||||
|
||||
Column {
|
||||
id: mainColumn
|
||||
width: parent.width - ( 2 * Theme.horizontalPageMargin )
|
||||
spacing: Theme.paddingSmall
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Row {
|
||||
id: mainRow
|
||||
width: parent.width
|
||||
height: contentColumn.height
|
||||
spacing: Theme.paddingMedium
|
||||
|
||||
Column {
|
||||
id: pictureColumn
|
||||
width: contentColumn.height - Theme.paddingSmall
|
||||
height: contentColumn.height - Theme.paddingSmall
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
Item {
|
||||
id: chatListPictureItem
|
||||
width: parent.width
|
||||
height: parent.width
|
||||
|
||||
ProfileThumbnail {
|
||||
id: pictureThumbnail
|
||||
replacementStringHint: primaryText.text
|
||||
width: parent.width
|
||||
height: parent.width
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: chatUnreadMessagesCountBackground
|
||||
color: Theme.highlightBackgroundColor
|
||||
width: Theme.fontSizeLarge
|
||||
height: Theme.fontSizeLarge
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
radius: parent.width / 2
|
||||
visible: chatListViewItem.unreadCount > 0
|
||||
}
|
||||
|
||||
Text {
|
||||
id: chatUnreadMessagesCount
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
font.bold: true
|
||||
color: Theme.primaryColor
|
||||
anchors.centerIn: chatUnreadMessagesCountBackground
|
||||
visible: chatUnreadMessagesCountBackground.visible
|
||||
text: chatListViewItem.unreadCount > 99 ? "99+" : chatListViewItem.unreadCount
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
id: contentColumn
|
||||
width: parent.width * 5 / 6 - Theme.horizontalPageMargin
|
||||
spacing: Theme.paddingSmall
|
||||
|
||||
Text {
|
||||
id: primaryText
|
||||
textFormat: Text.StyledText
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.primaryColor
|
||||
elide: Text.ElideRight
|
||||
width: parent.width
|
||||
onTruncatedChanged: {
|
||||
// There is obviously a bug in QML in truncating text with images.
|
||||
// We simply remove Emojis then...
|
||||
if (truncated) {
|
||||
text = text.replace(/\<img [^>]+\/\>/g, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
id: additionalTextRow
|
||||
width: parent.width
|
||||
spacing: Theme.paddingSmall
|
||||
Text {
|
||||
id: prologSecondaryText
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
color: Theme.highlightColor
|
||||
textFormat: Text.StyledText
|
||||
onTruncatedChanged: {
|
||||
// There is obviously a bug in QML in truncating text with images.
|
||||
// We simply remove Emojis then...
|
||||
if (truncated) {
|
||||
text = text.replace(/\<img [^>]+\/\>/g, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
Text {
|
||||
id: secondaryText
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
color: Theme.primaryColor
|
||||
width: parent.width - Theme.paddingMedium - prologSecondaryText.width
|
||||
elide: Text.ElideRight
|
||||
textFormat: Text.StyledText
|
||||
onTruncatedChanged: {
|
||||
// There is obviously a bug in QML in truncating text with images.
|
||||
// We simply remove Emojis then...
|
||||
if (truncated) {
|
||||
text = text.replace(/\<img [^>]+\/\>/g, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: tertiaryText
|
||||
width: parent.width
|
||||
font.pixelSize: Theme.fontSizeTiny
|
||||
color: Theme.secondaryColor
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Separator {
|
||||
id: separator
|
||||
anchors {
|
||||
top: mainColumn.bottom
|
||||
topMargin: Theme.paddingMedium
|
||||
}
|
||||
|
||||
width: parent.width
|
||||
color: Theme.primaryColor
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -27,6 +27,8 @@ Item {
|
|||
property variant photoData;
|
||||
property string replacementStringHint: "X"
|
||||
property bool forceElementUpdate: false
|
||||
property int radius: width / 2
|
||||
property int imageStatus: -1
|
||||
|
||||
function getReplacementString() {
|
||||
if (replacementStringHint.length > 2) {
|
||||
|
@ -109,6 +111,9 @@ Item {
|
|||
autoTransform: true
|
||||
asynchronous: true
|
||||
visible: false
|
||||
onStatusChanged: {
|
||||
profileThumbnail.imageStatus = status
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
|
@ -116,7 +121,7 @@ Item {
|
|||
width: parent.width - Theme.paddingSmall
|
||||
height: parent.height - Theme.paddingSmall
|
||||
color: Theme.primaryColor
|
||||
radius: parent.width / 2
|
||||
radius: profileThumbnail.radius
|
||||
anchors.centerIn: singleImage
|
||||
visible: false
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
102
qml/components/chatInformationPage/ChatInformationEditArea.qml
Normal file
102
qml/components/chatInformationPage/ChatInformationEditArea.qml
Normal file
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
Fernschreiber is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Fernschreiber is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
Column {
|
||||
id: editAreaColumn
|
||||
visible: canEdit || text !== ""
|
||||
property bool canEdit
|
||||
property alias headerText: editAreaHeader.text
|
||||
property string emptyPlaceholderText
|
||||
property string text
|
||||
property bool multiLine
|
||||
|
||||
property bool isEditing
|
||||
property Item editItem: multiLine ? editAreaTextArea : editAreaTextField
|
||||
|
||||
signal saveButtonClicked(string textValue)
|
||||
signal editButtonClicked()
|
||||
signal textEdited(string textValue)
|
||||
width: parent.width
|
||||
|
||||
|
||||
SectionHeader {
|
||||
id: editAreaHeader
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
height: parent.visible && text !== "" ? Theme.itemSizeExtraSmall : 0
|
||||
x: 0
|
||||
}
|
||||
Row {
|
||||
id: editAreaTextRow
|
||||
width: parent.width
|
||||
|
||||
TextArea {
|
||||
id: editAreaTextArea
|
||||
visible: editAreaColumn.isEditing && editAreaColumn.multiLine
|
||||
width: parent.width - editAreaButton.width
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
TextField {
|
||||
id: editAreaTextField
|
||||
visible: editAreaColumn.isEditing && !editAreaColumn.multiLine
|
||||
width: parent.width - editAreaButton.width
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
EnterKey.onClicked: {
|
||||
editAreaColumn.isEditing = false;
|
||||
editAreaColumn.saveButtonClicked(editAreaColumn.editItem.text);
|
||||
}
|
||||
EnterKey.iconSource: editAreaButton.icon.source
|
||||
}
|
||||
ChatInformationTextItem {
|
||||
id: editAreaTextItem
|
||||
visible: !editAreaColumn.isEditing
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: editAreaColumn.text || editAreaColumn.emptyPlaceholderText
|
||||
width: parent.width - editAreaButton.width
|
||||
}
|
||||
IconButton {
|
||||
id: editAreaButton
|
||||
visible: editAreaColumn.canEdit
|
||||
width: visible ? Theme.itemSizeSmall : 0
|
||||
icon.source: editAreaColumn.isEditing ? "image://theme/icon-m-accept" : "image://theme/icon-m-edit"
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
onClicked: {
|
||||
if(editAreaColumn.isEditing) {
|
||||
editAreaColumn.isEditing = false;
|
||||
editAreaColumn.saveButtonClicked(editAreaColumn.editItem.text);
|
||||
} else {
|
||||
editAreaColumn.isEditing = true;
|
||||
editAreaColumn.editItem.text = editAreaColumn.text;
|
||||
editAreaColumn.editItem.forceActiveFocus();
|
||||
editAreaColumn.editItem.cursorPosition = editAreaColumn.editItem.text.length;
|
||||
editAreaColumn.editButtonClicked();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Connections {
|
||||
target: editItem
|
||||
onTextChanged: {
|
||||
if(editItem.focus) {
|
||||
editAreaColumn.textEdited(editItem.text)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
Fernschreiber is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Fernschreiber is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
import "../"
|
||||
|
||||
Item {
|
||||
visible: imageContainer.tweenFactor > 0.8 && chatPictureDetail.imageStatus === Image.Ready
|
||||
property bool isActive: imageContainer.tweenFactor === 1.0
|
||||
opacity: isActive ? 1.0 : 0.0
|
||||
Behavior on opacity { NumberAnimation {} }
|
||||
ProfileThumbnail {
|
||||
id: chatPictureDetail
|
||||
anchors.fill: parent
|
||||
photoData: (typeof chatInformation.photo !== "undefined") ? chatInformation.photo.big : ""
|
||||
replacementStringHint: ""
|
||||
radius: chatPictureThumbnail.radius
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
var preparedPhotoData = {sizes:[{width:640,height: 640,photo:chatPictureDetail.photoData}]};
|
||||
pageStack.push(Qt.resolvedUrl("../../pages/ImagePage.qml"), { "photoData" : preparedPhotoData });
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
Fernschreiber is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Fernschreiber is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
import "../"
|
||||
|
||||
Item {
|
||||
visible: imageContainer.tweenFactor > 0.8 && bigProfilePictureList.count > 0
|
||||
property bool isActive: imageContainer.tweenFactor === 1.0
|
||||
|
||||
opacity: isActive ? 1.0 : 0.0
|
||||
Behavior on opacity { NumberAnimation {} }
|
||||
|
||||
SlideshowView {
|
||||
id: bigProfilePictureList
|
||||
property bool isActive: imageContainer.tweenFactor === 1.0
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
clip: true
|
||||
itemWidth: width
|
||||
itemHeight: height
|
||||
interactive: parent.isActive
|
||||
model: chatInformationPage.chatPartnerProfilePhotos
|
||||
delegate: Item {
|
||||
width: bigProfilePictureList.itemWidth
|
||||
height: bigProfilePictureList.itemHeight
|
||||
ProfileThumbnail {
|
||||
id: chatPictureDetail
|
||||
photoData: modelData.sizes[modelData.sizes.length - 1].photo
|
||||
replacementStringHint: ""
|
||||
radius: chatPictureThumbnail.radius
|
||||
anchors.fill: parent
|
||||
}
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
pageStack.push(Qt.resolvedUrl("../../pages/ImagePage.qml"), { "photoData" : modelData });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
visible: bigProfilePictureList.count > 1
|
||||
width: parent.width
|
||||
anchors {
|
||||
bottomMargin: Theme.paddingSmall
|
||||
bottom: parent.bottom
|
||||
}
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
property var baseString: new Array(bigProfilePictureList.count+1).join(" ○ ")
|
||||
text: baseString.substring(0,bigProfilePictureList.currentIndex*3) + " ● " + baseString.substring((bigProfilePictureList.currentIndex+1)*3)
|
||||
color: Theme.primaryColor
|
||||
style: Text.Raised
|
||||
styleColor: Theme.highlightDimmerColor
|
||||
}
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
Fernschreiber is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Fernschreiber is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
import "../../pages"
|
||||
import "../"
|
||||
|
||||
Item {
|
||||
id: tabItem
|
||||
property string title
|
||||
property url image
|
||||
property bool loading
|
||||
//overrideable:
|
||||
property alias loadingVisible: loadingColumn.loadingVisible
|
||||
property string loadingText
|
||||
|
||||
property int tabIndex: tabItem.VisualItemModel.index
|
||||
property bool active: tabItem.ListView.isCurrentItem
|
||||
|
||||
default property alias _data: contentItem.data
|
||||
|
||||
|
||||
width: parent.width
|
||||
height: tabView.maxHeight//Math.max(contentItem.height, loadingColumn.height)
|
||||
opacity: active ? 1.0 : 0.0
|
||||
Behavior on opacity { PropertyAnimation {duration: 300}}
|
||||
|
||||
Column {
|
||||
id: loadingColumn
|
||||
property bool loadingVisible: tabItem.loading
|
||||
width: tabItem.width
|
||||
height: loadingLabel.height + loadingBusyIndicator.height + Theme.paddingMedium
|
||||
spacing: Theme.paddingMedium
|
||||
topPadding: Theme.paddingLarge
|
||||
anchors.top: parent.top
|
||||
opacity: loadingVisible ? 1.0 : 0.0
|
||||
Behavior on opacity { NumberAnimation {} }
|
||||
visible: tabItem.loading
|
||||
|
||||
InfoLabel {
|
||||
id: loadingLabel
|
||||
text: tabItem.loadingText
|
||||
}
|
||||
|
||||
BusyIndicator {
|
||||
id: loadingBusyIndicator
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
running: parent.loadingVisible
|
||||
size: BusyIndicatorSize.Large
|
||||
}
|
||||
}
|
||||
Item {
|
||||
id: contentItem
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
Fernschreiber is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Fernschreiber is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
import QtQml.Models 2.3
|
||||
|
||||
import "../"
|
||||
import "../../pages"
|
||||
import "../../js/twemoji.js" as Emoji
|
||||
import "../../js/functions.js" as Functions
|
||||
|
||||
ChatInformationTabItemBase {
|
||||
id: tabBase
|
||||
title: "debug"
|
||||
image: "image://theme/icon-m-diagnostic"
|
||||
SilicaFlickable {
|
||||
height: tabBase.height
|
||||
width: tabBase.width
|
||||
contentHeight: contentColumn.height
|
||||
Column {
|
||||
id: contentColumn
|
||||
width: tabBase.width - Theme.horizontalPageMargin * 2
|
||||
x: Theme.horizontalPageMargin
|
||||
|
||||
ChatInformationTextItem {
|
||||
headerText: "chatInformation"
|
||||
text:chatInformationPage.chatInformation ? JSON.stringify(chatInformationPage.chatInformation, null, 2) : ""
|
||||
isLinkedLabel: true
|
||||
}
|
||||
ChatInformationTextItem {
|
||||
headerText: "groupInformation"
|
||||
text: chatInformationPage.groupInformation ? JSON.stringify(chatInformationPage.groupInformation, null, 2) : ""
|
||||
isLinkedLabel: true
|
||||
}
|
||||
|
||||
ChatInformationTextItem {
|
||||
headerText: "groupFullInformation"
|
||||
text: chatInformationPage.groupFullInformation ? JSON.stringify(chatInformationPage.groupFullInformation, null, 2) : ""
|
||||
isLinkedLabel: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,234 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
Fernschreiber is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Fernschreiber is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
import QtQml.Models 2.3
|
||||
|
||||
import "../"
|
||||
import "../../pages"
|
||||
import "../../js/twemoji.js" as Emoji
|
||||
import "../../js/functions.js" as Functions
|
||||
|
||||
ChatInformationTabItemBase {
|
||||
id: tabBase
|
||||
title: chatInformationPage.isPrivateChat ? qsTr("Groups", "Button: groups in common (short)") : qsTr("Members", "Button: Group Members")
|
||||
image: "image://theme/icon-m-people"
|
||||
loadingText: isPrivateChat ? qsTr("Loading common chats…", "chats you have in common with a user") : qsTr("Loading group members…")
|
||||
loading: chatInformationPage.isSuperGroup || chatInformationPage.isPrivateChat
|
||||
loadingVisible: loading && membersView.count === 0
|
||||
|
||||
property variant chatPartnerCommonGroupsIds: ([]);
|
||||
|
||||
|
||||
SilicaListView {
|
||||
id: membersView
|
||||
model: isPrivateChat ? (chatPartnerCommonGroupsIds.length > 0 ? delegateModel : null) : chatInformationPage.membersList
|
||||
clip: true
|
||||
height: tabBase.height
|
||||
width: tabBase.width
|
||||
opacity: tabBase.loading ? (count > 0 ? 0.5 : 0.0) : 1.0
|
||||
Behavior on opacity { NumberAnimation {} }
|
||||
function handleScrollIntoView(force){
|
||||
if(!tabBase.loading && !dragging && !quickScrollAnimating ) {
|
||||
if(!atYBeginning) {
|
||||
chatInformationPage.scrollDown()
|
||||
} else {
|
||||
chatInformationPage.scrollUp(force);
|
||||
}
|
||||
}
|
||||
}
|
||||
onDraggingChanged: {
|
||||
handleScrollIntoView()
|
||||
}
|
||||
onAtYBeginningChanged: {
|
||||
handleScrollIntoView()
|
||||
}
|
||||
onAtYEndChanged: {
|
||||
if(tabBase.active && !tabBase.loading && chatInformationPage.isSuperGroup && (groupInformation.member_count > membersView.count) && membersView.atYEnd) {
|
||||
tabBase.loading = true;
|
||||
fetchMoreMembersTimer.start()
|
||||
}
|
||||
}
|
||||
onQuickScrollAnimatingChanged: {
|
||||
handleScrollIntoView(true)
|
||||
}
|
||||
ViewPlaceholder {
|
||||
enabled: membersView.count === 0
|
||||
text: chatInformationPage.isPrivateChat ? qsTr("You don't have any groups in common with this user.") : qsTr("This group is empty.")
|
||||
}
|
||||
delegate: PhotoTextsListItem {
|
||||
pictureThumbnail {
|
||||
photoData: (typeof user.profile_photo !== "undefined") ? user.profile_photo.small : ""
|
||||
}
|
||||
width: parent.width
|
||||
|
||||
// chat title isPrivateChat ? () :
|
||||
primaryText.text: Emoji.emojify(Functions.getUserName(user), primaryText.font.pixelSize)
|
||||
// last user
|
||||
prologSecondaryText.text: "@"+(user.username !== "" ? user.username : user_id) + (user_id === chatInformationPage.myUserId ? " " + qsTr("You") : "")
|
||||
secondaryText {
|
||||
horizontalAlignment: Text.AlignRight
|
||||
property string statusText: Functions.getChatMemberStatusText(model.status["@type"])
|
||||
property string customText: model.status.custom_title ? Emoji.emojify(model.status.custom_title, secondaryText.font.pixelSize) : ""
|
||||
text: (statusText !== "" && customText !== "") ? statusText + ", " + customText : statusText + customText
|
||||
}
|
||||
tertiaryText {
|
||||
maximumLineCount: 1
|
||||
text: user.type["@type"] === "userTypeBot" ? (Emoji.emojify("🤖 "+bot_info.description, tertiaryText.font.pixelSize)) : Functions.getChatPartnerStatusText(user.status["@type"], user.status.was_online);
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
tdLibWrapper.createPrivateChat(user_id);
|
||||
}
|
||||
}
|
||||
footer: Component {
|
||||
Item {
|
||||
property bool active: tabBase.active && chatInformationPage.isSuperGroup && (groupInformation.member_count > membersView.count)
|
||||
width: tabBase.width
|
||||
height: active ? Theme.itemSizeLarge : Theme.paddingMedium
|
||||
|
||||
BusyIndicator {
|
||||
id: loadMoreIndicator
|
||||
anchors.centerIn: parent
|
||||
size: BusyIndicatorSize.Small
|
||||
running: parent.active
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VerticalScrollDecorator {}
|
||||
}
|
||||
|
||||
|
||||
DelegateModel {
|
||||
id: delegateModel
|
||||
model: chatListModel
|
||||
groups: [
|
||||
DelegateModelGroup {
|
||||
name: "filterGroup"; includeByDefault: true
|
||||
}
|
||||
]
|
||||
filterOnGroup: "filterGroup"
|
||||
function hasMatch(searchInArray) {
|
||||
for (var i = 0; i < searchInArray.length; i++) {
|
||||
if(searchInArray[i].toLowerCase().indexOf(chatInformationPage.searchString) > -1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function applyFilter(){
|
||||
var numberOfEntries = chatListModel.rowCount();
|
||||
var hasFilterString = !!chatInformationPage.searchString && chatInformationPage.searchString !== ""
|
||||
for (var i = 0; i < numberOfEntries; i++){
|
||||
var metadata = chatListModel.get(i);
|
||||
if(tabBase.chatPartnerCommonGroupsIds.indexOf(metadata.chat_id) > -1) {
|
||||
items.addGroups(i, 1, "filterGroup");
|
||||
} else {
|
||||
items.removeGroups(i, 1, "filterGroup");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
delegate: ChatListViewItem {
|
||||
ownUserId: chatInformationPage.myUserId
|
||||
|
||||
unreadCount: unread_count
|
||||
onClicked: {
|
||||
pageStack.pop(pageStack.find( function(page){ return(page._depth === 0)} ), PageStackAction.Immediate);
|
||||
pageStack.push(Qt.resolvedUrl("../../pages/ChatPage.qml"), { "chatInformation" : display });
|
||||
}
|
||||
Connections {
|
||||
target: chatListModel
|
||||
onChatChanged: {
|
||||
if (changedChatId === chat_id) {
|
||||
// Force update of some list item elements (currently only last message text seems to create problems). dataChanged() doesn't seem to trigger them all :(
|
||||
secondaryText.text = last_message_text ? Emoji.emojify(last_message_text, Theme.fontSizeExtraSmall) : qsTr("Unknown")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: fetchMoreMembersTimer
|
||||
interval: 600
|
||||
property int fetchLimit: 50
|
||||
onTriggered: {
|
||||
if(isSuperGroup) {
|
||||
tabBase.loading = true
|
||||
tdLibWrapper.getSupergroupMembers(chatInformationPage.chatPartnerGroupId, fetchLimit, membersList.count);
|
||||
fetchLimit = 200
|
||||
interval = 400
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: tdLibWrapper
|
||||
|
||||
onChatMembersReceived: {
|
||||
if (isSuperGroup && chatInformationPage.chatPartnerGroupId === extra) {
|
||||
if(members && members.length > 0) {
|
||||
for(var memberIndex in members) {
|
||||
var memberData = members[memberIndex];
|
||||
var userInfo = tdLibWrapper.getUserInformation(memberData.user_id) || {user:{}, bot_info:{}};
|
||||
memberData.user = userInfo;
|
||||
memberData.bot_info = memberData.bot_info || {};
|
||||
membersList.append(memberData);
|
||||
}
|
||||
groupInformation.member_count = totalMembers
|
||||
updateGroupStatusText();
|
||||
if(membersList.count < totalMembers) {
|
||||
// fetchMoreMembersTimer.start()
|
||||
}
|
||||
}
|
||||
// if we set it directly, the views start scrolling
|
||||
loadedTimer.start();
|
||||
}
|
||||
}
|
||||
onChatsReceived: {// common chats with user
|
||||
if(isPrivateChat && chats["@extra"] === chatInformationPage.chatPartnerGroupId) {
|
||||
tabBase.chatPartnerCommonGroupsIds = chats.chat_ids;
|
||||
delegateModel.applyFilter();
|
||||
// if we set it directly, the views start scrolling
|
||||
loadedTimer.start();
|
||||
}
|
||||
}
|
||||
}
|
||||
Timer {
|
||||
id: loadedTimer
|
||||
interval: 50
|
||||
onTriggered: {
|
||||
tabBase.loading = false
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if(isPrivateChat) {
|
||||
tdLibWrapper.getGroupsInCommon(chatInformationPage.chatPartnerGroupId, 200, 0); // we only use the first 200
|
||||
} else if(isSuperGroup) {
|
||||
fetchMoreMembersTimer.start();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
Fernschreiber is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Fernschreiber is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
import QtQml.Models 2.3
|
||||
|
||||
import "../"
|
||||
import "../../pages"
|
||||
import "../../js/twemoji.js" as Emoji
|
||||
import "../../js/functions.js" as Functions
|
||||
|
||||
ChatInformationTabItemBase {
|
||||
id: tabBase
|
||||
title: qsTr("Settings", "Button: Chat Settings")
|
||||
image: "image://theme/icon-m-developer-mode"
|
||||
|
||||
SilicaFlickable {
|
||||
height: tabBase.height
|
||||
width: tabBase.width
|
||||
contentHeight: contentColumn.height
|
||||
Column {
|
||||
id: contentColumn
|
||||
width: tabBase.width
|
||||
|
||||
//permissions
|
||||
|
||||
// if chatInformationPage.chatInformation.permissions.can_change_info
|
||||
// - upload/change chat photo/VIDEO (hahaha)
|
||||
// - description change
|
||||
// - toggleSupergroupIsAllHistoryAvailable
|
||||
// if ?????? can_promote_members ???? can_restrict_members
|
||||
// - setChatMemberStatus
|
||||
// if creator (BasicGroup)
|
||||
// - upgradeBasicGroupChatToSupergroupChat
|
||||
// if creator (supergroup/channel)
|
||||
// - canTransferOwnership?
|
||||
// - transferChatOwnership
|
||||
Loader {
|
||||
active: (chatInformationPage.isBasicGroup || chatInformationPage.isSuperGroup) && chatInformationPage.groupInformation && (chatInformationPage.groupInformation.status.can_restrict_members || chatInformationPage.groupInformation.status.can_change_info || chatInformationPage.groupInformation.status["@type"] === "chatMemberStatusCreator")
|
||||
asynchronous: true
|
||||
source: "./EditGroupChatPermissionsColumn.qml"
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
Loader {
|
||||
active: chatInformationPage.isSuperGroup && chatInformationPage.groupInformation && chatInformationPage.groupInformation.status.can_restrict_members || chatInformationPage.groupInformation.status["@type"] === "chatMemberStatusCreator"
|
||||
asynchronous: true
|
||||
source: "./EditSuperGroupSlowModeColumn.qml"
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
166
qml/components/chatInformationPage/ChatInformationTabView.qml
Normal file
166
qml/components/chatInformationPage/ChatInformationTabView.qml
Normal file
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
Fernschreiber is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Fernschreiber is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
import "./"
|
||||
import "../"
|
||||
import "../../pages"
|
||||
|
||||
Item {
|
||||
id: tabViewItem
|
||||
property alias count: tabView.count
|
||||
height: Screen.width
|
||||
opacity: count > 0 ? 1.0 : 0.0
|
||||
Behavior on height { PropertyAnimation {duration: 300}}
|
||||
Behavior on opacity { PropertyAnimation {duration: 300}}
|
||||
|
||||
Item {
|
||||
id: tabViewHeader
|
||||
/*
|
||||
* Tab view was prepared for
|
||||
* shared media/links/…, but for this
|
||||
* we need message search with filters
|
||||
*/
|
||||
|
||||
height: visible ? headerGrid.height : 0
|
||||
clip: true
|
||||
visible: tabView.count > 1
|
||||
|
||||
anchors {
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
top: parent.top
|
||||
}
|
||||
|
||||
Grid {
|
||||
id: headerGrid
|
||||
width: parent.width
|
||||
columns: tabView.count
|
||||
Repeater {
|
||||
model: tabView.count
|
||||
delegate: BackgroundItem {
|
||||
id: headerItem
|
||||
property bool loaded: tabItem.image !== "" && tabItem.title !== ""
|
||||
width: loaded ? (headerGrid.width / tabView.count) : 0
|
||||
opacity: loaded ? 1.0 : 0.0
|
||||
|
||||
Behavior on width { PropertyAnimation {duration: 300}}
|
||||
Behavior on opacity { PropertyAnimation {duration: 300}}
|
||||
height: Theme.itemSizeLarge
|
||||
property ChatInformationTabItemBase tabItem: tabView.model.get(index)
|
||||
property int itemIndex: index
|
||||
property bool itemIsActive: tabItem.active
|
||||
Icon {
|
||||
id: headerIcon
|
||||
source: headerItem.tabItem.image
|
||||
highlighted: headerItem.pressed || headerItem.itemIsActive
|
||||
anchors {
|
||||
top: parent.top
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
Label {
|
||||
text: headerItem.tabItem.title
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
anchors.top: headerIcon.bottom
|
||||
highlighted: headerItem.pressed || headerItem.itemIsActive
|
||||
font.pixelSize: Theme.fontSizeTiny
|
||||
}
|
||||
onClicked: {
|
||||
chatInformationPage.scrollDown()
|
||||
tabView.openTab(itemIndex)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: tabView
|
||||
orientation: ListView.Horizontal
|
||||
clip: true
|
||||
snapMode: ListView.SnapOneItem
|
||||
highlightRangeMode: ListView.StrictlyEnforceRange
|
||||
highlightFollowsCurrentItem: true
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
currentIndex: 0
|
||||
highlightMoveDuration: 500
|
||||
property int maxHeight: tabViewItem.height - tabViewHeader.height
|
||||
|
||||
|
||||
anchors {
|
||||
top: tabViewHeader.bottom
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
bottom: parent.bottom
|
||||
}
|
||||
|
||||
function openTab(index) {
|
||||
currentIndex = index;
|
||||
}
|
||||
model: VisualItemModel {
|
||||
id: tabModel
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: membersGroupComponent
|
||||
ChatInformationTabItemMembersGroups{
|
||||
width: tabView.width
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: settingsComponent
|
||||
ChatInformationTabItemSettings {
|
||||
width: tabView.width
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: debugComponent
|
||||
ChatInformationTabItemDebug {
|
||||
width: tabView.width
|
||||
}
|
||||
}
|
||||
property var tabItems: {
|
||||
var items = [];
|
||||
if(!(isPrivateChat && chatPartnerGroupId === myUserId.toString())) {
|
||||
items.push(membersGroupComponent);
|
||||
}
|
||||
if(!isPrivateChat && (groupInformation.status.can_restrict_members || groupInformation.status["@type"] === "chatMemberStatusCreator")) {
|
||||
items.push(settingsComponent);
|
||||
}
|
||||
// items.push(debugComponent);
|
||||
|
||||
return items;
|
||||
}
|
||||
onTabItemsChanged: fillTabItems()
|
||||
|
||||
function fillTabItems() {
|
||||
tabModel.clear()
|
||||
for(var i in tabItems) {
|
||||
tabModel.append(tabItems[i].createObject(tabModel));
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
fillTabItems()
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
Fernschreiber is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Fernschreiber is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
import "../../js/twemoji.js" as Emoji
|
||||
import "../../js/functions.js" as Functions
|
||||
|
||||
Column {
|
||||
id: textItem
|
||||
property alias headerText: headerItem.text
|
||||
property string text
|
||||
property bool isLinkedLabel // for telephone number
|
||||
width: parent.width
|
||||
visible: !!text
|
||||
SectionHeader {
|
||||
id: headerItem
|
||||
visible: text !== "" && labelLoader.status === Loader.Ready && labelLoader.item.text !== ""
|
||||
height: visible ? Theme.itemSizeSmall : 0
|
||||
x: 0
|
||||
}
|
||||
Loader {
|
||||
id: labelLoader
|
||||
active: true
|
||||
asynchronous: true
|
||||
sourceComponent: textItem.isLinkedLabel ? linkedLabelComponent : labelComponent
|
||||
width: textItem.width
|
||||
}
|
||||
|
||||
Component {
|
||||
id: labelComponent
|
||||
Label {
|
||||
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
textFormat: Text.StyledText
|
||||
color: Theme.highlightColor
|
||||
text: Emoji.emojify( Functions.replaceUrlsWithLinks(textItem.text).replace(/\n/g, "<br>"), Theme.fontSizeExtraSmall).replace(/\.\.\/js/g, "../../js")
|
||||
linkColor: Theme.primaryColor
|
||||
visible: text !== ""
|
||||
onLinkActivated: {
|
||||
Functions.handleLink(link);
|
||||
}
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: linkedLabelComponent
|
||||
LinkedLabel {
|
||||
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
textFormat: Text.StyledText
|
||||
plainText: textItem.text
|
||||
visible: textItem.text !== ""
|
||||
onLinkActivated: {
|
||||
Functions.handleLink(link);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,148 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
Fernschreiber is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Fernschreiber is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
|
||||
Column {
|
||||
id: chatPermissionsColumn
|
||||
|
||||
function setChatPermissions(textSwitchItem) {
|
||||
if(textSwitchItem.busy) {return;}
|
||||
var messageSubItems = ["can_send_media_messages", "can_send_polls", "can_send_other_messages", "can_add_web_page_previews"];
|
||||
var permissionName = textSwitchItem.permissionName;
|
||||
var permissionValue = !textSwitchItem.checked
|
||||
textSwitchItem.busy = true;
|
||||
var newPermissions = chatInformationPage.chatInformation.permissions;
|
||||
if(permissionName in newPermissions) {
|
||||
newPermissions[permissionName] = permissionValue;
|
||||
// some permissions infer can_send_messages:
|
||||
if(permissionName === "can_send_messages" && !permissionValue) {
|
||||
for(var i in messageSubItems) {
|
||||
newPermissions[messageSubItems[i]] = false;
|
||||
}
|
||||
} else if(messageSubItems.indexOf(permissionName) > -1 && permissionValue) {
|
||||
newPermissions.can_send_message = true;
|
||||
}
|
||||
}
|
||||
tdLibWrapper.setChatPermissions(chatInformationPage.chatInformation.id, newPermissions);
|
||||
}
|
||||
|
||||
Column {
|
||||
visible: chatInformationPage.groupInformation.status.can_restrict_members || chatInformationPage.groupInformation.status["@type"] === "chatMemberStatusCreator"
|
||||
width: parent.width
|
||||
|
||||
SectionHeader {
|
||||
text: qsTr("Group Member Permissions", "what can normal group members do")
|
||||
}
|
||||
TextSwitch {
|
||||
automaticCheck: false
|
||||
property string permissionName: "can_send_messages"
|
||||
text: qsTr("Send Messages", "member permission")
|
||||
checked: chatInformationPage.chatInformation.permissions[permissionName]
|
||||
onCheckedChanged: {busy = false;}
|
||||
onClicked: {
|
||||
chatPermissionsColumn.setChatPermissions(this)
|
||||
}
|
||||
}
|
||||
TextSwitch {
|
||||
automaticCheck: false
|
||||
property string permissionName: "can_send_media_messages"
|
||||
text: qsTr("Send Media Messages", "member permission")
|
||||
onCheckedChanged: {busy = false;}
|
||||
checked: chatInformationPage.chatInformation.permissions[permissionName]
|
||||
onClicked: {
|
||||
chatPermissionsColumn.setChatPermissions(this)
|
||||
}
|
||||
}
|
||||
|
||||
TextSwitch {
|
||||
automaticCheck: false
|
||||
property string permissionName: "can_send_other_messages"
|
||||
text: qsTr("Send Other Messages", "member permission")
|
||||
onCheckedChanged: {busy = false;}
|
||||
checked: chatInformationPage.chatInformation.permissions[permissionName]
|
||||
onClicked: {
|
||||
chatPermissionsColumn.setChatPermissions(this)
|
||||
}
|
||||
}
|
||||
|
||||
TextSwitch {
|
||||
automaticCheck: false
|
||||
property string permissionName: "can_add_web_page_previews"
|
||||
text: qsTr("Add Web Page Previews", "member permission")
|
||||
onCheckedChanged: {busy = false;}
|
||||
checked: chatInformationPage.chatInformation.permissions[permissionName]
|
||||
onClicked: {
|
||||
chatPermissionsColumn.setChatPermissions(this)
|
||||
}
|
||||
}
|
||||
|
||||
TextSwitch {
|
||||
automaticCheck: false
|
||||
property string permissionName: "can_change_info"
|
||||
text: qsTr("Change Chat Info", "member permission")
|
||||
onCheckedChanged: {busy = false;}
|
||||
checked: chatInformationPage.chatInformation.permissions[permissionName]
|
||||
onClicked: {
|
||||
chatPermissionsColumn.setChatPermissions(this)
|
||||
}
|
||||
}
|
||||
|
||||
TextSwitch {
|
||||
automaticCheck: false
|
||||
property string permissionName: "can_invite_users"
|
||||
text: qsTr("Invite Users", "member permission")
|
||||
onCheckedChanged: {busy = false;}
|
||||
checked: chatInformationPage.chatInformation.permissions[permissionName]
|
||||
onClicked: {
|
||||
chatPermissionsColumn.setChatPermissions(this)
|
||||
}
|
||||
}
|
||||
|
||||
TextSwitch {
|
||||
automaticCheck: false
|
||||
property string permissionName: "can_pin_messages"
|
||||
text: qsTr("Pin Messages", "member permission")
|
||||
onCheckedChanged: {busy = false;}
|
||||
checked: chatInformationPage.chatInformation.permissions[permissionName]
|
||||
onClicked: {
|
||||
chatPermissionsColumn.setChatPermissions(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SectionHeader {
|
||||
visible: historyAvailableSwitch.visible
|
||||
text: qsTr("New Members", "what can new group members do")
|
||||
}
|
||||
|
||||
|
||||
TextSwitch {
|
||||
id: historyAvailableSwitch
|
||||
visible: chatInformationPage.isSuperGroup && chatInformationPage.groupInformation.status && chatInformationPage.groupInformation.status.can_change_info
|
||||
automaticCheck: false
|
||||
text: qsTr("New members can see older messages", "member permission")
|
||||
onCheckedChanged: {busy = false;}
|
||||
checked: chatInformationPage.groupFullInformation.is_all_history_available
|
||||
onClicked: {
|
||||
tdLibWrapper.toggleSupergroupIsAllHistoryAvailable(chatInformationPage.chatPartnerGroupId, !checked);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
Fernschreiber is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Fernschreiber is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
|
||||
Column {
|
||||
SectionHeader {
|
||||
text: qsTr("Slow Mode")
|
||||
}
|
||||
|
||||
Slider {
|
||||
width: parent.width + Theme.horizontalPageMargin * 2
|
||||
x: -Theme.horizontalPageMargin
|
||||
property var presetValues: [0, 10, 30, 60, 300, 900, 3600]
|
||||
property int realValue: chatInformationPage.groupFullInformation.slow_mode_delay
|
||||
property int realValueIndex: presetValues.indexOf(realValue) > -1 ? presetValues.indexOf(realValue) : 0
|
||||
value: realValueIndex
|
||||
minimumValue: 0
|
||||
maximumValue: presetValues.length - 1
|
||||
stepSize: 1
|
||||
valueText: value === 0 ? qsTr("Off") : Format.formatDuration(presetValues[value], presetValues[value] < 3600 ? Formatter.DurationShort : Formatter.DurationLong);
|
||||
onPressedChanged: {
|
||||
if(!pressed && value !== realValueIndex) {
|
||||
tdLibWrapper.setChatSlowModeDelay(chatInformationPage.chatInformation.id, presetValues[value]);
|
||||
}
|
||||
}
|
||||
}
|
||||
Label {
|
||||
text: qsTr("Set how long every chat member has to wait between Messages")
|
||||
width: parent.width - Theme.horizontalPageMargin * 2
|
||||
x: Theme.horizontalPageMargin
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.secondaryHighlightColor
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -94,8 +94,46 @@ function getMessageText(message, simple, myself) {
|
|||
if (message.content['@type'] === 'messageChatDeleteMember') {
|
||||
return myself ? qsTr("left this chat", "myself") : qsTr("left this chat");
|
||||
}
|
||||
if (message.content['@type'] === 'messageChatChangeTitle') {
|
||||
return myself ? qsTr("changed the chat title to %1", "myself").arg(message.content.title) : qsTr("changed the chat title to %1").arg(message.content.title);
|
||||
}
|
||||
return qsTr("Unsupported message: %1").arg(message.content['@type'].substring(7));
|
||||
}
|
||||
|
||||
function getChatPartnerStatusText(statusType, was_online) {
|
||||
switch(statusType) {
|
||||
case "userStatusEmpty":
|
||||
return qsTr("was never online");
|
||||
case "userStatusLastMonth":
|
||||
return qsTr("offline, last online: last month");
|
||||
case "userStatusLastWeek":
|
||||
return qsTr("offline, last online: last week");
|
||||
case "userStatusOffline":
|
||||
return qsTr("offline, last online: %1").arg(getDateTimeElapsed(was_online));
|
||||
case "userStatusOnline":
|
||||
return qsTr("online");
|
||||
case "userStatusRecently":
|
||||
return qsTr("offline, was recently online");
|
||||
}
|
||||
}
|
||||
function getChatMemberStatusText(statusType) {
|
||||
// chatMemberStatusAdministrator, chatMemberStatusBanned, chatMemberStatusCreator, chatMemberStatusLeft, chatMemberStatusMember, and chatMemberStatusRestricted.
|
||||
switch(statusType) {
|
||||
case "chatMemberStatusAdministrator":
|
||||
return qsTr("Admin", "channel user role");
|
||||
case "chatMemberStatusBanned":
|
||||
return qsTr("Banned", "channel user role");
|
||||
case "chatMemberStatusCreator":
|
||||
return qsTr("Creator", "channel user role");
|
||||
case "chatMemberStatusRestricted":
|
||||
return qsTr("Restricted", "channel user role");
|
||||
case "chatMemberStatusLeft":
|
||||
case "chatMemberStatusMember":
|
||||
return ""
|
||||
}
|
||||
return statusType || "";
|
||||
}
|
||||
|
||||
function getShortenedCount(count) {
|
||||
if (count >= 1000000) {
|
||||
return qsTr("%1M").arg((count / 1000000).toLocaleString(Qt.locale(), 'f', 0));
|
||||
|
@ -226,3 +264,6 @@ function getVideoHeight(videoWidth, videoData) {
|
|||
return 1;
|
||||
}
|
||||
}
|
||||
function replaceUrlsWithLinks(string) {
|
||||
return string.replace(/((\w+):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g, "<a href=\"$1\">$1</a>");
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -55,7 +55,7 @@ Page {
|
|||
}
|
||||
|
||||
Label {
|
||||
text: "Fernschreiber 0.3"
|
||||
text: "Fernschreiber 0.4"
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
font.pixelSize: Theme.fontSizeExtraLarge
|
||||
anchors {
|
||||
|
|
463
qml/pages/ChatInformationPage.qml
Normal file
463
qml/pages/ChatInformationPage.qml
Normal file
|
@ -0,0 +1,463 @@
|
|||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
import "../components"
|
||||
import "../components/chatInformationPage"
|
||||
import "../js/twemoji.js" as Emoji
|
||||
import "../js/functions.js" as Functions
|
||||
|
||||
Page {
|
||||
id: chatInformationPage
|
||||
|
||||
allowedOrientations: Orientation.All
|
||||
property string searchString
|
||||
|
||||
property int chatOnlineMemberCount: 0;
|
||||
property int myUserId: tdLibWrapper.getUserInformation().id;
|
||||
|
||||
property bool isPrivateChat: false
|
||||
property bool isBasicGroup: false
|
||||
property bool isSuperGroup: false
|
||||
property bool isChannel: false
|
||||
|
||||
property string chatPartnerGroupId
|
||||
|
||||
property bool userIsMember: (isPrivateChat && chatInformation["@type"]) || // should be optimized
|
||||
(isBasicGroup || isSuperGroup) && (
|
||||
(groupInformation.status["@type"] === "chatMemberStatusMember")
|
||||
|| (groupInformation.status["@type"] === "chatMemberStatusAdministrator")
|
||||
|| (groupInformation.status["@type"] === "chatMemberStatusRestricted" && groupInformation.status.is_member)
|
||||
|| (groupInformation.status["@type"] === "chatMemberStatusCreator" && groupInformation.status.is_member)
|
||||
)
|
||||
|
||||
property variant chatInformation:({});
|
||||
property variant privateChatUserInformation:({});
|
||||
property variant chatPartnerFullInformation:({});
|
||||
property variant chatPartnerProfilePhotos:([]);
|
||||
property variant groupInformation: ({});
|
||||
property variant groupFullInformation: ({});
|
||||
|
||||
property alias membersList: membersList
|
||||
|
||||
function initializePage() {
|
||||
console.log("[ChatInformationPage] Initializing chat info page...");
|
||||
membersList.clear();
|
||||
var chatType = chatInformation.type["@type"];
|
||||
switch(chatType) {
|
||||
case "chatTypePrivate":
|
||||
isPrivateChat = true;
|
||||
chatInformationPage.chatPartnerGroupId = chatInformation.type.user_id.toString();
|
||||
if(!privateChatUserInformation.id) {
|
||||
privateChatUserInformation = tdLibWrapper.getUserInformation(chatInformationPage.chatPartnerGroupId);
|
||||
}
|
||||
tdLibWrapper.getUserFullInfo(chatInformationPage.chatPartnerGroupId);
|
||||
tdLibWrapper.getUserProfilePhotos(chatInformationPage.chatPartnerGroupId, 100, 0);
|
||||
break;
|
||||
case "chatTypeBasicGroup":
|
||||
isBasicGroup = true;
|
||||
chatInformationPage.chatPartnerGroupId = chatInformation.type.basic_group_id.toString();
|
||||
if(!groupInformation.id) {
|
||||
groupInformation = tdLibWrapper.getBasicGroup(chatInformationPage.chatPartnerGroupId);
|
||||
}
|
||||
tdLibWrapper.getGroupFullInfo(chatInformationPage.chatPartnerGroupId, false);
|
||||
break;
|
||||
case "chatTypeSupergroup":
|
||||
isSuperGroup = true;
|
||||
chatInformationPage.chatPartnerGroupId = chatInformation.type.supergroup_id.toString();
|
||||
if(!groupInformation.id) {
|
||||
groupInformation = tdLibWrapper.getSuperGroup(chatInformationPage.chatPartnerGroupId);
|
||||
}
|
||||
|
||||
tdLibWrapper.getGroupFullInfo(chatInformationPage.chatPartnerGroupId, true);
|
||||
isChannel = groupInformation.is_channel;
|
||||
break;
|
||||
}
|
||||
if(!isPrivateChat) {
|
||||
updateGroupStatusText();
|
||||
}
|
||||
}
|
||||
function scrollUp(force) {
|
||||
if(force) {
|
||||
// animation does not always work while quick scrolling
|
||||
scrollUpTimer.start()
|
||||
} else {
|
||||
scrollUpAnimation.start()
|
||||
}
|
||||
}
|
||||
function scrollDown(force) {
|
||||
if(force) {
|
||||
scrollDownTimer.start()
|
||||
} else {
|
||||
scrollDownAnimation.start()
|
||||
}
|
||||
}
|
||||
function handleBasicGroupFullInfo(groupFullInfo) {
|
||||
groupFullInformation = groupFullInfo;
|
||||
membersList.clear();
|
||||
if(groupFullInfo.members && groupFullInfo.members.length > 0) {
|
||||
for(var memberIndex in groupFullInfo.members) {
|
||||
var memberData = groupFullInfo.members[memberIndex];
|
||||
var userInfo = tdLibWrapper.getUserInformation(memberData.user_id) || {user:{}, bot_info:{}};
|
||||
memberData.user = userInfo;
|
||||
memberData.bot_info = memberData.bot_info || {};
|
||||
membersList.append(memberData);
|
||||
}
|
||||
groupInformation.member_count = groupFullInfo.members.length
|
||||
updateGroupStatusText();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: tdLibWrapper
|
||||
|
||||
onChatOnlineMemberCountUpdated: {
|
||||
if ((isSuperGroup || isBasicGroup) && chatInformation.id.toString() === chatId) {
|
||||
chatOnlineMemberCount = onlineMemberCount;
|
||||
updateGroupStatusText();
|
||||
}
|
||||
}
|
||||
onSupergroupFullInfoReceived: {
|
||||
if(isSuperGroup && chatInformationPage.chatPartnerGroupId === groupId) {
|
||||
groupFullInformation = groupFullInfo;
|
||||
}
|
||||
}
|
||||
onSupergroupFullInfoUpdated: {
|
||||
if(isSuperGroup && chatInformationPage.chatPartnerGroupId === groupId) {
|
||||
groupFullInformation = groupFullInfo;
|
||||
}
|
||||
}
|
||||
onBasicGroupFullInfoReceived: {
|
||||
if(isBasicGroup && chatInformationPage.chatPartnerGroupId === groupId) {
|
||||
handleBasicGroupFullInfo(groupFullInfo)
|
||||
}
|
||||
}
|
||||
|
||||
onBasicGroupFullInfoUpdated: {
|
||||
if(isBasicGroup && chatInformationPage.chatPartnerGroupId === groupId) {
|
||||
handleBasicGroupFullInfo(groupFullInfo)
|
||||
}
|
||||
}
|
||||
onUserFullInfoReceived: {
|
||||
if(isPrivateChat && userFullInfo["@extra"] === chatInformationPage.chatPartnerGroupId) {
|
||||
chatPartnerFullInformation = userFullInfo;
|
||||
}
|
||||
}
|
||||
onUserFullInfoUpdated: {
|
||||
if(isPrivateChat && userId === chatInformationPage.chatPartnerGroupId) {
|
||||
chatPartnerFullInformation = userFullInfo;
|
||||
}
|
||||
}
|
||||
|
||||
onUserProfilePhotosReceived: {
|
||||
if(isPrivateChat && extra === chatInformationPage.chatPartnerGroupId) {
|
||||
chatPartnerProfilePhotos = photos;
|
||||
}
|
||||
}
|
||||
onChatPermissionsUpdated: {
|
||||
if (chatInformation.id.toString() === chatId) {
|
||||
// set whole object to trigger change
|
||||
var newInformation = chatInformation;
|
||||
newInformation.permissions = permissions
|
||||
chatInformation = newInformation
|
||||
}
|
||||
}
|
||||
onChatTitleUpdated: {
|
||||
if (chatInformation.id.toString() === chatId) {
|
||||
// set whole object to trigger change
|
||||
var newInformation = chatInformation;
|
||||
newInformation.title = title
|
||||
chatInformation = newInformation
|
||||
}
|
||||
}
|
||||
}
|
||||
Component.onCompleted: initializePage();
|
||||
|
||||
ListModel {
|
||||
id: membersList
|
||||
}
|
||||
|
||||
AppNotification {
|
||||
id: infoNotification
|
||||
}
|
||||
SilicaFlickable {
|
||||
id: pageFlickable
|
||||
anchors.fill: parent
|
||||
|
||||
PullDownMenu {
|
||||
MenuItem {
|
||||
visible: (isBasicGroup || isSuperGroup) && userIsMember
|
||||
text: qsTr("Leave Group")
|
||||
onClicked: {
|
||||
// ensure it's done even if the page is closed:
|
||||
var remorse = Remorse.popupAction(appWindow, qsTr("Leaving chat"), (function(chatid) {
|
||||
return function() {
|
||||
tdLibWrapper.leaveChat(chatid);
|
||||
// this does not care about the response (ideally type "ok" without further reference) for now
|
||||
pageStack.pop(pageStack.find( function(page){ return(page._depth === 0)} ));
|
||||
};
|
||||
}(chatInformation.id.toString())))
|
||||
}
|
||||
}
|
||||
MenuItem {
|
||||
visible: userIsMember
|
||||
onClicked: {
|
||||
var newNotificationSettings = chatInformation.notification_settings;
|
||||
if (newNotificationSettings.mute_for > 0) {
|
||||
newNotificationSettings.mute_for = 0;
|
||||
} else {
|
||||
newNotificationSettings.mute_for = 6666666;
|
||||
}
|
||||
tdLibWrapper.setChatNotificationSettings(chat_id, newNotificationSettings);
|
||||
}
|
||||
text: chatInformation.notification_settings.mute_for > 0 ? qsTr("Unmute Chat") : qsTr("Mute Chat")
|
||||
}
|
||||
// MenuItem { //TODO Implement
|
||||
// visible: !userIsMember
|
||||
// onClicked: {
|
||||
// tdLibWrapper.joinChat(chat_id);
|
||||
// }
|
||||
// text: qsTr("Join Chat")
|
||||
// }
|
||||
}
|
||||
// header
|
||||
PageHeader {
|
||||
id: headerItem
|
||||
z: 5
|
||||
Item {
|
||||
id: imageContainer
|
||||
property bool hasImage: typeof chatInformation.photo !== "undefined"
|
||||
property int minDimension: chatInformationPage.isLandscape ? Theme.itemSizeSmall : Theme.itemSizeMedium
|
||||
property int maxDimension: Screen.width / 2
|
||||
property int minX: Theme.horizontalPageMargin
|
||||
property int maxX: (chatInformationPage.width - maxDimension)/2
|
||||
property int minY: (parent.height - minDimension)/2
|
||||
property int maxY: parent.height
|
||||
property double tweenFactor: {
|
||||
if(!hasImage) {
|
||||
return 0
|
||||
}
|
||||
return 1 - Math.max(0, Math.min(1, contentFlickable.contentY / maxDimension))
|
||||
}
|
||||
|
||||
function getEased(min,max,factor) {
|
||||
return min + (max-min)*factor
|
||||
}
|
||||
width: getEased(minDimension,maxDimension, tweenFactor)
|
||||
height: width
|
||||
x: getEased(minX,maxX, tweenFactor)
|
||||
y: getEased(minY,maxY, tweenFactor)
|
||||
|
||||
ProfileThumbnail {
|
||||
id: chatPictureThumbnail
|
||||
photoData: imageContainer.hasImage ? chatInformation.photo.small : ""
|
||||
replacementStringHint: headerItem.title
|
||||
width: parent.width
|
||||
height: width
|
||||
radius: imageContainer.minDimension / 2
|
||||
opacity: profilePictureLoader.status !== Loader.Ready || profilePictureLoader.item.opacity < 1 ? 1.0 : 0.0
|
||||
}
|
||||
Loader {
|
||||
id: profilePictureLoader
|
||||
active: imageContainer.hasImage
|
||||
asynchronous: true
|
||||
anchors.fill: chatPictureThumbnail
|
||||
source: chatInformationPage.isPrivateChat
|
||||
? "../components/chatInformationPage/ChatInformationProfilePictureList.qml"
|
||||
: "../components/chatInformationPage/ChatInformationProfilePicture.qml"
|
||||
}
|
||||
}
|
||||
leftMargin: imageContainer.minDimension + Theme.horizontalPageMargin + Theme.paddingMedium
|
||||
title: chatInformation.title !== "" ? Emoji.emojify(chatInformation.title, Theme.fontSizeLarge) : qsTr("Unknown")
|
||||
description: chatInformationPage.isPrivateChat ? ("@"+(chatInformationPage.privateChatUserInformation.username || chatInformationPage.chatPartnerGroupId)) : ""
|
||||
}
|
||||
|
||||
SilicaFlickable {
|
||||
id: contentFlickable
|
||||
contentHeight: groupInfoItem.height + tabViewLoader.height
|
||||
clip: true
|
||||
interactive: true//groupInfoItem.height > pageFlickable.height * 0.5
|
||||
|
||||
anchors {
|
||||
top: headerItem.bottom
|
||||
bottom: parent.bottom
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
}
|
||||
NumberAnimation {
|
||||
id: scrollDownAnimation
|
||||
target: contentFlickable
|
||||
to: groupInfoItem.height
|
||||
property: "contentY"
|
||||
duration: 500
|
||||
easing.type: Easing.InOutCubic
|
||||
}
|
||||
NumberAnimation {
|
||||
id: scrollUpAnimation
|
||||
target: contentFlickable
|
||||
to: 0
|
||||
property: "contentY"
|
||||
duration: 500
|
||||
easing.type: Easing.InOutCubic
|
||||
property Timer scrollUpTimer: Timer {
|
||||
id: scrollUpTimer
|
||||
interval: 50
|
||||
onTriggered: {
|
||||
contentFlickable.scrollToTop()
|
||||
}
|
||||
}
|
||||
property Timer scrollDownTimer: Timer {
|
||||
id: scrollDownTimer
|
||||
interval: 50
|
||||
onTriggered: {
|
||||
contentFlickable.scrollToBottom()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
id: groupInfoItem
|
||||
bottomPadding: Theme.paddingLarge
|
||||
topPadding: Theme.paddingLarge
|
||||
anchors {
|
||||
top: parent.top
|
||||
left: parent.left
|
||||
leftMargin: Theme.horizontalPageMargin
|
||||
right: parent.right
|
||||
rightMargin: Theme.horizontalPageMargin
|
||||
}
|
||||
|
||||
Item { //large image placeholder
|
||||
width: parent.width
|
||||
height: imageContainer.hasImage ? imageContainer.maxDimension : 0
|
||||
}
|
||||
|
||||
ChatInformationEditArea {
|
||||
visible: canEdit
|
||||
canEdit: !chatInformationPage.isPrivateChat && chatInformationPage.groupInformation.status && (chatInformationPage.groupInformation.status.can_change_info || chatInformationPage.groupInformation.status["@type"] === "chatMemberStatusCreator")
|
||||
headerText: qsTr("Chat Title", "group title header")
|
||||
text: chatInformation.title
|
||||
|
||||
onSaveButtonClicked: {
|
||||
if(!editItem.errorHighlight) {
|
||||
tdLibWrapper.setChatTitle(chatInformationPage.chatInformation.id, textValue);
|
||||
} else {
|
||||
isEditing = true
|
||||
}
|
||||
}
|
||||
|
||||
onTextEdited: {
|
||||
if(textValue.length > 0 && textValue.length < 129) {
|
||||
editItem.errorHighlight = false
|
||||
editItem.label = ""
|
||||
editItem.placeholderText = ""
|
||||
} else {
|
||||
editItem.label = qsTr("Enter 1-128 characters")
|
||||
editItem.placeholderText = editItem.label
|
||||
editItem.errorHighlight = true
|
||||
}
|
||||
}
|
||||
}
|
||||
ChatInformationEditArea {
|
||||
canEdit: (chatInformationPage.isPrivateChat && chatInformationPage.privateChatUserInformation.id === chatInformationPage.myUserId) || ((chatInformationPage.isBasicGroup || chatInformationPage.isSuperGroup) && chatInformationPage.groupInformation && (chatInformationPage.groupInformation.status.can_change_info || chatInformationPage.groupInformation.status["@type"] === "chatMemberStatusCreator"))
|
||||
emptyPlaceholderText: qsTr("There is no information text available, yet.")
|
||||
headerText: qsTr("Info", "group or user infotext header")
|
||||
multiLine: true
|
||||
text: (chatInformationPage.isPrivateChat ? chatInformationPage.chatPartnerFullInformation.bio : chatInformationPage.groupFullInformation.description) || ""
|
||||
onSaveButtonClicked: {
|
||||
if(chatInformationPage.isPrivateChat) { // own bio
|
||||
tdLibWrapper.setBio(textValue);
|
||||
} else { // group info
|
||||
tdLibWrapper.setChatDescription(chatInformationPage.chatInformation.id, textValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ChatInformationTextItem {
|
||||
headerText: qsTr("Phone Number", "user phone number header")
|
||||
text: (chatInformationPage.isPrivateChat && chatInformationPage.privateChatUserInformation.phone_number ? "+"+chatInformationPage.privateChatUserInformation.phone_number : "") || ""
|
||||
isLinkedLabel: true
|
||||
}
|
||||
|
||||
SectionHeader {
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
visible: !!inviteLinkItem.text
|
||||
height: visible ? Theme.itemSizeExtraSmall : 0
|
||||
text: qsTr("Invite Link", "header")
|
||||
x: 0
|
||||
}
|
||||
|
||||
Row {
|
||||
width: parent.width
|
||||
visible: !!inviteLinkItem.text
|
||||
ChatInformationTextItem {
|
||||
id: inviteLinkItem
|
||||
text: !isPrivateChat ? groupFullInformation.invite_link : ""
|
||||
width: parent.width - inviteLinkButton.width
|
||||
}
|
||||
IconButton {
|
||||
id: inviteLinkButton
|
||||
icon.source: "image://theme/icon-m-clipboard"
|
||||
anchors.verticalCenter: inviteLinkItem.verticalCenter
|
||||
onClicked: {
|
||||
inviteLinkField.selectAll();
|
||||
inviteLinkField.copy();
|
||||
inviteLinkField.select(0,0);
|
||||
infoNotification.show(qsTr("The Invite Link has been copied to the clipboard."));
|
||||
}
|
||||
TextField {
|
||||
id: inviteLinkField
|
||||
width: 0
|
||||
height: 0
|
||||
text: groupFullInformation.invite_link ? groupFullInformation.invite_link : ""
|
||||
visible: false
|
||||
readOnly: true
|
||||
opacity: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
width: parent.width
|
||||
height: Theme.paddingLarge
|
||||
}
|
||||
|
||||
Separator {
|
||||
width: parent.width
|
||||
color: Theme.primaryColor
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
opacity: (tabViewLoader.status === Loader.Ready && tabViewLoader.item.count > 0) ? 1.0 : 0.0
|
||||
|
||||
Behavior on opacity { PropertyAnimation {duration: 500}}
|
||||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: tabViewLoader
|
||||
asynchronous: true
|
||||
active: true
|
||||
anchors {
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
top: groupInfoItem.bottom
|
||||
}
|
||||
sourceComponent: Component {
|
||||
ChatInformationTabView {
|
||||
id: tabView
|
||||
height: tabView.count > 0 ? chatInformationPage.height - headerItem.height : 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function updateGroupStatusText() {
|
||||
if (chatOnlineMemberCount > 0) {
|
||||
headerItem.description = qsTr("%1 members, %2 online").arg(Functions.getShortenedCount(groupInformation.member_count)).arg(Functions.getShortenedCount(chatOnlineMemberCount));
|
||||
} else {
|
||||
if (isChannel) {
|
||||
headerItem.description = qsTr("%1 subscribers").arg(Functions.getShortenedCount(groupInformation.member_count));
|
||||
} else {
|
||||
headerItem.description = qsTr("%1 members").arg(Functions.getShortenedCount(groupInformation.member_count));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -46,23 +46,9 @@ Page {
|
|||
property variant emojiProposals;
|
||||
|
||||
function updateChatPartnerStatusText() {
|
||||
if (chatPartnerInformation.status['@type'] === "userStatusEmpty" ) {
|
||||
chatStatusText.text = qsTr("was never online");
|
||||
}
|
||||
if (chatPartnerInformation.status['@type'] === "userStatusLastMonth" ) {
|
||||
chatStatusText.text = qsTr("offline, last online: last month");
|
||||
}
|
||||
if (chatPartnerInformation.status['@type'] === "userStatusLastWeek" ) {
|
||||
chatStatusText.text = qsTr("offline, last online: last week");
|
||||
}
|
||||
if (chatPartnerInformation.status['@type'] === "userStatusOffline" ) {
|
||||
chatStatusText.text = qsTr("offline, last online: %1").arg(Functions.getDateTimeElapsed(chatPartnerInformation.status.was_online));
|
||||
}
|
||||
if (chatPartnerInformation.status['@type'] === "userStatusOnline" ) {
|
||||
chatStatusText.text = qsTr("online");
|
||||
}
|
||||
if (chatPartnerInformation.status['@type'] === "userStatusRecently" ) {
|
||||
chatStatusText.text = qsTr("offline, was recently online");
|
||||
var statusText = Functions.getChatPartnerStatusText(chatPartnerInformation.status['@type'], chatPartnerInformation.status.was_online);
|
||||
if(statusText) {
|
||||
chatStatusText.text = statusText;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -109,6 +95,9 @@ Page {
|
|||
|
||||
function getMessageStatusText(message, listItemIndex, lastReadSentIndex) {
|
||||
var messageStatusSuffix = "";
|
||||
if(!message) {
|
||||
return "";
|
||||
}
|
||||
|
||||
if (message.edit_date > 0) {
|
||||
messageStatusSuffix += " - " + qsTr("edited");
|
||||
|
@ -221,19 +210,26 @@ Page {
|
|||
initializePage();
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
tdLibWrapper.closeChat(chatInformation.id);
|
||||
}
|
||||
|
||||
onStatusChanged: {
|
||||
if (status === PageStatus.Activating) {
|
||||
switch(status) {
|
||||
case PageStatus.Activating:
|
||||
tdLibWrapper.openChat(chatInformation.id);
|
||||
}
|
||||
if (status === PageStatus.Active) {
|
||||
break;
|
||||
case PageStatus.Active:
|
||||
console.log("CHAT opendirectly?", chatPage.isInitialized)
|
||||
if (!chatPage.isInitialized) {
|
||||
chatModel.initialize(chatInformation);
|
||||
chatPage.isInitialized = true;
|
||||
}
|
||||
break;
|
||||
// case PageStatus.Deactivating:
|
||||
// tdLibWrapper.closeChat(chatInformation.id);
|
||||
}
|
||||
if (status === PageStatus.Deactivating) {
|
||||
tdLibWrapper.closeChat(chatInformation.id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Connections {
|
||||
|
@ -277,6 +273,14 @@ Page {
|
|||
target: chatModel
|
||||
onMessagesReceived: {
|
||||
console.log("[ChatPage] Messages received, view has " + chatView.count + " messages, setting view to index " + modelIndex + ", own messages were read before index " + lastReadSentIndex);
|
||||
if(totalCount === 0) {
|
||||
console.log("[ChatPage] actually, skipping that: No Messages in Chat.");
|
||||
|
||||
chatView.positionViewAtEnd();
|
||||
chatPage.loading = false;
|
||||
return;
|
||||
}
|
||||
|
||||
chatView.lastReadSentIndex = lastReadSentIndex;
|
||||
if (modelIndex === (chatView.count - 1)) {
|
||||
chatView.positionViewAtEnd();
|
||||
|
@ -286,7 +290,7 @@ Page {
|
|||
chatPage.loading = false;
|
||||
if (chatView.height > chatView.contentHeight) {
|
||||
console.log("[ChatPage] Chat content quite small...");
|
||||
tdLibWrapper.viewMessage(chatInformation.id, chatModel.getMessage(chatView.count - 1).id);
|
||||
tdLibWrapper.viewMessage(chatInformation.id, chatModel.getMessage(chatView.count - 1).id, false);
|
||||
}
|
||||
}
|
||||
onNewMessageReceived: {
|
||||
|
@ -336,7 +340,7 @@ Page {
|
|||
Timer {
|
||||
id: chatContactTimeUpdater
|
||||
interval: 60000
|
||||
running: true
|
||||
running: isPrivateChat
|
||||
repeat: true
|
||||
onTriggered: {
|
||||
updateChatPartnerStatusText();
|
||||
|
@ -373,7 +377,14 @@ Page {
|
|||
muteChatMenuItem.text = chatInformation.notification_settings.mute_for > 0 ? qsTr("Unmute Chat") : qsTr("Mute Chat");
|
||||
}
|
||||
}
|
||||
|
||||
BackgroundItem {
|
||||
id: headerMouseArea
|
||||
height: headerRow.height
|
||||
width: parent.width
|
||||
onClicked: {
|
||||
pageStack.push(Qt.resolvedUrl("../pages/ChatInformationPage.qml"), { "chatInformation" : chatInformation, "privateChatUserInformation": chatPartnerInformation, "groupInformation": chatGroupInformation, "chatOnlineMemberCount": chatOnlineMemberCount});
|
||||
}
|
||||
}
|
||||
Column {
|
||||
id: chatColumn
|
||||
width: parent.width
|
||||
|
@ -427,7 +438,7 @@ Page {
|
|||
textFormat: Text.StyledText
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
font.family: Theme.fontFamilyHeading
|
||||
color: Theme.secondaryColor
|
||||
color: headerMouseArea.pressed ? Theme.secondaryHighlightColor : Theme.secondaryColor
|
||||
elide: Text.ElideRight
|
||||
width: parent.width
|
||||
maximumLineCount: 1
|
||||
|
@ -487,7 +498,7 @@ Page {
|
|||
|
||||
function handleScrollPositionChanged() {
|
||||
console.log("Current position: " + chatView.contentY);
|
||||
tdLibWrapper.viewMessage(chatInformation.id, chatView.itemAt(chatView.contentX, ( chatView.contentY + chatView.height - Theme.horizontalPageMargin )).myMessage.id);
|
||||
tdLibWrapper.viewMessage(chatInformation.id, chatView.itemAt(chatView.contentX, ( chatView.contentY + chatView.height - Theme.horizontalPageMargin )).myMessage.id, false);
|
||||
}
|
||||
|
||||
onContentYChanged: {
|
||||
|
@ -958,6 +969,11 @@ Page {
|
|||
}
|
||||
|
||||
VerticalScrollDecorator {}
|
||||
|
||||
ViewPlaceholder {
|
||||
enabled: chatView.count === 0
|
||||
text: qsTr("This chat is empty.")
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
|
@ -1157,7 +1173,7 @@ Page {
|
|||
property bool isPicture: false;
|
||||
property bool isVideo: false;
|
||||
property bool isDocument: false;
|
||||
property variant fileProperties;
|
||||
property variant fileProperties:({});
|
||||
|
||||
IconButton {
|
||||
id: removeAttachmentsIconButton
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -147,7 +147,7 @@ Page {
|
|||
|
||||
TextField {
|
||||
id: phoneNumberTextField
|
||||
placeholderText: "Use the international format, e.g. +4912342424242"
|
||||
placeholderText: qsTr("Use the international format, e.g. %1").arg("+4912342424242")
|
||||
inputMethodHints: Qt.ImhDialableCharactersOnly
|
||||
labelVisible: false
|
||||
width: parent.width
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -152,6 +152,16 @@ Page {
|
|||
chatListCreatedTimer.restart();
|
||||
}
|
||||
}
|
||||
onChatReceived: {
|
||||
if(chat["@extra"] === "openDirectly") {
|
||||
console.log("ON CHAT RECEIVED", JSON.stringify(chat, null, 2));
|
||||
if (status !== PageStatus.Active) {
|
||||
pageStack.pop(pageStack.find( function(page){ return(page._depth === 0)} ), PageStackAction.Immediate);
|
||||
}
|
||||
// if we get a new chat (no messages?), we can not use the provided data
|
||||
pageStack.push(Qt.resolvedUrl("../pages/ChatPage.qml"), { "chatInformation" : tdLibWrapper.getChat(chat.id) });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
|
@ -219,31 +229,12 @@ Page {
|
|||
Behavior on opacity { NumberAnimation {} }
|
||||
|
||||
model: chatListModel
|
||||
delegate: ListItem {
|
||||
|
||||
id: chatListViewItem
|
||||
|
||||
contentHeight: chatListRow.height + chatListSeparator.height + 2 * Theme.paddingMedium
|
||||
contentWidth: parent.width
|
||||
delegate: ChatListViewItem {
|
||||
pictureThumbnail.forceElementUpdate: overviewPage.chatListCreated
|
||||
ownUserId: overviewPage.ownUserId
|
||||
|
||||
onClicked: {
|
||||
pageStack.push(Qt.resolvedUrl("../pages/ChatPage.qml"), { "chatInformation" : display });
|
||||
}
|
||||
|
||||
showMenuOnPressAndHold: chat_id != overviewPage.ownUserId
|
||||
menu: ContextMenu {
|
||||
MenuItem {
|
||||
onClicked: {
|
||||
var newNotificationSettings = display.notification_settings;
|
||||
if (newNotificationSettings.mute_for > 0) {
|
||||
newNotificationSettings.mute_for = 0;
|
||||
} else {
|
||||
newNotificationSettings.mute_for = 6666666;
|
||||
}
|
||||
tdLibWrapper.setChatNotificationSettings(chat_id, newNotificationSettings);
|
||||
}
|
||||
text: display.notification_settings.mute_for > 0 ? qsTr("Unmute Chat") : qsTr("Mute Chat")
|
||||
}
|
||||
pageStack.push(Qt.resolvedUrl("../pages/ChatPage.qml"), { "chatInformation" : display });
|
||||
}
|
||||
|
||||
Connections {
|
||||
|
@ -251,151 +242,10 @@ Page {
|
|||
onChatChanged: {
|
||||
if (overviewPage.chatListCreated && changedChatId === chat_id) {
|
||||
// Force update of some list item elements (currently only last message text seems to create problems). dataChanged() doesn't seem to trigger them all :(
|
||||
chatListLastMessageText.text = last_message_text ? Emoji.emojify(last_message_text, Theme.fontSizeExtraSmall) : qsTr("Unknown")
|
||||
secondaryText.text = last_message_text ? Emoji.emojify(last_message_text, Theme.fontSizeExtraSmall) : qsTr("Unknown")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
id: chatListColumn
|
||||
width: parent.width - ( 2 * Theme.horizontalPageMargin )
|
||||
spacing: Theme.paddingSmall
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Row {
|
||||
id: chatListRow
|
||||
width: parent.width
|
||||
height: chatListContentColumn.height
|
||||
spacing: Theme.paddingMedium
|
||||
|
||||
Column {
|
||||
id: chatListPictureColumn
|
||||
width: chatListContentColumn.height - Theme.paddingSmall
|
||||
height: chatListContentColumn.height - Theme.paddingSmall
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
Item {
|
||||
id: chatListPictureItem
|
||||
width: parent.width
|
||||
height: parent.width
|
||||
|
||||
ProfileThumbnail {
|
||||
id: chatListPictureThumbnail
|
||||
photoData: photo_small
|
||||
replacementStringHint: chatListNameText.text
|
||||
width: parent.width
|
||||
height: parent.width
|
||||
forceElementUpdate: overviewPage.chatListCreated
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: chatUnreadMessagesCountBackground
|
||||
color: Theme.highlightBackgroundColor
|
||||
width: Theme.fontSizeLarge
|
||||
height: Theme.fontSizeLarge
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
radius: parent.width / 2
|
||||
visible: unread_count > 0
|
||||
}
|
||||
|
||||
Text {
|
||||
id: chatUnreadMessagesCount
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
font.bold: true
|
||||
color: Theme.primaryColor
|
||||
anchors.centerIn: chatUnreadMessagesCountBackground
|
||||
visible: chatUnreadMessagesCountBackground.visible
|
||||
text: unread_count > 99 ? "99+" : unread_count
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
id: chatListContentColumn
|
||||
width: parent.width * 5 / 6 - Theme.horizontalPageMargin
|
||||
spacing: Theme.paddingSmall
|
||||
|
||||
Text {
|
||||
id: chatListNameText
|
||||
text: title ? Emoji.emojify(title, Theme.fontSizeMedium) + ( display.notification_settings.mute_for > 0 ? Emoji.emojify(" 🔇", Theme.fontSizeMedium) : "" ) : qsTr("Unknown")
|
||||
textFormat: Text.StyledText
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.primaryColor
|
||||
elide: Text.ElideRight
|
||||
width: parent.width
|
||||
onTruncatedChanged: {
|
||||
// There is obviously a bug in QML in truncating text with images.
|
||||
// We simply remove Emojis then...
|
||||
if (truncated) {
|
||||
text = text.replace(/\<img [^>]+\/\>/g, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
id: chatListLastMessageRow
|
||||
width: parent.width
|
||||
spacing: Theme.paddingSmall
|
||||
Text {
|
||||
id: chatListLastUserText
|
||||
text: is_channel ? "" : ( last_message_sender_id ? ( last_message_sender_id !== overviewPage.ownUserId ? Emoji.emojify(Functions.getUserName(tdLibWrapper.getUserInformation(last_message_sender_id)), font.pixelSize) : qsTr("You") ) : qsTr("Unknown") )
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
color: Theme.highlightColor
|
||||
textFormat: Text.StyledText
|
||||
onTruncatedChanged: {
|
||||
// There is obviously a bug in QML in truncating text with images.
|
||||
// We simply remove Emojis then...
|
||||
if (truncated) {
|
||||
text = text.replace(/\<img [^>]+\/\>/g, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
Text {
|
||||
id: chatListLastMessageText
|
||||
text: last_message_text ? Emoji.emojify(last_message_text, Theme.fontSizeExtraSmall) : qsTr("Unknown")
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
color: Theme.primaryColor
|
||||
width: parent.width - Theme.paddingMedium - chatListLastUserText.width
|
||||
elide: Text.ElideRight
|
||||
textFormat: Text.StyledText
|
||||
onTruncatedChanged: {
|
||||
// There is obviously a bug in QML in truncating text with images.
|
||||
// We simply remove Emojis then...
|
||||
if (truncated) {
|
||||
text = text.replace(/\<img [^>]+\/\>/g, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: messageContactTimeElapsedText
|
||||
text: last_message_date ? Functions.getDateTimeElapsed(last_message_date) : qsTr("Unknown")
|
||||
font.pixelSize: Theme.fontSizeTiny
|
||||
color: Theme.secondaryColor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Separator {
|
||||
id: chatListSeparator
|
||||
|
||||
anchors {
|
||||
top: chatListColumn.bottom
|
||||
topMargin: Theme.paddingMedium
|
||||
}
|
||||
|
||||
width: parent.width
|
||||
color: Theme.primaryColor
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ViewPlaceholder {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -11,8 +11,8 @@ Name: harbour-fernschreiber
|
|||
# << macros
|
||||
|
||||
Summary: Fernschreiber is a Telegram client for Sailfish OS
|
||||
Version: 0.3
|
||||
Release: 2
|
||||
Version: 0.4
|
||||
Release: 1
|
||||
Group: Qt/Qt
|
||||
License: LICENSE
|
||||
URL: http://werkwolf.eu/
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Name: harbour-fernschreiber
|
||||
Summary: Fernschreiber is a Telegram client for Sailfish OS
|
||||
Version: 0.3
|
||||
Release: 2
|
||||
Version: 0.4
|
||||
Release: 1
|
||||
# The contents of the Group field should be one of the groups listed here:
|
||||
# https://github.com/mer-tools/spectacle/blob/master/data/GROUPS
|
||||
Group: Qt/Qt
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -352,6 +352,21 @@ void ChatListModel::redrawModel()
|
|||
layoutChanged();
|
||||
}
|
||||
|
||||
QVariantMap ChatListModel::get(int row)
|
||||
{
|
||||
|
||||
QHash<int,QByteArray> names = roleNames();
|
||||
QHashIterator<int, QByteArray> i(names);
|
||||
QVariantMap res;
|
||||
QModelIndex idx = index(row, 0);
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
QVariant data = idx.data(i.key());
|
||||
res[i.value()] = data;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
int ChatListModel::updateChatOrder(int chatIndex)
|
||||
{
|
||||
ChatData *chat = chatList.at(chatIndex);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -37,6 +37,7 @@ public:
|
|||
virtual QVariant data(const QModelIndex &index, int role) const override;
|
||||
|
||||
Q_INVOKABLE void redrawModel();
|
||||
Q_INVOKABLE QVariantMap get(int row);
|
||||
|
||||
bool showAllChats() const;
|
||||
void setShowAllChats(bool showAll);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -28,7 +28,7 @@ ChatModel::ChatModel(TDLibWrapper *tdLibWrapper)
|
|||
this->tdLibWrapper = tdLibWrapper;
|
||||
this->inReload = false;
|
||||
this->inIncrementalUpdate = false;
|
||||
connect(this->tdLibWrapper, SIGNAL(messagesReceived(QVariantList)), this, SLOT(handleMessagesReceived(QVariantList)));
|
||||
connect(this->tdLibWrapper, SIGNAL(messagesReceived(QVariantList, int)), this, SLOT(handleMessagesReceived(QVariantList, int)));
|
||||
connect(this->tdLibWrapper, SIGNAL(newMessageReceived(QString, QVariantMap)), this, SLOT(handleNewMessageReceived(QString, QVariantMap)));
|
||||
connect(this->tdLibWrapper, SIGNAL(chatReadInboxUpdated(QString, QString, int)), this, SLOT(handleChatReadInboxUpdated(QString, QString, int)));
|
||||
connect(this->tdLibWrapper, SIGNAL(chatReadOutboxUpdated(QString, QString)), this, SLOT(handleChatReadOutboxUpdated(QString, QString)));
|
||||
|
@ -72,9 +72,11 @@ void ChatModel::initialize(const QVariantMap &chatInformation)
|
|||
{
|
||||
qDebug() << "[ChatModel] Initializing chat model...";
|
||||
this->chatInformation = chatInformation;
|
||||
beginResetModel();
|
||||
this->messages.clear();
|
||||
this->messageIndexMap.clear();
|
||||
this->messagesToBeAdded.clear();
|
||||
endResetModel();
|
||||
this->chatId = chatInformation.value("id").toString();
|
||||
tdLibWrapper->getChatHistory(this->chatId);
|
||||
}
|
||||
|
@ -113,7 +115,7 @@ bool compareMessages(const QVariant &message1, const QVariant &message2)
|
|||
}
|
||||
}
|
||||
|
||||
void ChatModel::handleMessagesReceived(const QVariantList &messages)
|
||||
void ChatModel::handleMessagesReceived(const QVariantList &messages, const int &totalCount)
|
||||
{
|
||||
qDebug() << "[ChatModel] Receiving new messages :)" << messages.size();
|
||||
|
||||
|
@ -126,7 +128,7 @@ void ChatModel::handleMessagesReceived(const QVariantList &messages)
|
|||
this->inIncrementalUpdate = false;
|
||||
emit messagesIncrementalUpdate(listInboxPosition, listOutboxPosition);
|
||||
} else {
|
||||
emit messagesReceived(listInboxPosition, listOutboxPosition);
|
||||
emit messagesReceived(listInboxPosition, listOutboxPosition, totalCount);
|
||||
}
|
||||
} else {
|
||||
this->messagesMutex.lock();
|
||||
|
@ -157,7 +159,7 @@ void ChatModel::handleMessagesReceived(const QVariantList &messages)
|
|||
this->inIncrementalUpdate = false;
|
||||
emit messagesIncrementalUpdate(listInboxPosition, listOutboxPosition);
|
||||
} else {
|
||||
emit messagesReceived(listInboxPosition, listOutboxPosition);
|
||||
emit messagesReceived(listInboxPosition, listOutboxPosition, totalCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -42,7 +42,7 @@ public:
|
|||
Q_INVOKABLE QVariantMap getMessage(const int &index);
|
||||
|
||||
signals:
|
||||
void messagesReceived(const int &modelIndex, const int &lastReadSentIndex);
|
||||
void messagesReceived(const int &modelIndex, const int &lastReadSentIndex, const int &totalCount);
|
||||
void messagesIncrementalUpdate(const int &modelIndex, const int &lastReadSentIndex);
|
||||
void newMessageReceived(const QVariantMap &message);
|
||||
void unreadCountUpdated(const int &unreadCount, const QString &lastReadInboxMessageId);
|
||||
|
@ -52,7 +52,7 @@ signals:
|
|||
void messagesDeleted();
|
||||
|
||||
public slots:
|
||||
void handleMessagesReceived(const QVariantList &messages);
|
||||
void handleMessagesReceived(const QVariantList &messages, const int &totalCount);
|
||||
void handleNewMessageReceived(const QString &chatId, const QVariantMap &message);
|
||||
void handleChatReadInboxUpdated(const QString &chatId, const QString &lastReadInboxMessageId, const int &unreadCount);
|
||||
void handleChatReadOutboxUpdated(const QString &chatId, const QString &lastReadOutboxMessageId);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -51,5 +51,8 @@ QString FernschreiberUtils::getMessageShortText(const QVariantMap &messageConten
|
|||
if (contentType == "messageChatDeleteMember") {
|
||||
return myself ? tr("left this chat", "myself") : tr("left this chat");
|
||||
}
|
||||
if (contentType == "messageChatChangeTitle") {
|
||||
return myself ? tr("changed the chat title", "myself") : tr("changed the chat title");
|
||||
}
|
||||
return tr("Unsupported message: %1").arg(contentType.mid(7));
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -41,6 +41,7 @@ namespace {
|
|||
const QString LAST_READ_OUTBOX_MESSAGE_ID("last_read_outbox_message_id");
|
||||
|
||||
const QString TYPE("@type");
|
||||
const QString EXTRA("@extra");
|
||||
const QString TYPE_CHAT_POSITION("chatPosition");
|
||||
const QString TYPE_CHAT_LIST_MAIN("chatListMain");
|
||||
}
|
||||
|
@ -99,11 +100,22 @@ TDLibReceiver::TDLibReceiver(void *tdLibClient, QObject *parent) : QThread(paren
|
|||
handlers.insert("updateMessageContent", &TDLibReceiver::processUpdateMessageContent);
|
||||
handlers.insert("updateDeleteMessages", &TDLibReceiver::processUpdateDeleteMessages);
|
||||
handlers.insert("chats", &TDLibReceiver::processChats);
|
||||
handlers.insert("chat", &TDLibReceiver::processChat);
|
||||
handlers.insert("updateRecentStickers", &TDLibReceiver::processUpdateRecentStickers);
|
||||
handlers.insert("stickers", &TDLibReceiver::processStickers);
|
||||
handlers.insert("updateInstalledStickerSets", &TDLibReceiver::processUpdateInstalledStickerSets);
|
||||
handlers.insert("stickerSets", &TDLibReceiver::processStickerSets);
|
||||
handlers.insert("stickerSet", &TDLibReceiver::processStickerSet);
|
||||
handlers.insert("chatMembers", &TDLibReceiver::processChatMembers);
|
||||
handlers.insert("userFullInfo", &TDLibReceiver::processUserFullInfo);
|
||||
handlers.insert("updateUserFullInfo", &TDLibReceiver::processUpdateUserFullInfo);
|
||||
handlers.insert("basicGroupFullInfo", &TDLibReceiver::processBasicGroupFullInfo);
|
||||
handlers.insert("updateBasicGroupFullInfo", &TDLibReceiver::processUpdateBasicGroupFullInfo);
|
||||
handlers.insert("supergroupFullInfo", &TDLibReceiver::processSupergroupFullInfo);
|
||||
handlers.insert("updateSupergroupFullInfo", &TDLibReceiver::processUpdateSupergroupFullInfo);
|
||||
handlers.insert("userProfilePhotos", &TDLibReceiver::processUserProfilePhotos);
|
||||
handlers.insert("updateChatPermissions", &TDLibReceiver::processUpdateChatPermissions);
|
||||
handlers.insert("updateChatTitle", &TDLibReceiver::processUpdateChatTitle);
|
||||
}
|
||||
|
||||
void TDLibReceiver::setActive(const bool &active)
|
||||
|
@ -302,7 +314,7 @@ void TDLibReceiver::processChatOnlineMemberCountUpdated(const QVariantMap &recei
|
|||
void TDLibReceiver::processMessages(const QVariantMap &receivedInformation)
|
||||
{
|
||||
LOG("Received new messages, amount: " << receivedInformation.value("total_count").toString());
|
||||
emit messagesReceived(receivedInformation.value("messages").toList());
|
||||
emit messagesReceived(receivedInformation.value("messages").toList(), receivedInformation.value("total_count").toInt());
|
||||
}
|
||||
|
||||
void TDLibReceiver::processUpdateNewMessage(const QVariantMap &receivedInformation)
|
||||
|
@ -375,6 +387,11 @@ void TDLibReceiver::processChats(const QVariantMap &receivedInformation)
|
|||
emit chats(receivedInformation);
|
||||
}
|
||||
|
||||
void TDLibReceiver::processChat(const QVariantMap &receivedInformation)
|
||||
{
|
||||
emit chat(receivedInformation);
|
||||
}
|
||||
|
||||
void TDLibReceiver::processUpdateRecentStickers(const QVariantMap &receivedInformation)
|
||||
{
|
||||
LOG("Recent stickers updated");
|
||||
|
@ -404,3 +421,76 @@ void TDLibReceiver::processStickerSet(const QVariantMap &receivedInformation)
|
|||
LOG("Received a sticker set...");
|
||||
emit stickerSet(receivedInformation);
|
||||
}
|
||||
void TDLibReceiver::processChatMembers(const QVariantMap &receivedInformation)
|
||||
{
|
||||
LOG("Received super group members");
|
||||
const QString extra = receivedInformation.value(EXTRA).toString();
|
||||
emit chatMembers(extra, receivedInformation.value("members").toList(), receivedInformation.value("total_count").toInt());
|
||||
}
|
||||
|
||||
void TDLibReceiver::processUserFullInfo(const QVariantMap &receivedInformation)
|
||||
{
|
||||
|
||||
LOG("Received UserFullInfo");
|
||||
|
||||
emit userFullInfo(receivedInformation);
|
||||
}
|
||||
|
||||
void TDLibReceiver::processUpdateUserFullInfo(const QVariantMap &receivedInformation)
|
||||
{
|
||||
|
||||
LOG("Received UserFullInfoUpdate");
|
||||
|
||||
emit userFullInfoUpdated(receivedInformation.value("user_id").toString(), receivedInformation.value("user_full_info").toMap());
|
||||
}
|
||||
|
||||
void TDLibReceiver::processBasicGroupFullInfo(const QVariantMap &receivedInformation)
|
||||
{
|
||||
|
||||
LOG("Received BasicGroupFullInfo");
|
||||
const QString groupId = receivedInformation.value(EXTRA).toString();
|
||||
|
||||
emit basicGroupFullInfo(groupId, receivedInformation);
|
||||
}
|
||||
void TDLibReceiver::processUpdateBasicGroupFullInfo(const QVariantMap &receivedInformation)
|
||||
{
|
||||
LOG("Received BasicGroupFullInfoUpdate");
|
||||
const QString groupId = receivedInformation.value("basic_group_id").toString();
|
||||
|
||||
emit basicGroupFullInfoUpdated(groupId, receivedInformation.value("basic_group_full_info").toMap());
|
||||
}
|
||||
|
||||
void TDLibReceiver::processSupergroupFullInfo(const QVariantMap &receivedInformation)
|
||||
{
|
||||
LOG("Received SuperGroupFullInfoUpdate");
|
||||
const QString groupId = receivedInformation.value(EXTRA).toString();
|
||||
|
||||
emit supergroupFullInfo(groupId, receivedInformation);
|
||||
}
|
||||
|
||||
void TDLibReceiver::processUpdateSupergroupFullInfo(const QVariantMap &receivedInformation)
|
||||
{
|
||||
|
||||
LOG("Received SuperGroupFullInfoUpdate");
|
||||
const QString groupId = receivedInformation.value("supergroup_id").toString();
|
||||
|
||||
emit supergroupFullInfoUpdated(groupId, receivedInformation.value("supergroup_full_info").toMap());
|
||||
}
|
||||
|
||||
void TDLibReceiver::processUserProfilePhotos(const QVariantMap &receivedInformation)
|
||||
{
|
||||
const QString extra = receivedInformation.value(EXTRA).toString();
|
||||
emit userProfilePhotos(extra, receivedInformation.value("photos").toList(), receivedInformation.value("total_count").toInt());
|
||||
}
|
||||
|
||||
void TDLibReceiver::processUpdateChatPermissions(const QVariantMap &receivedInformation)
|
||||
{
|
||||
emit chatPermissionsUpdated(receivedInformation.value("chat_id").toString(), receivedInformation.value("permissions").toMap());
|
||||
}
|
||||
|
||||
void TDLibReceiver::processUpdateChatTitle(const QVariantMap &receivedInformation)
|
||||
{
|
||||
|
||||
LOG("Received UpdateChatTitle");
|
||||
emit chatTitleUpdated(receivedInformation.value("chat_id").toString(), receivedInformation.value("title").toString());
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -53,7 +53,7 @@ signals:
|
|||
void basicGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation);
|
||||
void superGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation);
|
||||
void chatOnlineMemberCountUpdated(const QString &chatId, const int &onlineMemberCount);
|
||||
void messagesReceived(const QVariantList &messages);
|
||||
void messagesReceived(const QVariantList &messages, const int &totalCount);
|
||||
void newMessageReceived(const QString &chatId, const QVariantMap &message);
|
||||
void messageInformation(const QString &messageId, const QVariantMap &message);
|
||||
void messageSendSucceeded(const QString &messageId, const QString &oldMessageId, const QVariantMap &message);
|
||||
|
@ -64,12 +64,22 @@ signals:
|
|||
void messageContentUpdated(const QString &chatId, const QString &messageId, const QVariantMap &newContent);
|
||||
void messagesDeleted(const QString &chatId, const QVariantList &messageIds);
|
||||
void chats(const QVariantMap &chats);
|
||||
void chat(const QVariantMap &chats);
|
||||
void recentStickersUpdated(const QVariantList &stickerIds);
|
||||
void stickers(const QVariantList &stickers);
|
||||
void installedStickerSetsUpdated(const QVariantList &stickerSetIds);
|
||||
void stickerSets(const QVariantList &stickerSets);
|
||||
void stickerSet(const QVariantMap &stickerSet);
|
||||
|
||||
void chatMembers(const QString &extra, const QVariantList &members, const int &totalMembers);
|
||||
void userFullInfo(const QVariantMap &userFullInfo);
|
||||
void userFullInfoUpdated(const QString &userId,const QVariantMap &userFullInfo);
|
||||
void basicGroupFullInfo(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void basicGroupFullInfoUpdated(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void supergroupFullInfo(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void supergroupFullInfoUpdated(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void userProfilePhotos(const QString &extra, const QVariantList &photos, const int &totalPhotos);
|
||||
void chatPermissionsUpdated(const QString &chatId, const QVariantMap &chatPermissions);
|
||||
void chatTitleUpdated(const QString &chatId, const QString &title);
|
||||
private:
|
||||
typedef void (TDLibReceiver::*Handler)(const QVariantMap &);
|
||||
|
||||
|
@ -108,11 +118,22 @@ private:
|
|||
void processUpdateMessageContent(const QVariantMap &receivedInformation);
|
||||
void processUpdateDeleteMessages(const QVariantMap &receivedInformation);
|
||||
void processChats(const QVariantMap &receivedInformation);
|
||||
void processChat(const QVariantMap &receivedInformation);
|
||||
void processUpdateRecentStickers(const QVariantMap &receivedInformation);
|
||||
void processStickers(const QVariantMap &receivedInformation);
|
||||
void processUpdateInstalledStickerSets(const QVariantMap &receivedInformation);
|
||||
void processStickerSets(const QVariantMap &receivedInformation);
|
||||
void processStickerSet(const QVariantMap &receivedInformation);
|
||||
void processChatMembers(const QVariantMap &receivedInformation);
|
||||
void processUserFullInfo(const QVariantMap &receivedInformation);
|
||||
void processUpdateUserFullInfo(const QVariantMap &receivedInformation);
|
||||
void processBasicGroupFullInfo(const QVariantMap &receivedInformation);
|
||||
void processUpdateBasicGroupFullInfo(const QVariantMap &receivedInformation);
|
||||
void processSupergroupFullInfo(const QVariantMap &receivedInformation);
|
||||
void processUpdateSupergroupFullInfo(const QVariantMap &receivedInformation);
|
||||
void processUserProfilePhotos(const QVariantMap &receivedInformation);
|
||||
void processUpdateChatPermissions(const QVariantMap &receivedInformation);
|
||||
void processUpdateChatTitle(const QVariantMap &receivedInformation);
|
||||
};
|
||||
|
||||
#endif // TDLIBRECEIVER_H
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -42,6 +42,7 @@
|
|||
namespace {
|
||||
const QString STATUS("status");
|
||||
const QString _TYPE("@type");
|
||||
const QString _EXTRA("@extra");
|
||||
}
|
||||
|
||||
TDLibWrapper::TDLibWrapper(QObject *parent) : QObject(parent)
|
||||
|
@ -76,7 +77,7 @@ TDLibWrapper::TDLibWrapper(QObject *parent) : QObject(parent)
|
|||
connect(this->tdLibReceiver, SIGNAL(basicGroupUpdated(qlonglong, QVariantMap)), this, SLOT(handleBasicGroupUpdated(qlonglong, QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(superGroupUpdated(qlonglong, QVariantMap)), this, SLOT(handleSuperGroupUpdated(qlonglong, QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(chatOnlineMemberCountUpdated(QString, int)), this, SLOT(handleChatOnlineMemberCountUpdated(QString, int)));
|
||||
connect(this->tdLibReceiver, SIGNAL(messagesReceived(QVariantList)), this, SLOT(handleMessagesReceived(QVariantList)));
|
||||
connect(this->tdLibReceiver, SIGNAL(messagesReceived(QVariantList, int)), this, SLOT(handleMessagesReceived(QVariantList, int)));
|
||||
connect(this->tdLibReceiver, SIGNAL(newMessageReceived(QString, QVariantMap)), this, SLOT(handleNewMessageReceived(QString, QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(messageInformation(QString, QVariantMap)), this, SLOT(handleMessageInformation(QString, QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(messageSendSucceeded(QString, QString, QVariantMap)), this, SLOT(handleMessageSendSucceeded(QString, QString, QVariantMap)));
|
||||
|
@ -87,11 +88,24 @@ TDLibWrapper::TDLibWrapper(QObject *parent) : QObject(parent)
|
|||
connect(this->tdLibReceiver, SIGNAL(messageContentUpdated(QString, QString, QVariantMap)), this, SLOT(handleMessageContentUpdated(QString, QString, QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(messagesDeleted(QString, QVariantList)), this, SLOT(handleMessagesDeleted(QString, QVariantList)));
|
||||
connect(this->tdLibReceiver, SIGNAL(chats(QVariantMap)), this, SLOT(handleChats(QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(chat(QVariantMap)), this, SLOT(handleChat(QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(recentStickersUpdated(QVariantList)), this, SLOT(handleRecentStickersUpdated(QVariantList)));
|
||||
connect(this->tdLibReceiver, SIGNAL(stickers(QVariantList)), this, SLOT(handleStickers(QVariantList)));
|
||||
connect(this->tdLibReceiver, SIGNAL(installedStickerSetsUpdated(QVariantList)), this, SLOT(handleInstalledStickerSetsUpdated(QVariantList)));
|
||||
connect(this->tdLibReceiver, SIGNAL(stickerSets(QVariantList)), this, SLOT(handleStickerSets(QVariantList)));
|
||||
connect(this->tdLibReceiver, SIGNAL(stickerSet(QVariantMap)), this, SLOT(handleStickerSet(QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(chatMembers(QString, QVariantList, int)), this, SLOT(handleChatMembers(QString, QVariantList, int)));
|
||||
connect(this->tdLibReceiver, SIGNAL(userFullInfo(QVariantMap)), this, SLOT(handleUserFullInfo(QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(userFullInfoUpdated(QString, QVariantMap)), this, SLOT(handleUserFullInfoUpdated(QString, QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(basicGroupFullInfo(QString, QVariantMap)), this, SLOT(handleBasicGroupFullInfo(QString, QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(basicGroupFullInfoUpdated(QString, QVariantMap)), this, SLOT(handleBasicGroupFullInfoUpdated(QString, QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(supergroupFullInfo(QString, QVariantMap)), this, SLOT(handleSupergroupFullInfo(QString, QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(supergroupFullInfoUpdated(QString, QVariantMap)), this, SLOT(handleSupergroupFullInfoUpdated(QString, QVariantMap)));
|
||||
connect(this->tdLibReceiver, SIGNAL(userProfilePhotos(QString, QVariantList, int)), this, SLOT(handleUserProfilePhotos(QString, QVariantList, int)));
|
||||
connect(this->tdLibReceiver, SIGNAL(userProfilePhotos(QString, QVariantList, int)), this, SLOT(handleUserProfilePhotos(QString, QVariantList, int)));
|
||||
connect(this->tdLibReceiver, SIGNAL(chatPermissionsUpdated(QString, QVariantMap)), this, SLOT(handleChatPermissionsUpdated(QString, QVariantMap)));
|
||||
|
||||
connect(this->tdLibReceiver, SIGNAL(chatTitleUpdated(QString, QString)), this, SLOT(handleChatTitleUpdated(QString, QString)));
|
||||
|
||||
connect(&emojiSearchWorker, SIGNAL(searchCompleted(QString, QVariantList)), this, SLOT(handleEmojiSearchCompleted(QString, QVariantList)));
|
||||
|
||||
|
@ -222,6 +236,15 @@ void TDLibWrapper::closeChat(const QString &chatId)
|
|||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::leaveChat(const QString &chatId)
|
||||
{
|
||||
LOG("Leaving chat " << chatId);
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "leaveChat");
|
||||
requestObject.insert("chat_id", chatId);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::getChatHistory(const QString &chatId, const qlonglong &fromMessageId, const int &offset, const int &limit, const bool &onlyLocal)
|
||||
{
|
||||
LOG("Retrieving chat history" << chatId << fromMessageId << offset << limit << onlyLocal);
|
||||
|
@ -235,13 +258,13 @@ void TDLibWrapper::getChatHistory(const QString &chatId, const qlonglong &fromMe
|
|||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::viewMessage(const QString &chatId, const QString &messageId)
|
||||
void TDLibWrapper::viewMessage(const QString &chatId, const QString &messageId, const bool &force = false)
|
||||
{
|
||||
LOG("Mark message as viewed" << chatId << messageId);
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "viewMessages");
|
||||
requestObject.insert("chat_id", chatId);
|
||||
requestObject.insert("force_read", false);
|
||||
requestObject.insert("force_read", force);
|
||||
QVariantList messageIds;
|
||||
messageIds.append(messageId);
|
||||
requestObject.insert("message_ids", messageIds);
|
||||
|
@ -468,6 +491,137 @@ void TDLibWrapper::getStickerSet(const QString &setId)
|
|||
requestObject.insert("set_id", setId);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
void TDLibWrapper::getSupergroupMembers(const QString &groupId, const int &limit = 200, const int &offset = 0)
|
||||
{
|
||||
LOG("Retrieving SupergroupMembers");
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "getSupergroupMembers");
|
||||
requestObject.insert(_EXTRA, groupId);
|
||||
requestObject.insert("supergroup_id", groupId);
|
||||
requestObject.insert("offset", offset);
|
||||
requestObject.insert("limit", limit);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::getGroupFullInfo(const QString &groupId, const bool &isSuperGroup)
|
||||
{
|
||||
LOG("Retrieving GroupFullInfo");
|
||||
QVariantMap requestObject;
|
||||
if(isSuperGroup) {
|
||||
requestObject.insert(_TYPE, "getSupergroupFullInfo");
|
||||
requestObject.insert("supergroup_id", groupId);
|
||||
} else {
|
||||
requestObject.insert(_TYPE, "getBasicGroupFullInfo");
|
||||
requestObject.insert("basic_group_id", groupId);
|
||||
}
|
||||
requestObject.insert(_EXTRA, groupId);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::getUserFullInfo(const QString &userId)
|
||||
{
|
||||
LOG("Retrieving UserFullInfo");
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "getUserFullInfo");
|
||||
requestObject.insert(_EXTRA, userId);
|
||||
requestObject.insert("user_id", userId);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::createPrivateChat(const QString &userId)
|
||||
{
|
||||
LOG("Creating Private Chat");
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "createPrivateChat");
|
||||
requestObject.insert("user_id", userId);
|
||||
requestObject.insert(_EXTRA, "openDirectly"); //gets matched in qml
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::getGroupsInCommon(const QString &userId, const int &limit, const int &offset)
|
||||
{
|
||||
LOG("Retrieving Groups in Common");
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "getGroupsInCommon");
|
||||
requestObject.insert(_EXTRA, userId);
|
||||
requestObject.insert("user_id", userId);
|
||||
requestObject.insert("offset", offset);
|
||||
requestObject.insert("limit", limit);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::getUserProfilePhotos(const QString &userId, const int &limit, const int &offset)
|
||||
{
|
||||
LOG("Retrieving User Profile Photos");
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "getUserProfilePhotos");
|
||||
requestObject.insert(_EXTRA, userId);
|
||||
requestObject.insert("user_id", userId);
|
||||
requestObject.insert("offset", offset);
|
||||
requestObject.insert("limit", limit);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::setChatPermissions(const QString &chatId, const QVariantMap &chatPermissions)
|
||||
{
|
||||
LOG("Setting Chat Permissions");
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "setChatPermissions");
|
||||
requestObject.insert(_EXTRA, chatId);
|
||||
requestObject.insert("chat_id", chatId);
|
||||
requestObject.insert("permissions", chatPermissions);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::setChatSlowModeDelay(const QString &chatId, const int &delay)
|
||||
{
|
||||
|
||||
LOG("Setting Chat Slow Mode Delay");
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "setChatSlowModeDelay");
|
||||
requestObject.insert("chat_id", chatId);
|
||||
requestObject.insert("slow_mode_delay", delay);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::setChatDescription(const QString &chatId, const QString &description)
|
||||
{
|
||||
LOG("Setting Chat Description");
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "setChatDescription");
|
||||
requestObject.insert("chat_id", chatId);
|
||||
requestObject.insert("description", description);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::setChatTitle(const QString &chatId, const QString &title)
|
||||
{
|
||||
LOG("Setting Chat Title");
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "setChatTitle");
|
||||
requestObject.insert("chat_id", chatId);
|
||||
requestObject.insert("title", title);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::setBio(const QString &bio)
|
||||
{
|
||||
LOG("Setting Bio");
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "setBio");
|
||||
requestObject.insert("bio", bio);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::toggleSupergroupIsAllHistoryAvailable(const QString &groupId, const bool &isAllHistoryAvailable)
|
||||
{
|
||||
LOG("Toggling SupergroupIsAllHistoryAvailable");
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "toggleSupergroupIsAllHistoryAvailable");
|
||||
requestObject.insert("supergroup_id", groupId);
|
||||
requestObject.insert("is_all_history_available", isAllHistoryAvailable);
|
||||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::searchEmoji(const QString &queryString)
|
||||
{
|
||||
|
@ -759,9 +913,9 @@ void TDLibWrapper::handleChatOnlineMemberCountUpdated(const QString &chatId, con
|
|||
emit chatOnlineMemberCountUpdated(chatId, onlineMemberCount);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleMessagesReceived(const QVariantList &messages)
|
||||
void TDLibWrapper::handleMessagesReceived(const QVariantList &messages, const int &totalCount)
|
||||
{
|
||||
emit messagesReceived(messages);
|
||||
emit messagesReceived(messages, totalCount);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleNewMessageReceived(const QString &chatId, const QVariantMap &message)
|
||||
|
@ -814,6 +968,11 @@ void TDLibWrapper::handleChats(const QVariantMap &chats)
|
|||
emit this->chatsReceived(chats);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleChat(const QVariantMap &chat)
|
||||
{
|
||||
emit this->chatReceived(chat);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleRecentStickersUpdated(const QVariantList &stickerIds)
|
||||
{
|
||||
emit this->recentStickersUpdated(stickerIds);
|
||||
|
@ -850,6 +1009,56 @@ void TDLibWrapper::handleEmojiSearchCompleted(const QString &queryString, const
|
|||
emit emojiSearchSuccessful(resultList);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleChatMembers(const QString &extra, const QVariantList &members, const int &totalMembers)
|
||||
{
|
||||
emit this->chatMembersReceived(extra, members, totalMembers);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleUserFullInfo(const QVariantMap &userFullInfo)
|
||||
{
|
||||
emit this->userFullInfoReceived(userFullInfo);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleUserFullInfoUpdated(const QString &userId, const QVariantMap &userFullInfo)
|
||||
{
|
||||
emit this->userFullInfoUpdated(userId, userFullInfo);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleBasicGroupFullInfo(const QString &groupId, const QVariantMap &groupFullInfo)
|
||||
{
|
||||
emit this->basicGroupFullInfoReceived(groupId, groupFullInfo);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleBasicGroupFullInfoUpdated(const QString &groupId, const QVariantMap &groupFullInfo)
|
||||
{
|
||||
emit this->basicGroupFullInfoUpdated(groupId, groupFullInfo);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleSupergroupFullInfo(const QString &groupId, const QVariantMap &groupFullInfo)
|
||||
{
|
||||
emit this->supergroupFullInfoReceived(groupId, groupFullInfo);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleSupergroupFullInfoUpdated(const QString &groupId, const QVariantMap &groupFullInfo)
|
||||
{
|
||||
emit this->supergroupFullInfoUpdated(groupId, groupFullInfo);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleUserProfilePhotos(const QString &extra, const QVariantList &photos, const int &totalPhotos)
|
||||
{
|
||||
emit this->userProfilePhotosReceived(extra, photos, totalPhotos);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleChatPermissionsUpdated(const QString &chatId, const QVariantMap permissions)
|
||||
{
|
||||
emit this->chatPermissionsUpdated(chatId, permissions);
|
||||
}
|
||||
|
||||
void TDLibWrapper::handleChatTitleUpdated(const QString &chatId, const QString title)
|
||||
{
|
||||
emit this->chatTitleUpdated(chatId, title);
|
||||
}
|
||||
|
||||
void TDLibWrapper::setInitialParameters()
|
||||
{
|
||||
LOG("Sending initial parameters to TD Lib");
|
||||
|
@ -867,7 +1076,7 @@ void TDLibWrapper::setInitialParameters()
|
|||
QSettings hardwareSettings("/etc/hw-release", QSettings::NativeFormat);
|
||||
initialParameters.insert("device_model", hardwareSettings.value("NAME", "Unknown Mobile Device").toString());
|
||||
initialParameters.insert("system_version", QSysInfo::prettyProductName());
|
||||
initialParameters.insert("application_version", "0.3");
|
||||
initialParameters.insert("application_version", "0.4");
|
||||
// initialParameters.insert("use_test_dc", true);
|
||||
requestObject.insert("parameters", initialParameters);
|
||||
this->sendRequest(requestObject);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2020 Sebastian J. Wolf
|
||||
Copyright (C) 2020 Sebastian J. Wolf and other contributors
|
||||
|
||||
This file is part of Fernschreiber.
|
||||
|
||||
|
@ -113,8 +113,9 @@ public:
|
|||
Q_INVOKABLE void downloadFile(const QString &fileId);
|
||||
Q_INVOKABLE void openChat(const QString &chatId);
|
||||
Q_INVOKABLE void closeChat(const QString &chatId);
|
||||
Q_INVOKABLE void leaveChat(const QString &chatId);
|
||||
Q_INVOKABLE void getChatHistory(const QString &chatId, const qlonglong &fromMessageId = 0, const int &offset = 0, const int &limit = 50, const bool &onlyLocal = false);
|
||||
Q_INVOKABLE void viewMessage(const QString &chatId, const QString &messageId);
|
||||
Q_INVOKABLE void viewMessage(const QString &chatId, const QString &messageId, const bool &force);
|
||||
Q_INVOKABLE void sendTextMessage(const QString &chatId, const QString &message, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void sendPhotoMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void sendVideoMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId = "0");
|
||||
|
@ -129,6 +130,18 @@ public:
|
|||
Q_INVOKABLE void getRecentStickers();
|
||||
Q_INVOKABLE void getInstalledStickerSets();
|
||||
Q_INVOKABLE void getStickerSet(const QString &setId);
|
||||
Q_INVOKABLE void getSupergroupMembers(const QString &groupId, const int &limit, const int &offset);
|
||||
Q_INVOKABLE void getGroupFullInfo(const QString &groupId, const bool &isSuperGroup);
|
||||
Q_INVOKABLE void getUserFullInfo(const QString &userId);
|
||||
Q_INVOKABLE void createPrivateChat(const QString &userId);
|
||||
Q_INVOKABLE void getGroupsInCommon(const QString &userId, const int &limit, const int &offset);
|
||||
Q_INVOKABLE void getUserProfilePhotos(const QString &userId, const int &limit, const int &offset);
|
||||
Q_INVOKABLE void setChatPermissions(const QString &chatId, const QVariantMap &chatPermissions);
|
||||
Q_INVOKABLE void setChatSlowModeDelay(const QString &chatId, const int &delay);
|
||||
Q_INVOKABLE void setChatDescription(const QString &chatId, const QString &description);
|
||||
Q_INVOKABLE void setChatTitle(const QString &chatId, const QString &title);
|
||||
Q_INVOKABLE void setBio(const QString &bio);
|
||||
Q_INVOKABLE void toggleSupergroupIsAllHistoryAvailable(const QString &groupId, const bool &isAllHistoryAvailable);
|
||||
|
||||
// Others (candidates for extraction ;))
|
||||
Q_INVOKABLE void searchEmoji(const QString &queryString);
|
||||
|
@ -155,7 +168,7 @@ signals:
|
|||
void basicGroupUpdated(qlonglong groupId);
|
||||
void superGroupUpdated(qlonglong groupId);
|
||||
void chatOnlineMemberCountUpdated(const QString &chatId, const int &onlineMemberCount);
|
||||
void messagesReceived(const QVariantList &messages);
|
||||
void messagesReceived(const QVariantList &messages, const int &totalCount);
|
||||
void newMessageReceived(const QString &chatId, const QVariantMap &message);
|
||||
void copyToDownloadsSuccessful(const QString &fileName, const QString &filePath);
|
||||
void copyToDownloadsError(const QString &fileName, const QString &filePath);
|
||||
|
@ -168,12 +181,23 @@ signals:
|
|||
void messageContentUpdated(const QString &chatId, const QString &messageId, const QVariantMap &newContent);
|
||||
void messagesDeleted(const QString &chatId, const QVariantList &messageIds);
|
||||
void chatsReceived(const QVariantMap &chats);
|
||||
void chatReceived(const QVariantMap &chat);
|
||||
void recentStickersUpdated(const QVariantList &stickerIds);
|
||||
void stickersReceived(const QVariantList &stickers);
|
||||
void installedStickerSetsUpdated(const QVariantList &stickerSetIds);
|
||||
void stickerSetsReceived(const QVariantList &stickerSets);
|
||||
void stickerSetReceived(const QVariantMap &stickerSet);
|
||||
void emojiSearchSuccessful(const QVariantList &result);
|
||||
void chatMembersReceived(const QString &extra, const QVariantList &members, const int &totalMembers);
|
||||
void userFullInfoReceived(const QVariantMap &userFullInfo);
|
||||
void userFullInfoUpdated(const QString &userId, const QVariantMap &userFullInfo);
|
||||
void basicGroupFullInfoReceived(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void supergroupFullInfoReceived(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void basicGroupFullInfoUpdated(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void supergroupFullInfoUpdated(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void userProfilePhotosReceived(const QString &extra, const QVariantList &photos, const int &totalPhotos);
|
||||
void chatPermissionsUpdated(const QString &chatId, const QVariantMap &permissions);
|
||||
void chatTitleUpdated(const QString &chatId, const QString &title);
|
||||
|
||||
public slots:
|
||||
void handleVersionDetected(const QString &version);
|
||||
|
@ -193,7 +217,7 @@ public slots:
|
|||
void handleBasicGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation);
|
||||
void handleSuperGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation);
|
||||
void handleChatOnlineMemberCountUpdated(const QString &chatId, const int &onlineMemberCount);
|
||||
void handleMessagesReceived(const QVariantList &messages);
|
||||
void handleMessagesReceived(const QVariantList &messages, const int &totalCount);
|
||||
void handleNewMessageReceived(const QString &chatId, const QVariantMap &message);
|
||||
void handleMessageInformation(const QString &messageId, const QVariantMap &message);
|
||||
void handleMessageSendSucceeded(const QString &messageId, const QString &oldMessageId, const QVariantMap &message);
|
||||
|
@ -204,12 +228,23 @@ public slots:
|
|||
void handleMessageContentUpdated(const QString &chatId, const QString &messageId, const QVariantMap &newContent);
|
||||
void handleMessagesDeleted(const QString &chatId, const QVariantList &messageIds);
|
||||
void handleChats(const QVariantMap &chats);
|
||||
void handleChat(const QVariantMap &chat);
|
||||
void handleRecentStickersUpdated(const QVariantList &stickerIds);
|
||||
void handleStickers(const QVariantList &stickers);
|
||||
void handleInstalledStickerSetsUpdated(const QVariantList &stickerSetIds);
|
||||
void handleStickerSets(const QVariantList &stickerSets);
|
||||
void handleStickerSet(const QVariantMap &stickerSet);
|
||||
void handleEmojiSearchCompleted(const QString &queryString, const QVariantList &resultList);
|
||||
void handleChatMembers(const QString &extra, const QVariantList &members, const int &totalMembers);
|
||||
void handleUserFullInfo(const QVariantMap &userFullInfo);
|
||||
void handleUserFullInfoUpdated(const QString &userId, const QVariantMap &userFullInfo);
|
||||
void handleBasicGroupFullInfo(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void handleBasicGroupFullInfoUpdated(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void handleSupergroupFullInfo(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void handleSupergroupFullInfoUpdated(const QString &groupId, const QVariantMap &groupFullInfo);
|
||||
void handleUserProfilePhotos(const QString &extra, const QVariantList &photos, const int &totalPhotos);
|
||||
void handleChatPermissionsUpdated(const QString &chatId, const QVariantMap permissions);
|
||||
void handleChatTitleUpdated(const QString &chatId, const QString title);
|
||||
|
||||
private:
|
||||
void setInitialParameters();
|
||||
|
|
|
@ -87,6 +87,150 @@
|
|||
<translation>%1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Stummschaltung des Chats aufheben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Chat stummschalten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>Unbekannt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation>Der Einladungslink wurde in die Zwischenablage kopiert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 Mitglieder, %2 online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation>%1 Abonnenten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation>%1 Mitglieder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Group</source>
|
||||
<translation>Gruppe verlassen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation>Verlasse Gruppe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation>Info</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation>Telefonnummer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation>Einladungslink</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation>Es gibt noch keinen Informationstext.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation>Chattitel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation>Geben Sie 1-126 Zeichen ein</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemMembersGroups</name>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Sie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading common chats…</source>
|
||||
<comment>chats you have in common with a user</comment>
|
||||
<translation>Lade gemeinsame Chats…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>Unbekannt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation>Gruppen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation>Mitglieder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation>Lade Gruppenmitglieder…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any groups in common with this user.</source>
|
||||
<translation>Sie haben mit diesem Benutzer keine gemeinsamen Gruppen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This group is empty.</source>
|
||||
<translation>Diese Gruppe ist leer.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation>Einstellungen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatListViewItem</name>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>Unbekannt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Sie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Stummschaltung des Chats aufheben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Chat stummschalten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Info</source>
|
||||
<translation>Benutzerinfos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group Info</source>
|
||||
<translation>Gruppeninfos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark all messages as read</source>
|
||||
<translation>Nachrichten als gelesen markieren</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
|
@ -97,30 +241,6 @@
|
|||
<source>Your message</source>
|
||||
<translation>Ihre Nachricht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation>war niemals online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation>offline, zuletzt online im letzten Monat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation>offline, zuletzt online in der letzten Woche</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation>offline, zuletzt online: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation>online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation>offline, war neulich online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 Mitglieder, %2 online</translation>
|
||||
|
@ -177,6 +297,10 @@
|
|||
<source>Forwarded Message</source>
|
||||
<translation>Weitergeleitete Nachricht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This chat is empty.</source>
|
||||
<translation>Dieser Chat ist leer.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
|
@ -232,6 +356,74 @@
|
|||
<translation>Dokument öffnen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditGroupChatPermissionsColumn</name>
|
||||
<message>
|
||||
<source>Group Member Permissions</source>
|
||||
<comment>what can normal group members do</comment>
|
||||
<translation>Berechtigungen der Gruppenmitglieder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Nachrichten senden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Media Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Medien senden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Other Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Andere Nachrichten senden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Web Page Previews</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Webseiten-Vorschau hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change Chat Info</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Chatinformation ändern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Users</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Benutzer einladen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pin Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Nachrichten anpinnen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Members</source>
|
||||
<comment>what can new group members do</comment>
|
||||
<translation>Neue Mitglieder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New members can see older messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Neue Mitglieder können ältere Nachrichten sehen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditSuperGroupSlowModeColumn</name>
|
||||
<message>
|
||||
<source>Slow Mode</source>
|
||||
<translation>Langsamer Modus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Off</source>
|
||||
<translation>Aus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set how long every chat member has to wait between Messages</source>
|
||||
<translation>Legen Sie fest, wie lange jedes Mitglied zwischen zwei Nachrichten warten muss</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FernschreiberUtils</name>
|
||||
<message>
|
||||
|
@ -341,6 +533,15 @@
|
|||
<source>sent a venue</source>
|
||||
<translation>hat einen Ort geschickt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<comment>myself</comment>
|
||||
<translation>haben den Chattitel geändert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<translation>hat den Chattitel geändert</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ImagePage</name>
|
||||
|
@ -422,6 +623,10 @@
|
|||
<source>User Registration</source>
|
||||
<translation>Benutzerregistrierung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the international format, e.g. %1</source>
|
||||
<translation>Nutzen Sie das internationale Format, z.B. %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LocationPreview</name>
|
||||
|
@ -467,22 +672,10 @@
|
|||
<source>Unknown</source>
|
||||
<translation>Unbekannt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Sie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading chat list...</source>
|
||||
<translation>Lade Chatliste...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Stummschaltung des Chats aufheben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Chat stummschalten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<translation>Einstellungen</translation>
|
||||
|
@ -718,5 +911,58 @@
|
|||
<comment>myself</comment>
|
||||
<translation>haben diesen Chat verlassen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation>war niemals online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation>offline, zuletzt online im letzten Monat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation>offline, zuletzt online in der letzten Woche</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation>offline, zuletzt online: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation>online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation>offline, war neulich online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Admin</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation>Administrator</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation>Verbannt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creator</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation>Urheber</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restricted</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation>Eingeschränkt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<comment>myself</comment>
|
||||
<translation>haben den Chattitel zu %1 geändert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<translation>hat den Chattitel zu %1 geändert</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -87,6 +87,150 @@
|
|||
<translation>%1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">habilitar notificación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">deshabilitar notificación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished">%1 miembros, %2 en línea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation type="unfinished">%1 suscriptores</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation type="unfinished">%1 miembros</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Group</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemMembersGroups</name>
|
||||
<message>
|
||||
<source>Loading common chats…</source>
|
||||
<comment>chats you have in common with a user</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any groups in common with this user.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This group is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation type="unfinished">Ajustes</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatListViewItem</name>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">habilitar notificación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">deshabilitar notificación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark all messages as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
|
@ -97,30 +241,6 @@
|
|||
<source>Your message</source>
|
||||
<translation>Escribir mensaje</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation>nunca estuvo en línea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation>sin línea, hace en línea: hace 1 mes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation>sin línea, hace en línea: hace 1 semana</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation>sin línea, hace en línea: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation>en línea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation>sin línea, estuvo en línea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 miembros, %2 en línea</translation>
|
||||
|
@ -177,6 +297,10 @@
|
|||
<source>Forwarded Message</source>
|
||||
<translation>Mensaje reenviado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This chat is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
|
@ -232,6 +356,74 @@
|
|||
<translation>Abrir Documento</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditGroupChatPermissionsColumn</name>
|
||||
<message>
|
||||
<source>Group Member Permissions</source>
|
||||
<comment>what can normal group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Media Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Other Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Web Page Previews</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change Chat Info</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Users</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pin Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Members</source>
|
||||
<comment>what can new group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New members can see older messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditSuperGroupSlowModeColumn</name>
|
||||
<message>
|
||||
<source>Slow Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Off</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set how long every chat member has to wait between Messages</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FernschreiberUtils</name>
|
||||
<message>
|
||||
|
@ -341,6 +533,15 @@
|
|||
<source>sent a venue</source>
|
||||
<translation>envió un lugar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ImagePage</name>
|
||||
|
@ -422,6 +623,10 @@
|
|||
<source>User Registration</source>
|
||||
<translation>Registro de usuario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the international format, e.g. %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LocationPreview</name>
|
||||
|
@ -467,22 +672,10 @@
|
|||
<source>Unknown</source>
|
||||
<translation>desconocido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Usted</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading chat list...</source>
|
||||
<translation>cargando lista de charla...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Habilitar notificación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Deshabilitar notificación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<translation>Ajustes</translation>
|
||||
|
@ -718,5 +911,58 @@
|
|||
<comment>myself</comment>
|
||||
<translation>dejé esta charla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation type="unfinished">nunca estuvo en línea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation type="unfinished">sin línea, hace en línea: hace 1 mes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation type="unfinished">sin línea, hace en línea: hace 1 semana</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation type="unfinished">sin línea, hace en línea: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation type="unfinished">en línea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation type="unfinished">sin línea, estuvo en línea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Admin</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creator</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restricted</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -87,6 +87,150 @@
|
|||
<translation>%1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Poista keskustelun vaimennus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Vaimenna keskustelu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Tuntematon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished">%1 jäsentä, %2 paikalla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation type="unfinished">%1 tilaajaa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation type="unfinished">%1 jäsentä</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Group</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemMembersGroups</name>
|
||||
<message>
|
||||
<source>Loading common chats…</source>
|
||||
<comment>chats you have in common with a user</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Tuntematon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">Sinä</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any groups in common with this user.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This group is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation type="unfinished">Asetukset</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatListViewItem</name>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Tuntematon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">Sinä</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Poista keskustelun vaimennus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Vaimenna keskustelu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark all messages as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
|
@ -97,30 +241,6 @@
|
|||
<source>Your message</source>
|
||||
<translation>Viestisi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation>Ei ole ollut koskaan paikalla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation>Poissa. Nähty viimeksi: viime kuussa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation>Poissa. Nähty viimeksi: viime viikolla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation>Poissa. Nähty viimeksi: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation>paikalla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation>poissa, oli hetki sitten paikalla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 jäsentä, %2 paikalla</translation>
|
||||
|
@ -177,6 +297,10 @@
|
|||
<source>Forwarded Message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This chat is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
|
@ -232,6 +356,74 @@
|
|||
<translation>Avaa dokumentti</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditGroupChatPermissionsColumn</name>
|
||||
<message>
|
||||
<source>Group Member Permissions</source>
|
||||
<comment>what can normal group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Media Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Other Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Web Page Previews</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change Chat Info</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Users</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pin Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Members</source>
|
||||
<comment>what can new group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New members can see older messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditSuperGroupSlowModeColumn</name>
|
||||
<message>
|
||||
<source>Slow Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Off</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set how long every chat member has to wait between Messages</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FernschreiberUtils</name>
|
||||
<message>
|
||||
|
@ -341,6 +533,15 @@
|
|||
<source>Unsupported message: %1</source>
|
||||
<translation>Viestityyppiä ei tueta: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ImagePage</name>
|
||||
|
@ -422,6 +623,10 @@
|
|||
<source>Register User</source>
|
||||
<translation>Rekisteröi käyttäjätili</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the international format, e.g. %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LocationPreview</name>
|
||||
|
@ -467,22 +672,10 @@
|
|||
<source>Unknown</source>
|
||||
<translation>Tuntematon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Sinä</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading chat list...</source>
|
||||
<translation>Ladataan keskustelulistaa...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Poista keskustelun vaimennus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Vaimenna keskustelu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<translation>Asetukset</translation>
|
||||
|
@ -718,5 +911,58 @@
|
|||
<comment>myself</comment>
|
||||
<translation>poistuit keskustelusta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation type="unfinished">Ei ole ollut koskaan paikalla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation type="unfinished">Poissa. Nähty viimeksi: viime kuussa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation type="unfinished">Poissa. Nähty viimeksi: viime viikolla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation type="unfinished">Poissa. Nähty viimeksi: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation type="unfinished">paikalla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation type="unfinished">poissa, oli hetki sitten paikalla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Admin</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creator</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restricted</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -87,6 +87,150 @@
|
|||
<translation>%1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Csevegés némítás feloldása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Csevegés némítása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Ismeretlen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished">%1 tag, %2 online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation type="unfinished">%1 feliratkozott</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation type="unfinished">%1 tag</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Group</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemMembersGroups</name>
|
||||
<message>
|
||||
<source>Loading common chats…</source>
|
||||
<comment>chats you have in common with a user</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Ismeretlen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">Te</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any groups in common with this user.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This group is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation type="unfinished">Beállítások</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatListViewItem</name>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Ismeretlen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">Te</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Csevegés némítás feloldása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Csevegés némítása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark all messages as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
|
@ -97,30 +241,6 @@
|
|||
<source>Your message</source>
|
||||
<translation>Üzeneted</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation>soha nem volt online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation>offline, utoljára online: múlt hónapban</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation>offline, utoljára online: múlt héten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation>offline, utoljára online: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation>online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation>offline, nemrégen volt online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 tag, %2 online</translation>
|
||||
|
@ -177,6 +297,10 @@
|
|||
<source>Forwarded Message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This chat is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
|
@ -232,6 +356,74 @@
|
|||
<translation>Dokumentum megyitása</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditGroupChatPermissionsColumn</name>
|
||||
<message>
|
||||
<source>Group Member Permissions</source>
|
||||
<comment>what can normal group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Media Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Other Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Web Page Previews</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change Chat Info</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Users</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pin Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Members</source>
|
||||
<comment>what can new group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New members can see older messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditSuperGroupSlowModeColumn</name>
|
||||
<message>
|
||||
<source>Slow Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Off</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set how long every chat member has to wait between Messages</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FernschreiberUtils</name>
|
||||
<message>
|
||||
|
@ -341,6 +533,15 @@
|
|||
<source>sent a venue</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ImagePage</name>
|
||||
|
@ -422,6 +623,10 @@
|
|||
<source>User Registration</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the international format, e.g. %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LocationPreview</name>
|
||||
|
@ -467,22 +672,10 @@
|
|||
<source>Unknown</source>
|
||||
<translation>Ismeretlen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Te</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading chat list...</source>
|
||||
<translation>Csevegés lista betöltése...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Csevegés némítás feloldása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Csevegés némítása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<translation>Beállítások</translation>
|
||||
|
@ -718,5 +911,58 @@
|
|||
<comment>myself</comment>
|
||||
<translation type="unfinished">kilépett a csevegésből</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation type="unfinished">soha nem volt online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation type="unfinished">offline, utoljára online: múlt hónapban</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation type="unfinished">offline, utoljára online: múlt héten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation type="unfinished">offline, utoljára online: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation type="unfinished">online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation type="unfinished">offline, nemrégen volt online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Admin</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creator</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restricted</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -87,6 +87,150 @@
|
|||
<translation>%1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Leave Group</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Riattiva suoni chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Silenzia chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Sconosciuto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished">%1 membri, %2 online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation type="unfinished">%1 abbonati</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation type="unfinished">%1 membri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemMembersGroups</name>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading common chats…</source>
|
||||
<comment>chats you have in common with a user</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">Tu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Sconosciuto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any groups in common with this user.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This group is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation type="unfinished">Impostazioni</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatListViewItem</name>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Sconosciuto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">Tu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Riattiva suoni chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Silenzia chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark all messages as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
|
@ -97,30 +241,6 @@
|
|||
<source>Your message</source>
|
||||
<translation>Tuo messaggio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation>mai online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation>offline, ultimo accesso il mese scorso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation>offline, ultimo accesso la settimana scorsa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation>offline, ultimo accesso: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation>online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation>offline, online di recente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 membri, %2 online</translation>
|
||||
|
@ -177,6 +297,10 @@
|
|||
<source>Forwarded Message</source>
|
||||
<translation>Messaggio inoltrato</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This chat is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
|
@ -232,6 +356,74 @@
|
|||
<translation>Apri documento</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditGroupChatPermissionsColumn</name>
|
||||
<message>
|
||||
<source>Group Member Permissions</source>
|
||||
<comment>what can normal group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Media Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Other Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Web Page Previews</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change Chat Info</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Users</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pin Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Members</source>
|
||||
<comment>what can new group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New members can see older messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditSuperGroupSlowModeColumn</name>
|
||||
<message>
|
||||
<source>Slow Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Off</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set how long every chat member has to wait between Messages</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FernschreiberUtils</name>
|
||||
<message>
|
||||
|
@ -341,6 +533,15 @@
|
|||
<source>sent a venue</source>
|
||||
<translation>ha inviato la posizione</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ImagePage</name>
|
||||
|
@ -422,6 +623,10 @@
|
|||
<source>User Registration</source>
|
||||
<translation>Registrazione utente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the international format, e.g. %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LocationPreview</name>
|
||||
|
@ -467,22 +672,10 @@
|
|||
<source>Unknown</source>
|
||||
<translation>Sconosciuto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Tu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading chat list...</source>
|
||||
<translation>Carica lista chat...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Riattiva suoni chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Silenzia chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<translation>Impostazioni</translation>
|
||||
|
@ -718,5 +911,58 @@
|
|||
<comment>myself</comment>
|
||||
<translation>hanno lasciato questa chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation type="unfinished">mai online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation type="unfinished">offline, ultimo accesso il mese scorso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation type="unfinished">offline, ultimo accesso la settimana scorsa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation type="unfinished">offline, ultimo accesso: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation type="unfinished">online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation type="unfinished">offline, online di recente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Admin</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creator</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restricted</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -87,6 +87,150 @@
|
|||
<translation>%1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Wyłącz wyciszenie czatu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Wycisz czat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Nieznany</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished">$1 członków, %2 online </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation type="unfinished">%1 subskrybentów</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation type="unfinished">%1 czlonków</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Group</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemMembersGroups</name>
|
||||
<message>
|
||||
<source>Loading common chats…</source>
|
||||
<comment>chats you have in common with a user</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Nieznany</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">Ty</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any groups in common with this user.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This group is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation type="unfinished">Ustawienia</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatListViewItem</name>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Nieznany</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">Ty</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Wyłącz wyciszenie czatu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Wycisz czat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark all messages as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
|
@ -97,30 +241,6 @@
|
|||
<source>Your message</source>
|
||||
<translation>Twoja wiadomość</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation>nigdy nie był online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation>offline, ostatnio online: w zeszłym miesiącu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation>offline, ostatnio online: w zeszłym tygodniu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation>offline, ostatnio online: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation>online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation>offline, był niedawno online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>$1 członków, %2 online </translation>
|
||||
|
@ -177,6 +297,10 @@
|
|||
<source>Forwarded Message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This chat is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
|
@ -232,16 +356,84 @@
|
|||
<translation>Otwórz dokument</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditGroupChatPermissionsColumn</name>
|
||||
<message>
|
||||
<source>Group Member Permissions</source>
|
||||
<comment>what can normal group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Media Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Other Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Web Page Previews</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change Chat Info</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Users</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pin Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Members</source>
|
||||
<comment>what can new group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New members can see older messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditSuperGroupSlowModeColumn</name>
|
||||
<message>
|
||||
<source>Slow Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Off</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set how long every chat member has to wait between Messages</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FernschreiberUtils</name>
|
||||
<message>
|
||||
<source>sent a picture</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">wyślij obraz</translation>
|
||||
<translation>wysłałem obraz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a picture</source>
|
||||
<translation type="unfinished">wyślij obraz</translation>
|
||||
<translation>wysłał obraz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a video</source>
|
||||
|
@ -250,87 +442,87 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>sent a video</source>
|
||||
<translation type="unfinished">wyślij film</translation>
|
||||
<translation>wysłał film</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an animation</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">wyślij animację</translation>
|
||||
<translation>wysłałem animację</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an animation</source>
|
||||
<translation type="unfinished">wyślij animację</translation>
|
||||
<translation>wysłał animację</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a voice note</source>
|
||||
<translation type="unfinished">wyślij notatke głosową</translation>
|
||||
<translation>wysłał notatke głosową</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a document</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">wyślij dokument</translation>
|
||||
<translation>wysłałem dokument</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a document</source>
|
||||
<translation type="unfinished">wyślij dokument</translation>
|
||||
<translation>wysłał dokument</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a location</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">wyślij lokalizację</translation>
|
||||
<translation>wysłałem lokalizację</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a location</source>
|
||||
<translation type="unfinished">wyślij lokalizację</translation>
|
||||
<translation>wysłał lokalizację</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>have registered with Telegram</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>zostałem zarejestrowany w Telegram</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>has registered with Telegram</source>
|
||||
<translation type="unfinished">zarejestrował się w Telegramie</translation>
|
||||
<translation>zarejestrował się w Telegramie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>joined this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">dołaczył do tego czatu</translation>
|
||||
<translation>dołaczyłem do tego czatu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>joined this chat</source>
|
||||
<translation type="unfinished">dołaczył do tego czatu</translation>
|
||||
<translation>dołaczył do tego czatu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>were added to this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>zostałem dodany do tego czatu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was added to this chat</source>
|
||||
<translation type="unfinished">został dodany do tego czatu</translation>
|
||||
<translation>został dodany do tego czatu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>left this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">opuścił ten czat</translation>
|
||||
<translation>opuściłem ten czat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>left this chat</source>
|
||||
<translation type="unfinished">opuścił ten czat</translation>
|
||||
<translation>opuścił ten czat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported message: %1</source>
|
||||
<translation type="unfinished">Nieobsługiwana wiadomość: %1</translation>
|
||||
<translation>Nieobsługiwana wiadomość: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sticker: %1</source>
|
||||
<translation type="unfinished">Naklejka: %1</translation>
|
||||
<translation>Naklejka: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a voice note</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">wyślij notatke głosową</translation>
|
||||
<translation>wysłałem notatke głosową</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a venue</source>
|
||||
|
@ -341,6 +533,15 @@
|
|||
<source>sent a venue</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ImagePage</name>
|
||||
|
@ -408,18 +609,22 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Register User</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Zarejestruj użytkownika</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter your First Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Wprowadź swoje imię</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter your Last Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>wprowadź swoje nazwisko</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Registration</source>
|
||||
<translation>Rejestracja użytkownika</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the international format, e.g. %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -427,7 +632,7 @@
|
|||
<name>LocationPreview</name>
|
||||
<message>
|
||||
<source>Install Pure Maps to inspect this location.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Zainstaluj Pure Maps, aby sprawdzić tę lokalizację.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -467,29 +672,17 @@
|
|||
<source>Unknown</source>
|
||||
<translation>Nieznany</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Ty</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading chat list...</source>
|
||||
<translation>Ładowanie listy czatu...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Wyłącz wyciszenie czatu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Wycisz czat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<translation>Ustawienia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any chats yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">Nie masz jeszcze żadnych czatów.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -512,11 +705,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Appearance</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Wygląd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show stickers as images</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Pokaż naklejki jako obrazy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show background for stickers and align them centrally like images</source>
|
||||
|
@ -547,11 +740,11 @@
|
|||
<name>StickerPicker</name>
|
||||
<message>
|
||||
<source>Recently used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Ostatnio użyty</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading stickers...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Ładowanie naklejek...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -662,27 +855,27 @@
|
|||
<message>
|
||||
<source>sent a picture</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">wyślij obraz</translation>
|
||||
<translation>wysłałem obraz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a video</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">wyślij film</translation>
|
||||
<translation>wysłałem film</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an animation</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">wyślij animację</translation>
|
||||
<translation>wysłałem animację</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an audio</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">wyślij dźwięk</translation>
|
||||
<translation>wysłałem dźwięk</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a voice note</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">wyślij notatke głosową</translation>
|
||||
<translation>wysłałem notatke głosową</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a document</source>
|
||||
|
@ -701,22 +894,75 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>have registered with Telegram</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>został zarejestowany w Telegram</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>joined this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">dołaczył do tego czatu</translation>
|
||||
<translation>dołaczyłem do tego czatu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>were added to this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>zostałem dodany do czatu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>left this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">opuścił ten czat</translation>
|
||||
<translation>opuściłem ten czat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation type="unfinished">nigdy nie był online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation type="unfinished">offline, ostatnio online: w zeszłym miesiącu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation type="unfinished">offline, ostatnio online: w zeszłym tygodniu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation type="unfinished">offline, ostatnio online: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation type="unfinished">online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation type="unfinished">offline, był niedawno online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Admin</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creator</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restricted</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -87,6 +87,150 @@
|
|||
<translation>%1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Включить уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Выключить уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished">%1 участников, %2 онлайн</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation type="unfinished">%1 подписчиков</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation type="unfinished">%1 участников</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Group</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemMembersGroups</name>
|
||||
<message>
|
||||
<source>Loading common chats…</source>
|
||||
<comment>chats you have in common with a user</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">Вы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any groups in common with this user.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This group is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation type="unfinished">Настройки</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatListViewItem</name>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">Вы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Включить уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Выключить уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark all messages as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
|
@ -97,30 +241,6 @@
|
|||
<source>Your message</source>
|
||||
<translation>Ваше сообщение</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation>никогда не был(а) онлайн</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation>офлайн, был(а) онлайн: в прошлом месяце</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation>офлайн, был(а) онлайн: на прошлой неделе</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation>офлайн, был(а) онлайн: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation>онлайн</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation>офлайн, недавно был(а) онлайн</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 участников, %2 онлайн</translation>
|
||||
|
@ -177,6 +297,10 @@
|
|||
<source>Forwarded Message</source>
|
||||
<translation>Пересланное сообщение</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This chat is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
|
@ -232,6 +356,74 @@
|
|||
<translation>Открыть документ</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditGroupChatPermissionsColumn</name>
|
||||
<message>
|
||||
<source>Group Member Permissions</source>
|
||||
<comment>what can normal group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Media Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Other Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Web Page Previews</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change Chat Info</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Users</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pin Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Members</source>
|
||||
<comment>what can new group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New members can see older messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditSuperGroupSlowModeColumn</name>
|
||||
<message>
|
||||
<source>Slow Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Off</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set how long every chat member has to wait between Messages</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FernschreiberUtils</name>
|
||||
<message>
|
||||
|
@ -341,6 +533,15 @@
|
|||
<source>sent a venue</source>
|
||||
<translation>отправил(а) место встречи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ImagePage</name>
|
||||
|
@ -422,6 +623,10 @@
|
|||
<source>Register User</source>
|
||||
<translation>Зарегистрироваться</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the international format, e.g. %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LocationPreview</name>
|
||||
|
@ -467,22 +672,10 @@
|
|||
<source>Unknown</source>
|
||||
<translation>Неизвестный</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Вы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading chat list...</source>
|
||||
<translation>Загрузка чатов...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Включить уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Выключить уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<translation>Настройки</translation>
|
||||
|
@ -718,5 +911,58 @@
|
|||
<comment>myself</comment>
|
||||
<translation>покинул(а) чат</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation type="unfinished">никогда не был(а) онлайн</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation type="unfinished">офлайн, был(а) онлайн: в прошлом месяце</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation type="unfinished">офлайн, был(а) онлайн: на прошлой неделе</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation type="unfinished">офлайн, был(а) онлайн: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation type="unfinished">онлайн</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation type="unfinished">офлайн, недавно был(а) онлайн</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Admin</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creator</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restricted</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
968
translations/harbour-fernschreiber-sv.ts
Normal file
968
translations/harbour-fernschreiber-sv.ts
Normal file
|
@ -0,0 +1,968 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="sv">
|
||||
<context>
|
||||
<name>AboutPage</name>
|
||||
<message>
|
||||
<source>About Fernschreiber</source>
|
||||
<translation>Om Fernschreiber</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A Telegram client for Sailfish OS</source>
|
||||
<translation>En Telegram-klient för Sailfish OS</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send E-Mail</source>
|
||||
<translation>Skicka e-post</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Licensed under GNU GPLv3</source>
|
||||
<translation>Licensierad under GNU GPLv3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sources on GitHub</source>
|
||||
<translation>Källor på GitHub</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Terms of Service</source>
|
||||
<translation>Tjänstevillkor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Privacy Policy</source>
|
||||
<translation>Sekretesspolicy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Credits</source>
|
||||
<translation>Medverkande</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This project uses the Telegram Database Library (TDLib). Thanks for making it available under the conditions of the Boost Software License 1.0!</source>
|
||||
<translation>Detta projekt använder Telegram Database Library (TDLib). Tack för att det gjorts tillgängligt under villkoren för Boost Software License 1.0!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open Telegram Database Library on GitHub</source>
|
||||
<translation>Öppna Telegram Database Library på GitHub</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>About Telegram</source>
|
||||
<translation>Om Telegram</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This product uses the Telegram API but is not endorsed or certified by Telegram.</source>
|
||||
<translation>Denna produkt använder Telegrams API men är inte godkänt eller certifierat av Telegram.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TDLib version %1</source>
|
||||
<translation>TDLib version %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Logged in as %1</source>
|
||||
<translation>Inloggad som %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone number: +%1</source>
|
||||
<translation>Telefonnummer: +%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This project uses twemoji. Copyright 2018 Twitter, Inc. and other contributors. Thanks for making it available under the conditions of the MIT License (coding) and CC-BY 4.0 (graphics)!</source>
|
||||
<translation>Detta projekt använder twemoji. Copyright 2018 Twitter, Inc. och andra medverkande. Tack för att det gjorts tillgängligt under villkoren för MIT License (kodning) och CC-BY 4.0 (grafik)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open twemoji on GitHub</source>
|
||||
<translation>Öppna twemoji på GitHub</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>By Sebastian J. Wolf and <a href="https://github.com/Wunderfitz/harbour-fernschreiber#contributions">other contributors</a></source>
|
||||
<translation>Av Sebastian J. Wolf och <a href="https://github.com/Wunderfitz/harbour-fernschreiber#contributions">andra medverkande</a></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>BackgroundProgressIndicator</name>
|
||||
<message>
|
||||
<source>%1 %</source>
|
||||
<translation>%1 %</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1</source>
|
||||
<translation>%1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Slå på chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Stäng av chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>Okänd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation>Inbjudningslänken har kopierats till urklipp.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 medlemmar, %2 inloggade</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation>%1 prenumeranter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation>%1 medlemmar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Group</source>
|
||||
<translation>Lämna gruppen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation>Lämnar chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation>Info</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation>Telefonnummer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation>Inbjudningslänk</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation>Det finns ingen informationstext än.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation>Chattnamn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation>Ange 1-128 tecken</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemMembersGroups</name>
|
||||
<message>
|
||||
<source>Loading common chats…</source>
|
||||
<comment>chats you have in common with a user</comment>
|
||||
<translation>Läser in gemensamma chattar...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>Okänd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation>Grupper</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation>Medlemmar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation>Läser in gruppmedlemmar...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Du</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any groups in common with this user.</source>
|
||||
<translation>Du har inga grupper gemensamt med denna användare.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This group is empty.</source>
|
||||
<translation>Denna grupp är tom.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation>Inställningar</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatListViewItem</name>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>Okänd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Du</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Slå på chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Stäng av chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Info</source>
|
||||
<translation>Användarinfo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group Info</source>
|
||||
<translation>Gruppinfo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark all messages as read</source>
|
||||
<translation>Markera alla meddelanden som lästa</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>Okänd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Your message</source>
|
||||
<translation>Ditt meddelande</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 medlem(mar), %2 inloggad(e)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation>%1 medlem(mar)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation>%1 prenumerant(er)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Reply to Message</source>
|
||||
<translation>Svara på meddelandet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Du</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading messages...</source>
|
||||
<translation>Läser in meddelanden...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Slå på chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Stäng av chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Edit Message</source>
|
||||
<translation>Redigera meddelandet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>edited</source>
|
||||
<translation>redigerade</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Deleting message</source>
|
||||
<translation>Tar bort meddelande</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete Message</source>
|
||||
<translation>Ta bort meddelandet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Uploading...</source>
|
||||
<translation>Ladda upp...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Forwarded Message</source>
|
||||
<translation>Vidarebefordrat meddelande</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This chat is empty.</source>
|
||||
<translation>Denna chatt är tom.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
<message>
|
||||
<source>unread message</source>
|
||||
<translation>oläst meddelande</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>unread messages</source>
|
||||
<translation>olästa meddelanden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>in</source>
|
||||
<translation>i</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Waiting for network...</source>
|
||||
<translation>Väntar på nätverket...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connecting to network...</source>
|
||||
<translation>Ansluter till nätverket...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connecting to proxy...</source>
|
||||
<translation>Ansluter till proxy...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connected</source>
|
||||
<translation>Ansluten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Updating content...</source>
|
||||
<translation>Uppdaterar innehåll...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>chat</source>
|
||||
<translation>chatt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>chats</source>
|
||||
<translation>chattar</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DocumentPreview</name>
|
||||
<message>
|
||||
<source>Download Document</source>
|
||||
<translation>Ladda ner dokument</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open Document</source>
|
||||
<translation>Öppna dokument</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditGroupChatPermissionsColumn</name>
|
||||
<message>
|
||||
<source>Group Member Permissions</source>
|
||||
<comment>what can normal group members do</comment>
|
||||
<translation>Gruppmedlemmars rättigheter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Skicka meddelanden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Media Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Skicka mediameddelanden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Other Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Skicka andra meddelanden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Web Page Previews</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Lägga till förhandsvisning av webbsida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change Chat Info</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Ändra chattinformation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Users</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Bjuda in användare</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pin Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Fästa meddelanden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Members</source>
|
||||
<comment>what can new group members do</comment>
|
||||
<translation>Nya medlemmar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New members can see older messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation>Nya medlemmar kan se gamla meddelanden</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditSuperGroupSlowModeColumn</name>
|
||||
<message>
|
||||
<source>Slow Mode</source>
|
||||
<translation>Långsamt läge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Off</source>
|
||||
<translation>Av</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set how long every chat member has to wait between Messages</source>
|
||||
<translation>Ange hur länge varje chatmedlem måste vänta mellan meddelanden</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FernschreiberUtils</name>
|
||||
<message>
|
||||
<source>sent a picture</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en bild</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a picture</source>
|
||||
<translation>skickade en bild</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a video</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en video</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a video</source>
|
||||
<translation>skickade en video</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an animation</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en animering</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an animation</source>
|
||||
<translation>skickade en animering</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a voice note</source>
|
||||
<translation>skickade en röstanteckning</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a document</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade ett dokument</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a document</source>
|
||||
<translation>skickade ett dokument</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a location</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en plats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a location</source>
|
||||
<translation>Skickade en plats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>have registered with Telegram</source>
|
||||
<comment>myself</comment>
|
||||
<translation>har registrerats på Telegram</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>has registered with Telegram</source>
|
||||
<translation>har registrerats på Telegram</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>joined this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation>anslöt till denna chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>joined this chat</source>
|
||||
<translation>anslöt till denna chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>were added to this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation>lades till i denna chatt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was added to this chat</source>
|
||||
<translation>lades till i denna chatt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>left this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation>lämnade denna chatt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>left this chat</source>
|
||||
<translation>lämnade denna chatt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported message: %1</source>
|
||||
<translation>Mededelande som inte stöds: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sticker: %1</source>
|
||||
<translation>Dekal: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a voice note</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en röstanteckning</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a venue</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en mötesplats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a venue</source>
|
||||
<translation>skickade en mötesplats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<comment>myself</comment>
|
||||
<translation>ändrade chattnamnet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<translation>ändrade chattnamnet</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ImagePage</name>
|
||||
<message>
|
||||
<source>Download Picture</source>
|
||||
<translation>Ladda ner bild</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download of %1 successful.</source>
|
||||
<translation>Nerladdning av %1 slutförd.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download failed.</source>
|
||||
<translation>Nerladdningen misslyckades.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InReplyToRow</name>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Du</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InitializationPage</name>
|
||||
<message>
|
||||
<source>OK</source>
|
||||
<translation>OK</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Welcome to Fernschreiber!</source>
|
||||
<translation>Välkommen till Fernschreiber!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please enter your phone number to continue.</source>
|
||||
<translation>Ange ditt telefonnummer för att förtsätta.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Continue</source>
|
||||
<translation>Fortsätt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please enter the code that you received:</source>
|
||||
<translation>Ange koden du mottog:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading...</source>
|
||||
<translation>Läser in...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to authenticate you with the entered code.</source>
|
||||
<translation>Det gick inte att autentisera dig med angiven kod.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter code again</source>
|
||||
<translation>Ange koden igen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restart authentication</source>
|
||||
<translation>Starta om autentisering</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please enter your password:</source>
|
||||
<translation>Ange ditt lösenord:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Registration</source>
|
||||
<translation>Användarregistrering</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter your First Name</source>
|
||||
<translation>Ange ditt förnamn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter your Last Name</source>
|
||||
<translation>Ange ditt efternamn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Register User</source>
|
||||
<translation>Registrera användaren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the international format, e.g. %1</source>
|
||||
<translation>Använd internationellt format, t.ex. %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LocationPreview</name>
|
||||
<message>
|
||||
<source>Install Pure Maps to inspect this location.</source>
|
||||
<translation>Installera Pure Maps för att inspektera den här platsen.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NotificationManager</name>
|
||||
<message>
|
||||
<source>%1 unread messages</source>
|
||||
<translation>%1 oläst(a) meddelande(n)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>OverviewPage</name>
|
||||
<message>
|
||||
<source>About Fernschreiber</source>
|
||||
<translation>Om Fernschreiber</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Fernschreiber</source>
|
||||
<translation>Fernschreiber</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Waiting for network...</source>
|
||||
<translation>Väntar på nätverk...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connecting to network...</source>
|
||||
<translation>Ansluter till nätverket...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connecting to proxy...</source>
|
||||
<translation>Ansluter till proxy...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Updating content...</source>
|
||||
<translation>Uppdaterar innehåll...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>Okänd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading chat list...</source>
|
||||
<translation>Läser in chattlistan...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<translation>Inställningar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any chats yet.</source>
|
||||
<translation>Du har inga chattar än.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<translation>Inställningar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Behavior</source>
|
||||
<translation>Beteende</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send message by enter</source>
|
||||
<translation>Skicka meddelanden med retur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send your message by pressing the enter key</source>
|
||||
<translation>Skicka meddelanden genom att trycka på returknappen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Appearance</source>
|
||||
<translation>Utseende</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show stickers as images</source>
|
||||
<translation>Visa dekaler som bilder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show background for stickers and align them centrally like images</source>
|
||||
<translation>Visa bakgrund för dekaler och justera dem centralt som bilder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notification feedback</source>
|
||||
<translation>Aviseringsåterkoppling</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All events</source>
|
||||
<translation>Alla händelser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Only new events</source>
|
||||
<translation>Endast nya händelser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Inget</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use non-graphical feedback (sound, vibration) for notifications</source>
|
||||
<translation>Använd icke-grafisk återkoppling (ljud, vibration) för avisering</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StickerPicker</name>
|
||||
<message>
|
||||
<source>Recently used</source>
|
||||
<translation>Nyligen använt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading stickers...</source>
|
||||
<translation>Läser in dekaler...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VideoPage</name>
|
||||
<message>
|
||||
<source>Download Video</source>
|
||||
<translation>Ladda ner video</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download of %1 successful.</source>
|
||||
<translation>Nerladdning av %1 slutförd.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Download failed.</source>
|
||||
<translation>Nerladdning misslyckades.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>functions</name>
|
||||
<message>
|
||||
<source>Video: %1</source>
|
||||
<translation>Video: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>has registered with Telegram</source>
|
||||
<translation>har registrerats i Telegram</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Picture: %1</source>
|
||||
<translation>Bild: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sticker: %1</source>
|
||||
<translation>Dekal: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Audio: %1</source>
|
||||
<translation>Ljud: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Voice Note: %1</source>
|
||||
<translation>Ljudmeddelande: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Animation: %1</source>
|
||||
<translation>Animering: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported message: %1</source>
|
||||
<translation>Meeddelande som inte stöds: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Document: %1</source>
|
||||
<translation>Dokument: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a picture</source>
|
||||
<translation>skickade en bild</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a video</source>
|
||||
<translation>skickade en video</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an animation</source>
|
||||
<translation>skickade en animering</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an audio</source>
|
||||
<translation>skickade en ljudfil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a voice note</source>
|
||||
<translation>skickade ett röstanteckning</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a document</source>
|
||||
<translation>skickade ett dokument</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a location</source>
|
||||
<translation>skickade en plats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>joined this chat</source>
|
||||
<translation>anslöt till den här chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was added to this chat</source>
|
||||
<translation>lades till i den här chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>left this chat</source>
|
||||
<translation>lämnade den här chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1M</source>
|
||||
<translation>%1M</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1K</source>
|
||||
<translation>%1K</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a venue</source>
|
||||
<translation>skickade en mötesplats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a picture</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en bild</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a video</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en video</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an animation</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en animering</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an audio</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en ljudfil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a voice note</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en röstanteckning</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a document</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade ett dokument</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a location</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en plats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a venue</source>
|
||||
<comment>myself</comment>
|
||||
<translation>skickade en mötesplats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>have registered with Telegram</source>
|
||||
<translation>har registrerats i Telegram</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>joined this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation>anslöt till den här chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>were added to this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation>lades till i den här chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>left this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation>lämnade den här chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation>var aldrig inloggad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation>utloggad, inloggad senast: Förra månaden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation>utloggad, inloggad senast: Förra veckan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation>utloggad, inloggad senast: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation>utloggad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation>utloggad, var nyligen inloggad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Admin</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation>Admin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation>Bannlyst</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creator</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation>Skapare</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restricted</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation>Begränsad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<comment>myself</comment>
|
||||
<translation>ändrade chattnamnet till %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<translation>ändrade chattnamnet till %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
|
@ -49,7 +49,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>This product uses the Telegram API but is not endorsed or certified by Telegram.</source>
|
||||
<translation>该项目使用 Telegram API ,但未被 Telegram 批准及背书。</translation>
|
||||
<translation>该项目使用 Telegram API ,但未得到 Telegram 批准或背书。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TDLib version %1</source>
|
||||
|
@ -61,7 +61,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Phone number: +%1</source>
|
||||
<translation>电话号码:+%1</translation>
|
||||
<translation>电话号码:+%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This project uses twemoji. Copyright 2018 Twitter, Inc. and other contributors. Thanks for making it available under the conditions of the MIT License (coding) and CC-BY 4.0 (graphics)!</source>
|
||||
|
@ -73,7 +73,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>By Sebastian J. Wolf and <a href="https://github.com/Wunderfitz/harbour-fernschreiber#contributions">other contributors</a></source>
|
||||
<translation>开发者为 Sebastian J. Wolf 及 <ahref="https://github.com/Wunderfitz/harbour-fernschreiber#contributions">其他贡献者</a></translation>
|
||||
<translation>开发者 Sebastian J. Wolf and <a href="https://github.com/Wunderfitz/harbour-fernschreiber#contributions">其它贡献者</a></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -87,6 +87,150 @@
|
|||
<translation>%1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">取消对话静音</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">对话静音</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">未知</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished">%1 位成员, %2 在线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation type="unfinished">%1 位订阅者</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation type="unfinished">%1 位成员</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Group</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemMembersGroups</name>
|
||||
<message>
|
||||
<source>Loading common chats…</source>
|
||||
<comment>chats you have in common with a user</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">未知</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">你</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any groups in common with this user.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This group is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation type="unfinished">设置</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatListViewItem</name>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">未知</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished">你</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">取消对话静音</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">对话静音</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark all messages as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
|
@ -97,33 +241,9 @@
|
|||
<source>Your message</source>
|
||||
<translation>你的消息</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation>完全离线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation>离线,上次在线时间:上月</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation>离线,上次在线时间:上周</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation>离线,上次在线时间: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation>在线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation>离线,最近在线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 位成员, %2 在线</translation>
|
||||
<translation>%1 位成员, %2 位在线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
|
@ -143,7 +263,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Loading messages...</source>
|
||||
<translation>加载消息中……</translation>
|
||||
<translation>正在加载消息…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
|
@ -171,10 +291,14 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Uploading...</source>
|
||||
<translation>正在上传……</translation>
|
||||
<translation>正在上传…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Forwarded Message</source>
|
||||
<translation>转发消息</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This chat is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -194,15 +318,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Waiting for network...</source>
|
||||
<translation>等候网络连接……</translation>
|
||||
<translation>等候网络连接…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connecting to network...</source>
|
||||
<translation>连接到网络……</translation>
|
||||
<translation>连接到网络…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connecting to proxy...</source>
|
||||
<translation>连接到代理……</translation>
|
||||
<translation>连接到代理…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connected</source>
|
||||
|
@ -210,7 +334,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Updating content...</source>
|
||||
<translation>正在更新内容……</translation>
|
||||
<translation>正在更新内容…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>chat</source>
|
||||
|
@ -232,114 +356,191 @@
|
|||
<translation>打开文档</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditGroupChatPermissionsColumn</name>
|
||||
<message>
|
||||
<source>Group Member Permissions</source>
|
||||
<comment>what can normal group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Media Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Other Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Web Page Previews</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change Chat Info</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Users</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pin Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Members</source>
|
||||
<comment>what can new group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New members can see older messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditSuperGroupSlowModeColumn</name>
|
||||
<message>
|
||||
<source>Slow Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Off</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set how long every chat member has to wait between Messages</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FernschreiberUtils</name>
|
||||
<message>
|
||||
<source>sent a picture</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">发送照片</translation>
|
||||
<translation>发送照片</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a picture</source>
|
||||
<translation type="unfinished">发送照片</translation>
|
||||
<translation>发送照片</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a video</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">发送视频</translation>
|
||||
<translation>发送视频</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a video</source>
|
||||
<translation type="unfinished">发送视频</translation>
|
||||
<translation>发送视频</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an animation</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">发送动画</translation>
|
||||
<translation>发送动画</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent an animation</source>
|
||||
<translation type="unfinished">发送动画</translation>
|
||||
<translation>发送动画</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a voice note</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>发送语言留言</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a document</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">发送文档</translation>
|
||||
<translation>发送文档</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a document</source>
|
||||
<translation type="unfinished">发送文档</translation>
|
||||
<translation>发送文档</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a location</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">发送位置</translation>
|
||||
<translation>发送位置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a location</source>
|
||||
<translation type="unfinished">发送位置</translation>
|
||||
<translation>发送位置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>have registered with Telegram</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">已注册到 Telegram</translation>
|
||||
<translation>已注册到 Telegram</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>has registered with Telegram</source>
|
||||
<translation type="unfinished">已注册到 Telegram </translation>
|
||||
<translation>已注册到 Telegram </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>joined this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>已加入此对话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>joined this chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>已加入此对话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>were added to this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">已经加入到此对话之中</translation>
|
||||
<translation>已经加入到此对话之中</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was added to this chat</source>
|
||||
<translation type="unfinished">已加入到此对话</translation>
|
||||
<translation>已加入到此对话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>left this chat</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">离开此对话</translation>
|
||||
<translation>离开此对话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>left this chat</source>
|
||||
<translation type="unfinished">离开此对话</translation>
|
||||
<translation>离开此对话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported message: %1</source>
|
||||
<translation type="unfinished">未读消息: %1</translation>
|
||||
<translation>未读消息: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sticker: %1</source>
|
||||
<translation type="unfinished">贴纸: %1</translation>
|
||||
<translation>表情贴图: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a voice note</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>发送视频留言</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a venue</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished">发送地点</translation>
|
||||
<translation>发送地点</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a venue</source>
|
||||
<translation type="unfinished">发送地点</translation>
|
||||
<translation>发送地点</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -384,11 +585,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Please enter the code that you received:</source>
|
||||
<translation>请输入你收到的验证码:</translation>
|
||||
<translation>请输入你收到的验证码:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading...</source>
|
||||
<translation>正在加载……</translation>
|
||||
<translation>正在加载…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to authenticate you with the entered code.</source>
|
||||
|
@ -404,22 +605,26 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Please enter your password:</source>
|
||||
<translation>请输入你的密码:</translation>
|
||||
<translation>请输入你的密码:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Register User</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>注册用户</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter your First Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>输入你的名字</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter your Last Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>输入你的姓氏</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Registration</source>
|
||||
<translation>用户注册</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the international format, e.g. %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -449,39 +654,27 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Waiting for network...</source>
|
||||
<translation>等候网络连接:</translation>
|
||||
<translation>等候网络连接…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connecting to network...</source>
|
||||
<translation>正在连接到网络……</translation>
|
||||
<translation>正在连接到网络…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connecting to proxy...</source>
|
||||
<translation>正在连接到代理……</translation>
|
||||
<translation>正在连接到代理…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Updating content...</source>
|
||||
<translation>正在更新内容……</translation>
|
||||
<translation>正在更新内容…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>未知</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>你</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading chat list...</source>
|
||||
<translation>正在加载对话列表……</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>取消静音对话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>静音对话</translation>
|
||||
<translation>正在加载对话列表…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
|
@ -489,7 +682,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>You don't have any chats yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>你尚无任何对话。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -512,46 +705,46 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Appearance</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>外观</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show stickers as images</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>像图片那样显示表情贴图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show background for stickers and align them centrally like images</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>显示表情贴图背景并像图片那样自动居中</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notification feedback</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>通知反馈</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All events</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>全部事件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Only new events</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>仅新事件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>无</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use non-graphical feedback (sound, vibration) for notifications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>使用非图像反馈进行通知(例如声音及振动)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StickerPicker</name>
|
||||
<message>
|
||||
<source>Recently used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>最近使用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading stickers...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>正在加载表情贴图…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -625,7 +818,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>sent a voice note</source>
|
||||
<translation>发送语言</translation>
|
||||
<translation>发送语音留言</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a document</source>
|
||||
|
@ -653,7 +846,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>%1K</source>
|
||||
<translation>%1T</translation>
|
||||
<translation>%1K</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>sent a venue</source>
|
||||
|
@ -718,5 +911,58 @@
|
|||
<comment>myself</comment>
|
||||
<translation>离开此对话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation type="unfinished">完全离线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation type="unfinished">离线,上次在线时间:上月</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation type="unfinished">离线,上次在线时间:上周</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation type="unfinished">离线,上次在线时间: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation type="unfinished">在线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation type="unfinished">离线,最近在线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Admin</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creator</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restricted</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -87,6 +87,150 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Group</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemMembersGroups</name>
|
||||
<message>
|
||||
<source>Loading common chats…</source>
|
||||
<comment>chats you have in common with a user</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You don't have any groups in common with this user.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This group is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatListViewItem</name>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Group Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark all messages as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
|
@ -97,30 +241,6 @@
|
|||
<source>Your message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
@ -177,6 +297,10 @@
|
|||
<source>Forwarded Message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This chat is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
|
@ -232,6 +356,74 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditGroupChatPermissionsColumn</name>
|
||||
<message>
|
||||
<source>Group Member Permissions</source>
|
||||
<comment>what can normal group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Media Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send Other Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add Web Page Previews</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change Chat Info</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Users</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pin Messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New Members</source>
|
||||
<comment>what can new group members do</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New members can see older messages</source>
|
||||
<comment>member permission</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditSuperGroupSlowModeColumn</name>
|
||||
<message>
|
||||
<source>Slow Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Off</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set how long every chat member has to wait between Messages</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FernschreiberUtils</name>
|
||||
<message>
|
||||
|
@ -341,6 +533,15 @@
|
|||
<source>sent a venue</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ImagePage</name>
|
||||
|
@ -422,6 +623,10 @@
|
|||
<source>Register User</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the international format, e.g. %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LocationPreview</name>
|
||||
|
@ -467,22 +672,10 @@
|
|||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading chat list...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
@ -718,5 +911,58 @@
|
|||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>was never online</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last month</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: last week</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, last online: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>online</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>offline, was recently online</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Admin</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creator</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restricted</source>
|
||||
<comment>channel user role</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<comment>myself</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>changed the chat title to %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
Loading…
Reference in a new issue