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