Don't forget to lycansubscribe
1require 'time'
2
3require_relative '../at_uri'
4require_relative 'base_importer'
5
6class RepostsImporter < BaseImporter
7 def import_items
8 params = { repo: @did, collection: 'app.bsky.feed.repost', limit: 100 }
9 params[:cursor] = @import.cursor if @import.cursor
10
11 loop do
12 response = @minisky.get_request('com.atproto.repo.listRecords', params)
13
14 records = response['records']
15 cursor = response['cursor']
16
17 @imported_count += records.length
18 @report&.update(importers: { importer_name => { :imported_items => @imported_count }})
19 @report&.update(importers: { importer_name => { :oldest_date => Time.parse(records.last['value']['createdAt']) }}) unless records.empty?
20
21 records.each do |record|
22 begin
23 repost_rkey = AT_URI(record['uri']).rkey
24 next if @user.reposts.where(rkey: repost_rkey).exists?
25
26 repost_time = Time.parse(record['value']['createdAt'])
27 post_uri = record['value']['subject']['uri']
28
29 create_item_for_post(post_uri) do |args|
30 @user.reposts.create!(args.merge(rkey: repost_rkey, time: repost_time))
31 end
32 rescue StandardError => e
33 puts "Error in RepostsImporter: #{record['uri']}: #{e}"
34 end
35 end
36
37 params[:cursor] = cursor
38 @import.update!(cursor: cursor)
39
40 break if !cursor
41 break if @time_limit && records.any? { |x| Time.parse(x['value']['createdAt']) < @time_limit }
42 end
43 end
44end