Sha256: dbc26c326b82e2b9833237d57ec41998b2e22581c6f1bb24fd312e271ec9dc82

Contents?: true

Size: 992 Bytes

Versions: 2

Compression:

Stored size: 992 Bytes

Contents

module Imap; end

module Imap::Backup
  # Updates the flags on backed-up emails
  class FlagRefresher
    # The number of messages to process at a time
    CHUNK_SIZE = 100

    def initialize(folder, serializer)
      @folder = folder
      @serializer = serializer
    end

    # Runs the update
    # @return [void]
    def run
      uids = serializer.uids.clone

      uids.each_slice(CHUNK_SIZE) do |block|
        refresh_block block
      end
    end

    private

    attr_reader :folder
    attr_reader :serializer

    def refresh_block(uids)
      uids_and_flags = folder.fetch_multi(uids, ["FLAGS"])
      if !uids_and_flags
        Logger.logger.debug(
          "[#{folder.name}] failed to fetch flags for #{uids} - " \
          "cannot refresh flags"
        )
        return
      end
      uids_and_flags.each do |uid_and_flags|
        uid = uid_and_flags[:uid]
        flags = uid_and_flags[:flags]
        serializer.update(uid, flags: flags)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
imap-backup-15.0.3.rc1 lib/imap/backup/flag_refresher.rb
imap-backup-15.0.2 lib/imap/backup/flag_refresher.rb