46 lines
1.9 KiB
Go
46 lines
1.9 KiB
Go
package db
|
|
|
|
// CreateMailboxFolder records a custom folder's existence even before it holds any
|
|
// messages — idempotent (a folder a filter rule already delivered into can be
|
|
// explicitly created too, without erroring on the duplicate).
|
|
func (d *DB) CreateMailboxFolder(mailboxID int64, name string) error {
|
|
_, err := d.Exec(`INSERT OR IGNORE INTO esrv_mailbox_folders (mailbox_id, name) VALUES (?, ?)`, mailboxID, name)
|
|
return err
|
|
}
|
|
|
|
// DeleteMailboxFolder removes a custom folder's record. Callers are responsible for
|
|
// relocating any messages still in it first (see MoveAllMessagesInFolder) — this
|
|
// alone doesn't touch esrv_mailbox_messages.
|
|
func (d *DB) DeleteMailboxFolder(mailboxID int64, name string) error {
|
|
_, err := d.Exec(`DELETE FROM esrv_mailbox_folders WHERE mailbox_id = ? AND name = ?`, mailboxID, name)
|
|
return err
|
|
}
|
|
|
|
// ListMailboxFolders returns a mailbox's explicitly-created custom folders — combine
|
|
// with DistinctFoldersForMailbox (message-derived) for the full folder list, since a
|
|
// folder can exist via either path (or both).
|
|
func (d *DB) ListMailboxFolders(mailboxID int64) ([]string, error) {
|
|
rows, err := d.Query(`SELECT name FROM esrv_mailbox_folders WHERE mailbox_id = ? ORDER BY name`, mailboxID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var out []string
|
|
for rows.Next() {
|
|
var name string
|
|
if err := rows.Scan(&name); err != nil {
|
|
return nil, err
|
|
}
|
|
out = append(out, name)
|
|
}
|
|
return out, rows.Err()
|
|
}
|
|
|
|
// MoveAllMessagesInFolder reassigns every message in one folder to another — used
|
|
// when deleting a custom folder, so its messages land in INBOX instead of becoming
|
|
// orphaned in a folder nothing lists anymore.
|
|
func (d *DB) MoveAllMessagesInFolder(mailboxID int64, from, to string) error {
|
|
_, err := d.Exec(`UPDATE esrv_mailbox_messages SET folder = ? WHERE mailbox_id = ? AND folder = ?`, to, mailboxID, from)
|
|
return err
|
|
}
|