Files
redux-scraper/app/jobs/domain/e621/job/scan_post_job.rb
2025-01-28 23:50:12 +00:00

50 lines
1.4 KiB
Ruby

# typed: strict
class Domain::E621::Job::ScanPostJob < Domain::E621::Job::Base
queue_as :e621
sig { override.params(args: T::Hash[Symbol, T.untyped]).void }
def perform(args)
post = T.let(args[:post] || raise("no post provided"), Domain::E621::Post)
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")
log_entry = response.log_entry
if response.status_code != 200
post.state_detail["scan_log_entry_id"] = 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: log_entry,
)
post.save!
unless post.file.present?
defer_job(Domain::E621::Job::StaticFileJob, { post: post })
end
end
end