Files
redux-scraper/app/jobs/domain/e621/job/scan_post_job.rb
2025-01-01 03:29:53 +00:00

57 lines
1.5 KiB
Ruby

# typed: true
module Domain::E621::Job
class ScanPostJob < Base
queue_as :e621
def perform(args)
post = args[:post] || raise("no post provided")
@caused_by_entry = args[:caused_by_entry]
logger.prefix =
proc { "[e621_id #{post.e621_id.to_s.bold} / #{post.state.bold}]" }
if post.file.present?
logger.warn("Post #{post.e621_id} already has a file")
return
end
if post.file_url_str.present?
logger.error("Post #{post.e621_id} already has a file URL")
return
end
logger.info("Scanning post #{post.e621_id}")
response =
http_client.get(
"https://e621.net/posts/#{post.e621_id}.json",
caused_by_entry: @caused_by_entry,
)
if response.status_code != 200
post.state_detail["scan_log_entry_id"] = response.log_entry.id
post.state = :scan_error
post.state_detail[
"scan_error"
] = "Error scanning post #{post.e621_id}: #{response.status_code}"
post.save!
fatal_error(
"Error scanning post #{post.e621_id}: #{response.status_code}",
)
end
post_json = JSON.parse(response.body)["post"]
post =
Domain::E621::TagUtil.initialize_or_update_post(
post_json: post_json,
caused_by_entry: response.log_entry,
)
post.save!
unless post.file.present?
Domain::E621::Job::StaticFileJob.perform_later(
{ post: post, caused_by_entry: response.log_entry },
)
end
end
end
end