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