mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-15 22:56:48 +00:00
fix(GODT-2822): Retry on 429 during Message ID fetch
This commit is contained in:
@ -131,7 +131,7 @@ func (apm DiagnosticMetadata) BuildMailboxToMessageMap(user *User) (map[string]A
|
||||
func (user *User) GetDiagnosticMetadata(ctx context.Context) (DiagnosticMetadata, error) {
|
||||
failedMessages := xmaps.SetFromSlice(user.vault.SyncStatus().FailedMessageIDs)
|
||||
|
||||
messageIDs, err := user.client.GetMessageIDs(ctx, "")
|
||||
messageIDs, err := user.client.GetAllMessageIDs(ctx, "")
|
||||
if err != nil {
|
||||
return DiagnosticMetadata{}, err
|
||||
}
|
||||
|
||||
@ -150,7 +150,7 @@ func (user *User) sync(ctx context.Context) error {
|
||||
user.log.Info("Syncing messages")
|
||||
|
||||
// Determine which messages to sync.
|
||||
messageIDs, err := user.client.GetMessageIDs(ctx, "")
|
||||
messageIDs, err := getAllMessageIDs(ctx, user.client)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get message IDs to sync: %w", err)
|
||||
}
|
||||
@ -198,6 +198,30 @@ func (user *User) sync(ctx context.Context) error {
|
||||
})
|
||||
}
|
||||
|
||||
func getAllMessageIDs(ctx context.Context, client *proton.Client) ([]string, error) {
|
||||
var messageIDs []string
|
||||
|
||||
for afterID := ""; ; afterID = messageIDs[len(messageIDs)-1] {
|
||||
for {
|
||||
page, err := client.GetMessageIDs(ctx, afterID, 1000)
|
||||
if err != nil {
|
||||
if is429Error(err) {
|
||||
continue
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(page) == 0 {
|
||||
return messageIDs, nil
|
||||
}
|
||||
|
||||
messageIDs = append(messageIDs, page...)
|
||||
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// nolint:exhaustive
|
||||
func syncLabels(ctx context.Context, apiLabels map[string]proton.Label, updateCh ...*async.QueuedChannel[imap.Update]) error {
|
||||
var updates []imap.Update
|
||||
|
||||
Reference in New Issue
Block a user