Support new episodes notification on local feeds (#7337)

This commit is contained in:
ByteHamster 2024-08-24 10:53:30 +02:00 committed by GitHub
parent 02ec30e7e2
commit c008c08e4f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 12 deletions

View File

@ -155,10 +155,14 @@ public class FeedUpdateWorker extends Worker {
return; return;
} }
try { try {
Feed savedFeed;
if (feed.isLocalFeed()) { if (feed.isLocalFeed()) {
LocalFeedUpdater.updateFeed(feed, getApplicationContext(), null); savedFeed = LocalFeedUpdater.updateFeed(feed, getApplicationContext(), null);
} else { } else {
refreshFeed(feed, force); savedFeed = refreshFeed(feed, force);
}
if (savedFeed != null) {
newEpisodesNotification.showIfNeeded(getApplicationContext(), savedFeed);
} }
} catch (Exception e) { } catch (Exception e) {
DBWriter.setFeedLastUpdateFailed(feed.getId(), true); DBWriter.setFeedLastUpdateFailed(feed.getId(), true);
@ -183,7 +187,7 @@ public class FeedUpdateWorker extends Worker {
} }
} }
void refreshFeed(Feed feed, boolean force) throws Exception { Feed refreshFeed(Feed feed, boolean force) throws Exception {
boolean nextPage = getInputData().getBoolean(FeedUpdateManagerImpl.EXTRA_NEXT_PAGE, false) boolean nextPage = getInputData().getBoolean(FeedUpdateManagerImpl.EXTRA_NEXT_PAGE, false)
&& feed.getNextPageLink() != null; && feed.getNextPageLink() != null;
if (nextPage) { if (nextPage) {
@ -205,11 +209,11 @@ public class FeedUpdateWorker extends Worker {
if (!downloader.getResult().isSuccessful()) { if (!downloader.getResult().isSuccessful()) {
if (downloader.cancelled || downloader.getResult().getReason() == DownloadError.ERROR_DOWNLOAD_CANCELLED) { if (downloader.cancelled || downloader.getResult().getReason() == DownloadError.ERROR_DOWNLOAD_CANCELLED) {
return; return null;
} }
DBWriter.setFeedLastUpdateFailed(request.getFeedfileId(), true); DBWriter.setFeedLastUpdateFailed(request.getFeedfileId(), true);
DBWriter.addDownloadStatus(downloader.getResult()); DBWriter.addDownloadStatus(downloader.getResult());
return; return null;
} }
FeedParserTask parserTask = new FeedParserTask(request); FeedParserTask parserTask = new FeedParserTask(request);
@ -217,25 +221,25 @@ public class FeedUpdateWorker extends Worker {
if (!parserTask.isSuccessful()) { if (!parserTask.isSuccessful()) {
DBWriter.setFeedLastUpdateFailed(request.getFeedfileId(), true); DBWriter.setFeedLastUpdateFailed(request.getFeedfileId(), true);
DBWriter.addDownloadStatus(parserTask.getDownloadStatus()); DBWriter.addDownloadStatus(parserTask.getDownloadStatus());
return; return null;
} }
feedHandlerResult.feed.setLastRefreshAttempt(System.currentTimeMillis()); feedHandlerResult.feed.setLastRefreshAttempt(System.currentTimeMillis());
Feed savedFeed = FeedDatabaseWriter.updateFeed(getApplicationContext(), feedHandlerResult.feed, false); Feed savedFeed = FeedDatabaseWriter.updateFeed(getApplicationContext(), feedHandlerResult.feed, false);
if (request.getFeedfileId() == 0) { if (request.getFeedfileId() == 0) {
return; // No download logs for new subscriptions return savedFeed; // No download logs for new subscriptions
} }
// we create a 'successful' download log if the feed's last refresh failed // we create a 'successful' download log if the feed's last refresh failed
List<DownloadResult> log = DBReader.getFeedDownloadLog(request.getFeedfileId()); List<DownloadResult> log = DBReader.getFeedDownloadLog(request.getFeedfileId());
if (!log.isEmpty() && !log.get(0).isSuccessful()) { if (!log.isEmpty() && !log.get(0).isSuccessful()) {
DBWriter.addDownloadStatus(parserTask.getDownloadStatus()); DBWriter.addDownloadStatus(parserTask.getDownloadStatus());
} }
newEpisodesNotification.showIfNeeded(getApplicationContext(), savedFeed);
if (downloader.permanentRedirectUrl != null) { if (downloader.permanentRedirectUrl != null) {
DBWriter.updateFeedDownloadURL(request.getSource(), downloader.permanentRedirectUrl); DBWriter.updateFeedDownloadURL(request.getSource(), downloader.permanentRedirectUrl);
} else if (feedHandlerResult.redirectUrl != null } else if (feedHandlerResult.redirectUrl != null
&& !feedHandlerResult.redirectUrl.equals(request.getSource())) { && !feedHandlerResult.redirectUrl.equals(request.getSource())) {
DBWriter.updateFeedDownloadURL(request.getSource(), feedHandlerResult.redirectUrl); DBWriter.updateFeedDownloadURL(request.getSource(), feedHandlerResult.redirectUrl);
} }
return savedFeed;
} }
} }

View File

@ -50,7 +50,7 @@ public class LocalFeedUpdater {
static final String[] PREFERRED_FEED_IMAGE_FILENAMES = {"folder.jpg", "Folder.jpg", "folder.png", "Folder.png"}; static final String[] PREFERRED_FEED_IMAGE_FILENAMES = {"folder.jpg", "Folder.jpg", "folder.png", "Folder.png"};
public static void updateFeed(Feed feed, Context context, public static Feed updateFeed(Feed feed, Context context,
@Nullable UpdaterProgressListener updaterProgressListener) { @Nullable UpdaterProgressListener updaterProgressListener) {
try { try {
String uriString = feed.getDownloadUrl().replace(Feed.PREFIX_LOCAL_FOLDER, ""); String uriString = feed.getDownloadUrl().replace(Feed.PREFIX_LOCAL_FOLDER, "");
@ -63,24 +63,27 @@ public class LocalFeedUpdater {
throw new IOException("Cannot read local directory. " throw new IOException("Cannot read local directory. "
+ "Try re-connecting the folder on the podcast info page."); + "Try re-connecting the folder on the podcast info page.");
} }
tryUpdateFeed(feed, context, documentFolder.getUri(), updaterProgressListener); Feed updatedFeed = tryUpdateFeed(feed, context, documentFolder.getUri(), updaterProgressListener);
if (mustReportDownloadSuccessful(feed)) { if (mustReportDownloadSuccessful(feed)) {
reportSuccess(feed); reportSuccess(feed);
} }
return updatedFeed;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
reportError(feed, e.getMessage()); reportError(feed, e.getMessage());
} }
return null;
} }
@VisibleForTesting @VisibleForTesting
static void tryUpdateFeed(Feed feed, Context context, Uri folderUri, static Feed tryUpdateFeed(Feed feed, Context context, Uri folderUri,
UpdaterProgressListener updaterProgressListener) throws IOException { UpdaterProgressListener updaterProgressListener) throws IOException {
if (feed.getItems() == null) { if (feed.getItems() == null) {
feed.setItems(new ArrayList<>()); feed.setItems(new ArrayList<>());
} }
//make sure it is the latest 'version' of this feed from the db (all items etc) // make sure it is the latest 'version' of this feed from the db (all items etc)
// and for new feeds, settings etc are set up properly.
feed = FeedDatabaseWriter.updateFeed(context, feed, false); feed = FeedDatabaseWriter.updateFeed(context, feed, false);
// list files in feed folder // list files in feed folder
@ -127,6 +130,8 @@ public class LocalFeedUpdater {
feed.setAuthor(context.getString(R.string.local_folder)); feed.setAuthor(context.getString(R.string.local_folder));
FeedDatabaseWriter.updateFeed(context, feed, true); FeedDatabaseWriter.updateFeed(context, feed, true);
return feed;
} }
/** /**