From 7da5d3fe78229b1f00949ea0f43d33b17587c41e Mon Sep 17 00:00:00 2001 From: riking <rikingcoding@gmail.com> Date: Mon, 21 Apr 2014 14:08:17 -0700 Subject: [PATCH] Backoff-retry for hotlinked image pull + some style fixes --- app/jobs/regular/pull_hotlinked_images.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/jobs/regular/pull_hotlinked_images.rb b/app/jobs/regular/pull_hotlinked_images.rb index 694cbabea..fbeddbdf7 100644 --- a/app/jobs/regular/pull_hotlinked_images.rb +++ b/app/jobs/regular/pull_hotlinked_images.rb @@ -21,6 +21,7 @@ module Jobs return unless post.present? raw = post.raw.dup + start_raw = raw.dup downloaded_urls = {} extract_images_from(post.cooked).each do |image| @@ -28,9 +29,10 @@ module Jobs src = "http:" + src if src.start_with?("//") if is_valid_image_url(src) + hotlinked = nil begin # have we already downloaded that file? - if !downloaded_urls.include?(src) + unless downloaded_urls.include?(src) begin hotlinked = FileHelper.download(src, @max_size, "discourse-hotlinked") rescue Discourse::InvalidParameters @@ -71,10 +73,15 @@ module Jobs end - # TODO: make sure the post hasnĀ“t changed while we were downloading remote images - if raw != post.raw + post.reload + if start_raw != post.raw + # post was edited - start over (after 10 minutes) + backoff = args.fetch(:backoff, 1) + 1 + delay = SiteSetting.ninja_edit_window * args[:backoff] + Jobs.enqueue_in(delay.seconds.to_i, :pull_hotlinked_images, args.merge!(backoff: backoff)) + elsif raw != post.raw options = { edit_reason: I18n.t("upload.edit_reason") } - options[:bypass_bump] = true if args[:bypass_bump] == true + options[:bypass_bump] = !!args[:bypass_bump] post.revise(Discourse.system_user, raw, options) end end