Class: Imap::Backup::Downloader

Inherits:
Object
  • Object
show all
Defined in:
lib/imap/backup/downloader.rb

Overview

Downloads as yet undownloaded emails from an account’s server

Defined Under Namespace

Classes: MultiFetchFailedError

Instance Method Summary collapse

Constructor Details

#initialize(folder, serializer, multi_fetch_size: 1, reset_seen_flags_after_fetch: false) ⇒ Downloader

Returns a new instance of Downloader.



11
12
13
14
15
16
17
18
19
# File 'lib/imap/backup/downloader.rb', line 11

def initialize(folder, serializer, multi_fetch_size: 1, reset_seen_flags_after_fetch: false)
  @folder = folder
  @serializer = serializer
  @multi_fetch_size = multi_fetch_size
  @reset_seen_flags_after_fetch = reset_seen_flags_after_fetch
  @folder_uids = nil
  @serializer_uids = nil
  @uids = nil
end

Instance Method Details

#runvoid

This method returns an undefined value.

Runs the downloader



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/imap/backup/downloader.rb', line 23

def run
  debug("#{serializer_uids.count} messages already downloaded")
  debug("#{folder_uids.count} messages on server")
  local_only_count = (serializer_uids - folder_uids).count
  if local_only_count.positive?
    debug("#{local_only_count} downloaded messages no longer on server")
  end

  if uids.none?
    debug("no new messages on server — skipping")
    return
  end

  info("#{uids.count} new messages")

  download
rescue Net::IMAP::ByeResponseError
  folder.client.reconnect
  retry
end