db

package
v0.17.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 7, 2023 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

View Source
const ChunkLimit = 1000

Variables

View Source
var ErrInvalidDatabaseVersion = errors.New("invalid database version")
View Source
var ErrMigrationFailed = errors.New("database migration failed")
View Source
var ErrNotFound = errors.New("value not found")
View Source
var ErrTransactionFailed = errors.New("transaction failed")

Functions

func ClientReadType

func ClientReadType[T any](ctx context.Context, c Client, op func(context.Context, ReadOnly) (T, error)) (T, error)

func ClientWriteType

func ClientWriteType[T any](ctx context.Context, c Client, op func(context.Context, Transaction) (T, error)) (T, error)

func DeleteDB

func DeleteDB(dir, userID string) error

DeleteDB will rename all the database files for the given user to a directory within the same folder to avoid issues with ent not being able to close the database on demand. The database will be cleaned up on the next run on the Gluon server.

func DeleteDeferredDBFiles

func DeleteDeferredDBFiles(dir string) error

DeleteDeferredDBFiles deletes all data from previous databases that were scheduled for removal.

func GetDeferredDeleteDBPath

func GetDeferredDeleteDBPath(dir string) string

func IsErrNotFound

func IsErrNotFound(err error) bool

func SplitMailboxIDPairSlice

func SplitMailboxIDPairSlice(s []MailboxIDPair) ([]imap.InternalMailboxID, []imap.MailboxID)

func SplitMessageIDPairSlice

func SplitMessageIDPairSlice(s []MessageIDPair) ([]imap.InternalMessageID, []imap.MessageID)

Types

type Client

type Client interface {
	Init(ctx context.Context, generator imap.UIDValidityGenerator) error
	Read(ctx context.Context, op func(context.Context, ReadOnly) error) error
	Write(ctx context.Context, op func(context.Context, Transaction) error) error
	Close() error
}

type ClientInterface

type ClientInterface interface {
	New(path string, userID string) (Client, bool, error)
	Delete(path string, userID string) error
}

type CreateMessageReq

type CreateMessageReq struct {
	Message     imap.Message
	InternalID  imap.InternalMessageID
	LiteralSize int
	Body        string
	Structure   string
	Envelope    string
}

type DeletedSubscription

type DeletedSubscription struct {
	Name     string
	RemoteID imap.MailboxID
}

type Mailbox

type Mailbox struct {
	ID          imap.InternalMailboxID
	RemoteID    imap.MailboxID
	Name        string
	UIDValidity imap.UID
	Subscribed  bool
}

type MailboxAttr

type MailboxAttr struct {
	ID    int
	Value string
}

type MailboxFlag

type MailboxFlag struct {
	ID    int
	Value string
}

type MailboxIDPair

type MailboxIDPair struct {
	InternalID imap.InternalMailboxID
	RemoteID   imap.MailboxID
}

func NewMailboxIDPair

func NewMailboxIDPair(mbox *Mailbox) MailboxIDPair

func NewMailboxIDPairWithoutRemote

func NewMailboxIDPairWithoutRemote(internalID imap.InternalMailboxID) MailboxIDPair

func (*MailboxIDPair) String

func (m *MailboxIDPair) String() string

type MailboxReadOps

type MailboxReadOps interface {
	MailboxExistsWithID(ctx context.Context, mboxID imap.InternalMailboxID) (bool, error)

	MailboxExistsWithRemoteID(ctx context.Context, mboxID imap.MailboxID) (bool, error)

	MailboxExistsWithName(ctx context.Context, name string) (bool, error)

	GetMailboxIDFromRemoteID(ctx context.Context, mboxID imap.MailboxID) (imap.InternalMailboxID, error)

	GetMailboxName(ctx context.Context, mboxID imap.InternalMailboxID) (string, error)

	GetMailboxNameWithRemoteID(ctx context.Context, mboxID imap.MailboxID) (string, error)

	GetMailboxMessageIDPairs(ctx context.Context, mboxID imap.InternalMailboxID) ([]MessageIDPair, error)

	GetAllMailboxesWithAttr(ctx context.Context) ([]*MailboxWithAttr, error)

	GetAllMailboxesAsRemoteIDs(ctx context.Context) ([]imap.MailboxID, error)

	GetMailboxByName(ctx context.Context, name string) (*Mailbox, error)

	GetMailboxByID(ctx context.Context, mboxID imap.InternalMailboxID) (*Mailbox, error)

	GetMailboxByRemoteID(ctx context.Context, mboxID imap.MailboxID) (*Mailbox, error)

	GetMailboxRecentCount(ctx context.Context, mboxID imap.InternalMailboxID) (int, error)

	GetMailboxMessageCount(ctx context.Context, mboxID imap.InternalMailboxID) (int, error)

	GetMailboxMessageCountWithRemoteID(ctx context.Context, mboxID imap.MailboxID) (int, error)

	GetMailboxFlags(ctx context.Context, mboxID imap.InternalMailboxID) (imap.FlagSet, error)

	GetMailboxPermanentFlags(ctx context.Context, mboxID imap.InternalMailboxID) (imap.FlagSet, error)

	GetMailboxAttributes(ctx context.Context, mboxID imap.InternalMailboxID) (imap.FlagSet, error)

	GetMailboxUID(ctx context.Context, mboxID imap.InternalMailboxID) (imap.UID, error)

	GetMailboxMessageCountAndUID(ctx context.Context, mboxID imap.InternalMailboxID) (int, imap.UID, error)

	GetMailboxMessageForNewSnapshot(ctx context.Context, mboxID imap.InternalMailboxID) ([]SnapshotMessageResult, error)

	MailboxTranslateRemoteIDs(ctx context.Context, mboxIDs []imap.MailboxID) ([]imap.InternalMailboxID, error)

	MailboxFilterContains(ctx context.Context, mboxID imap.InternalMailboxID, messageIDs []MessageIDPair) ([]imap.InternalMessageID, error)

	GetMailboxCount(ctx context.Context) (int, error)
}

type MailboxWithAttr

type MailboxWithAttr struct {
	Mailbox
	Attributes imap.FlagSet
}

type MailboxWriteOps

type MailboxWriteOps interface {
	MailboxReadOps

	CreateMailbox(ctx context.Context,
		mboxID imap.MailboxID,
		name string,
		flags, permFlags, attrs imap.FlagSet,
		uidValidity imap.UID) (*Mailbox, error)

	GetOrCreateMailbox(ctx context.Context,
		mboxID imap.MailboxID,
		name string,
		flags, permFlags, attrs imap.FlagSet,
		uidValidity imap.UID) (*Mailbox, error)

	GetOrCreateMailboxAlt(ctx context.Context,
		mbox imap.Mailbox,
		delimiter string,
		uidValidity imap.UID) (*Mailbox, error)

	RenameMailboxWithRemoteID(ctx context.Context, mboxID imap.MailboxID, name string) error

	DeleteMailboxWithRemoteID(ctx context.Context, mboxID imap.MailboxID) error

	AddMessagesToMailbox(ctx context.Context, mboxID imap.InternalMailboxID, messageIDs []MessageIDPair) ([]UIDWithFlags, error)

	RemoveMessagesFromMailbox(ctx context.Context, mboxID imap.InternalMailboxID, messageIDs []imap.InternalMessageID) error

	ClearRecentFlagInMailboxOnMessage(ctx context.Context, mboxID imap.InternalMailboxID, messageID imap.InternalMessageID) error

	ClearRecentFlagsInMailbox(ctx context.Context, mboxID imap.InternalMailboxID) error

	CreateMailboxIfNotExists(ctx context.Context, mbox imap.Mailbox, delimiter string, uidValidity imap.UID) error

	SetMailboxMessagesDeletedFlag(ctx context.Context, mboxID imap.InternalMailboxID, messageIDs []imap.InternalMessageID, deleted bool) error

	SetMailboxSubscribed(ctx context.Context, mboxID imap.InternalMailboxID, subscribed bool) error

	UpdateRemoteMailboxID(ctx context.Context, mobxID imap.InternalMailboxID, remoteID imap.MailboxID) error

	SetMailboxUIDValidity(ctx context.Context, mboxID imap.InternalMailboxID, uidValidity imap.UID) error
}

type Message

type Message struct {
	ID            imap.InternalMessageID
	RemoteID      imap.MessageID
	Date          time.Time
	Size          int
	Body          string
	BodyStructure string
	Envelope      string
	Deleted       bool
}

type MessageFlagSet

type MessageFlagSet struct {
	ID       imap.InternalMessageID
	RemoteID imap.MessageID
	FlagSet  imap.FlagSet
}

type MessageIDPair

type MessageIDPair struct {
	InternalID imap.InternalMessageID
	RemoteID   imap.MessageID
}

func NewMessageIDPair

func NewMessageIDPair(msg *Message) MessageIDPair

func (*MessageIDPair) String

func (m *MessageIDPair) String() string

type MessageReadOps

type MessageReadOps interface {
	MessageExists(ctx context.Context, id imap.InternalMessageID) (bool, error)

	MessageExistsWithRemoteID(ctx context.Context, id imap.MessageID) (bool, error)

	GetMessageNoEdges(ctx context.Context, id imap.InternalMessageID) (*Message, error)

	GetTotalMessageCount(ctx context.Context) (int, error)

	GetMessageRemoteID(ctx context.Context, id imap.InternalMessageID) (imap.MessageID, error)

	GetImportedMessageData(ctx context.Context, id imap.InternalMessageID) (*MessageWithFlags, error)

	GetMessageDateAndSize(ctx context.Context, id imap.InternalMessageID) (time.Time, int, error)

	GetMessageMailboxIDs(ctx context.Context, id imap.InternalMessageID) ([]imap.InternalMailboxID, error)

	GetMessagesFlags(ctx context.Context, ids []imap.InternalMessageID) ([]MessageFlagSet, error)

	GetMessageIDsMarkedAsDelete(ctx context.Context) ([]imap.InternalMessageID, error)

	GetMessageIDFromRemoteID(ctx context.Context, id imap.MessageID) (imap.InternalMessageID, error)

	GetMessageDeletedFlag(ctx context.Context, id imap.InternalMessageID) (bool, error)

	GetAllMessagesIDsAsMap(ctx context.Context) (map[imap.InternalMessageID]struct{}, error)
}

type MessageWithFlags

type MessageWithFlags struct {
	Message
	Flags imap.FlagSet
}

type MessageWriteOps

type MessageWriteOps interface {
	MessageReadOps

	CreateMessages(ctx context.Context, reqs ...*CreateMessageReq) error

	CreateMessageAndAddToMailbox(ctx context.Context, mbox imap.InternalMailboxID, req *CreateMessageReq) (imap.UID, imap.FlagSet, error)

	MarkMessageAsDeleted(ctx context.Context, id imap.InternalMessageID) error

	MarkMessageAsDeletedAndAssignRandomRemoteID(ctx context.Context, id imap.InternalMessageID) error

	MarkMessageAsDeletedWithRemoteID(ctx context.Context, id imap.MessageID) error

	DeleteMessages(ctx context.Context, ids []imap.InternalMessageID) error

	UpdateRemoteMessageID(ctx context.Context, internalID imap.InternalMessageID, remoteID imap.MessageID) error

	AddFlagToMessages(ctx context.Context, ids []imap.InternalMessageID, flag string) error

	RemoveFlagFromMessages(ctx context.Context, ids []imap.InternalMessageID, flag string) error

	SetFlagsOnMessages(ctx context.Context, ids []imap.InternalMessageID, flags imap.FlagSet) error
}

type ReadOnly

type ReadOnly interface {
	MailboxReadOps
	MessageReadOps
	SubscriptionReadOps
}

type SnapshotMessageResult

type SnapshotMessageResult struct {
	InternalID imap.InternalMessageID `json:"uid_message"`
	RemoteID   imap.MessageID         `json:"remote_id"`
	UID        imap.UID               `json:"uid"`
	Recent     bool                   `json:"recent"`
	Deleted    bool                   `json:"deleted"`
	Flags      string                 `json:"flags"`
}

func (*SnapshotMessageResult) GetFlagSet

func (msg *SnapshotMessageResult) GetFlagSet() imap.FlagSet

type SubscriptionReadOps

type SubscriptionReadOps interface {
	GetDeletedSubscriptionSet(ctx context.Context) (map[imap.MailboxID]*DeletedSubscription, error)
}

type SubscriptionWriteOps

type SubscriptionWriteOps interface {
	AddDeletedSubscription(ctx context.Context, mboxName string, mboxID imap.MailboxID) error
	RemoveDeletedSubscriptionWithName(ctx context.Context, mboxName string) (int, error)
}

type UID

type UID struct {
	UID     imap.UID
	Deleted bool
	Recent  bool
}

type UIDWithFlags

type UIDWithFlags struct {
	InternalID imap.InternalMessageID `json:"uid_message"`
	RemoteID   imap.MessageID         `json:"remote_id"`
	UID        imap.UID               `json:"uid"`
	Recent     bool                   `json:"recent"`
	Deleted    bool                   `json:"deleted"`
	Flags      string                 `json:"flags"`
}

func (*UIDWithFlags) GetFlagSet

func (u *UIDWithFlags) GetFlagSet() imap.FlagSet

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL