Sha256: d2b51c7e0689bee1ade4d6e82b7cf1edd537e2ff1df82667d1af3d8f130b6c68
Contents?: true
Size: 1.67 KB
Versions: 1
Compression:
Stored size: 1.67 KB
Contents
require "json" require "imap/backup/serializer/mbox_enumerator" module Imap::Backup class Serializer::Version2Migrator attr_reader :folder_path def initialize(folder_path) @folder_path = folder_path end def required? return false if !mbox_exists? return false if !imap_exists? return false if !data return false if data[:version] != 2 return false if !data[:uid_validity] return false if !uids.is_a?(Array) true end def run return false if !required? messages = message_uids_and_lengths return false if !messages imap.delete imap.uid_validity = data[:uid_validity] messages.map { |m| imap.append(m[:uid], m[:length]) } true end private def imap_pathname "#{folder_path}.imap" end def imap_exists? File.exist?(imap_pathname) end def mbox_pathname "#{folder_path}.mbox" end def mbox_exists? File.exist?(mbox_pathname) end def data @data ||= begin content = File.read(imap_pathname) JSON.parse(content, symbolize_names: true) rescue JSON::ParserError nil end end def uids data[:uids] end def message_uids_and_lengths enumerator = Serializer::MboxEnumerator.new(mbox_pathname) messages = enumerator.map.with_index do |raw, i| length = raw.length message = { uid: uids[i], length: length } message end return nil if messages.count != uids.count messages end def imap @imap ||= Serializer::Imap.new(folder_path) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
imap-backup-7.0.0.rc1 | lib/imap/backup/serializer/version2_migrator.rb |