distinguish between feed download and parse failures

This commit is contained in:
Joey Hess 2019-04-21 10:35:08 -04:00
parent 6f846f4c38
commit 0f78b4db09
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38

View file

@ -77,13 +77,15 @@ perform :: ImportFeedOptions -> Cache -> URLString -> CommandPerform
perform opts cache url = go =<< downloadFeed url perform opts cache url = go =<< downloadFeed url
where where
go Nothing = next $ feedProblem url "downloading the feed failed" go Nothing = next $ feedProblem url "downloading the feed failed"
go (Just f) = case findDownloads url f of go (Just feedcontent) = case parseFeedString feedcontent of
[] -> next $ Nothing -> next $ feedProblem url "parsing the feed failed"
feedProblem url "bad feed content; no enclosures to download" Just f -> case findDownloads url f of
l -> do [] -> next $
showOutput feedProblem url "bad feed content; no enclosures to download"
ok <- and <$> mapM (performDownload opts cache) l l -> do
next $ cleanup url ok showOutput
ok <- and <$> mapM (performDownload opts cache) l
next $ cleanup url ok
cleanup :: URLString -> Bool -> CommandCleanup cleanup :: URLString -> Bool -> CommandCleanup
cleanup url True = do cleanup url True = do
@ -142,14 +144,14 @@ findDownloads u f = catMaybes $ map mk (feedItems f)
Nothing -> Nothing Nothing -> Nothing
{- Feeds change, so a feed download cannot be resumed. -} {- Feeds change, so a feed download cannot be resumed. -}
downloadFeed :: URLString -> Annex (Maybe Feed) downloadFeed :: URLString -> Annex (Maybe String)
downloadFeed url downloadFeed url
| Url.parseURIRelaxed url == Nothing = giveup "invalid feed url" | Url.parseURIRelaxed url == Nothing = giveup "invalid feed url"
| otherwise = Url.withUrlOptions $ \uo -> | otherwise = Url.withUrlOptions $ \uo ->
liftIO $ withTmpFile "feed" $ \f h -> do liftIO $ withTmpFile "feed" $ \f h -> do
hClose h hClose h
ifM (Url.download nullMeterUpdate url f uo) ifM (Url.download nullMeterUpdate url f uo)
( parseFeedString <$> readFileStrict f ( Just <$> readFileStrict f
, return Nothing , return Nothing
) )