Don't forget to lycansubscribe
1require 'didkit'
2require 'minisky'
3
4require_relative '../at_uri'
5require_relative '../models/post'
6require_relative '../models/user'
7
8class BaseImporter
9 attr_accessor :item_queue, :report
10
11 def initialize(user_did)
12 @did = DID.new(user_did)
13 @user = User.find_or_create_by!(did: user_did)
14 @imported_count = 0
15 end
16
17 def importer_name
18 self.class.name
19 end
20
21 def collection
22 importer_name.gsub(/Importer$/, '').downcase
23 end
24
25 def run_import(requested_time_limit = nil)
26 @minisky = Minisky.new(@did.document.pds_host, nil)
27 @import = @user.imports.find_by(collection: collection) || @user.imports.create!(collection: collection)
28
29 if @import.cursor.nil?
30 @import.update!(started_from: Time.now) unless requested_time_limit
31 end
32
33 @time_limit = requested_time_limit || @import.last_completed
34 puts "Fetching until: #{@time_limit}" if @time_limit
35
36 import_items
37
38 @import.update!(last_completed: @import.started_from) unless requested_time_limit
39 @import.update!(cursor: nil, started_from: nil)
40 @report&.update(importers: { importer_name => { :finished => true }})
41 end
42
43 def import_items
44 raise NotImplementedError
45 end
46end