Now the sticker picker looks much better...
This commit is contained in:
parent
d30a72e372
commit
f9221fe95e
12 changed files with 125 additions and 51 deletions
|
@ -29,6 +29,17 @@ Item {
|
|||
|
||||
property variant recentStickers: stickerManager.getRecentStickers()
|
||||
property variant installedStickerSets: stickerManager.getInstalledStickerSets()
|
||||
property bool pickerLoaded: false
|
||||
|
||||
Timer {
|
||||
id: stickerPickerLoadedTimer
|
||||
interval: 100
|
||||
running: true
|
||||
repeat: false
|
||||
onTriggered: {
|
||||
stickerPickerOverlayItem.pickerLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: stickerPickerOverlayBackground
|
||||
|
@ -37,10 +48,16 @@ Item {
|
|||
color: Theme.overlayBackgroundColor
|
||||
opacity: 0.7
|
||||
}
|
||||
|
||||
Flickable {
|
||||
id: stickerPickerFlickable
|
||||
anchors.fill: parent
|
||||
anchors.margins: Theme.paddingMedium
|
||||
|
||||
opacity: stickerPickerOverlayItem.pickerLoaded ? 1 : 0
|
||||
Behavior on opacity { NumberAnimation {} }
|
||||
visible: stickerPickerOverlayItem.pickerLoaded
|
||||
|
||||
contentHeight: stickerPickerColumn.height
|
||||
clip: true
|
||||
|
||||
|
@ -78,18 +95,25 @@ Item {
|
|||
id: singleRecentStickerRow
|
||||
spacing: Theme.paddingSmall
|
||||
Image {
|
||||
source: modelData.sticker.local.path
|
||||
width: Theme.itemSizeMedium
|
||||
height: Theme.itemSizeMedium
|
||||
source: modelData.thumbnail.photo.local.path
|
||||
width: Theme.itemSizeExtraLarge
|
||||
height: Theme.itemSizeExtraLarge
|
||||
asynchronous: true
|
||||
onStatusChanged: {
|
||||
if (status === Image.Ready) {
|
||||
stickerPickerLoadedTimer.restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
tdLibWrapper.sendStickerMessage(chatInformation.id, modelData.sticker.local.path);
|
||||
tdLibWrapper.sendStickerMessage(chatInformation.id, modelData.sticker.remote.id);
|
||||
stickerPickerOverlayItem.visible = false;
|
||||
attachmentOptionsRow.visible = false;
|
||||
stickerPickerLoader.active = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -126,61 +150,69 @@ Item {
|
|||
model: modelData.stickers
|
||||
|
||||
Item {
|
||||
width: Theme.itemSizeMedium
|
||||
height: Theme.itemSizeMedium
|
||||
|
||||
Component.onCompleted: {
|
||||
if (!modelData.sticker.local.is_downloading_completed) {
|
||||
tdLibWrapper.downloadFile(modelData.sticker.id);
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: tdLibWrapper
|
||||
onFileUpdated : {
|
||||
if (fileInformation.local.is_downloading_completed) {
|
||||
if (fileId === modelData.sticker.id) {
|
||||
singleStickerImage.source = fileInformation.local.path;
|
||||
}
|
||||
width: Theme.itemSizeExtraLarge
|
||||
height: Theme.itemSizeExtraLarge
|
||||
Image {
|
||||
id: singleStickerImage
|
||||
source: modelData.thumbnail.photo.local.is_downloading_completed ? modelData.thumbnail.photo.local.path : ""
|
||||
anchors.fill: parent
|
||||
visible: modelData.thumbnail.photo.local.is_downloading_completed
|
||||
asynchronous: true
|
||||
onStatusChanged: {
|
||||
if (status === Image.Ready) {
|
||||
stickerPickerLoadedTimer.restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Image {
|
||||
id: singleStickerImage
|
||||
source: modelData.sticker.local.is_downloading_completed ? modelData.sticker.local.path : ""
|
||||
anchors.fill: parent
|
||||
visible: modelData.sticker.local.is_downloading_completed
|
||||
}
|
||||
Text {
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
font.pixelSize: Theme.fontSizeHuge
|
||||
color: Theme.primaryColor
|
||||
anchors.fill: parent
|
||||
maximumLineCount: 1
|
||||
elide: Text.ElideRight
|
||||
text: Emoji.emojify(modelData.emoji, font.pixelSize)
|
||||
visible: !modelData.sticker.local.is_downloading_completed
|
||||
visible: !modelData.thumbnail.photo.local.is_downloading_completed
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
tdLibWrapper.sendStickerMessage(chatInformation.id, modelData.sticker.local.path);
|
||||
tdLibWrapper.sendStickerMessage(chatInformation.id, modelData.sticker.remote.id);
|
||||
stickerPickerOverlayItem.visible = false;
|
||||
attachmentOptionsRow.visible = false;
|
||||
stickerPickerLoader.active = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
width: parent.width
|
||||
spacing: Theme.paddingMedium
|
||||
|
||||
opacity: stickerPickerOverlayItem.pickerLoaded ? 0 : 1
|
||||
Behavior on opacity { NumberAnimation {} }
|
||||
visible: !stickerPickerOverlayItem.pickerLoaded
|
||||
|
||||
InfoLabel {
|
||||
id: loadingLabel
|
||||
text: qsTr("Loading stickers...")
|
||||
}
|
||||
|
||||
BusyIndicator {
|
||||
id: loadingBusyIndicator
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
running: !stickerPickerOverlayItem.pickerLoaded
|
||||
size: BusyIndicatorSize.Large
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ import "../js/functions.js" as Functions
|
|||
Page {
|
||||
id: chatPage
|
||||
allowedOrientations: Orientation.All
|
||||
backNavigation: !stickerPickerLoader.active
|
||||
|
||||
property bool loading: true;
|
||||
property bool isInitialized: false;
|
||||
|
@ -279,7 +280,7 @@ Page {
|
|||
anchors.fill: parent
|
||||
|
||||
PullDownMenu {
|
||||
visible: chatInformation.id !== chatPage.myUserId
|
||||
visible: chatInformation.id !== chatPage.myUserId && !stickerPickerLoader.active
|
||||
MenuItem {
|
||||
id: muteChatMenuItem
|
||||
onClicked: {
|
||||
|
@ -945,10 +946,14 @@ Page {
|
|||
}
|
||||
}
|
||||
|
||||
// StickerPicker {
|
||||
// id: stickerPicker
|
||||
// visible: false
|
||||
// }
|
||||
Loader {
|
||||
id: stickerPickerLoader
|
||||
active: false
|
||||
asynchronous: true
|
||||
anchors.fill: parent
|
||||
source: "../components/StickerPicker.qml"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Column {
|
||||
|
@ -1050,17 +1055,15 @@ Page {
|
|||
}
|
||||
HighlightImage {
|
||||
source: "../../images/icon-m-sticker.png"
|
||||
width: documentAttachmentButton.width
|
||||
height: documentAttachmentButton.height
|
||||
width: Theme.itemSizeSmall
|
||||
height: Theme.itemSizeSmall
|
||||
color: Theme.primaryColor
|
||||
highlightColor: Theme.highlightColor
|
||||
highlighted: stickerPicker.visible
|
||||
highlighted: stickerPickerLoader.active
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
//console.log("RECENT STICKERS: " + JSON.stringify(stickerManager.getRecentStickers()));
|
||||
//console.log("INSTALLED SETS: " + JSON.stringify(stickerManager.getInstalledStickerSets()));
|
||||
stickerPicker.visible = !stickerPicker.visible;
|
||||
stickerPickerLoader.active = !stickerPickerLoader.active;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1198,10 +1201,11 @@ Page {
|
|||
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: Theme.paddingSmall
|
||||
enabled: !(attachmentPreviewRow.visible || stickerPicker.visible)
|
||||
enabled: !attachmentPreviewRow.visible
|
||||
onClicked: {
|
||||
if (attachmentOptionsRow.visible) {
|
||||
attachmentOptionsRow.visible = false;
|
||||
stickerPickerLoader.active = false;
|
||||
} else {
|
||||
attachmentOptionsRow.visible = true;
|
||||
}
|
||||
|
|
|
@ -107,4 +107,14 @@ void StickerManager::handleStickerSetReceived(const QVariantMap &stickerSet)
|
|||
this->stickerSets.insert(stickerSetId, stickerSet);
|
||||
int setIndex = this->stickerSetMap.value(stickerSetId).toInt();
|
||||
this->installedStickerSets.replace(setIndex, stickerSet);
|
||||
QVariantList stickerList = stickerSet.value("stickers").toList();
|
||||
QListIterator<QVariant> stickerIterator(stickerList);
|
||||
while (stickerIterator.hasNext()) {
|
||||
QVariantMap singleSticker = stickerIterator.next().toMap();
|
||||
QVariantMap thumbnailFile = singleSticker.value("thumbnail").toMap().value("photo").toMap();
|
||||
QVariantMap thumbnailLocalFile = thumbnailFile.value("local").toMap();
|
||||
if (!thumbnailLocalFile.value("is_downloading_completed").toBool()) {
|
||||
tdLibWrapper->downloadFile(thumbnailFile.value("id").toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -337,9 +337,9 @@ void TDLibWrapper::sendDocumentMessage(const QString &chatId, const QString &fil
|
|||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::sendStickerMessage(const QString &chatId, const QString &filePath, const QString &replyToMessageId)
|
||||
void TDLibWrapper::sendStickerMessage(const QString &chatId, const QString &fileId, const QString &replyToMessageId)
|
||||
{
|
||||
LOG("Sending sticker message" << chatId << filePath << replyToMessageId);
|
||||
LOG("Sending sticker message" << chatId << fileId << replyToMessageId);
|
||||
QVariantMap requestObject;
|
||||
requestObject.insert(_TYPE, "sendMessage");
|
||||
requestObject.insert("chat_id", chatId);
|
||||
|
@ -350,8 +350,8 @@ void TDLibWrapper::sendStickerMessage(const QString &chatId, const QString &file
|
|||
inputMessageContent.insert(_TYPE, "inputMessageSticker");
|
||||
|
||||
QVariantMap stickerInputFile;
|
||||
stickerInputFile.insert(_TYPE, "inputFileLocal");
|
||||
stickerInputFile.insert("path", filePath);
|
||||
stickerInputFile.insert(_TYPE, "inputFileRemote");
|
||||
stickerInputFile.insert("id", fileId);
|
||||
|
||||
inputMessageContent.insert("sticker", stickerInputFile);
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ public:
|
|||
Q_INVOKABLE void sendPhotoMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void sendVideoMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void sendDocumentMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void sendStickerMessage(const QString &chatId, const QString &filePath, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void sendStickerMessage(const QString &chatId, const QString &fileId, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void getMessage(const QString &chatId, const QString &messageId);
|
||||
Q_INVOKABLE void setOptionInteger(const QString &optionName, const int &optionValue);
|
||||
Q_INVOKABLE void setChatNotificationSettings(const QString &chatId, const QVariantMap ¬ificationSettings);
|
||||
|
|
|
@ -529,6 +529,10 @@
|
|||
<source>Recently used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading stickers...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VideoPage</name>
|
||||
|
|
|
@ -529,6 +529,10 @@
|
|||
<source>Recently used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading stickers...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VideoPage</name>
|
||||
|
|
|
@ -529,6 +529,10 @@
|
|||
<source>Recently used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading stickers...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VideoPage</name>
|
||||
|
|
|
@ -529,6 +529,10 @@
|
|||
<source>Recently used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading stickers...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VideoPage</name>
|
||||
|
|
|
@ -529,6 +529,10 @@
|
|||
<source>Recently used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading stickers...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VideoPage</name>
|
||||
|
|
|
@ -529,6 +529,10 @@
|
|||
<source>Recently used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading stickers...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VideoPage</name>
|
||||
|
|
|
@ -529,6 +529,10 @@
|
|||
<source>Recently used</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading stickers...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VideoPage</name>
|
||||
|
|
Loading…
Reference in a new issue