class FYT::S3Storage
Manages file downloads and storage
Public Class Methods
new(tmp_path, format_options, output_format, proxy_manager)
click to toggle source
# File lib/fyt/s3_storage.rb, line 10 def initialize(tmp_path, format_options, output_format, proxy_manager) @tmp_path = tmp_path || '' @format_options = format_options @output_format = output_format @proxy_manager = proxy_manager @known_files = [] end
Public Instance Methods
add(item)
click to toggle source
# File lib/fyt/s3_storage.rb, line 18 def add(item) url = item.link.href filename_for(item).tap do |filename| unless files_on_s3.include? filename download_file!(url, filename) upload_to_s3(filename) delete_file_from_disk(filename) end @known_files << filename end end
add_feed(feedname, feed)
click to toggle source
# File lib/fyt/s3_storage.rb, line 32 def add_feed(feedname, feed) logger.debug feed.to_s logger.debug @known_files feed_filename = "#{feedname}.feed.rss20.xml" tmp_path_for(feed_filename).tap do |path| File.write(path, feed) upload_to_s3(feed_filename) delete_file_from_disk(feed_filename) @known_files << feed_filename end end
cleanup!()
click to toggle source
# File lib/fyt/s3_storage.rb, line 46 def cleanup! logger.debug 'Files to delete:' logger.debug files_to_delete files_to_delete.each do |filename| delete_from_s3 filename end end
mtime(filename)
click to toggle source
# File lib/fyt/s3_storage.rb, line 55 def mtime(filename) bucket.object(filename).last_modified end
size(filename)
click to toggle source
# File lib/fyt/s3_storage.rb, line 59 def size(filename) bucket.object(filename).content_length end
Private Instance Methods
bucket()
click to toggle source
# File lib/fyt/s3_storage.rb, line 113 def bucket Aws::S3::Resource .new(region: 'eu-central-1') .bucket('fyt-storage') end
delete_file_from_disk(filename)
click to toggle source
# File lib/fyt/s3_storage.rb, line 80 def delete_file_from_disk(filename) tmp_path_for(filename).tap do |path| logger.debug "Deleting file: #{path}" File.delete(path) end end
delete_from_s3(name)
click to toggle source
# File lib/fyt/s3_storage.rb, line 105 def delete_from_s3(name) bucket.object(name).delete end
download_file!(url, filename)
click to toggle source
# File lib/fyt/s3_storage.rb, line 65 def download_file!(url, filename) proxy = @proxy_manager.get! command = "#{timeout_cmd} #{youtube_dl_cmd(proxy, url, filename)}" logger.debug "Executing: #{command}" begin execute command rescue @proxy_manager.remove(proxy) download_file!(url, filename) unless @proxy_manager.proxies.empty? end end
filename_for(item)
click to toggle source
# File lib/fyt/s3_storage.rb, line 87 def filename_for(item) "#{item.id.content}.mp4" end
files_on_s3()
click to toggle source
# File lib/fyt/s3_storage.rb, line 95 def files_on_s3 bucket.objects.limit(100).map(&:key) end
files_to_delete()
click to toggle source
# File lib/fyt/s3_storage.rb, line 91 def files_to_delete files_on_s3 - @known_files end
tmp_path_for(filename)
click to toggle source
# File lib/fyt/s3_storage.rb, line 109 def tmp_path_for(filename) File.join(@tmp_path, filename) end
upload_to_s3(filename)
click to toggle source
# File lib/fyt/s3_storage.rb, line 99 def upload_to_s3(filename) File.open(tmp_path_for(filename), 'rb') do |file| bucket.object(filename).put(body: file, acl: 'public-read') end end