Class: Imap::Backup::Account

Inherits:
Object
  • Object
show all
Defined in:
lib/imap/backup/account.rb,
lib/imap/backup/account/backup.rb,
lib/imap/backup/account/folder.rb,
lib/imap/backup/account/restore.rb,
lib/imap/backup/account/folder_backup.rb,
lib/imap/backup/account/backup_folders.rb,
lib/imap/backup/account/client_factory.rb,
lib/imap/backup/account/folder_ensurer.rb,
lib/imap/backup/account/serialized_folders.rb,
lib/imap/backup/account/local_only_folder_deleter.rb

Overview

Contains the attributes relating to an email account.

Defined Under Namespace

Classes: Backup, BackupFolders, ClientFactory, Folder, FolderBackup, FolderEnsurer, LocalOnlyFolderDeleter, Restore, SerializedFolders

Constant Summary collapse

DEFAULT_MULTI_FETCH_SIZE =

By default, the backup process fetches one email at a time

1

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Account

Returns a new instance of Account.



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/imap/backup/account.rb', line 67

def initialize(options)
  @username = options[:username]
  @password = options[:password]
  @local_path = options[:local_path]
  @folders = options[:folders]
  @folder_blacklist = options[:folder_blacklist]
  @mirror_mode = options[:mirror_mode]
  @server = options[:server]
  @connection_options = options[:connection_options]
  @download_strategy = options[:download_strategy]
  @multi_fetch_size_orignal = options[:multi_fetch_size]
  @reset_seen_flags_after_fetch = options[:reset_seen_flags_after_fetch]
  @client = nil
  @changes = {}
  @marked_for_deletion = false
end

Instance Attribute Details

#changesObject (readonly)

Tracks changes to the Account’s attributes



65
66
67
# File 'lib/imap/backup/account.rb', line 65

def changes
  @changes
end

#connection_optionsHash, void

Extra options to be passed to the IMAP server when connecting

Returns:

  • (Hash, void)


47
48
49
# File 'lib/imap/backup/account.rb', line 47

def connection_options
  @connection_options
end

#download_strategyString

The name of the download strategy to adopt during backups

Returns:

  • (String)


50
51
52
# File 'lib/imap/backup/account.rb', line 50

def download_strategy
  @download_strategy
end

#folder_blacklistBoolean

Indicates whether the configured folders are a whitelist or a blacklist. When true, any folders attribute will be taken as a list of folders to skip when running backups. When false, the folders attribute is used as the list of folders to backup. If no folders are configured, all folders on the server are backed up irrespective of the folder_blacklist setting

Returns:

  • (Boolean)


38
39
40
# File 'lib/imap/backup/account.rb', line 38

def folder_blacklist
  @folder_blacklist
end

#foldersArray<String>, void #folders=(value) ⇒ void

Overloads:

  • #foldersArray<String>, void

    The list of folders that have been configured for the Account

    Returns:

    • (Array<String>, void)

    See Also:

  • #folders=(value) ⇒ void

    This method returns an undefined value.

    Sets the folders attribute and marks it as modified, storing the original value

    Parameters:

    • value (Array<String>)

      a list of folders



30
31
32
# File 'lib/imap/backup/account.rb', line 30

def folders
  @folders
end

#local_pathString

The path where backups will be saved

Returns:

  • (String)


21
22
23
# File 'lib/imap/backup/account.rb', line 21

def local_path
  @local_path
end

#mirror_modeObject

Should all emails be backed up progressively, or should emails which are deleted from the server be deleted locally?



41
42
43
# File 'lib/imap/backup/account.rb', line 41

def mirror_mode
  @mirror_mode
end

#passwordObject

The password of the Account



18
19
20
# File 'lib/imap/backup/account.rb', line 18

def password
  @password
end

#reset_seen_flags_after_fetchBoolean

Should ‘Seen’ flags be cached before fetchiong emails and rewritten to the server afterwards?

Some IMAP providers, notably Apple Mail, set the ‘Seen’ flag on emails when they are fetched. By setting ‘:reset_seen_flags_after_fetch`, a workaround is activated which checks which emails are ’unseen’ before and after the fetch, and removes the ‘Seen’ flag from those which have changed. As this check is susceptible to ‘race conditions’, i.e. when a different client sets the ‘Seen’ flag while imap-backup is fetching, it is best to only use it when required (i.e. for IMAP providers which always mark messages as ‘Seen’ when accessed).

Returns:

  • (Boolean)


63
64
65
# File 'lib/imap/backup/account.rb', line 63

def reset_seen_flags_after_fetch
  @reset_seen_flags_after_fetch
end

#serverString

The address of the IMAP server

Returns:

  • (String)


44
45
46
# File 'lib/imap/backup/account.rb', line 44

def server
  @server
end

#usernameString

The username of the account (usually the same as the email address)

Returns:

  • (String)


16
17
18
# File 'lib/imap/backup/account.rb', line 16

def username
  @username
end

Instance Method Details

#capabilitiesArray<String>

Returns the capabilites of the IMAP server

Returns:

  • (Array<String>)

    the capabilities



101
102
103
# File 'lib/imap/backup/account.rb', line 101

def capabilities
  client.capability
end

#clear_changesObject

Resets the store of changes, indicating that the current state is the saved state



126
127
128
# File 'lib/imap/backup/account.rb', line 126

def clear_changes
  @changes = {}
end

#clientAccount::Client::Default

Initializes a client for the account’s IMAP server

Returns:

  • (Account::Client::Default)

    the client



87
88
89
# File 'lib/imap/backup/account.rb', line 87

def client
  @client ||= Account::ClientFactory.new(account: self).run
end

#mark_for_deletionvoid

This method returns an undefined value.

Sets a flag indicating the Account should be excluded from the next save operation



133
134
135
# File 'lib/imap/backup/account.rb', line 133

def mark_for_deletion
  @marked_for_deletion = true
end

#marked_for_deletion?Boolean

Indicates whether the account has been flagged for deletion during setup

Returns:

  • (Boolean)


140
141
142
# File 'lib/imap/backup/account.rb', line 140

def marked_for_deletion?
  @marked_for_deletion
end

#modified?Boolean

Returns:

  • (Boolean)


121
122
123
# File 'lib/imap/backup/account.rb', line 121

def modified?
  changes.any?
end

#multi_fetch_sizeInteger

The number of emails to fetch from the IMAP server at a time

Returns:

  • (Integer)


214
215
216
217
218
219
220
221
222
223
# File 'lib/imap/backup/account.rb', line 214

def multi_fetch_size
  @multi_fetch_size ||= begin
    int = @multi_fetch_size_orignal.to_i
    if int.positive?
      int
    else
      DEFAULT_MULTI_FETCH_SIZE
    end
  end
end

#multi_fetch_size=(value) ⇒ void

This method returns an undefined value.

Sets the multi_fetch_size attribute and marks it as modified, storing the original value. If the supplied value is not a positive integer, uses DEFAULT_MULTI_FETCH_SIZE



229
230
231
232
233
# File 'lib/imap/backup/account.rb', line 229

def multi_fetch_size=(value)
  parsed = value.to_i
  parsed = DEFAULT_MULTI_FETCH_SIZE if !parsed.positive?
  update(:multi_fetch_size, parsed)
end

#namespacesArray<String>

Returns the namespaces configured for the account on the IMAP server

Returns:

  • (Array<String>)

    the namespaces



94
95
96
# File 'lib/imap/backup/account.rb', line 94

def namespaces
  client.namespace
end

#restorevoid

This method returns an undefined value.

Restore the local backup to the server



108
109
110
111
# File 'lib/imap/backup/account.rb', line 108

def restore
  restore = Account::Restore.new(account: self)
  restore.run
end

#to_hHash

Returns all Account data for serialization

Returns:

  • (Hash)


147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/imap/backup/account.rb', line 147

def to_h
  h = {username: @username, password: @password}
  h[:local_path] = @local_path if @local_path
  h[:folders] = @folders if @folders
  h[:folder_blacklist] = true if @folder_blacklist
  h[:mirror_mode] = true if @mirror_mode
  h[:server] = @server if @server
  h[:connection_options] = @connection_options if @connection_options
  h[:multi_fetch_size] = multi_fetch_size
  if @reset_seen_flags_after_fetch
    h[:reset_seen_flags_after_fetch] = @reset_seen_flags_after_fetch
  end
  h
end

#valid?Boolean

Indicates whether the account has been configured, and is ready to be used

Returns:

  • (Boolean)


117
118
119
# File 'lib/imap/backup/account.rb', line 117

def valid?
  username && password ? true : false
end