class BtSync::Directory

Attributes

errors[R]
name[R]
secret[R]

Public Class Methods

new(name, secret, btsync) click to toggle source
# File lib/btsync/directory.rb, line 8
def initialize(name, secret, btsync)
  @name = name
  @secret = secret

  @opts = btsync.opts

  find_or_create

  @errors = []
end

Public Instance Methods

add_host(host, port) click to toggle source
# File lib/btsync/directory.rb, line 58
def add_host(host, port)
  query = { name: name, secret: secret, addr: host, port: port }
  get(path('addknownhosts'), query: query)
  true
end
delete_to_trash=(opt) click to toggle source
# File lib/btsync/directory.rb, line 122
def delete_to_trash=(opt)
  set_pref('deletetotrash', opt)
end
delete_to_trash?() click to toggle source
# File lib/btsync/directory.rb, line 126
def delete_to_trash?
  bool(preferences['deletetotrash'])
end
destroy() click to toggle source
# File lib/btsync/directory.rb, line 19
def destroy
  get(path('removefolder'), query: { name: name, secret: secret })
  self.instance_variables.each { |v| v = nil }
end
folders() click to toggle source
# File lib/btsync/directory.rb, line 39
def folders
  res = get(path('getdir'), query: { dir: @name })
  res.parsed_response['folders']
end
is_writable?() click to toggle source
# File lib/btsync/directory.rb, line 130
def is_writable?
  bool(preferences['iswritable'])
end
known_hosts() click to toggle source
# File lib/btsync/directory.rb, line 50
def known_hosts
  query = { name: name, secret: secret }
  res = get(path('getknownhosts'), query: query)
  hosts = {}
  res['hosts'].map { |h| hosts[h['index']] = h['peer'] }
  hosts
end
peers() click to toggle source
# File lib/btsync/directory.rb, line 44
def peers
  res = get(path('getsyncfolders'))
  r = res.parsed_response['folders'].select { |f| f['name'] == name }.first
  r['peers']
end
preferences() click to toggle source
# File lib/btsync/directory.rb, line 134
def preferences
  res = get(path('getfolderpref'), query: { name: @name, secret: @secret })
  res.parsed_response['folderpref']
end
read_only_secret() click to toggle source
# File lib/btsync/directory.rb, line 139
def read_only_secret
  preferences['readonlysecret']
end
remove_host(index) click to toggle source
# File lib/btsync/directory.rb, line 64
def remove_host(index)
  host_name = known_hosts.select { |id, host| id == index }
  query = { name: name, secret: secret, index: index }
  get(path('removeknownhosts'), query: query) unless host_name.nil? || host_name.empty?
  known_hosts.select { |id, host| host == host_name }.empty?
end
remove_host_by_ip(ip, port = nil) click to toggle source
# File lib/btsync/directory.rb, line 71
def remove_host_by_ip(ip, port = nil)
  known_hosts.each do |id, host|
    host = host.split(':')
    if ip == host[0]
      next if port != host[1] unless port.nil?

      remove_host(id)
    end
  end
end
search_dht=(opt) click to toggle source
# File lib/btsync/directory.rb, line 106
def search_dht=(opt)
  set_pref('searchdht', opt)
end
search_dht?() click to toggle source
# File lib/btsync/directory.rb, line 110
def search_dht?
  bool(preferences['searchdht'])
end
search_lan=(opt) click to toggle source
# File lib/btsync/directory.rb, line 98
def search_lan=(opt)
  set_pref('searchlan', opt)
end
search_lan?() click to toggle source
# File lib/btsync/directory.rb, line 102
def search_lan?
  bool(preferences['searchlan'])
end
update_secret(new_secret = generate_secret) click to toggle source
# File lib/btsync/directory.rb, line 24
def update_secret(new_secret = generate_secret)
  query = secret_params(new_secret)
  res = get(path('updatesecret'), query: query)
  p = res.parsed_response
  if p != {}
    @secret = new_secret
    true
  else
    if p == {}
      @errors << "Invalid Secret"
    end
    false
  end
end
use_hosts=(opt) click to toggle source
# File lib/btsync/directory.rb, line 90
def use_hosts=(opt)
  set_pref('usehosts', opt)
end
use_hosts?() click to toggle source
# File lib/btsync/directory.rb, line 94
def use_hosts?
  bool(preferences['usehosts'])
end
use_relay=(opt) click to toggle source
# File lib/btsync/directory.rb, line 114
def use_relay=(opt)
  set_pref('relay', opt)
end
use_relay?() click to toggle source
# File lib/btsync/directory.rb, line 118
def use_relay?
  bool(preferences['relay'])
end
use_tracker=(opt) click to toggle source
# File lib/btsync/directory.rb, line 82
def use_tracker=(opt)
  set_pref('usetracker', opt)
end
use_tracker?() click to toggle source
# File lib/btsync/directory.rb, line 86
def use_tracker?
  bool(preferences['usetracker'])
end

Private Instance Methods

bool(i) click to toggle source
# File lib/btsync/directory.rb, line 182
def bool(i)
  i = i.to_i
  if i == 0
    false
  else
    true
  end
end
bool_to_i(bool) click to toggle source
# File lib/btsync/directory.rb, line 191
def bool_to_i(bool)
  if bool
    1
  else
    0
  end
end
default_settings() click to toggle source
# File lib/btsync/directory.rb, line 150
def default_settings
  get(path('setfolderpref'), query: defaults)
end
defaults() click to toggle source
# File lib/btsync/directory.rb, line 154
def defaults
  {
    'name' => @name,
    'secret' => @secret,
    'relay' => 1,
    'usetracker' => 1,
    'searchlan' => 1,
    'searchdht' => 0,
    'deletetotrash' => 1,
    'usehosts' => 1
  }
end
find_or_create() click to toggle source
# File lib/btsync/directory.rb, line 199
def find_or_create
  res = get(path('getsyncfolders'))
  folder_list = res.parsed_response['folders']
  if folder_list.map { |f| f['name'] }.include? name
    true
  else
    res = get(path('addsyncfolder'), query: { name: name, secret: secret })
  end
end
make_opts(name, opt) click to toggle source
# File lib/btsync/directory.rb, line 167
def make_opts(name, opt)
 opts = preferences
 opts[name] = bool_to_i(opt)
 opts.delete('readonlysecret')
 opts.merge!({ name: @name, secret: @secret })
end
secret_params(s) click to toggle source
# File lib/btsync/directory.rb, line 174
def secret_params(s)
  {
    name: @name,
    secret: @secret,
    newsecret: s
  }
end
set_pref(pref, opt) click to toggle source
# File lib/btsync/directory.rb, line 145
def set_pref(pref, opt)
  get(path('setfolderpref'), query: make_opts(pref, opt))
  true
end