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