From 09f1ace357ebb281c88132f385c459ac0fcb87c8 Mon Sep 17 00:00:00 2001 From: evazion Date: Tue, 8 Nov 2022 15:35:21 -0600 Subject: [PATCH] replacements: add fix script to backfill old images from Gelbooru. Add a fix script to download images from Gelbooru for old replacements where we deleted the original image. For archival purposes, we want to try to find the original file for every replacement. These images will be uploaded as unposted assets under DanbooruBot's name. --- script/fixes/127_download_old_replacements.rb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100755 script/fixes/127_download_old_replacements.rb diff --git a/script/fixes/127_download_old_replacements.rb b/script/fixes/127_download_old_replacements.rb new file mode 100755 index 000000000..53c43f93c --- /dev/null +++ b/script/fixes/127_download_old_replacements.rb @@ -0,0 +1,26 @@ +#!/usr/bin/env ruby + +require_relative "base" + +FIX = ENV.fetch("FIX", "false").truthy? +COND = ENV.fetch("COND", "TRUE") + +def download(replacement, md5) + url = "https://gelbooru.com/index.php?page=post&s=list&md5=#{md5}" + image_url = Source::Extractor.find(url).image_urls.first + + upload = Upload.create!(uploader: User.system, source: image_url) if FIX && image_url.present? + Timeout.timeout(30) { sleep 1 until upload.reload.is_finished? } if upload + + puts ({ replacement: replacement.id, upload: upload&.id, md5: md5, image_url:, duration: (upload.updated_at - upload.created_at if upload) }).to_json +rescue Timeout::Error + puts ({ error: "upload timed out", replacement: replacement.id, upload: upload&.id, image_url:, }).to_json +end + +PostReplacement.where(COND).find_each do |replacement| + old_media_asset = MediaAsset.active.find_by(md5: replacement.old_md5) + new_media_asset = MediaAsset.active.find_by(md5: replacement.md5) + + download(replacement, replacement.old_md5) if old_media_asset.nil? + download(replacement, replacement.md5) if new_media_asset.nil? +end