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