feat: Labels-Feature vollständig entfernen (PROJ-9)
Backend: - internal/labelstore/ gelöscht (Store, Schema, CRUD) - internal/api/label_handlers.go gelöscht (alle Label-Routen) - internal/api/server.go: labels-Feld + SetLabels() entfernt - internal/api/search_handlers.go: label_id-Filter + Enrichment entfernt - internal/index/index.go: LabelID aus SearchRequest entfernt - internal/imapserver/server.go: labels-Feld + labelbasierte Mailboxen entfernt - cmd/archivmail/main.go: labelstore-Init + SetLabels() entfernt - cmd/archivmail/version.go: labelstore-Modul entfernt, index-Kommentar korrigiert Frontend: - LabelList.tsx, LabelPicker.tsx, LabelsTab.tsx gelöscht - src/lib/api/system.ts: MailLabel/LabelRule-Typen + alle Label-Funktionen entfernt - src/lib/api/index.ts: Label-Exports entfernt - src/app/search/page.tsx: LabelList + selectedLabelId State entfernt - src/app/mail/[id]/page.tsx: LabelPicker + Labels-State entfernt - src/app/admin/page.tsx: LabelsTab + alle Label-Handler/State entfernt Docs: - features/PROJ-9: Status auf Removed gesetzt - features/INDEX.md: PROJ-9 auf Removed gesetzt Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,6 @@ import (
|
||||
"github.com/archivmail/config"
|
||||
"github.com/archivmail/internal/audit"
|
||||
"github.com/archivmail/internal/auth"
|
||||
"github.com/archivmail/internal/labelstore"
|
||||
"github.com/archivmail/internal/storage"
|
||||
"github.com/archivmail/internal/userstore"
|
||||
"github.com/archivmail/pkg/mailparser"
|
||||
@@ -44,7 +43,6 @@ type Server struct {
|
||||
cfg config.IMAPServerConfig
|
||||
mailStore *storage.Store
|
||||
users *userstore.Store
|
||||
labels *labelstore.Store
|
||||
audit *audit.Logger
|
||||
authMgr *auth.Manager
|
||||
logger *slog.Logger
|
||||
@@ -66,7 +64,6 @@ func New(
|
||||
cfg config.IMAPServerConfig,
|
||||
mailStore *storage.Store,
|
||||
users *userstore.Store,
|
||||
labels *labelstore.Store,
|
||||
auditLog *audit.Logger,
|
||||
authMgr *auth.Manager,
|
||||
logger *slog.Logger,
|
||||
@@ -76,7 +73,6 @@ func New(
|
||||
cfg: cfg,
|
||||
mailStore: mailStore,
|
||||
users: users,
|
||||
labels: labels,
|
||||
audit: auditLog,
|
||||
authMgr: authMgr,
|
||||
logger: logger,
|
||||
@@ -428,20 +424,8 @@ func (sess *session) cmdList(tag string, args string) {
|
||||
ref, pattern := parseListArgs(args)
|
||||
_ = ref
|
||||
|
||||
// Build mailbox list: INBOX + label-based sub-folders
|
||||
mailboxes := []string{"INBOX"}
|
||||
|
||||
if sess.tenantID != nil {
|
||||
labels, err := sess.server.labels.GetLabelsForUser(
|
||||
context.Background(), sess.userID, *sess.tenantID,
|
||||
)
|
||||
if err == nil {
|
||||
for _, l := range labels {
|
||||
mailboxes = append(mailboxes, "INBOX/"+l.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, mbox := range mailboxes {
|
||||
if matchMailbox(pattern, mbox) {
|
||||
attrs := ""
|
||||
@@ -728,47 +712,13 @@ func (sess *session) loadMailsForMailbox(mailbox string) ([]mailEntry, error) {
|
||||
return nil, fmt.Errorf("load mails: %w", err)
|
||||
}
|
||||
|
||||
// Label filter setup
|
||||
var filterLabelID *int64
|
||||
if strings.HasPrefix(mailbox, "INBOX/") {
|
||||
labelName := strings.TrimPrefix(mailbox, "INBOX/")
|
||||
if sess.tenantID != nil {
|
||||
labels, err := sess.server.labels.GetLabelsForUser(ctx, sess.userID, *sess.tenantID)
|
||||
if err == nil {
|
||||
for _, l := range labels {
|
||||
if l.Name == labelName {
|
||||
lid := l.ID
|
||||
filterLabelID = &lid
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if filterLabelID == nil {
|
||||
return nil, fmt.Errorf("label not found: %s", mailbox)
|
||||
}
|
||||
} else if mailbox != "INBOX" {
|
||||
if mailbox != "INBOX" {
|
||||
return nil, fmt.Errorf("unknown mailbox: %s", mailbox)
|
||||
}
|
||||
|
||||
var labelEmailIDs map[string]bool
|
||||
if filterLabelID != nil {
|
||||
emailIDs, err := sess.server.labels.GetEmailIDsByLabel(ctx, *filterLabelID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("load label emails: %w", err)
|
||||
}
|
||||
labelEmailIDs = make(map[string]bool, len(emailIDs))
|
||||
for _, eid := range emailIDs {
|
||||
labelEmailIDs[eid] = true
|
||||
}
|
||||
}
|
||||
|
||||
var entries []mailEntry
|
||||
var seqNum uint32 = 1
|
||||
for _, m := range rawMails {
|
||||
if labelEmailIDs != nil && !labelEmailIDs[m.ID] {
|
||||
continue
|
||||
}
|
||||
uid := uint32(m.UID)
|
||||
if uid == 0 {
|
||||
uid = seqNum // fallback if no UID in DB yet
|
||||
|
||||
Reference in New Issue
Block a user