summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authormoralesg <moralesg@rocketmail.com>2020-10-28 12:07:17 -0300
committerGitHub <noreply@github.com>2020-10-28 16:07:17 +0100
commit370df3a26c9990a1b484b4e30145fa9a38f2b403 (patch)
treeff1adbb79c24e84e5efff6c10e94040250b4b15b /core/src
parent8ad4682aa4cfc58065f02e12b5072b6ee966fafd (diff)
downloadAntennaPod-370df3a26c9990a1b484b4e30145fa9a38f2b403.zip
Local feeds: honor file creation date (#4607)
Diffstat (limited to 'core/src')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/LocalFeedUpdater.java28
-rw-r--r--core/src/test/java/de/danoeh/antennapod/core/feed/LocalFeedUpdaterTest.java32
2 files changed, 57 insertions, 3 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 2791be08c..f74ff290c 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
@@ -10,12 +10,15 @@ import androidx.documentfile.provider.DocumentFile;
import org.apache.commons.lang3.StringUtils;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
@@ -24,6 +27,7 @@ import de.danoeh.antennapod.core.R;
import de.danoeh.antennapod.core.service.download.DownloadStatus;
import de.danoeh.antennapod.core.storage.DBTasks;
import de.danoeh.antennapod.core.storage.DBWriter;
+import de.danoeh.antennapod.core.util.DateUtils;
import de.danoeh.antennapod.core.util.DownloadError;
public class LocalFeedUpdater {
@@ -130,12 +134,30 @@ public class LocalFeedUpdater {
private static FeedItem createFeedItem(Feed feed, DocumentFile file, Context context) {
String uuid = UUID.randomUUID().toString();
- FeedItem item = new FeedItem(0, file.getName(), uuid, file.getName(), new Date(),
- FeedItem.UNPLAYED, feed);
- item.setAutoDownload(false);
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(context, file.getUri());
+ String dateStr = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE);
+
+ Date date = null;
+ if (!TextUtils.isEmpty(dateStr)) {
+ try {
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss", Locale.getDefault());
+ date = simpleDateFormat.parse(dateStr);
+ } catch (ParseException parseException) {
+ date = DateUtils.parse(dateStr);
+ if (date == null) {
+ date = new Date(file.lastModified());
+ }
+ }
+ } else {
+ date = new Date(file.lastModified());
+ }
+
+ FeedItem item = new FeedItem(0, file.getName(), uuid, file.getName(), date,
+ FeedItem.UNPLAYED, feed);
+ item.setAutoDownload(false);
+
String durationStr = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
String title = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
if (!TextUtils.isEmpty(title)) {
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 90bf59e92..b4d3b201e 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
@@ -20,6 +20,9 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.shadows.ShadowMediaMetadataRetriever;
import java.io.IOException;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
import java.util.List;
import de.danoeh.antennapod.core.ApplicationCallbacks;
@@ -30,6 +33,7 @@ import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
@@ -150,6 +154,32 @@ public class LocalFeedUpdaterTest {
}
/**
+ * Test default feed metadata.
+ *
+ * @see #mapDummyMetadata Title and PubDate are dummy values.
+ */
+ @Test
+ public void testUpdateFeed_FeedMetadata() {
+ callUpdateFeed(LOCAL_FEED_DIR1);
+
+ Feed feed = verifySingleFeedInDatabase();
+ List<FeedItem> feedItems = DBReader.getFeedItemList(feed);
+ FeedItem feedItem = feedItems.get(0);
+
+ assertEquals("track1.mp3", feedItem.getTitle());
+
+ Date pubDate = feedItem.getPubDate();
+ Calendar calendar = GregorianCalendar.getInstance();
+ calendar.setTime(pubDate);
+ assertEquals(2020, calendar.get(Calendar.YEAR));
+ assertEquals(6 - 1, calendar.get(Calendar.MONTH));
+ assertEquals(1, calendar.get(Calendar.DAY_OF_MONTH));
+ assertEquals(22, calendar.get(Calendar.HOUR_OF_DAY));
+ assertEquals(23, calendar.get(Calendar.MINUTE));
+ assertEquals(24, calendar.get(Calendar.SECOND));
+ }
+
+ /**
* Fill ShadowMediaMetadataRetriever with dummy duration and title.
*
* @param localFeedDir assets local feed folder with media files
@@ -162,6 +192,8 @@ public class LocalFeedUpdaterTest {
MediaMetadataRetriever.METADATA_KEY_DURATION, "10");
ShadowMediaMetadataRetriever.addMetadata(path,
MediaMetadataRetriever.METADATA_KEY_TITLE, fileName);
+ ShadowMediaMetadataRetriever.addMetadata(path,
+ MediaMetadataRetriever.METADATA_KEY_DATE, "20200601T222324");
}
}