mirror of
https://github.com/ghostersk/gowebmail.git
synced 2026-06-17 07:59:38 +01:00
filter added.
This commit is contained in:
@@ -1081,6 +1081,40 @@ func (d *DB) SetFolderVisibility(folderID, userID int64, isHidden, syncEnabled b
|
||||
return err
|
||||
}
|
||||
|
||||
// CountFolderMessages returns how many messages are in a folder (owned by user).
|
||||
func (d *DB) CountFolderMessages(folderID, userID int64) (int, error) {
|
||||
var count int
|
||||
err := d.sql.QueryRow(`
|
||||
SELECT COUNT(*) FROM messages m
|
||||
JOIN folders f ON f.id=m.folder_id
|
||||
JOIN email_accounts a ON a.id=f.account_id
|
||||
WHERE m.folder_id=? AND a.user_id=?`, folderID, userID).Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
// DeleteFolder removes a folder and all its messages (cascade).
|
||||
func (d *DB) DeleteFolder(folderID, userID int64) error {
|
||||
_, err := d.sql.Exec(`
|
||||
DELETE FROM folders WHERE id=?
|
||||
AND account_id IN (SELECT id FROM email_accounts WHERE user_id=?)`,
|
||||
folderID, userID)
|
||||
return err
|
||||
}
|
||||
|
||||
// MoveFolderContents moves all messages from one folder to another (both must belong to user).
|
||||
func (d *DB) MoveFolderContents(fromID, toID, userID int64) (int64, error) {
|
||||
res, err := d.sql.Exec(`
|
||||
UPDATE messages SET folder_id=?
|
||||
WHERE folder_id=?
|
||||
AND folder_id IN (SELECT f.id FROM folders f JOIN email_accounts a ON a.id=f.account_id WHERE a.user_id=?)`,
|
||||
toID, fromID, userID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
n, _ := res.RowsAffected()
|
||||
return n, nil
|
||||
}
|
||||
|
||||
func (d *DB) GetFolderByID(folderID int64) (*models.Folder, error) {
|
||||
f := &models.Folder{}
|
||||
var isHidden, syncEnabled int
|
||||
|
||||
@@ -390,6 +390,39 @@ func (h *APIHandler) SetFolderVisibility(w http.ResponseWriter, r *http.Request)
|
||||
h.writeJSON(w, map[string]bool{"ok": true})
|
||||
}
|
||||
|
||||
func (h *APIHandler) CountFolderMessages(w http.ResponseWriter, r *http.Request) {
|
||||
userID := middleware.GetUserID(r)
|
||||
folderID := pathInt64(r, "id")
|
||||
count, err := h.db.CountFolderMessages(folderID, userID)
|
||||
if err != nil {
|
||||
h.writeError(w, http.StatusInternalServerError, "count failed")
|
||||
return
|
||||
}
|
||||
h.writeJSON(w, map[string]int{"count": count})
|
||||
}
|
||||
|
||||
func (h *APIHandler) DeleteFolder(w http.ResponseWriter, r *http.Request) {
|
||||
userID := middleware.GetUserID(r)
|
||||
folderID := pathInt64(r, "id")
|
||||
if err := h.db.DeleteFolder(folderID, userID); err != nil {
|
||||
h.writeError(w, http.StatusInternalServerError, "delete failed")
|
||||
return
|
||||
}
|
||||
h.writeJSON(w, map[string]bool{"ok": true})
|
||||
}
|
||||
|
||||
func (h *APIHandler) MoveFolderContents(w http.ResponseWriter, r *http.Request) {
|
||||
userID := middleware.GetUserID(r)
|
||||
fromID := pathInt64(r, "id")
|
||||
toID := pathInt64(r, "toId")
|
||||
moved, err := h.db.MoveFolderContents(fromID, toID, userID)
|
||||
if err != nil {
|
||||
h.writeError(w, http.StatusInternalServerError, "move failed")
|
||||
return
|
||||
}
|
||||
h.writeJSON(w, map[string]interface{}{"ok": true, "moved": moved})
|
||||
}
|
||||
|
||||
func (h *APIHandler) SetAccountSyncSettings(w http.ResponseWriter, r *http.Request) {
|
||||
userID := middleware.GetUserID(r)
|
||||
accountID := pathInt64(r, "id")
|
||||
|
||||
Reference in New Issue
Block a user