From 5e2ccfee2d64c5a8277e2d0f3dff22f43fe9f121 Mon Sep 17 00:00:00 2001 From: ccd0 Date: Thu, 31 Jul 2014 10:35:37 -0700 Subject: [PATCH] image error handling fixes --- src/Images/ImageCommon.coffee | 5 ++--- src/Images/ImageExpand.coffee | 18 ++++++++++-------- src/Images/ImageHover.coffee | 18 ++++++++++++------ 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/Images/ImageCommon.coffee b/src/Images/ImageCommon.coffee index e0ceb282b..6ac9968b3 100644 --- a/src/Images/ImageCommon.coffee +++ b/src/Images/ImageCommon.coffee @@ -8,8 +8,7 @@ ImageCommon = return true error: (file, post, delay, cb) -> - return cb null unless file.src.split('/')[2] is 'i.4cdn.org' - return ImageCommon.retry post, cb if post.isDead or post.file.isDead + return ImageCommon.retry post, cb if (post.isDead or post.file.isDead) and file.src.split('/')[2] is 'i.4cdn.org' timeoutID = setTimeout ImageCommon.retry, delay, post, cb if delay? return if post.isDead or post.file.isDead @@ -40,7 +39,7 @@ ImageCommon = retry: (post, cb) -> unless post.isDead or post.file.isDead - return cb post.file.URL + '?' + Date.now() + return cb post.file.URL src = post.file.URL.split '/' URL = Redirect.to 'file', boardID: post.board.ID diff --git a/src/Images/ImageExpand.coffee b/src/Images/ImageExpand.coffee index 32ae6e79c..339d2112e 100755 --- a/src/Images/ImageExpand.coffee +++ b/src/Images/ImageExpand.coffee @@ -245,18 +245,20 @@ ImageExpand = post = Get.postFromNode @ $.rm @ delete post.file.fullImage - if ImageCommon.decodeError @, post - ImageExpand.contract post - return # Images can error: # - before the image started loading. # - after the image started loading. # Don't try to re-expand if it was already contracted. - if post.file.isExpanding or post.file.isExpanded - ImageCommon.error @, post, 10 * $.SECOND, (URL) -> - if post.file.isExpanding or post.file.isExpanded - ImageExpand.contract post - ImageExpand.expand post, URL if URL + return unless post.file.isExpanding or post.file.isExpanded + if ImageCommon.decodeError @, post + return ImageExpand.contract post + # Don't autoretry images from the archive. + unless @src.split('/')[2] is 'i.4cdn.org' + return ImageExpand.contract post + ImageCommon.error @, post, 10 * $.SECOND, (URL) -> + if post.file.isExpanding or post.file.isExpanded + ImageExpand.contract post + ImageExpand.expand post, URL if URL menu: init: -> diff --git a/src/Images/ImageHover.coffee b/src/Images/ImageHover.coffee index 428c53198..7afa9770b 100755 --- a/src/Images/ImageHover.coffee +++ b/src/Images/ImageHover.coffee @@ -12,6 +12,7 @@ ImageHover = post = Get.postFromNode @ {file} = post {isVideo} = file + return if post.file.isExpanding or post.file.isExpanded if el = file.fullImage el.id = 'ihover' TrashQueue.remove el @@ -19,7 +20,6 @@ ImageHover = file.fullImage = el = $.el (if isVideo then 'video' else 'img'), className: 'full-image' id: 'ihover' - el.dataset.fullID = post.fullID $.on el, 'error', ImageHover.error el.src = file.URL $.after file.thumb, el @@ -35,13 +35,19 @@ ImageHover = asapTest: -> (if isVideo then el.readyState >= el.HAVE_CURRENT_DATA else el.naturalHeight) noRemove: true cb: -> - $.off el, 'error', ImageHover.error if isVideo el.pause() TrashQueue.add el, post el.removeAttribute 'id' error: -> - return unless doc.contains @ - post = g.posts[@dataset.fullID] - return if ImageCommon.decodeError @, post - ImageCommon.error @, post, 3 * $.SECOND, (URL) => @src = URL if URL + post = Get.postFromNode @ + return if post.file.isExpanding or post.file.isExpanded + if @id is 'ihover' # still hovering + return if ImageCommon.decodeError @, post + ImageCommon.error @, post, 3 * $.SECOND, (URL) => + if URL + @src = URL + if @src is URL then '?' + Date.now() else '' + else + $.off @, 'error', ImageHover.error + $.rm @ + delete post.file.fullImage