Store download date in database (#7090)

This commit is contained in:
ByteHamster 2024-04-13 17:28:56 +02:00 committed by GitHub
parent 456159e85f
commit 04fab47072
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 62 additions and 55 deletions

View File

@ -138,7 +138,8 @@ public class PlaybackServiceMediaPlayerTest {
f.setItems(new ArrayList<>());
FeedItem i = new FeedItem(0, "t", "i", "l", new Date(), FeedItem.UNPLAYED, f);
f.getItems().add(i);
FeedMedia media = new FeedMedia(0, i, 0, 0, 0, "audio/wav", fileUrl, downloadUrl, fileUrl != null, null, 0, 0);
FeedMedia media = new FeedMedia(0, i, 0, 0, 0, "audio/wav", fileUrl, downloadUrl,
fileUrl == null ? 0 : System.currentTimeMillis(), null, 0, 0);
i.setMedia(media);
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();

View File

@ -134,7 +134,8 @@ public class UITestUtils {
if (!hostTextOnlyFeeds) {
File mediaFile = newMediaFile("feed-" + i + "-episode-" + j + ".mp3");
item.setMedia(new FeedMedia(j, item, 0, 0, mediaFile.length(), "audio/mp3", null, hostFile(mediaFile), false, null, 0, 0));
item.setMedia(new FeedMedia(j, item, 0, 0, mediaFile.length(), "audio/mp3",
null, hostFile(mediaFile), 0, null, 0, 0));
}
}
feed.setItems(items);
@ -175,7 +176,7 @@ public class UITestUtils {
FeedMedia media = item.getMedia();
int fileId = Integer.parseInt(StringUtils.substringAfter(media.getDownloadUrl(), "files/"));
media.setLocalFileUrl(server.accessFile(fileId).getAbsolutePath());
media.setDownloaded(true);
media.setDownloaded(true, System.currentTimeMillis());
}
}
}

View File

@ -42,7 +42,7 @@ public class PlayActionButton extends ItemActionButton {
}
if (!media.fileExists()) {
Log.i(TAG, "Missing episode. Will update the database now.");
media.setDownloaded(false);
media.setDownloaded(false, 0);
media.setLocalFileUrl(null);
DBWriter.setFeedMedia(media);
EventBus.getDefault().post(FeedItemEvent.updated(media.getItem()));

View File

@ -34,7 +34,7 @@ public class FeedMedia implements Playable {
private long id;
private String localFileUrl;
private String downloadUrl;
private boolean downloaded;
private long downloadDate;
private int duration;
private int position; // Current position in file
private long lastPlayedTime; // Last time this media was played (in ms)
@ -56,7 +56,7 @@ public class FeedMedia implements Playable {
String mimeType) {
this.localFileUrl = null;
this.downloadUrl = downloadUrl;
this.downloaded = false;
this.downloadDate = 0;
this.item = i;
this.size = size;
this.mimeType = mimeType;
@ -64,11 +64,11 @@ public class FeedMedia implements Playable {
public FeedMedia(long id, FeedItem item, int duration, int position,
long size, String mimeType, String localFileUrl, String downloadUrl,
boolean downloaded, Date playbackCompletionDate, int playedDuration,
long downloadDate, Date playbackCompletionDate, int playedDuration,
long lastPlayedTime) {
this.localFileUrl = localFileUrl;
this.downloadUrl = downloadUrl;
this.downloaded = downloaded;
this.downloadDate = downloadDate;
this.id = id;
this.item = item;
this.duration = duration;
@ -84,9 +84,9 @@ public class FeedMedia implements Playable {
public FeedMedia(long id, FeedItem item, int duration, int position,
long size, String mimeType, String localFileUrl, String downloadUrl,
boolean downloaded, Date playbackCompletionDate, int playedDuration,
long downloadDate, Date playbackCompletionDate, int playedDuration,
Boolean hasEmbeddedPicture, long lastPlayedTime) {
this(id, item, duration, position, size, mimeType, localFileUrl, downloadUrl, downloaded,
this(id, item, duration, position, size, mimeType, localFileUrl, downloadUrl, downloadDate,
playbackCompletionDate, playedDuration, lastPlayedTime);
this.hasEmbeddedPicture = hasEmbeddedPicture;
}
@ -293,7 +293,7 @@ public class FeedMedia implements Playable {
dest.writeString(mimeType);
dest.writeString(localFileUrl);
dest.writeString(downloadUrl);
dest.writeByte((byte) ((downloaded) ? 1 : 0));
dest.writeLong(downloadDate);
dest.writeLong((playbackCompletionDate != null) ? playbackCompletionDate.getTime() : 0);
dest.writeInt(playedDuration);
dest.writeLong(lastPlayedTime);
@ -393,7 +393,7 @@ public class FeedMedia implements Playable {
}
public boolean isDownloaded() {
return downloaded;
return downloadDate > 0;
}
public long getItemId() {
@ -441,7 +441,7 @@ public class FeedMedia implements Playable {
final long id = in.readLong();
final long itemID = in.readLong();
FeedMedia result = new FeedMedia(id, null, in.readInt(), in.readInt(), in.readLong(), in.readString(), in.readString(),
in.readString(), in.readByte() != 0, new Date(in.readLong()), in.readInt(), in.readLong());
in.readString(), in.readLong(), new Date(in.readLong()), in.readInt(), in.readLong());
result.itemID = itemID;
return result;
}
@ -466,17 +466,21 @@ public class FeedMedia implements Playable {
this.hasEmbeddedPicture = hasEmbeddedPicture;
}
public void setDownloaded(boolean downloaded) {
this.downloaded = downloaded;
public void setDownloaded(boolean downloaded, long when) {
this.downloadDate = downloaded ? when : 0;
if (item != null && downloaded && item.isNew()) {
item.setPlayed(false);
}
}
public long getDownloadDate() {
return downloadDate;
}
public void setLocalFileUrl(String fileUrl) {
this.localFileUrl = fileUrl;
if (fileUrl == null) {
downloaded = false;
downloadDate = 0;
}
}

View File

@ -28,7 +28,7 @@ public class FeedMediaTest {
when(item.isPlayed()).thenReturn(false);
media.setItem(item);
media.setDownloaded(true);
media.setDownloaded(true, System.currentTimeMillis());
verify(item, never()).setNew();
verify(item, never()).setPlayed(true);
@ -45,7 +45,7 @@ public class FeedMediaTest {
when(item.isPlayed()).thenReturn(true);
media.setItem(item);
media.setDownloaded(true);
media.setDownloaded(true, System.currentTimeMillis());
verify(item, never()).setNew();
verify(item, never()).setPlayed(true);
@ -62,7 +62,7 @@ public class FeedMediaTest {
when(item.isPlayed()).thenReturn(false);
media.setItem(item);
media.setDownloaded(true);
media.setDownloaded(true, System.currentTimeMillis());
verify(item).setPlayed(false);
verify(item, never()).setNew();

View File

@ -117,6 +117,6 @@ public class DownloadRequestBuilderTest {
private FeedMedia createFeedItem(final int id) {
// Use mockito would be less verbose, but it'll take extra 1 second for this tiny test
return new FeedMedia(id, null, 0, 0, 0, "", "", "http://example.com/episode" + id, false, null, 0, 0);
return new FeedMedia(id, null, 0, 0, 0, "", "", "http://example.com/episode" + id, 0, null, 0, 0);
}
}

View File

@ -50,7 +50,7 @@ public class MediaDownloadedHandler implements Runnable {
}
// media.setDownloaded modifies played state
boolean broadcastUnreadStateUpdate = media.getItem() != null && media.getItem().isNew();
media.setDownloaded(true);
media.setDownloaded(true, System.currentTimeMillis());
media.setLocalFileUrl(request.getDestination());
media.setSize(new File(request.getDestination()).length());
media.checkEmbeddedPicture(); // enforce check

View File

@ -172,7 +172,7 @@ public class LocalFeedUpdater {
long size = file.getLength();
FeedMedia media = new FeedMedia(0, item, 0, 0, size, file.getType(),
file.getUri().toString(), file.getUri().toString(), false, null, 0, 0);
file.getUri().toString(), file.getUri().toString(), 0, null, 0, 0);
item.setMedia(media);
for (FeedItem existingItem : feed.getItems()) {

View File

@ -137,7 +137,7 @@ public class DbCleanupTests {
assertTrue(f.createNewFile());
files.add(f);
item.setMedia(new FeedMedia(0, item, 1, 0, 1L, "m",
f.getAbsolutePath(), "url", true, playbackCompletionDate, 0, 0));
f.getAbsolutePath(), "url", System.currentTimeMillis(), playbackCompletionDate, 0, 0));
items.add(item);
}
@ -206,7 +206,7 @@ public class DbCleanupTests {
List<Feed> feeds = saveFeedlist(1, 1, true);
FeedMedia m = feeds.get(0).getItems().get(0).getMedia();
//noinspection ConstantConditions
m.setDownloaded(true);
m.setDownloaded(true, System.currentTimeMillis());
m.setLocalFileUrl("file");
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();

View File

@ -101,7 +101,7 @@ public class DbNullCleanupAlgorithmTest {
File f = new File(destFolder, "file " + i);
assertTrue(f.createNewFile());
files.add(f);
item.setMedia(new FeedMedia(0, item, 1, 0, 1L, "m", f.getAbsolutePath(), "url", true,
item.setMedia(new FeedMedia(0, item, 1, 0, 1L, "m", f.getAbsolutePath(), "url", System.currentTimeMillis(),
new Date(numItems - i), 0, 0));
items.add(item);
}

View File

@ -231,7 +231,7 @@ public class DbReaderTest {
int i = random.nextInt(numItems);
if (!downloaded.contains(items.get(i))) {
FeedItem item = items.get(i);
item.getMedia().setDownloaded(true);
item.getMedia().setDownloaded(true, System.currentTimeMillis());
item.getMedia().setLocalFileUrl("file" + i);
downloaded.add(item);
}

View File

@ -101,7 +101,7 @@ public class DbWriterTest {
FeedItem item = new FeedItem(0, "Item", "Item", "url", new Date(), FeedItem.PLAYED, feed);
items.add(item);
FeedMedia media = new FeedMedia(0, item, duration, 1, 1, "mime_type",
"dummy path", "download_url", true, null, 0, 0);
"dummy path", "download_url", System.currentTimeMillis(), null, 0, 0);
item.setMedia(media);
DBWriter.setFeedItem(item).get(TIMEOUT, TimeUnit.SECONDS);
@ -133,7 +133,7 @@ public class DbWriterTest {
FeedItem item = new FeedItem(0, "Item", "Item", "url", new Date(), FeedItem.PLAYED, feed);
FeedMedia media = new FeedMedia(0, item, 1, 1, 1, "mime_type",
dest.getAbsolutePath(), "download_url", true, null, 0, 0);
dest.getAbsolutePath(), "download_url", System.currentTimeMillis(), null, 0, 0);
item.setMedia(media);
items.add(item);
@ -168,7 +168,7 @@ public class DbWriterTest {
FeedItem item = new FeedItem(0, "Item", "Item", "url", new Date(), FeedItem.UNPLAYED, feed);
FeedMedia media = new FeedMedia(0, item, 1, 1, 1, "mime_type",
dest.getAbsolutePath(), "download_url", true, null, 0, 0);
dest.getAbsolutePath(), "download_url", System.currentTimeMillis(), null, 0, 0);
item.setMedia(media);
items.add(item);
@ -214,7 +214,7 @@ public class DbWriterTest {
itemFiles.add(enc);
FeedMedia media = new FeedMedia(0, item, 1, 1, 1, "mime_type",
enc.getAbsolutePath(), "download_url", true, null, 0, 0);
enc.getAbsolutePath(), "download_url", System.currentTimeMillis(), null, 0, 0);
item.setMedia(media);
}
@ -335,7 +335,7 @@ public class DbWriterTest {
feed.getItems().add(item);
File enc = new File(destFolder, "file " + i);
FeedMedia media = new FeedMedia(0, item, 1, 1, 1, "mime_type",
enc.getAbsolutePath(), "download_url", false, null, 0, 0);
enc.getAbsolutePath(), "download_url", 0, null, 0, 0);
item.setMedia(media);
}
@ -395,7 +395,7 @@ public class DbWriterTest {
feed.getItems().add(item);
File enc = new File(destFolder, "file " + i);
FeedMedia media = new FeedMedia(0, item, 1, 1, 1, "mime_type",
enc.getAbsolutePath(), "download_url", false, null, 0, 0);
enc.getAbsolutePath(), "download_url", 0, null, 0, 0);
item.setMedia(media);
}
@ -469,7 +469,7 @@ public class DbWriterTest {
feed.setItems(new ArrayList<>());
FeedItem item = new FeedItem(0, "title", "id", "link", new Date(), FeedItem.PLAYED, feed);
FeedMedia media = new FeedMedia(0, item, 10, 0, 1, "mime", null,
"url", false, playbackCompletionDate, 0, 0);
"url", 0, playbackCompletionDate, 0, 0);
feed.getItems().add(item);
item.setMedia(media);
PodDBAdapter adapter = PodDBAdapter.getInstance();

View File

@ -146,10 +146,10 @@ class DBUpgrader {
+ " ADD COLUMN " + PodDBAdapter.KEY_HAS_EMBEDDED_PICTURE + " INTEGER DEFAULT -1");
db.execSQL("UPDATE " + PodDBAdapter.TABLE_NAME_FEED_MEDIA
+ " SET " + PodDBAdapter.KEY_HAS_EMBEDDED_PICTURE + "=0"
+ " WHERE " + PodDBAdapter.KEY_DOWNLOADED + "=0");
+ " WHERE " + PodDBAdapter.KEY_DOWNLOAD_DATE + "=0");
Cursor c = db.rawQuery("SELECT " + PodDBAdapter.KEY_FILE_URL
+ " FROM " + PodDBAdapter.TABLE_NAME_FEED_MEDIA
+ " WHERE " + PodDBAdapter.KEY_DOWNLOADED + "=1 "
+ " WHERE " + PodDBAdapter.KEY_DOWNLOAD_DATE + "=1 "
+ " AND " + PodDBAdapter.KEY_HAS_EMBEDDED_PICTURE + "=-1", null);
if (c.moveToFirst()) {
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
@ -185,7 +185,7 @@ class DBUpgrader {
+ PodDBAdapter.TABLE_NAME_QUEUE + "." + PodDBAdapter.KEY_FEEDITEM
+ " WHERE "
+ PodDBAdapter.TABLE_NAME_FEED_ITEMS + "." + PodDBAdapter.KEY_READ + " = 0 AND " // unplayed
+ PodDBAdapter.TABLE_NAME_FEED_MEDIA + "." + PodDBAdapter.KEY_DOWNLOADED + " = 0 AND " // undownloaded
+ PodDBAdapter.TABLE_NAME_FEED_MEDIA + "." + PodDBAdapter.KEY_DOWNLOAD_DATE + " = 0 AND " // undownloaded
+ PodDBAdapter.TABLE_NAME_FEED_MEDIA + "." + PodDBAdapter.KEY_POSITION + " = 0 AND " // not partially played
+ PodDBAdapter.TABLE_NAME_QUEUE + "." + PodDBAdapter.KEY_ID + " IS NULL"; // not in queue
String sql = "UPDATE " + PodDBAdapter.TABLE_NAME_FEED_ITEMS

View File

@ -123,7 +123,7 @@ public class DBWriter {
if (mediaFile.exists() && !mediaFile.delete()) {
Log.d(TAG, "Deletion of downloaded file failed.");
}
media.setDownloaded(false);
media.setDownloaded(false, 0);
media.setLocalFileUrl(null);
media.setHasEmbeddedPicture(false);
PodDBAdapter adapter = PodDBAdapter.getInstance();

View File

@ -76,7 +76,7 @@ public class PodDBAdapter {
public static final String KEY_IMAGE_URL = "image_url";
public static final String KEY_FEED = "feed";
public static final String KEY_MEDIA = "media";
public static final String KEY_DOWNLOADED = "downloaded";
public static final String KEY_DOWNLOAD_DATE = "downloaded";
public static final String KEY_LAST_REFRESH_ATTEMPT = "downloaded";
public static final String KEY_LASTUPDATE = "last_update";
public static final String KEY_FEEDFILE = "feedfile";
@ -187,7 +187,7 @@ public class PodDBAdapter {
private static final String CREATE_TABLE_FEED_MEDIA = "CREATE TABLE "
+ TABLE_NAME_FEED_MEDIA + " (" + TABLE_PRIMARY_KEY + KEY_DURATION
+ " INTEGER," + KEY_FILE_URL + " TEXT," + KEY_DOWNLOAD_URL
+ " TEXT," + KEY_DOWNLOADED + " INTEGER," + KEY_POSITION
+ " TEXT," + KEY_DOWNLOAD_DATE + " INTEGER," + KEY_POSITION
+ " INTEGER," + KEY_SIZE + " INTEGER," + KEY_MIME_TYPE + " TEXT,"
+ KEY_PLAYBACK_COMPLETION_DATE + " INTEGER,"
+ KEY_FEEDITEM + " INTEGER,"
@ -277,7 +277,7 @@ public class PodDBAdapter {
+ TABLE_NAME_FEED_MEDIA + "." + KEY_DURATION + ", "
+ TABLE_NAME_FEED_MEDIA + "." + KEY_FILE_URL + ", "
+ TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOAD_URL + ", "
+ TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOADED + ", "
+ TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOAD_DATE + ", "
+ TABLE_NAME_FEED_MEDIA + "." + KEY_POSITION + ", "
+ TABLE_NAME_FEED_MEDIA + "." + KEY_SIZE + ", "
+ TABLE_NAME_FEED_MEDIA + "." + KEY_MIME_TYPE + ", "
@ -504,7 +504,7 @@ public class PodDBAdapter {
values.put(KEY_SIZE, media.getSize());
values.put(KEY_MIME_TYPE, media.getMimeType());
values.put(KEY_DOWNLOAD_URL, media.getDownloadUrl());
values.put(KEY_DOWNLOADED, media.isDownloaded());
values.put(KEY_DOWNLOAD_DATE, media.getDownloadDate());
values.put(KEY_FILE_URL, media.getLocalFileUrl());
values.put(KEY_HAS_EMBEDDED_PICTURE, media.hasEmbeddedPicture());
values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime());
@ -1202,9 +1202,9 @@ public class PodDBAdapter {
+ "IFNULL(SUM(CASE WHEN (" + timeFilter + ")"
+ " THEN (" + playedTime + ") ELSE 0 END), 0) AS played_time, "
+ "IFNULL(SUM(" + TABLE_NAME_FEED_MEDIA + "." + KEY_DURATION + "), 0) AS total_time, "
+ "SUM(CASE WHEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOADED + " > 0"
+ "SUM(CASE WHEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOAD_DATE + " > 0"
+ " THEN 1 ELSE 0 END) AS num_downloaded, "
+ "SUM(CASE WHEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOADED + " > 0"
+ "SUM(CASE WHEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOAD_DATE + " > 0"
+ " THEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_SIZE + " ELSE 0 END) AS download_size"
+ " FROM " + TABLE_NAME_FEED_ITEMS
+ JOIN_FEED_ITEM_AND_MEDIA
@ -1251,12 +1251,12 @@ public class PodDBAdapter {
+ " OR " + KEY_READ + "=" + FeedItem.UNPLAYED + ")";
break;
case SHOW_DOWNLOADED:
whereRead = KEY_DOWNLOADED + "=1";
whereRead = KEY_DOWNLOAD_DATE + ">0";
break;
case SHOW_DOWNLOADED_UNPLAYED:
whereRead = "(" + KEY_READ + "=" + FeedItem.NEW
+ " OR " + KEY_READ + "=" + FeedItem.UNPLAYED + ")"
+ " AND " + KEY_DOWNLOADED + "=1";
+ " AND " + KEY_DOWNLOAD_DATE + ">0";
break;
case SHOW_NONE:
// deliberate fall-through

View File

@ -23,7 +23,7 @@ public class FeedItemFilterQuery {
String keyRead = PodDBAdapter.TABLE_NAME_FEED_ITEMS + "." + PodDBAdapter.KEY_READ;
String keyPosition = PodDBAdapter.TABLE_NAME_FEED_MEDIA + "." + PodDBAdapter.KEY_POSITION;
String keyCompletionDate = PodDBAdapter.TABLE_NAME_FEED_MEDIA + "." + PodDBAdapter.KEY_PLAYBACK_COMPLETION_DATE;
String keyDownloaded = PodDBAdapter.TABLE_NAME_FEED_MEDIA + "." + PodDBAdapter.KEY_DOWNLOADED;
String keyDownloaded = PodDBAdapter.TABLE_NAME_FEED_MEDIA + "." + PodDBAdapter.KEY_DOWNLOAD_DATE;
String keyMediaId = PodDBAdapter.TABLE_NAME_FEED_MEDIA + "." + PodDBAdapter.KEY_ID;
String keyItemId = PodDBAdapter.TABLE_NAME_FEED_ITEMS + "." + PodDBAdapter.KEY_ID;
String keyFeedItem = PodDBAdapter.KEY_FEEDITEM;
@ -49,7 +49,7 @@ public class FeedItemFilterQuery {
statements.add(keyItemId + " NOT IN (SELECT " + keyFeedItem + " FROM " + tableQueue + ") ");
}
if (filter.showDownloaded) {
statements.add(keyDownloaded + " = 1 ");
statements.add(keyDownloaded + " > 0 ");
} else if (filter.showNotDownloaded) {
statements.add(keyDownloaded + " = 0 ");
}

View File

@ -20,7 +20,7 @@ public class FeedMediaCursor extends CursorWrapper {
private final int indexMimeType;
private final int indexFileUrl;
private final int indexDownloadUrl;
private final int indexDownloaded;
private final int indexDownloadDate;
private final int indexPlayedDuration;
private final int indexLastPlayedTime;
private final int indexHasEmbeddedPicture;
@ -35,7 +35,7 @@ public class FeedMediaCursor extends CursorWrapper {
indexMimeType = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_MIME_TYPE);
indexFileUrl = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FILE_URL);
indexDownloadUrl = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DOWNLOAD_URL);
indexDownloaded = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DOWNLOADED);
indexDownloadDate = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DOWNLOAD_DATE);
indexPlayedDuration = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_PLAYED_DURATION);
indexLastPlayedTime = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_LAST_PLAYED_TIME);
indexHasEmbeddedPicture = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_HAS_EMBEDDED_PICTURE);
@ -71,7 +71,7 @@ public class FeedMediaCursor extends CursorWrapper {
getString(indexMimeType),
getString(indexFileUrl),
getString(indexDownloadUrl),
getInt(indexDownloaded) > 0,
getLong(indexDownloadDate),
playbackCompletionDate,
getInt(indexPlayedDuration),
hasEmbeddedPicture,

View File

@ -1,8 +1,6 @@
package de.danoeh.antennapod.storage.database;
import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.storage.database.FeedItemPermutors;
import de.danoeh.antennapod.storage.database.Permutor;
import org.junit.Test;
import java.util.ArrayList;
@ -188,21 +186,24 @@ public class FeedItemPermutorsTest {
calendar.set(2019, 0, 1); // January 1st
Feed feed1 = new Feed(null, null, "Feed title 1");
FeedItem feedItem1 = new FeedItem(1, "Title 1", null, null, calendar.getTime(), 0, feed1);
FeedMedia feedMedia1 = new FeedMedia(0, feedItem1, 1000, 0, 100, null, null, null, true, null, 0, 0);
FeedMedia feedMedia1 = new FeedMedia(0, feedItem1, 1000, 0, 100, null, null, null,
System.currentTimeMillis(), null, 0, 0);
feedItem1.setMedia(feedMedia1);
itemList.add(feedItem1);
calendar.set(2019, 2, 1); // March 1st
Feed feed2 = new Feed(null, null, "Feed title 3");
FeedItem feedItem2 = new FeedItem(3, "Title 3", null, null, calendar.getTime(), 0, feed2);
FeedMedia feedMedia2 = new FeedMedia(0, feedItem2, 3000, 0, 300, null, null, null, true, null, 0, 0);
FeedMedia feedMedia2 = new FeedMedia(0, feedItem2, 3000, 0, 300, null, null, null,
System.currentTimeMillis(), null, 0, 0);
feedItem2.setMedia(feedMedia2);
itemList.add(feedItem2);
calendar.set(2019, 1, 1); // February 1st
Feed feed3 = new Feed(null, null, "Feed title 2");
FeedItem feedItem3 = new FeedItem(2, "Title 2", null, null, calendar.getTime(), 0, feed3);
FeedMedia feedMedia3 = new FeedMedia(0, feedItem3, 2000, 0, 200, null, null, null, true, null, 0, 0);
FeedMedia feedMedia3 = new FeedMedia(0, feedItem3, 2000, 0, 200, null, null, null,
System.currentTimeMillis(), null, 0, 0);
feedItem3.setMedia(feedMedia3);
itemList.add(feedItem3);