Warning, /plasma-mobile/raven/src/contents/ui/mailpartview/MailPartModel.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2016 Michael Bohlender <michael.bohlender@kdemail.net> 0002 // SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu> 0003 // SPDX-License-Identifier: GPL-2.0-or-later 0004 0005 import QtQuick 2.15 0006 import QtQuick.Controls 2.15 as QQC2 0007 import QtQuick.Layouts 1.15 0008 import QtQml.Models 2.2 0009 0010 import org.kde.raven 1.0 0011 import org.kde.kirigami 2.19 as Kirigami 0012 0013 DelegateModel { 0014 id: root 0015 0016 property string searchString: "" 0017 property bool autoLoadImages: false 0018 0019 delegate: Item { 0020 id: partColumn 0021 0022 width: ListView.view.width 0023 height: childrenRect.height 0024 0025 function getType(securityLevel) { 0026 if (securityLevel == "good") { 0027 return Kirigami.MessageType.Positive 0028 } 0029 if (securityLevel == "bad") { 0030 return Kirigami.MessageType.Error 0031 } 0032 if (securityLevel == "notsogood") { 0033 return Kirigami.MessageType.Warning 0034 } 0035 return Kirigami.MessageType.Information 0036 } 0037 0038 function getColor(securityLevel) { 0039 if (securityLevel == "good") { 0040 return Kirigami.Theme.positiveTextColor 0041 } 0042 if (securityLevel == "bad") { 0043 return Kirigami.Theme.negativeTextColor 0044 } 0045 if (securityLevel == "notsogood") { 0046 return Kirigami.Theme.neutralTextColor 0047 } 0048 return Kirigami.Theme.disabledColor 0049 } 0050 0051 function getDetails(signatureDetails) { 0052 let details = ""; 0053 if (signatureDetails.keyMissing) { 0054 details += i18n("This message has been signed using the key %1.", signatureDetails.keyId) + "\n"; 0055 details += i18n("The key details are not available.") + "\n"; 0056 } else { 0057 details += i18n("This message has been signed using the key %1 by %2.", signatureDetails.keyId, signatureDetails.signer) + "\n"; 0058 if (signatureDetails.keyRevoked) { 0059 details += i18n("The key was revoked.") + "\n" 0060 } 0061 if (signatureDetails.keyExpired) { 0062 details += i18n("The key has expired.") + "\n" 0063 } 0064 if (signatureDetails.keyIsTrusted) { 0065 details += i18n("You are trusting this key.") + "\n" 0066 } 0067 if (!signatureDetails.signatureIsGood && !signatureDetails.keyRevoked && !signatureDetails.keyExpired && !signatureDetails.keyIsTrusted) { 0068 details += i18n("The signature is invalid.") + "\n" 0069 } 0070 } 0071 return details 0072 } 0073 0074 ColumnLayout { 0075 id: buttons 0076 anchors { 0077 left: parent.left 0078 right: parent.right 0079 top: parent.top 0080 } 0081 spacing: Kirigami.Units.smallSpacing 0082 0083 Kirigami.InlineMessage { 0084 id: encryptedButton 0085 Layout.fillWidth: true 0086 Layout.maximumWidth: parent.width 0087 icon.name: 'mail-encrypted' 0088 type: getType(model.encryptionSecurityLevel) 0089 visible: model.encrypted 0090 text: model.encryptionDetails.keyId == "" ? i18n("This message is encrypted but we don't have the key for it.") : i18n("This message is encrypted to the key: %1", model.encryptionDetails.keyId); 0091 } 0092 Kirigami.InlineMessage { 0093 id: signedButton 0094 Layout.fillWidth: true 0095 Layout.maximumWidth: parent.width 0096 icon.name: 'mail-signed' 0097 visible: model.signed 0098 type: getType(model.signatureSecurityLevel) 0099 text: getDetails(model.signatureDetails) 0100 } 0101 0102 Loader { 0103 id: partLoader 0104 Layout.preferredHeight: item ? item.contentHeight : 0 0105 Layout.maximumWidth: parent.width 0106 Layout.fillWidth: true 0107 Binding { 0108 target: partLoader.item 0109 property: "searchString" 0110 value: root.searchString 0111 when: partLoader.status === Loader.Ready 0112 } 0113 Binding { 0114 target: partLoader.item 0115 property: "autoLoadImages" 0116 value: root.autoLoadImages 0117 when: partLoader.status === Loader.Ready 0118 } 0119 } 0120 Component.onCompleted: { 0121 switch (model.type) { 0122 case "plain": 0123 partLoader.setSource("TextPart.qml", { 0124 content: model.content, 0125 embedded: model.embedded, 0126 type: model.type 0127 }) 0128 break 0129 case "html": 0130 partLoader.setSource("HtmlPart.qml", { 0131 content: model.content, 0132 }) 0133 break; 0134 case "error": 0135 partLoader.setSource("ErrorPart.qml", { 0136 errorType: model.errorType, 0137 errorString: model.errorString, 0138 }) 0139 break; 0140 case "encapsulated": 0141 partLoader.setSource("MailPart.qml", { 0142 rootIndex: root.modelIndex(index), 0143 model: root.model, 0144 sender: model.sender, 0145 date: model.date, 0146 }) 0147 break; 0148 case "ical": 0149 partLoader.setSource("ICalPart.qml", { 0150 content: model.content, 0151 }) 0152 break; 0153 } 0154 } 0155 } 0156 } 0157 }