Sha256: 4d991c17e23c503a4b7af11445f802d32344f31ec495c7cbf69b8017c5a915dc
Contents?: true
Size: 1.6 KB
Versions: 1
Compression:
Stored size: 1.6 KB
Contents
require "email/mboxrd/message" require "imap/backup/serializer/imap" require "imap/backup/serializer/mbox" require "imap/backup/serializer/transaction" module Imap; end module Imap::Backup class Serializer::DelayedMetadataSerializer extend Forwardable attr_reader :serializer def_delegator :serializer, :uids def initialize(serializer:) @serializer = serializer @tsx = nil end def transaction(&block) tsx.fail_in_transaction!(:transaction, message: "nested transactions are not supported") tsx.begin({metadata: []}) do mbox.transaction do block.call commit end end end def append(uid, message, flags) tsx.fail_outside_transaction!(:append) mboxrd_message = Email::Mboxrd::Message.new(message) serialized = mboxrd_message.to_serialized tsx.data[:metadata] << {uid: uid, length: serialized.bytesize, flags: flags} mbox.append(serialized) end private def commit # rubocop:disable Lint/RescueException imap.transaction do tsx.data[:metadata].each do |m| imap.append m[:uid], m[:length], flags: m[:flags] end rescue Exception => e Logger.logger.error "#{self.class} handling #{e.class}" imap.rollback raise e end # rubocop:enable Lint/RescueException end def mbox @mbox ||= Serializer::Mbox.new(serializer.folder_path) end def imap @imap ||= Serializer::Imap.new(serializer.folder_path) end def tsx @tsx ||= Serializer::Transaction.new(owner: self) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
imap-backup-13.2.0 | lib/imap/backup/serializer/delayed_metadata_serializer.rb |