diff options
Diffstat (limited to 'core')
6 files changed, 62 insertions, 29 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/LocalFeedUpdater.java b/core/src/main/java/de/danoeh/antennapod/core/feed/LocalFeedUpdater.java index 988b7c015..d37bc230d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/LocalFeedUpdater.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/LocalFeedUpdater.java @@ -7,6 +7,7 @@ import android.text.TextUtils; import android.util.Log; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.documentfile.provider.DocumentFile; import java.io.IOException; @@ -47,9 +48,10 @@ public class LocalFeedUpdater { 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 void updateFeed(Feed feed, Context context, + @Nullable UpdaterProgressListener updaterProgressListener) { try { - tryUpdateFeed(feed, context); + tryUpdateFeed(feed, context, updaterProgressListener); if (mustReportDownloadSuccessful(feed)) { reportSuccess(feed); @@ -60,7 +62,8 @@ public class LocalFeedUpdater { } } - private static void tryUpdateFeed(Feed feed, Context context) throws IOException { + private static void tryUpdateFeed(Feed feed, Context context, UpdaterProgressListener updaterProgressListener) + throws IOException { String uriString = feed.getDownload_url().replace(Feed.PREFIX_LOCAL_FOLDER, ""); DocumentFile documentFolder = DocumentFile.fromTreeUri(context, Uri.parse(uriString)); if (documentFolder == null) { @@ -92,14 +95,17 @@ public class LocalFeedUpdater { // add new files to feed and update item data List<FeedItem> newItems = feed.getItems(); - for (DocumentFile f : mediaFiles) { - FeedItem oldItem = feedContainsFile(feed, f.getName()); - FeedItem newItem = createFeedItem(feed, f, context); + for (int i = 0; i < mediaFiles.size(); i++) { + FeedItem oldItem = feedContainsFile(feed, mediaFiles.get(i).getName()); + FeedItem newItem = createFeedItem(feed, mediaFiles.get(i), context); if (oldItem == null) { newItems.add(newItem); } else { oldItem.updateFromOther(newItem); } + if (updaterProgressListener != null) { + updaterProgressListener.onLocalFileScanned(i, mediaFiles.size()); + } } // remove feed items without corresponding file @@ -260,4 +266,9 @@ public class LocalFeedUpdater { // (avoid logging success again if the last update was ok) return !lastDownloadStatus.isSuccessful(); } + + @FunctionalInterface + public interface UpdaterProgressListener { + void onLocalFileScanned(int scanned, int totalFiles); + } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index 218ccba9d..4869b3faa 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -301,7 +301,11 @@ public class DownloadService extends Service { private void performLocalFeedRefresh(Downloader downloader, DownloadRequest request) { try { Feed feed = DBReader.getFeed(request.getFeedfileId()); - LocalFeedUpdater.updateFeed(feed, DownloadService.this); + LocalFeedUpdater.updateFeed(feed, DownloadService.this, (scanned, totalFiles) -> { + request.setSize(totalFiles); + request.setSoFar(scanned); + request.setProgressPercent((int) (100.0 * scanned / totalFiles)); + }); } catch (Exception e) { e.printStackTrace(); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java index a33409323..f5677433f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java @@ -52,18 +52,41 @@ public class DownloadServiceNotification { return null; } - String contentTitle = context.getString(R.string.download_notification_title); - String downloadsLeft = (downloads.size() > 0) + String contentTitle; + if (typeIsOnly(downloads, Feed.FEEDFILETYPE_FEED)) { + contentTitle = context.getString(R.string.download_notification_title_feeds); + } else if (typeIsOnly(downloads, FeedMedia.FEEDFILETYPE_FEEDMEDIA)) { + contentTitle = context.getString(R.string.download_notification_title_episodes); + } else { + contentTitle = context.getString(R.string.download_notification_title); + } + String contentText = (downloads.size() > 0) ? context.getResources().getQuantityString(R.plurals.downloads_left, downloads.size(), downloads.size()) : context.getString(R.string.completing); String bigText = compileNotificationString(downloads); + if (!bigText.contains("\n")) { + contentText = bigText; + } notificationCompatBuilder.setContentTitle(contentTitle); - notificationCompatBuilder.setContentText(downloadsLeft); + notificationCompatBuilder.setContentText(contentText); notificationCompatBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(bigText)); return notificationCompatBuilder.build(); } + private boolean typeIsOnly(List<Downloader> downloads, int feedFileType) { + for (Downloader downloader : downloads) { + if (downloader.cancelled) { + continue; + } + DownloadRequest request = downloader.getDownloadRequest(); + if (request.getFeedfileType() != feedFileType) { + return false; + } + } + return true; + } + private static String compileNotificationString(List<Downloader> downloads) { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < downloads.size(); i++) { @@ -73,24 +96,18 @@ public class DownloadServiceNotification { } stringBuilder.append("• "); DownloadRequest request = downloader.getDownloadRequest(); - switch (request.getFeedfileType()) { - case Feed.FEEDFILETYPE_FEED: - if (request.getTitle() != null) { - stringBuilder.append(request.getTitle()); - } - break; - case FeedMedia.FEEDFILETYPE_FEEDMEDIA: - if (request.getTitle() != null) { - stringBuilder.append(request.getTitle()) - .append(" (") - .append(request.getProgressPercent()) - .append("%)"); - } - break; - default: - stringBuilder.append("Unknown: ").append(request.getFeedfileType()); + if (request.getTitle() != null) { + stringBuilder.append(request.getTitle()); + } else { + stringBuilder.append(request.getSource()); + } + if (request.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) { + stringBuilder.append(" (").append(request.getProgressPercent()).append("%)"); + } else if (request.getSource().startsWith(Feed.PREFIX_LOCAL_FOLDER)) { + stringBuilder.append(" (").append(request.getSoFar()) + .append("/").append(request.getSize()).append(")"); } - if (i != downloads.size()) { + if (i != downloads.size() - 1) { stringBuilder.append("\n"); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index 07e197752..5bee39970 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -1664,6 +1664,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { public void seekTo(final int t) { mediaPlayer.seekTo(t); + EventBus.getDefault().post(new PlaybackPositionEvent(t, getDuration())); } private void seekDelta(final int d) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DatabaseExporter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DatabaseExporter.java index 812080368..d4a863b8b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DatabaseExporter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DatabaseExporter.java @@ -27,7 +27,7 @@ public class DatabaseExporter { ParcelFileDescriptor pfd = null; FileOutputStream fileOutputStream = null; try { - pfd = context.getContentResolver().openFileDescriptor(uri, "w"); + pfd = context.getContentResolver().openFileDescriptor(uri, "wt"); fileOutputStream = new FileOutputStream(pfd.getFileDescriptor()); exportToStream(fileOutputStream, context); } catch (IOException e) { diff --git a/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java b/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java index bafee7293..05b0584ed 100644 --- a/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java +++ b/core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java @@ -276,7 +276,7 @@ public class LocalFeedUpdaterTest { // call method to test Feed feed = new Feed(FEED_URL, null); - LocalFeedUpdater.updateFeed(feed, context); + LocalFeedUpdater.updateFeed(feed, context, null); } } |