57 lines
1.5 KiB
Ruby
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
|