@@ -345,19 +345,24 @@ withPaths (p:ps) action fp =
345 catchError (action (p </> fp))
345 catchError (action (p </> fp))
346 (\_ -> withPaths ps action fp)
346 (\_ -> withPaths ps action fp)
348−-- | Traverse tree, filling media bag.
348+-- | Traverse tree, filling media bag for any images that
349+-- aren't already in the media bag.
349fillMediaBag :: PandocMonad m => Maybe String -> Pandoc -> m Pandoc
350fillMediaBag :: PandocMonad m => Maybe String -> Pandoc -> m Pandoc
350fillMediaBag sourceURL d = walkM handleImage d
351fillMediaBag sourceURL d = walkM handleImage d
351 where handleImage :: PandocMonad m => Inline -> m Inline
352 where handleImage :: PandocMonad m => Inline -> m Inline
352 handleImage (Image attr lab (src, tit)) = catchError
353 handleImage (Image attr lab (src, tit)) = catchError
354+ (do mediabag <- getMediaBag
355+ case lookupMedia src mediabag of
356+ Just (_, _) -> return $ Image attr lab (src, tit)
353− (do (bs, mt) <- fetchItem sourceURL src
358+ (bs, mt) <- downloadOrRead sourceURL src
354− let ext = fromMaybe (takeExtension src)
359+ let ext = fromMaybe (takeExtension src)
355− (mt >>= extensionFromMimeType)
360+ (mt >>= extensionFromMimeType)
356− let bs' = BL.fromChunks [bs]
361+ let bs' = BL.fromChunks [bs]
357− let basename = showDigest $ sha1 bs'
362+ let basename = showDigest $ sha1 bs'
358− let fname = basename <.> ext
363+ let fname = basename <.> ext
359− insertMedia fname mt bs'
364+ insertMedia fname mt bs'
360− return $ Image attr lab (fname, tit))
365+ return $ Image attr lab (fname, tit))
361 (\e -> do
366 (\e -> do
362 case e of
367 case e of
363 PandocResourceNotFound _ -> do
368 PandocResourceNotFound _ -> do