Warning, /pim/merkuro/src/mail/qml/FolderView.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2021 Carl Schwan <carlschwan@kde.org>
0002 // SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0003 
0004 import QtQuick 2.15
0005 import QtQuick.Layouts 1.15
0006 import org.kde.kirigami 2.14 as Kirigami
0007 import QtQuick.Controls 2.15 as QQC2
0008 import Qt.labs.platform 1.1
0009 import QtQuick.Dialogs 6.2
0010 import org.kde.merkuro.mail 1.0
0011 import org.kde.kitemmodels 1.0 as KItemModels
0012 import './private'
0013 
0014 Kirigami.ScrollablePage {
0015     id: folderView
0016     title: MailManager.selectedFolderName
0017 
0018     property var collection
0019 
0020     Loader {
0021         id: mailSaveLoader
0022 
0023         active: false
0024         onLoaded: item.open();
0025         
0026         sourceComponent: FileDialog {
0027             title: i18n("Save Message - Merkuro-Mail")
0028             nameFilters: [i18n("email messages (*.mbox)")]
0029             currentFolder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
0030             fileMode: fileDialog.SaveFile
0031 
0032             onAccepted: {
0033                 if (fileUrl) {
0034                     MailManager.saveMail(fileUrl, folderView.collection);
0035                 }
0036                 mailSaveLoader.active = false;
0037             }
0038             onRejected: mailSaveLoader.active = false;
0039         }
0040     }
0041 
0042     actions: Kirigami.Action {
0043         icon.name: 'mail-send'
0044         text: i18nc("@action:menu", "Create")
0045         onTriggered: applicationWindow().pageStack.pushDialogLayer(Qt.resolvedUrl("./MailComposer.qml"))
0046     }
0047 
0048     ListView {
0049         id: mails
0050         model: MailManager.folderModel
0051         currentIndex: -1
0052 
0053         Component {
0054             id: contextMenu
0055             QQC2.Menu {
0056                 property int row
0057                 property var status
0058 
0059                 QQC2.Menu {
0060                     title: i18nc("@action:menu", "Mark Message")
0061                     QQC2.MenuItem {
0062                         text: i18n("Mark Message as Read")
0063                     }
0064                     QQC2.MenuItem {
0065                         text: i18n("Mark Message as Unread")
0066                     }
0067 
0068                     QQC2.MenuSeparator {}
0069 
0070                     QQC2.MenuItem {
0071                         text: status.isImportant ? i18n("Don't Mark as Important") : i18n("Mark as Important")
0072                     }
0073                 }
0074 
0075                 QQC2.MenuItem {
0076                     icon.name: 'delete'
0077                     text: i18n("Move to Trash")
0078                 }
0079 
0080                 QQC2.MenuItem {
0081                     icon.name: 'edit-move'
0082                     text: i18n("Move Message to...")
0083                 }
0084 
0085                 QQC2.MenuItem {
0086                     icon.name: 'edit-copy'
0087                     text: i18n("Copy Message to...")
0088                 }
0089 
0090                 QQC2.MenuItem {
0091                     icon.name: 'view-calendar'
0092                     text: i18n("Add Followup Reminder")
0093                 }
0094 
0095                 QQC2.MenuItem {
0096                     icon.name: 'document-save-as'
0097                     text: i18nc("@action:button", "Save as...")
0098                     onClicked: mailSaveLoader.active = true 
0099                 }
0100             }
0101         }
0102 
0103         Connections {
0104             target: MailManager
0105 
0106             function onFolderModelChanged() {
0107                 mails.currentIndex = -1;
0108             }
0109         }
0110 
0111         Kirigami.PlaceholderMessage {
0112             id: mailboxSelected
0113             anchors.centerIn: parent
0114             visible: MailManager.selectedFolderName === ""
0115             text: i18n("No mailbox selected")
0116             explanation: i18n("Select a mailbox from the sidebar.")
0117             icon.name: "mail-unread"
0118         }
0119 
0120         Kirigami.PlaceholderMessage {
0121             anchors.centerIn: parent
0122             visible: mails.count === 0 && !mailboxSelected.visible
0123             text: i18n("Mailbox is empty")
0124             icon.name: "mail-folder-inbox"
0125         }
0126 
0127         section.delegate: Kirigami.ListSectionHeader {
0128             required property string section
0129             label: section
0130         }
0131         section.property: "date"
0132 
0133         delegate: MailDelegate {
0134             id: mailDelegate
0135 
0136             onOpenMailRequested: {
0137                 applicationWindow().pageStack.push(Qt.resolvedUrl('ConversationViewer.qml'), {
0138                     emptyItem: mailDelegate.item,
0139                     props: {
0140                         from: mailDelegate.from,
0141                         to: mailDelegate.to,
0142                         sender: mailDelegate.sender,
0143                         item: mailDelegate.item,
0144                         title: mailDelegate.title,
0145                     }
0146                 });
0147 
0148                 if (!mailDelegate.status.isRead) {
0149                     const status = MailManager.folderModel.copyMessageStatus(mailDelegate.status);
0150                     status.isRead = true;
0151                     MailManager.folderModel.updateMessageStatus(index, status)
0152                 }
0153             }
0154 
0155             onStarMailRequested: {
0156                 const status = MailManager.folderModel.copyMessageStatus(mailDelegate.status);
0157                 status.isImportant = !status.isImportant;
0158                 MailManager.folderModel.updateMessageStatus(index, status)
0159             }
0160 
0161             onContextMenuRequested: {
0162                 const menu = contextMenu.createObject(folderView, {
0163                     row: index,
0164                     status: MailManager.folderModel.copyMessageStatus(mailDelegate.status),
0165                 });
0166                 folderView.collection = mailDelegate.item;
0167                 menu.popup();
0168             }
0169         }
0170     }
0171 }