summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/LocalFeedUpdater.java23
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java6
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java57
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java1
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DatabaseExporter.java2
-rw-r--r--core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java2
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);
}
}