Search in sources :

Example 1 with FeedHandler

use of de.danoeh.antennapod.parser.feed.FeedHandler in project AntennaPod by AntennaPod.

the class FeedParserTask method call.

@Override
public FeedHandlerResult call() {
    Feed feed = new Feed(request.getSource(), request.getLastModified());
    feed.setFile_url(request.getDestination());
    feed.setId(request.getFeedfileId());
    feed.setDownloaded(true);
    feed.setPreferences(new FeedPreferences(0, true, FeedPreferences.AutoDeleteAction.GLOBAL, VolumeAdaptionSetting.OFF, request.getUsername(), request.getPassword()));
    feed.setPageNr(request.getArguments().getInt(DownloadRequest.REQUEST_ARG_PAGE_NR, 0));
    DownloadError reason = null;
    String reasonDetailed = null;
    FeedHandler feedHandler = new FeedHandler();
    FeedHandlerResult result = null;
    try {
        result = feedHandler.parseFeed(feed);
        Log.d(TAG, feed.getTitle() + " parsed");
        checkFeedData(feed);
    } catch (SAXException | IOException | ParserConfigurationException e) {
        successful = false;
        e.printStackTrace();
        reason = DownloadError.ERROR_PARSER_EXCEPTION;
        reasonDetailed = e.getMessage();
    } catch (UnsupportedFeedtypeException e) {
        e.printStackTrace();
        successful = false;
        reason = DownloadError.ERROR_UNSUPPORTED_TYPE;
        if ("html".equalsIgnoreCase(e.getRootElement())) {
            reason = DownloadError.ERROR_UNSUPPORTED_TYPE_HTML;
        }
        reasonDetailed = e.getMessage();
    } catch (InvalidFeedException e) {
        e.printStackTrace();
        successful = false;
        reason = DownloadError.ERROR_PARSER_EXCEPTION;
        reasonDetailed = e.getMessage();
    } finally {
        File feedFile = new File(request.getDestination());
        if (feedFile.exists()) {
            boolean deleted = feedFile.delete();
            Log.d(TAG, "Deletion of file '" + feedFile.getAbsolutePath() + "' " + (deleted ? "successful" : "FAILED"));
        }
    }
    if (successful) {
        downloadStatus = new DownloadStatus(feed, feed.getHumanReadableIdentifier(), DownloadError.SUCCESS, successful, reasonDetailed, request.isInitiatedByUser());
        return result;
    } else {
        downloadStatus = new DownloadStatus(feed, feed.getTitle(), reason, successful, reasonDetailed, request.isInitiatedByUser());
        return null;
    }
}
Also used : FeedPreferences(de.danoeh.antennapod.model.feed.FeedPreferences) InvalidFeedException(de.danoeh.antennapod.core.util.InvalidFeedException) UnsupportedFeedtypeException(de.danoeh.antennapod.parser.feed.UnsupportedFeedtypeException) FeedHandlerResult(de.danoeh.antennapod.parser.feed.FeedHandlerResult) IOException(java.io.IOException) SAXException(org.xml.sax.SAXException) DownloadError(de.danoeh.antennapod.core.util.DownloadError) FeedHandler(de.danoeh.antennapod.parser.feed.FeedHandler) DownloadStatus(de.danoeh.antennapod.core.service.download.DownloadStatus) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) File(java.io.File) Feed(de.danoeh.antennapod.model.feed.Feed)

Example 2 with FeedHandler

use of de.danoeh.antennapod.parser.feed.FeedHandler in project AntennaPod by AntennaPod.

the class OnlineFeedViewActivity method doParseFeed.

/**
 * Try to parse the feed.
 * @return  The FeedHandlerResult if successful.
 *          Null if unsuccessful but we started another attempt.
 * @throws Exception If unsuccessful but we do not know a resolution.
 */
@Nullable
private FeedHandlerResult doParseFeed() throws Exception {
    FeedHandler handler = new FeedHandler();
    try {
        return handler.parseFeed(feed);
    } catch (UnsupportedFeedtypeException e) {
        Log.d(TAG, "Unsupported feed type detected");
        if ("html".equalsIgnoreCase(e.getRootElement())) {
            boolean dialogShown = showFeedDiscoveryDialog(new File(feed.getFile_url()), feed.getDownload_url());
            if (dialogShown) {
                // Should not display an error message
                return null;
            } else {
                throw new UnsupportedFeedtypeException(getString(R.string.download_error_unsupported_type_html));
            }
        } else {
            throw e;
        }
    } catch (Exception e) {
        Log.e(TAG, Log.getStackTraceString(e));
        throw e;
    } finally {
        boolean rc = new File(feed.getFile_url()).delete();
        Log.d(TAG, "Deleted feed source file. Result: " + rc);
    }
}
Also used : UnsupportedFeedtypeException(de.danoeh.antennapod.parser.feed.UnsupportedFeedtypeException) FeedHandler(de.danoeh.antennapod.parser.feed.FeedHandler) File(java.io.File) UnsupportedFeedtypeException(de.danoeh.antennapod.parser.feed.UnsupportedFeedtypeException) FeedUrlNotFoundException(de.danoeh.antennapod.core.feed.FeedUrlNotFoundException) IOException(java.io.IOException) Nullable(androidx.annotation.Nullable)

Example 3 with FeedHandler

use of de.danoeh.antennapod.parser.feed.FeedHandler in project AntennaPod by AntennaPod.

the class FeedParserTestHelper method runFeedParser.

/**
 * Runs the feed parser on the given file.
 */
@NonNull
static Feed runFeedParser(@NonNull File feedFile) throws Exception {
    FeedHandler handler = new FeedHandler();
    Feed parsedFeed = new Feed("http://example.com/feed", null);
    parsedFeed.setFile_url(feedFile.getAbsolutePath());
    parsedFeed.setDownloaded(true);
    handler.parseFeed(parsedFeed);
    return parsedFeed;
}
Also used : FeedHandler(de.danoeh.antennapod.parser.feed.FeedHandler) Feed(de.danoeh.antennapod.model.feed.Feed) NonNull(androidx.annotation.NonNull)

Aggregations

FeedHandler (de.danoeh.antennapod.parser.feed.FeedHandler)3 Feed (de.danoeh.antennapod.model.feed.Feed)2 UnsupportedFeedtypeException (de.danoeh.antennapod.parser.feed.UnsupportedFeedtypeException)2 File (java.io.File)2 IOException (java.io.IOException)2 NonNull (androidx.annotation.NonNull)1 Nullable (androidx.annotation.Nullable)1 FeedUrlNotFoundException (de.danoeh.antennapod.core.feed.FeedUrlNotFoundException)1 DownloadStatus (de.danoeh.antennapod.core.service.download.DownloadStatus)1 DownloadError (de.danoeh.antennapod.core.util.DownloadError)1 InvalidFeedException (de.danoeh.antennapod.core.util.InvalidFeedException)1 FeedPreferences (de.danoeh.antennapod.model.feed.FeedPreferences)1 FeedHandlerResult (de.danoeh.antennapod.parser.feed.FeedHandlerResult)1 ParserConfigurationException (javax.xml.parsers.ParserConfigurationException)1 SAXException (org.xml.sax.SAXException)1