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

52 lines
1.5 KiB
Ruby

# typed: true
class Domain::Fa::Job::UserAvatarJob < Domain::Fa::Job::Base
queue_as :static_file
def perform(args)
init_from_args!(args, build_user: false)
@user || raise("user must exist")
@avatar = @user.ensure_avatar!
logger.prefix =
proc do
"[avatar #{@avatar.id.to_s.bold} / user #{@user.url_name.to_s.bold}]"
end
response =
http_client.get(
"https://a.furaffinity.net/0/#{@user.url_name}.gif",
caused_by_entry: @caused_by_entry,
)
@avatar.state_detail["log_entries"] ||= [@avatar&.log_entry&.id].compact
@avatar.state_detail["log_entries"] << response.log_entry.id
@avatar.log_entry = response.log_entry
case response.status_code
when 200
@avatar.state = :ok
@avatar.downloaded_file_at = response.log_entry.created_at
@avatar.file = response.log_entry.response
logger.info("downloaded avatar")
when 404
@avatar.state = :file_not_found
if @avatar.file_sha256.blank?
@avatar.downloaded_file_at = response.log_entry.created_at
@avatar.file = response.log_entry.response
logger.info("avatar 404, and no previous file")
else
logger.info("avatar 404, and previous file")
end
else
@avatar.state = :download_error
@avatar.state_detail[
"download_error"
] = "http status #{response.status_code}"
fatal_error(
"http #{response.status_code}, log entry #{response.log_entry.id}",
)
end
ensure
@avatar.save! if @avatar
end
end