// SPDX-FileCopyrightText: 2023 James Graham // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL import QtQuick import QtQuick.Controls as QQC2 import QtQuick.Layouts import Qt.labs.platform as Platform import org.kde.kirigami as Kirigami import org.kde.kirigamiaddons.labs.components as Components import org.kde.neochat Components.AlbumMaximizeComponent { id: root /** * @brief The current room that user is viewing. */ required property NeoChatRoom currentRoom readonly property string currentEventId: model.data(model.index(content.currentIndex, 0), MessageEventModel.EventIdRole) readonly property var currentAuthor: model.data(model.index(content.currentIndex, 0), MessageEventModel.AuthorRole) readonly property var currentTime: model.data(model.index(content.currentIndex, 0), MessageEventModel.TimeRole) readonly property var currentProgressInfo: model.data(model.index(content.currentIndex, 0), MessageEventModel.ProgressInfoRole) downloadAction: Components.DownloadAction { id: downloadAction onTriggered: { currentRoom.downloadFile(root.currentEventId, Platform.StandardPaths.writableLocation(Platform.StandardPaths.CacheLocation) + "/" + root.currentEventId.replace(":", "_").replace("/", "_").replace("+", "_") + currentRoom.fileNameToDownload(root.currentEventId)); } } Connections { target: currentRoom function onFileTransferProgress(id, progress, total) { if (id == root.currentEventId) { downloadAction.progress = progress / total * 100.0; } } } Connections { target: content function onCurrentIndexChanged() { downloadAction.progress = currentProgressInfo.progress / currentProgressInfo.total * 100.0; } } leading: RowLayout { Components.Avatar { id: userAvatar implicitWidth: Kirigami.Units.iconSizes.medium implicitHeight: Kirigami.Units.iconSizes.medium name: root.currentAuthor.name ?? root.currentAuthor.displayName source: root.currentAuthor.avatarSource color: root.currentAuthor.color } ColumnLayout { spacing: 0 QQC2.Label { id: userLabel text: root.currentAuthor.name ?? root.currentAuthor.displayName color: root.currentAuthor.color font.weight: Font.Bold elide: Text.ElideRight } QQC2.Label { id: dateTimeLabel text: root.currentTime.toLocaleString(Qt.locale(), Locale.ShortFormat) color: Kirigami.Theme.disabledTextColor elide: Text.ElideRight } } } onItemRightClicked: RoomManager.viewEventMenu(root.currentEventId, root.currentRoom) onSaveItem: { var dialog = saveAsDialog.createObject(QQC2.ApplicationWindow.overlay); dialog.open(); dialog.currentFile = dialog.folder + "/" + currentRoom.fileNameToDownload(root.currentEventId); } Connections { target: RoomManager function onCloseFullScreen() { root.close(); } } Component { id: saveAsDialog Platform.FileDialog { fileMode: Platform.FileDialog.SaveFile folder: root.saveFolder onAccepted: { Config.lastSaveDirectory = folder; Config.save(); if (!currentFile) { return; } currentRoom.downloadFile(root.currentEventId, currentFile); } } } }