Module: Flickrchive::Execute

Included in:
Config
Defined in:
lib/flickrchive/execute.rb

Instance Method Summary collapse

Instance Method Details

#add_to_set(photo) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/flickrchive/execute.rb', line 35

def add_to_set(photo)
  set = self.sets.find { |i| photo[:set] == i['title'] }
  if !set.nil?
    begin
      flickr.photosets.addPhoto photoset_id: set['id'], photo_id: photo[:flickr_id]
    rescue FlickRaw::FailedResponse => e
      handle_flickr_fail(e)
      retry
    end
    Flickrchive.logger.info("Photo added to set: #{photo[:filename]}, #{photo[:set]}")
  elsif photo[:set] == ''
    Flickrchive.logger.debug("Photo in base, not adding to set: #{photo[:filename]}")
  else
    begin
      flickr.photosets.create title: photo[:set], primary_photo_id: photo[:flickr_id]
    rescue FlickRaw::FailedResponse => e
      handle_flickr_fail(e)
      retry
    end
    Flickrchive.logger.info("Created set, added photo: #{photo[:set]}, #{photo[:filename]}")
    get_sets # refresh for new set
  end
end

#executeObject



3
4
5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/flickrchive/execute.rb', line 3

def execute
  get_sets
  self.db.load
  to_upload = []
  self.db.synchronize do
    to_upload = self.db.reject { |k,v| v[:flickr_id] }
    Flickrchive.logger.debug("Grabbing un-uploaded photos from db.")
  end
  to_upload.each do |k,v|
    upload_photo(v)
    add_to_set(v)
  end
  self.db.close
end

#get_setsObject



59
60
61
62
63
64
65
66
# File 'lib/flickrchive/execute.rb', line 59

def get_sets
  begin
    self.sets = flickr.photosets.getList
  rescue FlickRaw::FailedResponse => e
    handle_flickr_fail(e)
    retry
  end
end

#handle_flickr_fail(e) ⇒ Object



68
69
70
71
72
73
74
75
76
# File 'lib/flickrchive/execute.rb', line 68

def handle_flickr_fail(e)
  if [3, 105, 106].include?(e.code)
    sleep 60 # sleep 60, returning to code which will retry
  else
    Flickrchive.logger.fail("Uncatchable response from flickr. Check and restart: #{e.msg}")
    self.db.close
    exit
  end
end

#upload_photo(photo) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/flickrchive/execute.rb', line 18

def upload_photo(photo)
  begin
    id = flickr.upload_photo photo[:filename], is_public: 0, is_friend: 0, is_family: 0, hidden: 2, tags: photo[:tags]
  rescue FlickRaw::FailedResponse => e
    handle_flickr_fail(e)
    retry
  rescue EOFError
    Flickrchive.logger.info("Caught network EOFError. Retrying upload")
    retry
  end
  Flickrchive.logger.info("Uploaded file: #{photo[:filename]}")
  photo[:flickr_id] = id
  self.db.synchronize do
    self.db[photo[:md5]] = photo
  end
end