Class: Smug::FetchCommand
Overview
TODO: maybe rename
Instance Method Summary collapse
- #exec ⇒ Object
-
#refresh_cache(albums_to_refresh, options = {}, &block) ⇒ Object
block is executed for each album with two argumens: album and cache_status cache_status is: - :refreshed album cache was refreshed - :fresh album in cache is the same as in server options can be: - :force => true list of album's images is always refreshed this is necessary for refreshing cache after uploads and here's why: - smugmug stores LastUpdated data for albums with 1 second precision - upload can be fast enough to create album and add image to the album in one second.
Methods included from Utils
#method_missing, #status_message
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Smug::Utils
Instance Method Details
#exec ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/smugsync/fetch.rb', line 7 def exec optparser = Trollop::Parser.new do "Usage: smug fetch [<options>]\nShow the status of local SmugMug folder.\n\nOptions:\n END\n opt :force,\n \"Force full refresh of albums and images list\",\n :short => :f\n end\n\n opts = Trollop::with_standard_exception_handling(optparser) do\n optparser.parse(ARGV)\n end\n\n authenticate\n\n status_message \"Refreshing albums cache\"\n refresh_cache(:all_albums, opts) { |album, cache_status| status_message \".\" }\n status_message \" done\\n\"\nend\n" |
#refresh_cache(albums_to_refresh, options = {}, &block) ⇒ Object
block is executed for each album with two argumens: album and cache_status cache_status is:
- :refreshed album cache was refreshed
- :fresh album in cache is the same as in server options can be:
- :force => true list of album's images is always refreshed
this is necessary for refreshing cache after uploads and here's why:
- smugmug stores LastUpdated data for albums with 1 second precision
- upload can be fast enough to create album and add image to the album in one second
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/smugsync/fetch.rb', line 41 def refresh_cache(albums_to_refresh, = {}, &block) authenticate old_cache = if File.exist?(Config::config_file_name("cache")) JSON::parse(Config::config_file("cache", "r").read) else [] end # - to refresh all albums we need to reconstruct the cache from scratch # to make sure that deleted albums are not left in the cache # - to refresh selected albums we start from existing cache # and replace only refreshed albums in that cache albums_on_server = smugmug_albums_get(:Heavy => true)["Albums"] if albums_to_refresh == :all_albums albums_to_refresh = albums_on_server new_cache = [] else albums_to_refresh_ids = albums_to_refresh.map { |a| a["id"] } # refetch albums metadata albums_to_refresh = albums_on_server.select { |a| albums_to_refresh_ids.include?(a["id"]) } # leave albums that should not be refreshed in the cache new_cache = old_cache.reject { |a| albums_to_refresh_ids.include?(a["id"]) } end albums_to_refresh.each do |album| cached_album = old_cache.find { |a| a["id"] == album["id"] } if ![:force] and cached_album and cached_album["LastUpdated"] == album["LastUpdated"] # album is in cache and is not changed: copy images from old cache # because it can take a long time to get the list of images # from server for large albums album["Images"] = cached_album["Images"] yield(album, :skipped) if block_given? else # album was changed, get the list of images album["Images"] = smugmug_images_get( :AlbumID => album["id"], :AlbumKey => album["Key"], :Heavy => true )["Album"]["Images"] yield(album, :refreshed) if block_given? end new_cache << album end cache_file = Config::config_file("cache", "w+") cache_file.puts JSON::pretty_generate(new_cache) cache_file.close end |