ChatInfoPage as attached page
fixes #150: Now basically everything is inside a loader; ChatInformationPage is added to ChatPage with pageStack.pushAttached fixes #166: Replaces the clunky VisualItemModel in tab view and doesn't initialize multiple times.
This commit is contained in:
parent
cb20bb686b
commit
182a2d1344
19 changed files with 1089 additions and 1033 deletions
|
@ -51,6 +51,7 @@ DISTFILES += qml/harbour-fernschreiber.qml \
|
|||
qml/components/PhotoTextsListItem.qml \
|
||||
qml/components/WebPagePreview.qml \
|
||||
qml/components/chatInformationPage/ChatInformationEditArea.qml \
|
||||
qml/components/chatInformationPage/ChatInformationPageContent.qml \
|
||||
qml/components/chatInformationPage/ChatInformationProfilePicture.qml \
|
||||
qml/components/chatInformationPage/ChatInformationProfilePictureList.qml \
|
||||
qml/components/chatInformationPage/ChatInformationTabItemBase.qml \
|
||||
|
|
|
@ -0,0 +1,459 @@
|
|||
/*
|
||||
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 "./chatInformationPage"
|
||||
import "../js/twemoji.js" as Emoji
|
||||
import "../js/functions.js" as Functions
|
||||
|
||||
|
||||
SilicaFlickable {
|
||||
id: pageContent
|
||||
property alias membersList: membersList
|
||||
|
||||
function initializePage() {
|
||||
console.log("[ChatInformationPage] Initializing chat info page...");
|
||||
membersList.clear();
|
||||
var chatType = chatInformation.type["@type"];
|
||||
switch(chatType) {
|
||||
case "chatTypePrivate":
|
||||
chatInformationPage.isPrivateChat = true;
|
||||
chatInformationPage.chatPartnerGroupId = chatInformationPage.chatInformation.type.user_id.toString();
|
||||
if(!chatInformationPage.privateChatUserInformation.id) {
|
||||
chatInformationPage.privateChatUserInformation = tdLibWrapper.getUserInformation(chatInformationPage.chatPartnerGroupId);
|
||||
}
|
||||
tdLibWrapper.getUserFullInfo(chatInformationPage.chatPartnerGroupId);
|
||||
tdLibWrapper.getUserProfilePhotos(chatInformationPage.chatPartnerGroupId, 100, 0);
|
||||
break;
|
||||
case "chatTypeBasicGroup":
|
||||
chatInformationPage.isBasicGroup = true;
|
||||
chatInformationPage.chatPartnerGroupId = chatInformation.type.basic_group_id.toString();
|
||||
if(!chatInformationPage.groupInformation.id) {
|
||||
chatInformationPage.groupInformation = tdLibWrapper.getBasicGroup(chatInformationPage.chatPartnerGroupId);
|
||||
}
|
||||
tdLibWrapper.getGroupFullInfo(chatInformationPage.chatPartnerGroupId, false);
|
||||
break;
|
||||
case "chatTypeSupergroup":
|
||||
chatInformationPage.isSuperGroup = true;
|
||||
chatInformationPage.chatPartnerGroupId = chatInformation.type.supergroup_id.toString();
|
||||
if(!chatInformationPage.groupInformation.id) {
|
||||
chatInformationPage.groupInformation = tdLibWrapper.getSuperGroup(chatInformationPage.chatPartnerGroupId);
|
||||
}
|
||||
|
||||
tdLibWrapper.getGroupFullInfo(chatInformationPage.chatPartnerGroupId, true);
|
||||
chatInformationPage.isChannel = chatInformationPage.groupInformation.is_channel;
|
||||
break;
|
||||
}
|
||||
console.log("is set up", chatInformationPage.isPrivateChat, chatInformationPage.isBasicGroup, chatInformationPage.isSuperGroup, chatInformationPage.chatPartnerGroupId)
|
||||
if(!chatInformationPage.isPrivateChat) {
|
||||
updateGroupStatusText();
|
||||
}
|
||||
|
||||
|
||||
tabViewLoader.active = true;
|
||||
}
|
||||
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) {
|
||||
chatInformationPage.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);
|
||||
}
|
||||
chatInformationPage.groupInformation.member_count = groupFullInfo.members.length
|
||||
updateGroupStatusText();
|
||||
}
|
||||
}
|
||||
function updateGroupStatusText() {
|
||||
if (chatOnlineMemberCount > 0) {
|
||||
headerItem.description = qsTr("%1 members, %2 online").arg(Functions.getShortenedCount(chatInformationPage.groupInformation.member_count)).arg(Functions.getShortenedCount(chatInformationPage.chatOnlineMemberCount));
|
||||
} else {
|
||||
if (isChannel) {
|
||||
headerItem.description = qsTr("%1 subscribers").arg(Functions.getShortenedCount(chatInformationPage.groupInformation.member_count));
|
||||
} else {
|
||||
headerItem.description = qsTr("%1 members").arg(Functions.getShortenedCount(chatInformationPage.groupInformation.member_count));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: tdLibWrapper
|
||||
|
||||
onChatOnlineMemberCountUpdated: {
|
||||
if ((chatInformationPage.isSuperGroup || chatInformationPage.isBasicGroup) && chatInformationPage.chatInformation.id.toString() === chatId) {
|
||||
chatInformationPage.chatOnlineMemberCount = chatInformationPage.onlineMemberCount;
|
||||
updateGroupStatusText();
|
||||
}
|
||||
}
|
||||
onSupergroupFullInfoReceived: {
|
||||
console.log("onSupergroupFullInfoReceived", chatInformationPage.isSuperGroup, chatInformationPage.chatPartnerGroupId, groupId)
|
||||
if(chatInformationPage.isSuperGroup && chatInformationPage.chatPartnerGroupId === groupId) {
|
||||
chatInformationPage.groupFullInformation = groupFullInfo;
|
||||
}
|
||||
}
|
||||
onSupergroupFullInfoUpdated: {
|
||||
console.log("onSupergroupFullInfoUpdated", chatInformationPage.isSuperGroup, chatInformationPage.chatPartnerGroupId, groupId)
|
||||
if(chatInformationPage.isSuperGroup && chatInformationPage.chatPartnerGroupId === groupId) {
|
||||
chatInformationPage.groupFullInformation = groupFullInfo;
|
||||
}
|
||||
}
|
||||
onBasicGroupFullInfoReceived: {
|
||||
if(chatInformationPage.isBasicGroup && chatInformationPage.chatPartnerGroupId === groupId) {
|
||||
handleBasicGroupFullInfo(groupFullInfo)
|
||||
}
|
||||
}
|
||||
|
||||
onBasicGroupFullInfoUpdated: {
|
||||
if(chatInformationPage.isBasicGroup && chatInformationPage.chatPartnerGroupId === groupId) {
|
||||
handleBasicGroupFullInfo(groupFullInfo)
|
||||
}
|
||||
}
|
||||
onUserFullInfoReceived: {
|
||||
if(chatInformationPage.isPrivateChat && userFullInfo["@extra"] === chatInformationPage.chatPartnerGroupId) {
|
||||
chatInformationPage.chatPartnerFullInformation = userFullInfo;
|
||||
}
|
||||
}
|
||||
onUserFullInfoUpdated: {
|
||||
if(chatInformationPage.isPrivateChat && userId === chatInformationPage.chatPartnerGroupId) {
|
||||
chatInformationPage.chatPartnerFullInformation = userFullInfo;
|
||||
}
|
||||
}
|
||||
|
||||
onUserProfilePhotosReceived: {
|
||||
if(chatInformationPage.isPrivateChat && extra === chatInformationPage.chatPartnerGroupId) {
|
||||
chatInformationPage.chatPartnerProfilePhotos = photos;
|
||||
}
|
||||
}
|
||||
onChatPermissionsUpdated: {
|
||||
if (chatInformationPage.chatInformation.id.toString() === chatId) {
|
||||
// set whole object to trigger change
|
||||
var newInformation = chatInformation;
|
||||
newInformation.permissions = permissions
|
||||
chatInformationPage.chatInformation = newInformation
|
||||
}
|
||||
}
|
||||
onChatTitleUpdated: {
|
||||
if (chatInformationPage.chatInformation.id.toString() === chatId) {
|
||||
// set whole object to trigger change
|
||||
var newInformation = chatInformation;
|
||||
newInformation.title = title
|
||||
chatInformationPage.chatInformation = newInformation
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Component.onCompleted: {
|
||||
console.log("completed chatinformationpage");
|
||||
initializePage();
|
||||
}
|
||||
|
||||
|
||||
|
||||
ListModel {
|
||||
id: membersList
|
||||
}
|
||||
|
||||
AppNotification {
|
||||
id: infoNotification
|
||||
}
|
||||
PullDownMenu {
|
||||
MenuItem {
|
||||
visible: (chatPage.isSuperGroup || chatPage.isBasicGroup) && groupInformation && groupInformation.status["@type"] !== "chatMemberStatusBanned"
|
||||
text: chatInformationPage.userIsMember ? qsTr("Leave Chat") : qsTr("Join Chat")
|
||||
onClicked: {
|
||||
// ensure it's done even if the page is closed:
|
||||
if (chatInformationPage.userIsMember) {
|
||||
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)} ));
|
||||
};
|
||||
}(chatInformationPage.chatInformation.id)))
|
||||
} else {
|
||||
tdLibWrapper.joinChat(chatInformationPage.chatInformation.id);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
MenuItem {
|
||||
visible: chatInformationPage.userIsMember
|
||||
onClicked: {
|
||||
var newNotificationSettings = chatInformationPage.chatInformation.notification_settings;
|
||||
if (newNotificationSettings.mute_for > 0) {
|
||||
newNotificationSettings.mute_for = 0;
|
||||
} else {
|
||||
newNotificationSettings.mute_for = 6666666;
|
||||
}
|
||||
newNotificationSettings.use_default_mute_for = false;
|
||||
tdLibWrapper.setChatNotificationSettings(chatInformationPage.chatInformation.id, newNotificationSettings);
|
||||
}
|
||||
text: chatInformation.notification_settings.mute_for > 0 ? qsTr("Unmute Chat") : qsTr("Mute Chat")
|
||||
}
|
||||
// MenuItem { //TODO Implement
|
||||
// visible: !userIsMember
|
||||
// onClicked: {
|
||||
// tdLibWrapper.joinChat(chatInformationPage.chatInformation.id);
|
||||
// }
|
||||
// text: qsTr("Join Chat")
|
||||
// }
|
||||
}
|
||||
// header
|
||||
PageHeader {
|
||||
id: headerItem
|
||||
z: 5
|
||||
Item {
|
||||
id: imageContainer
|
||||
property bool hasImage: typeof chatInformationPage.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 ? chatInformationPage.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
|
||||
optimizeImageSize: false
|
||||
}
|
||||
Loader {
|
||||
id: profilePictureLoader
|
||||
active: imageContainer.hasImage
|
||||
asynchronous: true
|
||||
anchors.fill: chatPictureThumbnail
|
||||
source: chatInformationPage.isPrivateChat
|
||||
? "../components/chatInformationPage/ChatInformationProfilePictureList.qml"
|
||||
: "../components/chatInformationPage/ChatInformationProfilePicture.qml"
|
||||
}
|
||||
}
|
||||
// PageHeader changes the html base path:
|
||||
property url emojiBase: "../js/emoji/"
|
||||
leftMargin: imageContainer.minDimension + Theme.horizontalPageMargin + Theme.paddingMedium
|
||||
title: chatInformationPage.chatInformation.title !== "" ? Emoji.emojify(chatInformationPage.chatInformation.title, Theme.fontSizeLarge, emojiBase) : qsTr("Unknown")
|
||||
description: chatInformationPage.isPrivateChat ? ("@"+(chatInformationPage.privateChatUserInformation.username || chatInformationPage.chatPartnerGroupId)) : ""
|
||||
}
|
||||
|
||||
SilicaFlickable {
|
||||
id: contentFlickable
|
||||
contentHeight: groupInfoItem.height + tabViewLoader.height
|
||||
clip: true
|
||||
interactive: true//groupInfoItem.height > pageContent.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: chatInformationPage.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 ? chatInformationPage.groupFullInformation.invite_link : ""
|
||||
width: parent.width - inviteLinkButton.width
|
||||
}
|
||||
IconButton {
|
||||
id: inviteLinkButton
|
||||
icon.source: "image://theme/icon-m-clipboard"
|
||||
anchors.verticalCenter: inviteLinkItem.verticalCenter
|
||||
onClicked: {
|
||||
Clipboard.text = chatInformationPage.groupFullInformation.invite_link
|
||||
infoNotification.show(qsTr("The Invite Link has been copied to the clipboard."));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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: false
|
||||
anchors {
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
top: groupInfoItem.bottom
|
||||
}
|
||||
sourceComponent: Component {
|
||||
ChatInformationTabView {
|
||||
id: tabView
|
||||
height: tabView.count > 0 ? chatInformationPage.height - headerItem.height : 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -30,15 +30,12 @@ Item {
|
|||
property alias loadingVisible: loadingColumn.loadingVisible
|
||||
property string loadingText
|
||||
|
||||
property int tabIndex: tabItem.VisualItemModel.index
|
||||
property bool active: tabItem.ListView.isCurrentItem
|
||||
property int tabIndex: index
|
||||
property bool active: index === tabView.currentIndex
|
||||
|
||||
default property alias _data: contentItem.data
|
||||
|
||||
|
||||
width: parent.width
|
||||
height: tabView.maxHeight//Math.max(contentItem.height, loadingColumn.height)
|
||||
opacity: active ? 1.0 : 0.0
|
||||
opacity: active ? 1.0 : 0.2
|
||||
Behavior on opacity { PropertyAnimation {duration: 300}}
|
||||
|
||||
Column {
|
||||
|
|
|
@ -27,8 +27,6 @@ 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) && !chatInformationPage.isChannel
|
||||
loadingVisible: loading && membersView.count === 0
|
||||
|
@ -37,7 +35,7 @@ ChatInformationTabItemBase {
|
|||
|
||||
SilicaListView {
|
||||
id: membersView
|
||||
model: isPrivateChat ? (chatPartnerCommonGroupsIds.length > 0 ? delegateModel : null) : chatInformationPage.membersList
|
||||
model: chatInformationPage.isPrivateChat ? (chatPartnerCommonGroupsIds.length > 0 ? delegateModel : null) : pageContent.membersList
|
||||
clip: true
|
||||
height: tabBase.height
|
||||
width: tabBase.width
|
||||
|
@ -46,9 +44,9 @@ ChatInformationTabItemBase {
|
|||
function handleScrollIntoView(force){
|
||||
if(!tabBase.loading && !dragging && !quickScrollAnimating ) {
|
||||
if(!atYBeginning) {
|
||||
chatInformationPage.scrollDown()
|
||||
pageContent.scrollDown()
|
||||
} else {
|
||||
chatInformationPage.scrollUp(force);
|
||||
pageContent.scrollUp(force);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -59,8 +57,9 @@ ChatInformationTabItemBase {
|
|||
handleScrollIntoView()
|
||||
}
|
||||
onAtYEndChanged: {
|
||||
if(tabBase.active && !tabBase.loading && chatInformationPage.isSuperGroup && (groupInformation.member_count > membersView.count) && membersView.atYEnd) {
|
||||
if(tabBase.active && !tabBase.loading && chatInformationPage.isSuperGroup && (chatInformationPage.groupInformation.member_count > membersView.count) && membersView.atYEnd) {
|
||||
tabBase.loading = true;
|
||||
console.log("LOAD MEMBERS BECAUSE ATYEND")
|
||||
fetchMoreMembersTimer.start()
|
||||
}
|
||||
}
|
||||
|
@ -78,7 +77,7 @@ ChatInformationTabItemBase {
|
|||
}
|
||||
width: parent.width
|
||||
|
||||
// chat title isPrivateChat ? () :
|
||||
// chat title
|
||||
primaryText.text: Emoji.emojify(Functions.getUserName(user), primaryText.font.pixelSize, "../js/emoji/")
|
||||
// last user
|
||||
prologSecondaryText.text: "@"+(user.username !== "" ? user.username : user_id) + (user_id === chatInformationPage.myUserId ? " " + qsTr("You") : "")
|
||||
|
@ -100,7 +99,7 @@ ChatInformationTabItemBase {
|
|||
}
|
||||
footer: Component {
|
||||
Item {
|
||||
property bool active: tabBase.active && chatInformationPage.isSuperGroup && (groupInformation.member_count > membersView.count)
|
||||
property bool active: tabBase.active && chatInformationPage.isSuperGroup && (chatInformationPage.groupInformation.member_count > membersView.count)
|
||||
width: tabBase.width
|
||||
height: active ? Theme.itemSizeLarge : Theme.paddingMedium
|
||||
|
||||
|
@ -174,9 +173,9 @@ ChatInformationTabItemBase {
|
|||
interval: 600
|
||||
property int fetchLimit: 50
|
||||
onTriggered: {
|
||||
if(isSuperGroup && !isChannel) {
|
||||
if(chatInformationPage.isSuperGroup && !chatInformationPage.isChannel && (chatInformationPage.groupInformation.member_count > membersView.count)) { //
|
||||
tabBase.loading = true
|
||||
tdLibWrapper.getSupergroupMembers(chatInformationPage.chatPartnerGroupId, fetchLimit, membersList.count);
|
||||
tdLibWrapper.getSupergroupMembers(chatInformationPage.chatPartnerGroupId, fetchLimit, pageContent.membersList.count);
|
||||
fetchLimit = 200
|
||||
interval = 400
|
||||
}
|
||||
|
@ -187,20 +186,20 @@ ChatInformationTabItemBase {
|
|||
target: tdLibWrapper
|
||||
|
||||
onChatMembersReceived: {
|
||||
if (isSuperGroup && chatInformationPage.chatPartnerGroupId === extra) {
|
||||
if(members && members.length > 0) {
|
||||
if (chatInformationPage.isSuperGroup && chatInformationPage.chatPartnerGroupId === extra) {
|
||||
if(members && members.length > 0 && chatInformationPage.groupInformation.member_count > membersView.count) {
|
||||
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);
|
||||
pageContent.membersList.append(memberData);
|
||||
}
|
||||
groupInformation.member_count = totalMembers
|
||||
chatInformationPage.groupInformation.member_count = totalMembers
|
||||
updateGroupStatusText();
|
||||
if(membersList.count < totalMembers) {
|
||||
// if(pageContent.membersList.count < totalMembers) {
|
||||
// fetchMoreMembersTimer.start()
|
||||
}
|
||||
// }
|
||||
}
|
||||
// if we set it directly, the views start scrolling
|
||||
loadedTimer.start();
|
||||
|
@ -224,9 +223,9 @@ ChatInformationTabItemBase {
|
|||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if(isPrivateChat) {
|
||||
if(chatInformationPage.isPrivateChat) {
|
||||
tdLibWrapper.getGroupsInCommon(chatInformationPage.chatPartnerGroupId, 200, 0); // we only use the first 200
|
||||
} else if(isSuperGroup) {
|
||||
} else if(chatInformationPage.isSuperGroup) {
|
||||
fetchMoreMembersTimer.start();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,8 +27,8 @@ import "../../js/functions.js" as Functions
|
|||
|
||||
ChatInformationTabItemBase {
|
||||
id: tabBase
|
||||
title: qsTr("Settings", "Button: Chat Settings")
|
||||
image: "image://theme/icon-m-developer-mode"
|
||||
// title: qsTr("Settings", "Button: Chat Settings")
|
||||
// image: "image://theme/icon-m-developer-mode"
|
||||
|
||||
SilicaFlickable {
|
||||
height: tabBase.height
|
||||
|
|
|
@ -54,22 +54,21 @@ Item {
|
|||
width: parent.width
|
||||
columns: tabView.count
|
||||
Repeater {
|
||||
model: tabView.count
|
||||
model: tabModel
|
||||
delegate: BackgroundItem {
|
||||
id: headerItem
|
||||
property bool loaded: tabItem.image !== "" && tabItem.title !== ""
|
||||
property bool loaded: image !== "" && 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
|
||||
property bool itemIsActive: tabView.currentIndex === itemIndex
|
||||
Icon {
|
||||
id: headerIcon
|
||||
source: headerItem.tabItem.image
|
||||
source: image
|
||||
highlighted: headerItem.pressed || headerItem.itemIsActive
|
||||
anchors {
|
||||
top: parent.top
|
||||
|
@ -77,7 +76,7 @@ Item {
|
|||
}
|
||||
}
|
||||
Label {
|
||||
text: headerItem.tabItem.title
|
||||
text: title
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
anchors.top: headerIcon.bottom
|
||||
|
@ -85,7 +84,7 @@ Item {
|
|||
font.pixelSize: Theme.fontSizeTiny
|
||||
}
|
||||
onClicked: {
|
||||
chatInformationPage.scrollDown()
|
||||
pageContent.scrollDown()
|
||||
tabView.openTab(itemIndex)
|
||||
}
|
||||
}
|
||||
|
@ -105,7 +104,6 @@ Item {
|
|||
highlightMoveDuration: 500
|
||||
property int maxHeight: tabViewItem.height - tabViewHeader.height
|
||||
|
||||
|
||||
anchors {
|
||||
top: tabViewHeader.bottom
|
||||
left: parent.left
|
||||
|
@ -116,51 +114,33 @@ Item {
|
|||
function openTab(index) {
|
||||
currentIndex = index;
|
||||
}
|
||||
model: VisualItemModel {
|
||||
model: ListModel {
|
||||
id: tabModel
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: membersGroupComponent
|
||||
ChatInformationTabItemMembersGroups{
|
||||
delegate: Loader {
|
||||
width: tabView.width
|
||||
height: tabView.maxHeight
|
||||
asynchronous: true
|
||||
source: Qt.resolvedUrl(tab+".qml")
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: settingsComponent
|
||||
ChatInformationTabItemSettings {
|
||||
width: tabView.width
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: debugComponent
|
||||
ChatInformationTabItemDebug {
|
||||
width: tabView.width
|
||||
}
|
||||
}
|
||||
property var tabItems: {
|
||||
var items = [];
|
||||
Component.onCompleted: {
|
||||
if(!(isPrivateChat && chatPartnerGroupId === myUserId.toString())) {
|
||||
items.push(membersGroupComponent);
|
||||
tabModel.append({
|
||||
tab:"ChatInformationTabItemMembersGroups",
|
||||
title: chatInformationPage.isPrivateChat ? qsTr("Groups", "Button: groups in common (short)") : qsTr("Members", "Button: Group Members"),
|
||||
image: "image://theme/icon-m-people"
|
||||
});
|
||||
}
|
||||
if(!isPrivateChat && (groupInformation.status.can_restrict_members || groupInformation.status["@type"] === "chatMemberStatusCreator")) {
|
||||
items.push(settingsComponent);
|
||||
tabModel.append({
|
||||
tab:"ChatInformationTabItemSettings",
|
||||
title: qsTr("Settings", "Button: Chat Settings"),
|
||||
image: "image://theme/icon-m-developer-mode"
|
||||
});
|
||||
}
|
||||
// items.push(debugComponent);
|
||||
// tabModel.append({tab:"ChatInformationTabItemDebug"});
|
||||
|
||||
return items;
|
||||
}
|
||||
onTabItemsChanged: fillTabItems()
|
||||
|
||||
function fillTabItems() {
|
||||
tabModel.clear()
|
||||
for(var i in tabItems) {
|
||||
tabModel.append(tabItems[i].createObject(tabModel));
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
fillTabItems()
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,3 +1,21 @@
|
|||
/*
|
||||
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 "../components"
|
||||
|
@ -36,427 +54,27 @@ Page {
|
|||
property var groupInformation: ({});
|
||||
property var groupFullInformation: ({});
|
||||
|
||||
property alias membersList: membersList
|
||||
// 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);
|
||||
onStatusChanged: {
|
||||
switch(status) {
|
||||
case PageStatus.Activating:
|
||||
console.log("activating Loader")
|
||||
mainContentLoader.active = true
|
||||
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;
|
||||
case PageStatus.Active:
|
||||
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
|
||||
Loader {
|
||||
id: mainContentLoader
|
||||
active: false
|
||||
asynchronous: true
|
||||
anchors.fill: parent
|
||||
|
||||
PullDownMenu {
|
||||
MenuItem {
|
||||
visible: (chatPage.isSuperGroup || chatPage.isBasicGroup) && groupInformation && groupInformation.status["@type"] !== "chatMemberStatusBanned"
|
||||
text: userIsMember ? qsTr("Leave Chat") : qsTr("Join Chat")
|
||||
onClicked: {
|
||||
// ensure it's done even if the page is closed:
|
||||
if (userIsMember) {
|
||||
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)))
|
||||
} else {
|
||||
tdLibWrapper.joinChat(chatInformation.id);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
MenuItem {
|
||||
visible: userIsMember
|
||||
onClicked: {
|
||||
var newNotificationSettings = chatInformation.notification_settings;
|
||||
if (newNotificationSettings.mute_for > 0) {
|
||||
newNotificationSettings.mute_for = 0;
|
||||
} else {
|
||||
newNotificationSettings.mute_for = 6666666;
|
||||
}
|
||||
newNotificationSettings.use_default_mute_for = false;
|
||||
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
|
||||
optimizeImageSize: false
|
||||
}
|
||||
Loader {
|
||||
id: profilePictureLoader
|
||||
active: imageContainer.hasImage
|
||||
asynchronous: true
|
||||
anchors.fill: chatPictureThumbnail
|
||||
source: chatInformationPage.isPrivateChat
|
||||
? "../components/chatInformationPage/ChatInformationProfilePictureList.qml"
|
||||
: "../components/chatInformationPage/ChatInformationProfilePicture.qml"
|
||||
}
|
||||
}
|
||||
// PageHeader changes the html base path:
|
||||
property url emojiBase: "../js/emoji/"
|
||||
leftMargin: imageContainer.minDimension + Theme.horizontalPageMargin + Theme.paddingMedium
|
||||
title: chatInformation.title !== "" ? Emoji.emojify(chatInformation.title, Theme.fontSizeLarge, emojiBase) : 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: {
|
||||
Clipboard.text = groupFullInformation.invite_link
|
||||
infoNotification.show(qsTr("The Invite Link has been copied to the clipboard."));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
source: Qt.resolvedUrl("../components/chatInformationPage/ChatInformationPageContent.qml");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -298,6 +298,8 @@ Page {
|
|||
case PageStatus.Active:
|
||||
if (!chatPage.isInitialized) {
|
||||
chatModel.initialize(chatInformation);
|
||||
|
||||
pageStack.pushAttached(Qt.resolvedUrl("../pages/ChatInformationPage.qml"), { "chatInformation" : chatInformation, "privateChatUserInformation": chatPartnerInformation, "groupInformation": chatGroupInformation, "chatOnlineMemberCount": chatOnlineMemberCount});
|
||||
chatPage.isInitialized = true;
|
||||
}
|
||||
break;
|
||||
|
@ -516,7 +518,7 @@ Page {
|
|||
if(chatPage.state === "selectMessages") {
|
||||
chatPage.selectedMessages = [];
|
||||
} else {
|
||||
pageStack.push(Qt.resolvedUrl("../pages/ChatInformationPage.qml"), { "chatInformation" : chatInformation, "privateChatUserInformation": chatPartnerInformation, "groupInformation": chatGroupInformation, "chatOnlineMemberCount": chatOnlineMemberCount});
|
||||
pageStack.navigateForward();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -96,74 +96,74 @@
|
|||
</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>
|
||||
<name>ChatInformationPageContent</name>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 Mitglieder, %2 online</translation>
|
||||
<translation type="unfinished">%1 Mitglieder, %2 online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation>%1 Abonnenten</translation>
|
||||
<translation type="unfinished">%1 Abonnenten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation>%1 Mitglieder</translation>
|
||||
<translation type="unfinished">%1 Mitglieder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished">Chat verlassen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation type="unfinished">Chat beitreten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation>Verlasse Gruppe</translation>
|
||||
<translation type="unfinished">Verlasse Chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation>Info</translation>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Stummschaltung des Chats aufheben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation>Telefonnummer</translation>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Chat stummschalten</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>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Unbekannt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation>Chattitel</translation>
|
||||
<translation type="unfinished">Chattitel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation>Geben Sie 1-128 Zeichen ein</translation>
|
||||
<translation type="unfinished">Geben Sie 1-128 Zeichen ein</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation>Chat verlassen</translation>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished">Es gibt noch keinen Informationstext.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation>Chat beitreten</translation>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished">Info</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished">Telefonnummer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished">Einladungslink</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished">Der Einladungslink wurde in die Zwischenablage kopiert.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -181,16 +181,6 @@
|
|||
<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>
|
||||
|
@ -209,11 +199,21 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<name>ChatInformationTabView</name>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished">Gruppen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished">Mitglieder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation>Einstellungen</translation>
|
||||
<translation type="unfinished">Einstellungen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
|
@ -96,74 +96,74 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Unmute Chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Mute Chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>Unknown</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation>The Invite Link has been copied to the clipboard.</translation>
|
||||
</message>
|
||||
<name>ChatInformationPageContent</name>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 members, %2 online</translation>
|
||||
<translation type="unfinished">%1 members, %2 online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation>%1 subscribers</translation>
|
||||
<translation type="unfinished">%1 subscribers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation>%1 members</translation>
|
||||
<translation type="unfinished">%1 members</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished">Leave Chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation type="unfinished">Join Chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation>Leaving chat</translation>
|
||||
<translation type="unfinished">Leaving chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation>Info</translation>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Unmute Chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation>Phone Number</translation>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Mute Chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation>Invite Link</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation>There is no information text available, yet.</translation>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Unknown</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation>Chat Title</translation>
|
||||
<translation type="unfinished">Chat Title</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation>Enter 1-128 characters</translation>
|
||||
<translation type="unfinished">Enter 1-128 characters</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation>Leave Chat</translation>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished">There is no information text available, yet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation>Join Chat</translation>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished">Info</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished">Phone Number</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished">Invite Link</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished">The Invite Link has been copied to the clipboard.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -177,16 +177,6 @@
|
|||
<source>Unknown</source>
|
||||
<translation>Unknown</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation>Groups</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation>Members</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation>Loading group members…</translation>
|
||||
|
@ -209,11 +199,21 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<name>ChatInformationTabView</name>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished">Groups</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished">Members</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation>Settings</translation>
|
||||
<translation type="unfinished">Settings</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
|
@ -96,74 +96,74 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>habilitar notificación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>deshabilitar notificación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>Desconocido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation>El enlace de invitación se ha copiado en el portapapeles.</translation>
|
||||
</message>
|
||||
<name>ChatInformationPageContent</name>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 miembros, %2 en línea</translation>
|
||||
<translation type="unfinished">%1 miembros, %2 en línea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation>%1 suscriptores</translation>
|
||||
<translation type="unfinished">%1 suscriptores</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation>%1 miembros</translation>
|
||||
<translation type="unfinished">%1 miembros</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished">Salir del grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation type="unfinished">Unirse al grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation>Saliendo del grupo</translation>
|
||||
<translation type="unfinished">Saliendo del grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation>Información</translation>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">habilitar notificación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation>Número de teléfono</translation>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">deshabilitar notificación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation>Enlace de invitación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation>Aún no hay texto de información disponible.</translation>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation>Título del grupo</translation>
|
||||
<translation type="unfinished">Título del grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation>Marcar los caracteres 1-128</translation>
|
||||
<translation type="unfinished">Marcar los caracteres 1-128</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation>Salir del grupo</translation>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished">Aún no hay texto de información disponible.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation>Unirse al grupo</translation>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished">Información</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished">Número de teléfono</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished">Enlace de invitación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished">El enlace de invitación se ha copiado en el portapapeles.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -177,16 +177,6 @@
|
|||
<source>Unknown</source>
|
||||
<translation>Desconocido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation>Grupos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation>Miembros</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation>Cargando miembros del grupo…</translation>
|
||||
|
@ -209,11 +199,21 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<name>ChatInformationTabView</name>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished">Grupos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished">Miembros</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation>Ajustes</translation>
|
||||
<translation type="unfinished">Ajustes</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
|
@ -96,74 +96,74 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Poista keskustelun vaimennus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Vaimenna keskustelu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>Tuntematon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation>Kutsulinkki on kopioitu leikepöydälle.</translation>
|
||||
</message>
|
||||
<name>ChatInformationPageContent</name>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 jäsentä, %2 paikalla</translation>
|
||||
<translation type="unfinished">%1 jäsentä, %2 paikalla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation>%1 tilaajaa</translation>
|
||||
<translation type="unfinished">%1 tilaajaa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation>%1 jäsentä</translation>
|
||||
<translation type="unfinished">%1 jäsentä</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished">Poistu keskustelusta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation type="unfinished">Liity keskusteluun</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation>Poistutaan keskustelusta</translation>
|
||||
<translation type="unfinished">Poistutaan keskustelusta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation>Tietoa</translation>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Poista keskustelun vaimennus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation>Puhelinnumero</translation>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Vaimenna keskustelu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation>Kutsulinkki</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation>Tietoa ei ole vielä saatavilla.</translation>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Tuntematon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation>Keskustelun otsikko</translation>
|
||||
<translation type="unfinished">Keskustelun otsikko</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation>Syötä 1-128 merkkiä</translation>
|
||||
<translation type="unfinished">Syötä 1-128 merkkiä</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation>Poistu keskustelusta</translation>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished">Tietoa ei ole vielä saatavilla.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation>Liity keskusteluun</translation>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished">Tietoa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished">Puhelinnumero</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished">Kutsulinkki</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished">Kutsulinkki on kopioitu leikepöydälle.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -177,16 +177,6 @@
|
|||
<source>Unknown</source>
|
||||
<translation>Tuntematon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation>Ryhmät</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation>Jäsenet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation>Ladataan ryhmän jäseniä...</translation>
|
||||
|
@ -209,11 +199,21 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<name>ChatInformationTabView</name>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished">Ryhmät</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished">Jäsenet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation>Asetukset</translation>
|
||||
<translation type="unfinished">Asetukset</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
|
@ -96,23 +96,7 @@
|
|||
</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>
|
||||
<name>ChatInformationPageContent</name>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished">%1 tag, %2 online</translation>
|
||||
|
@ -125,10 +109,43 @@
|
|||
<source>%1 members</source>
|
||||
<translation type="unfinished">%1 tag</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation type="unfinished"></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>Unknown</source>
|
||||
<translation type="unfinished">Ismeretlen</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>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
|
@ -145,24 +162,7 @@
|
|||
<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>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -177,16 +177,6 @@
|
|||
<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>
|
||||
|
@ -209,7 +199,17 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<name>ChatInformationTabView</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>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
|
|
|
@ -96,88 +96,78 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation>Lascia 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>Unknown</source>
|
||||
<translation>Sconosciuto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation>Il link d'invito è stato copiato nella clipboard.</translation>
|
||||
</message>
|
||||
<name>ChatInformationPageContent</name>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 membri, %2 online</translation>
|
||||
<translation type="unfinished">%1 membri, %2 online</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation>%1 abbonati</translation>
|
||||
<translation type="unfinished">%1 abbonati</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation>%1 membri</translation>
|
||||
<translation type="unfinished">%1 membri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation>Info</translation>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished">Lascia chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation>Telefono</translation>
|
||||
<source>Join Chat</source>
|
||||
<translation type="unfinished">Entra nella chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation>Link d'invito</translation>
|
||||
<source>Leaving chat</source>
|
||||
<translation type="unfinished">Lascia chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation>Attualmente non è disponibile nessuna informazione.</translation>
|
||||
<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>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation>Titolo chat</translation>
|
||||
<translation type="unfinished">Titolo chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation>Inserisci da 1 a 128 caratteri</translation>
|
||||
<translation type="unfinished">Inserisci da 1 a 128 caratteri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation>Lascia chat</translation>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished">Attualmente non è disponibile nessuna informazione.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation>Entra nella chat</translation>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished">Info</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished">Telefono</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished">Link d'invito</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished">Il link d'invito è stato copiato nella clipboard.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemMembersGroups</name>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation>Gruppi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation>Membri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You</source>
|
||||
<translation>Tu</translation>
|
||||
|
@ -209,11 +199,21 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<name>ChatInformationTabView</name>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished">Gruppi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished">Membri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation>Impostazioni</translation>
|
||||
<translation type="unfinished">Impostazioni</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
|
@ -96,23 +96,7 @@
|
|||
</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>
|
||||
<name>ChatInformationPageContent</name>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished">$1 członków, %2 online </translation>
|
||||
|
@ -125,10 +109,43 @@
|
|||
<source>%1 members</source>
|
||||
<translation type="unfinished">%1 czlonków</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation type="unfinished"></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>Unknown</source>
|
||||
<translation type="unfinished">Nieznany</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>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
|
@ -145,24 +162,7 @@
|
|||
<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>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -177,16 +177,6 @@
|
|||
<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>
|
||||
|
@ -209,7 +199,17 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<name>ChatInformationTabView</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>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
|
|
|
@ -96,23 +96,7 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>Включить уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>Выключить уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation>Ссылка для приглашения скопирована в буффер обмена</translation>
|
||||
</message>
|
||||
<name>ChatInformationPageContent</name>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished">%1 участников, %2 онлайн</translation>
|
||||
|
@ -125,45 +109,61 @@
|
|||
<source>%1 members</source>
|
||||
<translation type="unfinished">%1 участников</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished">Выйти из чата</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</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>Информация</translation>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Включить уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation>Номер телефона</translation>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Выключить уведомления</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation>Ссылка для приглашения</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation>Информация отсутствует</translation>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation>Заголовок чата</translation>
|
||||
<translation type="unfinished">Заголовок чата</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation>Введите 1-128 символов</translation>
|
||||
<translation type="unfinished">Введите 1-128 символов</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation>Выйти из чата</translation>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished">Информация отсутствует</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation>Зайти в чат</translation>
|
||||
<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>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished">Ссылка для приглашения скопирована в буффер обмена</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -177,16 +177,6 @@
|
|||
<source>Unknown</source>
|
||||
<translation>нет информации</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation>Группы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation>Участники группы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation>Загрузка списка участников…</translation>
|
||||
|
@ -209,11 +199,21 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<name>ChatInformationTabView</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>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation>Настройки</translation>
|
||||
<translation type="unfinished">Настройки</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
|
@ -96,74 +96,74 @@
|
|||
</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>
|
||||
<name>ChatInformationPageContent</name>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 medlemmar, %2 inloggade</translation>
|
||||
<translation type="unfinished">%1 medlem(mar), %2 inloggad(e)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation>%1 prenumeranter</translation>
|
||||
<translation type="unfinished">%1 prenumerant(er)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation>%1 medlemmar</translation>
|
||||
<translation type="unfinished">%1 medlem(mar)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished">Lämna chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation type="unfinished">Anslut till chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation>Lämnar chatten</translation>
|
||||
<translation type="unfinished">Lämnar chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation>Info</translation>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">Slå på chatten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation>Telefonnummer</translation>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished">Stäng av chatten</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>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">Okänd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation>Chattnamn</translation>
|
||||
<translation type="unfinished">Chattnamn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation>Ange 1-128 tecken</translation>
|
||||
<translation type="unfinished">Ange 1-128 tecken</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation>Lämna chatten</translation>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished">Det finns ingen informationstext än.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation>Anslut till chatten</translation>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation type="unfinished">Info</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation type="unfinished">Telefonnummer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation type="unfinished">Inbjudningslänk</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished">Inbjudningslänken har kopierats till urklipp.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -177,16 +177,6 @@
|
|||
<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>
|
||||
|
@ -209,11 +199,21 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<name>ChatInformationTabView</name>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation type="unfinished">Grupper</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation type="unfinished">Medlemmar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation>Inställningar</translation>
|
||||
<translation type="unfinished">Inställningar</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
|
@ -96,74 +96,74 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationPage</name>
|
||||
<message>
|
||||
<source>Unmute Chat</source>
|
||||
<translation>取消对话静音</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mute Chat</source>
|
||||
<translation>静音对话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown</source>
|
||||
<translation>未知</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation>邀请链接已复制到剪切板</translation>
|
||||
</message>
|
||||
<name>ChatInformationPageContent</name>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation>%1 位成员, %2 位在线</translation>
|
||||
<translation type="unfinished">%1 位成员, %2 位在线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 subscribers</source>
|
||||
<translation>%1 位订阅者</translation>
|
||||
<translation type="unfinished">%1 位订阅者</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 members</source>
|
||||
<translation>%1 位成员</translation>
|
||||
<translation type="unfinished">%1 位成员</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished">离开对话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation type="unfinished">加入对话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</source>
|
||||
<translation>正在离开对话</translation>
|
||||
<translation type="unfinished">正在离开对话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
<translation>信息</translation>
|
||||
<source>Unmute Chat</source>
|
||||
<translation type="unfinished">取消对话静音</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Phone Number</source>
|
||||
<comment>user phone number header</comment>
|
||||
<translation>电话号码</translation>
|
||||
<source>Mute Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invite Link</source>
|
||||
<comment>header</comment>
|
||||
<translation>邀请链接</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation>暂无信息</translation>
|
||||
<source>Unknown</source>
|
||||
<translation type="unfinished">未知</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Chat Title</source>
|
||||
<comment>group title header</comment>
|
||||
<translation>对话标题</translation>
|
||||
<translation type="unfinished">对话标题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter 1-128 characters</source>
|
||||
<translation>输入 1-128 个字符</translation>
|
||||
<translation type="unfinished">输入 1-128 个字符</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation>离开对话</translation>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished">暂无信息</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation>加入对话</translation>
|
||||
<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>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished">邀请链接已复制到剪切板</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -177,16 +177,6 @@
|
|||
<source>Unknown</source>
|
||||
<translation>未知</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<comment>Button: groups in common (short)</comment>
|
||||
<translation>群组</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Members</source>
|
||||
<comment>Button: Group Members</comment>
|
||||
<translation>成员</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading group members…</source>
|
||||
<translation>正在加载群组成员…</translation>
|
||||
|
@ -209,11 +199,21 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<name>ChatInformationTabView</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>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
<translation>设置</translation>
|
||||
<translation type="unfinished">设置</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
|
@ -96,23 +96,7 @@
|
|||
</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>
|
||||
<name>ChatInformationPageContent</name>
|
||||
<message>
|
||||
<source>%1 members, %2 online</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
@ -125,10 +109,43 @@
|
|||
<source>%1 members</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Leaving chat</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>Unknown</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>
|
||||
<message>
|
||||
<source>There is no information text available, yet.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Info</source>
|
||||
<comment>group or user infotext header</comment>
|
||||
|
@ -145,24 +162,7 @@
|
|||
<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>
|
||||
<message>
|
||||
<source>Leave Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Join Chat</source>
|
||||
<source>The Invite Link has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
@ -177,16 +177,6 @@
|
|||
<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>
|
||||
|
@ -209,7 +199,17 @@
|
|||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatInformationTabItemSettings</name>
|
||||
<name>ChatInformationTabView</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>Settings</source>
|
||||
<comment>Button: Chat Settings</comment>
|
||||
|
|
Loading…
Reference in a new issue