db

package
v0.16.0 Latest Latest
Warning

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

Go to latest
Published: Apr 12, 2023 License: MIT Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const ChunkLimit = 1000

Variables

This section is empty.

Functions

func AddDeletedSubscription added in v0.15.0

func AddDeletedSubscription(ctx context.Context, tx *ent.Tx, mboxName string, mboxID imap.MailboxID) error

func AddMessageFlag

func AddMessageFlag(ctx context.Context, tx *ent.Tx, messageIDs []imap.InternalMessageID, addFlag string) error

func BumpMailboxUIDNext

func BumpMailboxUIDNext(ctx context.Context, tx *ent.Tx, mbox *ent.Mailbox, withCount ...int) error

func ClearRecentFlag

func ClearRecentFlag(ctx context.Context, tx *ent.Tx, mboxID imap.InternalMailboxID, messageID imap.InternalMessageID) error

func ClearRecentFlags

func ClearRecentFlags(ctx context.Context, tx *ent.Tx, mboxID imap.InternalMailboxID) error

func CreateAndAddMessageToMailbox

func CreateAndAddMessageToMailbox(ctx context.Context, tx *ent.Tx, mboxID imap.InternalMailboxID, req *CreateMessageReq) (imap.UID, imap.FlagSet, error)

func CreateMailbox

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

func CreateMailboxIfNotExists

func CreateMailboxIfNotExists(ctx context.Context, tx *ent.Tx, mbox imap.Mailbox, delimiter string, uidValidity imap.UID) error

func CreateMessages

func CreateMessages(ctx context.Context, tx *ent.Tx, reqs ...*CreateMessageReq) ([]*ent.Message, 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 added in v0.16.0

func DeleteDeferredDBFiles(dir string) error

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

func DeleteMailboxWithRemoteID

func DeleteMailboxWithRemoteID(
	ctx context.Context,
	tx *ent.Tx,
	mboxID imap.MailboxID,
) error

DeleteMailboxWithRemoteID deletes the mailbox with the given remote ID. It returns the (potentially new) global UID validity.

func DeleteMessages

func DeleteMessages(ctx context.Context, tx *ent.Tx, messageIDs ...imap.InternalMessageID) error

func FilterMailboxContains

func FilterMailboxContains(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID, messageIDs []ids.MessageIDPair) ([]imap.InternalMessageID, error)

func FilterMailboxContainsInternalID added in v0.15.0

func FilterMailboxContainsInternalID(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID, messageIDs []imap.InternalMessageID) ([]imap.InternalMessageID, error)

func GetAllMailboxes

func GetAllMailboxes(ctx context.Context, client *ent.Client) ([]*ent.Mailbox, error)

func GetAllMessagesIDsAsMap

func GetAllMessagesIDsAsMap(ctx context.Context, client *ent.Client) (map[imap.InternalMessageID]struct{}, error)

func GetDeferredDeleteDBPath added in v0.16.0

func GetDeferredDeleteDBPath(dir string) string

func GetDeletedSubscriptionSet added in v0.15.0

func GetDeletedSubscriptionSet(ctx context.Context, client *ent.Client) (map[imap.MailboxID]*ent.DeletedSubscription, error)

func GetHighestMessageID

func GetHighestMessageID(ctx context.Context, client *ent.Client) (imap.InternalMessageID, error)

func GetImportedMessageData added in v0.14.0

func GetImportedMessageData(ctx context.Context, client *ent.Client, messageID imap.InternalMessageID) (*ent.Message, error)

func GetMailboxAttributes added in v0.15.0

func GetMailboxAttributes(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID) (imap.FlagSet, error)

func GetMailboxByID

func GetMailboxByID(ctx context.Context, client *ent.Client, id imap.InternalMailboxID) (*ent.Mailbox, error)

func GetMailboxByName

func GetMailboxByName(ctx context.Context, client *ent.Client, name string) (*ent.Mailbox, error)

func GetMailboxByRemoteID

func GetMailboxByRemoteID(ctx context.Context, client *ent.Client, id imap.MailboxID) (*ent.Mailbox, error)

func GetMailboxCount added in v0.15.0

func GetMailboxCount(ctx context.Context, client *ent.Client) (int, error)

func GetMailboxFlags added in v0.15.0

func GetMailboxFlags(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID) (imap.FlagSet, error)

func GetMailboxIDFromRemoteID added in v0.14.0

func GetMailboxIDFromRemoteID(ctx context.Context, client *ent.Client, mboxID imap.MailboxID) (imap.InternalMailboxID, error)

func GetMailboxIDWithRemoteID

func GetMailboxIDWithRemoteID(ctx context.Context, client *ent.Client, mboxID imap.MailboxID) (imap.InternalMailboxID, error)

func GetMailboxMessageCount added in v0.14.0

func GetMailboxMessageCount(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID) (int, error)

func GetMailboxMessageCountAndUID added in v0.15.0

func GetMailboxMessageCountAndUID(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID) (int, imap.UID, error)

func GetMailboxMessageIDPairs

func GetMailboxMessageIDPairs(ctx context.Context, client *ent.Client, mailboxID imap.InternalMailboxID) ([]ids.MessageIDPair, error)

func GetMailboxName

func GetMailboxName(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID) (string, error)

func GetMailboxNameWithRemoteID

func GetMailboxNameWithRemoteID(ctx context.Context, client *ent.Client, mboxID imap.MailboxID) (string, error)

func GetMailboxPermanentFlags added in v0.15.0

func GetMailboxPermanentFlags(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID) (imap.FlagSet, error)

func GetMailboxRecentCount

func GetMailboxRecentCount(ctx context.Context, client *ent.Client, mbox *ent.Mailbox) (int, error)

func GetMailboxUID added in v0.15.0

func GetMailboxUID(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID) (imap.UID, error)

func GetMessage

func GetMessage(ctx context.Context, client *ent.Client, messageID imap.InternalMessageID) (*ent.Message, error)

func GetMessageDateAndSize

func GetMessageDateAndSize(ctx context.Context, client *ent.Client, messageID imap.InternalMessageID) (*ent.Message, error)

func GetMessageDeleted

func GetMessageDeleted(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID, messageIDs []imap.InternalMessageID) (map[imap.InternalMessageID]bool, error)

func GetMessageFromRemoteIDWithDeletedFlag added in v0.14.0

func GetMessageFromRemoteIDWithDeletedFlag(ctx context.Context, client *ent.Client, id imap.MessageID) (*ent.Message, error)

func GetMessageIDFromRemoteID

func GetMessageIDFromRemoteID(ctx context.Context, client *ent.Client, id imap.MessageID) (imap.InternalMessageID, error)

func GetMessageIDsMarkedDeleted

func GetMessageIDsMarkedDeleted(ctx context.Context, client *ent.Client) ([]imap.InternalMessageID, error)

func GetMessageMailboxIDs

func GetMessageMailboxIDs(ctx context.Context, client *ent.Client, messageID imap.InternalMessageID) ([]imap.InternalMailboxID, error)

func GetMessageRemoteIDFromID added in v0.14.0

func GetMessageRemoteIDFromID(ctx context.Context, client *ent.Client, id imap.InternalMessageID) (imap.MessageID, error)

func GetMessageWithIDWithDeletedFlag added in v0.14.0

func GetMessageWithIDWithDeletedFlag(ctx context.Context, client *ent.Client, id imap.InternalMessageID) (*ent.Message, error)

func GetOrCreateMailbox added in v0.14.0

func GetOrCreateMailbox(ctx context.Context, tx *ent.Tx, mbox imap.Mailbox, delimiter string, uidValidity imap.UID) (*ent.Mailbox, error)

func HasMessageWithID

func HasMessageWithID(ctx context.Context, client *ent.Client, id imap.InternalMessageID) (bool, error)

func HasMessageWithRemoteID

func HasMessageWithRemoteID(ctx context.Context, client *ent.Client, id imap.MessageID) (bool, error)

func IsMessageInMailbox added in v0.15.0

func IsMessageInMailbox(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID, messageID imap.InternalMailboxID) (bool, error)

func MailboxExistsWithID

func MailboxExistsWithID(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID) (bool, error)

func MailboxExistsWithName

func MailboxExistsWithName(ctx context.Context, client *ent.Client, name string) (bool, error)

func MailboxExistsWithRemoteID

func MailboxExistsWithRemoteID(ctx context.Context, client *ent.Client, mboxID imap.MailboxID) (bool, error)

func MarkMessageAsDeleted added in v0.14.0

func MarkMessageAsDeleted(ctx context.Context, tx *ent.Tx, messageID imap.InternalMessageID) error

func MarkMessageAsDeletedAndAssignRandomRemoteID added in v0.16.0

func MarkMessageAsDeletedAndAssignRandomRemoteID(ctx context.Context, tx *ent.Tx, messageID imap.InternalMessageID) error

func MarkMessageAsDeletedWithRemoteID

func MarkMessageAsDeletedWithRemoteID(ctx context.Context, tx *ent.Tx, messageID imap.MessageID) error

func MessageExistsWithRemoteID

func MessageExistsWithRemoteID(ctx context.Context, client *ent.Client, messageID imap.MessageID) (bool, error)

func NewFlagSet

func NewFlagSet(msgUID *ent.UID, flags []*ent.MessageFlag) imap.FlagSet

func ReadResult

func ReadResult[T any](ctx context.Context, db *DB, fn func(context.Context, *ent.Client) (T, error)) (T, error)

func RemoveDeletedSubscriptionWithName added in v0.15.0

func RemoveDeletedSubscriptionWithName(ctx context.Context, tx *ent.Tx, mboxName string) (int, error)

func RemoveMessageFlag

func RemoveMessageFlag(ctx context.Context, tx *ent.Tx, messageIDs []imap.InternalMessageID, remFlag string) error

func RemoveMessagesFromMailbox

func RemoveMessagesFromMailbox(ctx context.Context, tx *ent.Tx, messageIDs []imap.InternalMessageID, mboxID imap.InternalMailboxID) error

func RenameMailboxWithRemoteID

func RenameMailboxWithRemoteID(ctx context.Context, tx *ent.Tx, mboxID imap.MailboxID, name string) error

func SetDeletedFlag

func SetDeletedFlag(ctx context.Context, tx *ent.Tx, mboxID imap.InternalMailboxID, messageIDs []imap.InternalMessageID, deleted bool) error

func SetMessageFlags

func SetMessageFlags(ctx context.Context, tx *ent.Tx, messageIDs []imap.InternalMessageID, setFlags imap.FlagSet) error

func TranslateRemoteMailboxIDs

func TranslateRemoteMailboxIDs(ctx context.Context, client *ent.Client, mboxIDs []imap.MailboxID) ([]imap.InternalMailboxID, error)

func UpdateRemoteMailboxID

func UpdateRemoteMailboxID(ctx context.Context, tx *ent.Tx, internalID imap.InternalMailboxID, remoteID imap.MailboxID) error

func UpdateRemoteMessageID

func UpdateRemoteMessageID(ctx context.Context, tx *ent.Tx, internalID imap.InternalMessageID, remoteID imap.MessageID) error

func WriteResult

func WriteResult[T any](ctx context.Context, db *DB, fn func(context.Context, *ent.Tx) (T, error)) (T, error)

Types

type CreateAndAddMessagesResult

type CreateAndAddMessagesResult struct {
	UID       imap.UID
	Flags     imap.FlagSet
	MessageID ids.MessageIDPair
}

type CreateMessageReq

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

type DB

type DB struct {
	// contains filtered or unexported fields
}

func NewDB

func NewDB(dir, userID string) (*DB, bool, error)

NewDB creates a new database instance. If the database does not exist, it will be created and the second return value will be true.

func (*DB) Close

func (d *DB) Close() error

func (*DB) Init

func (d *DB) Init(ctx context.Context) error

func (*DB) Read

func (d *DB) Read(ctx context.Context, fn func(context.Context, *ent.Client) error) error

func (*DB) Write

func (d *DB) Write(ctx context.Context, fn func(context.Context, *ent.Tx) error) error

type MessageFlagSet

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

func GetMessageFlags

func GetMessageFlags(ctx context.Context, client *ent.Client, messageIDs []imap.InternalMessageID) ([]MessageFlagSet, error)

GetMessageFlags returns the flags of the given messages. It does not include per-mailbox flags (\Deleted, \Recent)!

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 GetMailboxMessagesForNewSnapshot

func GetMailboxMessagesForNewSnapshot(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID) ([]SnapshotMessageResult, error)

func (*SnapshotMessageResult) GetFlagSet

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

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 AddMessagesToMailbox

func AddMessagesToMailbox(ctx context.Context, tx *ent.Tx, messageIDs []imap.InternalMessageID, mboxID imap.InternalMailboxID) ([]UIDWithFlags, error)

func BumpMailboxUIDsForMessage

func BumpMailboxUIDsForMessage(ctx context.Context, tx *ent.Tx, messageIDs []imap.InternalMessageID, mboxID imap.InternalMailboxID) ([]UIDWithFlags, error)

func GetMessageUIDsWithFlagsAfterAddOrUIDBump

func GetMessageUIDsWithFlagsAfterAddOrUIDBump(ctx context.Context, client *ent.Client, mboxID imap.InternalMailboxID, messageIDs []imap.InternalMessageID) ([]UIDWithFlags, error)

GetMessageUIDsWithFlagsAfterAddOrUIDBump exploits a property of adding a message to or bumping the UIDs of existing message in mailbox. It can only be used if you can guarantee that the messageID list contains only IDs that have recently added or bumped in the mailbox.

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