aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/qtmaildir/AccountsPage.qml
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/modules/qtmaildir/AccountsPage.qml')
-rw-r--r--desktop/modules/qtmaildir/AccountsPage.qml129
1 files changed, 129 insertions, 0 deletions
diff --git a/desktop/modules/qtmaildir/AccountsPage.qml b/desktop/modules/qtmaildir/AccountsPage.qml
new file mode 100644
index 0000000..2f82154
--- /dev/null
+++ b/desktop/modules/qtmaildir/AccountsPage.qml
@@ -0,0 +1,129 @@
+// Copyright (C) 2026 Danilo M. <danix@danix.xyz>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2 as
+// published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+import QtQuick
+import "../.."
+
+// One card per [account.<key>]: every key qtmaildir reads for an account.
+// Add appends a section with the folders most servers use; Remove asks once
+// and deletes the section. The key itself is the account's identity and is
+// not edited here.
+Column {
+ id: page
+ spacing: 10
+ Note {}
+
+ property string confirming: ""
+ property string newKey: ""
+ readonly property bool keyOk: /^[A-Za-z0-9._-]+$/.test(page.newKey) && !Qtm.accounts.includes(page.newKey)
+
+ Repeater {
+ model: Qtm.accounts
+
+ delegate: Rectangle {
+ id: card
+ required property string modelData
+ readonly property string sec: "account." + modelData
+ objectName: "account:" + modelData
+ width: page.width
+ height: body.implicitHeight + 24
+ radius: 10
+ color: Qt.alpha(Theme.surface, 0.35)
+
+ Column {
+ id: body
+ anchors { left: parent.left; right: parent.right; top: parent.top; margins: 12 }
+ spacing: 6
+
+ Item {
+ width: parent.width
+ height: 32
+ Rectangle {
+ id: swatch
+ anchors { left: parent.left; verticalCenter: parent.verticalCenter }
+ width: 14; height: 14; radius: 4
+ color: Qtm.get(card.sec, "color") || Theme.overlay
+ }
+ Text {
+ anchors { left: swatch.right; leftMargin: 10; verticalCenter: parent.verticalCenter }
+ text: card.modelData
+ color: Theme.text
+ font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 1; bold: true }
+ }
+ Button {
+ anchors { right: parent.right; verticalCenter: parent.verticalCenter }
+ danger: true
+ text: page.confirming === card.modelData ? "Confirm" : "Remove"
+ onClicked: {
+ if (page.confirming === card.modelData) { page.confirming = ""; Qtm.removeAccount(card.modelData); }
+ else page.confirming = card.modelData;
+ }
+ }
+ }
+
+ Setting { section: card.sec; key: "name"; label: "Name" }
+ Setting { section: card.sec; key: "address"; label: "Address" }
+ Setting { section: card.sec; key: "maildir"; label: "Maildir"; hint: "Relative to notmuch's mail root." }
+ Setting { section: card.sec; key: "inbox"; label: "Inbox"; placeholder: "Inbox" }
+ Setting { section: card.sec; key: "sent"; label: "Sent"; placeholder: "unset: no Sent button" }
+ Setting { section: card.sec; key: "drafts"; label: "Drafts"; placeholder: "unset: no Drafts button" }
+ Setting { section: card.sec; key: "trash"; label: "Trash"; placeholder: "required for Delete" }
+ Setting { section: card.sec; key: "spam"; label: "Spam"; placeholder: "required for Mark spam" }
+ Setting { section: card.sec; key: "send_command"; label: "Send command"; placeholder: "unset: receive only"
+ hint: "Run without a shell: an absolute path and plain arguments, e.g. /usr/bin/msmtp -a work -t." }
+ Setting { section: card.sec; key: "label"; label: "Chip label"; placeholder: card.modelData }
+ Setting { section: card.sec; key: "color"; label: "Chip colour"; placeholder: "generated"
+ hint: "#rrggbb" }
+ Setting { section: card.sec; key: "channel"; label: "mbsync channel"; placeholder: card.modelData }
+ }
+ }
+ }
+
+ Heading { text: "Add an account" }
+ Item {
+ width: page.width
+ height: 34
+ Rectangle {
+ anchors { left: parent.left; right: addBtn.left; rightMargin: 8; top: parent.top; bottom: parent.bottom }
+ radius: 8
+ color: Theme.surface
+ TextInput {
+ anchors { fill: parent; leftMargin: 10; rightMargin: 10 }
+ verticalAlignment: TextInput.AlignVCenter
+ clip: true
+ selectByMouse: true
+ color: Theme.text
+ font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 2 }
+ text: page.newKey
+ onTextEdited: page.newKey = text
+ onAccepted: addBtn.clicked(null)
+ Text {
+ anchors.verticalCenter: parent.verticalCenter
+ visible: parent.text === ""
+ text: "account key: letters, digits, dot, dash, underscore"
+ color: Theme.overlay
+ font: parent.font
+ }
+ }
+ }
+ Button {
+ id: addBtn
+ anchors { right: parent.right; verticalCenter: parent.verticalCenter }
+ text: "Add"
+ enabled: page.keyOk
+ onClicked: {
+ if (!page.keyOk) return;
+ Qtm.addAccount(page.newKey, [["maildir", page.newKey], ["trash", "Trash"], ["spam", "Spam"]]);
+ page.newKey = "";
+ }
+ }
+ }
+}