Don't forget to lycansubscribe
1require_relative 'importers/likes_importer' 2require_relative 'importers/posts_importer' 3require_relative 'importers/reposts_importer' 4require_relative 'item_queue' 5require_relative 'post_downloader' 6 7class ImportManager 8 attr_accessor :report, :time_limit 9 10 def initialize(user) 11 @user = user 12 end 13 14 def start(sets) 15 importers = [] 16 sets = [sets] unless sets.is_a?(Array) 17 18 sets.each do |set| 19 case set 20 when 'likes' 21 importers << LikesImporter.new(@user) 22 when 'reposts' 23 importers << RepostsImporter.new(@user) 24 when 'posts' 25 importers << PostsImporter.new(@user) 26 when 'all' 27 importers += [ 28 LikesImporter.new(@user), 29 RepostsImporter.new(@user), 30 PostsImporter.new(@user) 31 ] 32 else 33 raise "Invalid collection: #{set}" 34 end 35 end 36 37 queued_items = @user.all_items_in_queue(:import).sort_by(&:time).reverse 38 queue = ItemQueue.new(queued_items) 39 40 downloader = PostDownloader.new 41 downloader.report = @report 42 43 download_thread = Thread.new { downloader.import_from_queue(queue) } 44 45 import_threads = importers.map do |import| 46 import.item_queue = queue 47 import.report = @report 48 49 Thread.new { import.run_import(@time_limit) } 50 end 51 52 import_threads.each { |i| i.join } 53 54 downloader.stop_when_empty = true 55 download_thread.join 56 end 57end