75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package imap
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
imapbackend "github.com/emersion/go-imap/backend"
|
|
|
|
"ur.gs/crockery/internal/store"
|
|
)
|
|
|
|
var (
|
|
ErrNotImplemented = fmt.Errorf("Not yet implemented")
|
|
)
|
|
|
|
// type Session implements the User interface for emersion/go-imap
|
|
type Session struct {
|
|
ID uint64
|
|
Account store.Account
|
|
ServiceName string
|
|
|
|
store store.Interface
|
|
}
|
|
|
|
func (s *Session) Username() string {
|
|
return s.Account.Username
|
|
}
|
|
|
|
func (s *Session) ListMailboxes(subscribed bool) ([]imapbackend.Mailbox, error) {
|
|
mailboxes, err := s.store.FindMailboxes(s.Account)
|
|
log.Printf("Session(%v).ListMailboxes(%v): %#v %#v", s.ID, subscribed, mailboxes, err)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
imapped := make([]imapbackend.Mailbox, len(mailboxes))
|
|
for i, mailbox := range mailboxes {
|
|
imapped[i] = &Mailbox{stored: mailbox, session: s}
|
|
}
|
|
|
|
return imapped, nil
|
|
}
|
|
|
|
func (s *Session) GetMailbox(name string) (imapbackend.Mailbox, error) {
|
|
mailbox, err := s.store.FindMailbox(s.Account, name)
|
|
log.Printf("Session(%v).GetMailbox(%v): %#v %#v", s.ID, name, mailbox, err)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &Mailbox{stored: mailbox, session: s}, nil
|
|
}
|
|
|
|
func (s *Session) CreateMailbox(name string) error {
|
|
log.Printf("Session(%v).CreateMailbox(%v): not implemented", s.ID, name)
|
|
return ErrNotImplemented
|
|
}
|
|
|
|
func (s *Session) DeleteMailbox(name string) error {
|
|
log.Printf("Session(%v).DeleteMailbox(%v): not implemented", s.ID, name)
|
|
return ErrNotImplemented
|
|
}
|
|
|
|
func (s *Session) RenameMailbox(existingName, newName string) error {
|
|
log.Printf("Session(%v).DeleteMailbox(%v, %v): not implemented", s.ID, existingName, newName)
|
|
return ErrNotImplemented
|
|
}
|
|
|
|
func (s *Session) Logout() error {
|
|
log.Printf("Ending %s session %d for %s", s.ServiceName, s.ID, s.Username())
|
|
|
|
return nil
|
|
}
|