diff options
| author | Bobby <[email protected]> | 2025-12-24 13:50:07 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2025-12-24 13:50:07 +0530 |
| commit | b77d75f05fb2059389c05f6c01484e0cd12e796e (patch) | |
| tree | e3c5521bf9ed3fcffd59960053d651091496a7ea /services | |
| parent | 81ab367f440d6f85297b2013d0c1aa57fda7e9cd (diff) | |
| download | lain-b77d75f05fb2059389c05f6c01484e0cd12e796e.tar.xz lain-b77d75f05fb2059389c05f6c01484e0cd12e796e.zip | |
feat: introduce email folder synchronization and management, refactor email services, and update UI styles
Diffstat (limited to 'services')
| -rw-r--r-- | services/emails.go | 58 | ||||
| -rw-r--r-- | services/folders.go | 22 |
2 files changed, 80 insertions, 0 deletions
diff --git a/services/emails.go b/services/emails.go new file mode 100644 index 0000000..e007f87 --- /dev/null +++ b/services/emails.go @@ -0,0 +1,58 @@ +package services + +import ( + "lain/jobs" + "lain/models" + "lain/repository" + "lain/utils/format" + "net/url" + "strings" + + "github.com/gofiber/fiber/v2" +) + +func GetEmails(userEmail, folderPath string, prefs *models.Preferences, page int) ([]fiber.Map, error) { + decodedPath, _ := url.QueryUnescape(folderPath) + + folder, err := repository.GetFolderByIMAPName(userEmail, strings.ToLower(decodedPath)) + if err != nil { + return nil, err + } + + emailCount, _ := repository.CountEmailsInFolder(userEmail, folder.ID) + if emailCount == 0 { + jobs.SyncEmails(userEmail, folder.ID, folder.IMAPName) + } + + limit := prefs.EmailsPerPage + offset := (page - 1) * limit + + messages, err := repository.GetEmailsByFolder(userEmail, folder.ID, limit, offset) + if err != nil { + return []fiber.Map{}, err + } + + var emails []fiber.Map + for _, message := range messages { + fromName := message.FromName + if fromName == "" { + fromName = message.From + } + + emails = append(emails, fiber.Map{ + "ID": message.ID, + "UID": message.UID, + "From": format.DecodeHTML(message.From), + "FromName": format.DecodeHTML(fromName), + "Subject": format.DecodeHTML(message.Subject), + "Date": message.Date, + "DateFormatted": format.FormatEmailDate(message.Date, prefs.DateFormat, prefs.TimeFormat, prefs.PrettyDates, prefs.TimeZone), + "Snippet": format.DecodeHTML(message.Snippet), + "IsRead": message.IsRead, + "IsFlagged": message.IsFlagged, + "HasAttachment": message.HasAttachment, + }) + } + + return emails, nil +} diff --git a/services/folders.go b/services/folders.go new file mode 100644 index 0000000..9555172 --- /dev/null +++ b/services/folders.go @@ -0,0 +1,22 @@ +package services + +import ( + "lain/data" + "lain/jobs" + "lain/repository" + + "github.com/gofiber/fiber/v2" +) + +func GetFolders(userEmail, activeFolder string) []fiber.Map { + count, _ := repository.CountFolders(userEmail) + if count == 0 { + jobs.SyncFolders(userEmail, data.FolderIcons) + } + + return repository.BuildFolderTree(userEmail, activeFolder) +} + +func GetFolderDisplayName(userEmail, folderPath string) string { + return repository.GetFolderDisplayName(userEmail, folderPath) +} |
