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, include_pending) 15 queued_items = [] 16 importers = [] 17 sets = [sets] unless sets.is_a?(Array) 18 19 sets.each do |set| 20 case set 21 when 'likes' 22 queued_items += @user.likes.pending.to_a if include_pending 23 importers << LikesImporter.new(@user) 24 when 'reposts' 25 queued_items += @user.reposts.pending.to_a if include_pending 26 importers << RepostsImporter.new(@user) 27 when 'posts' 28 queued_items += @user.quotes.pending.to_a + @user.pins.pending.to_a if include_pending 29 importers << PostsImporter.new(@user) 30 when 'all' 31 queued_items += @user.all_pending_items if include_pending 32 importers += [ 33 LikesImporter.new(@user), 34 RepostsImporter.new(@user), 35 PostsImporter.new(@user) 36 ] 37 else 38 raise "Invalid collection: #{set}" 39 end 40 end 41 42 queue = ItemQueue.new(queued_items) 43 44 downloader = PostDownloader.new 45 downloader.report = @report 46 47 download_thread = Thread.new { downloader.import_from_queue(queue) } 48 49 import_threads = importers.map do |import| 50 import.item_queue = queue 51 import.report = @report 52 53 Thread.new { import.run_import(@time_limit) } 54 end 55 56 import_threads.each { |i| i.join } 57 58 downloader.stop_when_empty = true 59 download_thread.join 60 end 61end