Warning, /network/neochat/src/qml/NeochatMaximizeComponent.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 James Graham <james.h.graham@protonmail.com>
0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0003 
0004 import QtQuick
0005 import QtQuick.Controls as QQC2
0006 import QtQuick.Layouts
0007 import Qt.labs.platform as Platform
0008 
0009 import org.kde.kirigami as Kirigami
0010 import org.kde.kirigamiaddons.labs.components as Components
0011 
0012 import org.kde.neochat
0013 import org.kde.neochat.config
0014 
0015 Components.AlbumMaximizeComponent {
0016     id: root
0017 
0018     /**
0019      * @brief The current room that user is viewing.
0020      */
0021     required property NeoChatRoom currentRoom
0022 
0023     readonly property string currentEventId: model.data(model.index(content.currentIndex, 0), MessageEventModel.EventIdRole)
0024 
0025     readonly property var currentAuthor: model.data(model.index(content.currentIndex, 0), MessageEventModel.AuthorRole)
0026 
0027     readonly property var currentTime: model.data(model.index(content.currentIndex, 0), MessageEventModel.TimeRole)
0028 
0029     readonly property var currentDelegateType: model.data(model.index(content.currentIndex, 0), MessageEventModel.DelegateTypeRole)
0030 
0031     readonly property string currentPlainText: model.data(model.index(content.currentIndex, 0), MessageEventModel.PlainText)
0032 
0033     readonly property var currentMimeType: model.data(model.index(content.currentIndex, 0), MessageEventModel.MimeTypeRole)
0034 
0035     readonly property var currentProgressInfo: model.data(model.index(content.currentIndex, 0), MessageEventModel.ProgressInfoRole)
0036 
0037     downloadAction: Components.DownloadAction {
0038         id: downloadAction
0039         onTriggered: {
0040             currentRoom.downloadFile(root.currentEventId, Platform.StandardPaths.writableLocation(Platform.StandardPaths.CacheLocation) + "/" + root.currentEventId.replace(":", "_").replace("/", "_").replace("+", "_") + currentRoom.fileNameToDownload(root.currentEventId));
0041         }
0042     }
0043 
0044     Connections {
0045         target: currentRoom
0046 
0047         function onFileTransferProgress(id, progress, total) {
0048             if (id == root.currentEventId) {
0049                 downloadAction.progress = progress / total * 100.0;
0050             }
0051         }
0052     }
0053 
0054     Connections {
0055         target: content
0056 
0057         function onCurrentIndexChanged() {
0058             downloadAction.progress = currentProgressInfo.progress / currentProgressInfo.total * 100.0;
0059         }
0060     }
0061 
0062     leading: RowLayout {
0063         Components.Avatar {
0064             id: userAvatar
0065             implicitWidth: Kirigami.Units.iconSizes.medium
0066             implicitHeight: Kirigami.Units.iconSizes.medium
0067 
0068             name: root.currentAuthor.name ?? root.currentAuthor.displayName
0069             source: root.currentAuthor.avatarSource
0070             color: root.currentAuthor.color
0071         }
0072         ColumnLayout {
0073             spacing: 0
0074             QQC2.Label {
0075                 id: userLabel
0076 
0077                 text: root.currentAuthor.name ?? root.currentAuthor.displayName
0078                 color: root.currentAuthor.color
0079                 font.weight: Font.Bold
0080                 elide: Text.ElideRight
0081             }
0082             QQC2.Label {
0083                 id: dateTimeLabel
0084                 text: root.currentTime.toLocaleString(Qt.locale(), Locale.ShortFormat)
0085                 color: Kirigami.Theme.disabledTextColor
0086                 elide: Text.ElideRight
0087             }
0088         }
0089     }
0090     onItemRightClicked: RoomManager.viewEventMenu(root.currentEventId, root.currentAuthor, root.currentDelegateType, root.currentPlainText, "", "", root.currentMimeType, root.currentProgressInfo)
0091 
0092     onSaveItem: {
0093         var dialog = saveAsDialog.createObject(QQC2.ApplicationWindow.overlay);
0094         dialog.open();
0095         dialog.currentFile = dialog.folder + "/" + currentRoom.fileNameToDownload(root.currentEventId);
0096     }
0097 
0098     Connections {
0099         target: RoomManager
0100         function onCloseFullScreen() {
0101             root.close();
0102         }
0103     }
0104 
0105     Component {
0106         id: saveAsDialog
0107         Platform.FileDialog {
0108             fileMode: FileDialog.SaveFile
0109             folder: root.saveFolder
0110             onAccepted: {
0111                 Config.lastSaveDirectory = folder;
0112                 Config.save();
0113                 if (!currentFile) {
0114                     return;
0115                 }
0116                 currentRoom.downloadFile(rooteventId, currentFile);
0117             }
0118         }
0119     }
0120 }