mirror of
https://github.com/neilalexander/yggmail.git
synced 2026-04-20 00:56:28 +03:00
Support for IMAP MOVE
This commit is contained in:
@@ -30,6 +30,7 @@ type TableMails struct {
|
||||
updateMailFlags *sql.Stmt
|
||||
deleteMail *sql.Stmt
|
||||
expungeMail *sql.Stmt
|
||||
moveMail *sql.Stmt
|
||||
}
|
||||
|
||||
const mailsSchema = `
|
||||
@@ -94,7 +95,7 @@ const selectIDForSeqStmt = `
|
||||
|
||||
const selectMailNextID = `
|
||||
SELECT IFNULL(MAX(id)+1,1) AS id FROM mails
|
||||
WHERE mailbox = $1
|
||||
WHERE mailbox = $1
|
||||
`
|
||||
|
||||
const updateMailFlagsStmt = `
|
||||
@@ -109,6 +110,10 @@ const expungeMailStmt = `
|
||||
DELETE FROM mails WHERE mailbox = $1 AND deleted = 1
|
||||
`
|
||||
|
||||
const moveMailStmt = `
|
||||
UPDATE mails SET mailbox = $1 WHERE mailbox = $2 AND id = $3
|
||||
`
|
||||
|
||||
func NewTableMails(db *sql.DB, writer *Writer) (*TableMails, error) {
|
||||
t := &TableMails{
|
||||
db: db,
|
||||
@@ -162,6 +167,10 @@ func NewTableMails(db *sql.DB, writer *Writer) (*TableMails, error) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("db.Prepare(selectMailUnseenStmt): %w", err)
|
||||
}
|
||||
t.moveMail, err = db.Prepare(moveMailStmt)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("db.Prepare(moveMailStmt): %w", err)
|
||||
}
|
||||
return t, nil
|
||||
}
|
||||
|
||||
@@ -246,3 +255,10 @@ func (t *TableMails) MailCount(mailbox string) (int, error) {
|
||||
err := t.countMails.QueryRow(mailbox).Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
func (t *TableMails) MailMove(mailbox string, id int, destination string) error {
|
||||
return t.writer.Do(t.db, nil, func(txn *sql.Tx) error {
|
||||
_, err := t.moveMail.Exec(destination, mailbox, id)
|
||||
return err
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user