use of androidx.core.util.Pair in project AntennaPod by AntennaPod.
the class EpisodeActionFilterTest method testGetRemoteActionsHappeningBeforeLocalActions.
public void testGetRemoteActionsHappeningBeforeLocalActions() throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date morning = format.parse("2021-01-01 08:00:00");
Date lateMorning = format.parse("2021-01-01 09:00:00");
List<EpisodeAction> episodeActions = new ArrayList<>();
episodeActions.add(new EpisodeAction.Builder("podcast.a", "episode.1", EpisodeAction.Action.PLAY).timestamp(morning).position(10).build());
episodeActions.add(new EpisodeAction.Builder("podcast.a", "episode.1", EpisodeAction.Action.PLAY).timestamp(lateMorning).position(20).build());
episodeActions.add(new EpisodeAction.Builder("podcast.a", "episode.2", EpisodeAction.Action.PLAY).timestamp(morning).position(5).build());
Date morningFiveMinutesEarlier = format.parse("2021-01-01 07:55:00");
List<EpisodeAction> remoteActions = new ArrayList<>();
remoteActions.add(new EpisodeAction.Builder("podcast.a", "episode.1", EpisodeAction.Action.PLAY).timestamp(morningFiveMinutesEarlier).position(10).build());
remoteActions.add(new EpisodeAction.Builder("podcast.a", "episode.2", EpisodeAction.Action.PLAY).timestamp(morningFiveMinutesEarlier).position(5).build());
Map<Pair<String, String>, EpisodeAction> uniqueList = episodeActionFilter.getRemoteActionsOverridingLocalActions(remoteActions, episodeActions);
assertSame(0, uniqueList.size());
}
use of androidx.core.util.Pair in project AntennaPod by AntennaPod.
the class EpisodeActionFilterTest method testGetRemoteActionsHappeningAfterLocalActions.
public void testGetRemoteActionsHappeningAfterLocalActions() throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date morning = format.parse("2021-01-01 08:00:00");
Date lateMorning = format.parse("2021-01-01 09:00:00");
List<EpisodeAction> episodeActions = new ArrayList<>();
episodeActions.add(new EpisodeAction.Builder("podcast.a", "episode.1", EpisodeAction.Action.PLAY).timestamp(morning).position(10).build());
episodeActions.add(new EpisodeAction.Builder("podcast.a", "episode.1", EpisodeAction.Action.PLAY).timestamp(lateMorning).position(20).build());
episodeActions.add(new EpisodeAction.Builder("podcast.a", "episode.2", EpisodeAction.Action.PLAY).timestamp(morning).position(5).build());
Date morningFiveMinutesLater = format.parse("2021-01-01 08:05:00");
List<EpisodeAction> remoteActions = new ArrayList<>();
remoteActions.add(new EpisodeAction.Builder("podcast.a", "episode.1", EpisodeAction.Action.PLAY).timestamp(morningFiveMinutesLater).position(10).build());
remoteActions.add(new EpisodeAction.Builder("podcast.a", "episode.2", EpisodeAction.Action.PLAY).timestamp(morningFiveMinutesLater).position(5).build());
Map<Pair<String, String>, EpisodeAction> uniqueList = episodeActionFilter.getRemoteActionsOverridingLocalActions(remoteActions, episodeActions);
assertSame(1, uniqueList.size());
}
use of androidx.core.util.Pair in project AntennaPod by AntennaPod.
the class EpisodeActionFilterTest method testGetMultipleRemoteActionsHappeningBeforeLocalActions.
public void testGetMultipleRemoteActionsHappeningBeforeLocalActions() throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date morning = format.parse("2021-01-01 08:00:00");
List<EpisodeAction> episodeActions = new ArrayList<>();
episodeActions.add(new EpisodeAction.Builder("podcast.a", "episode.1", EpisodeAction.Action.PLAY).timestamp(morning).position(10).build());
episodeActions.add(new EpisodeAction.Builder("podcast.a", "episode.2", EpisodeAction.Action.PLAY).timestamp(morning).position(5).build());
Date morningFiveMinutesEarlier = format.parse("2021-01-01 07:55:00");
List<EpisodeAction> remoteActions = new ArrayList<>();
remoteActions.add(new EpisodeAction.Builder("podcast.a", "episode.1", EpisodeAction.Action.PLAY).timestamp(morningFiveMinutesEarlier).position(10).build());
remoteActions.add(new EpisodeAction.Builder("podcast.a", "episode.2", EpisodeAction.Action.PLAY).timestamp(morningFiveMinutesEarlier).position(5).build());
Map<Pair<String, String>, EpisodeAction> uniqueList = episodeActionFilter.getRemoteActionsOverridingLocalActions(remoteActions, episodeActions);
assertEquals(0, uniqueList.size());
}
use of androidx.core.util.Pair in project AntennaPod by AntennaPod.
the class EpisodeActionFilterTest method testGetMultipleRemoteActionsHappeningAfterLocalActions.
public void testGetMultipleRemoteActionsHappeningAfterLocalActions() throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date morning = format.parse("2021-01-01 08:00:00");
List<EpisodeAction> episodeActions = new ArrayList<>();
episodeActions.add(new EpisodeAction.Builder("podcast.a", "episode.1", EpisodeAction.Action.PLAY).timestamp(morning).position(10).build());
episodeActions.add(new EpisodeAction.Builder("podcast.a", "episode.2", EpisodeAction.Action.PLAY).timestamp(morning).position(5).build());
Date morningFiveMinutesLater = format.parse("2021-01-01 08:05:00");
List<EpisodeAction> remoteActions = new ArrayList<>();
remoteActions.add(new EpisodeAction.Builder("podcast.a", "episode.1", EpisodeAction.Action.PLAY).timestamp(morningFiveMinutesLater).position(10).build());
remoteActions.add(new EpisodeAction.Builder("podcast.a", "episode.2", EpisodeAction.Action.PLAY).timestamp(morningFiveMinutesLater).position(5).build());
Map<Pair<String, String>, EpisodeAction> uniqueList = episodeActionFilter.getRemoteActionsOverridingLocalActions(remoteActions, episodeActions);
assertEquals(2, uniqueList.size());
}
use of androidx.core.util.Pair in project AntennaPod by AntennaPod.
the class SyncService method processEpisodeActions.
private synchronized void processEpisodeActions(List<EpisodeAction> remoteActions) {
Log.d(TAG, "Processing " + remoteActions.size() + " actions");
if (remoteActions.size() == 0) {
return;
}
Map<Pair<String, String>, EpisodeAction> playActionsToUpdate = EpisodeActionFilter.getRemoteActionsOverridingLocalActions(remoteActions, synchronizationQueueStorage.getQueuedEpisodeActions());
LongList queueToBeRemoved = new LongList();
List<FeedItem> updatedItems = new ArrayList<>();
for (EpisodeAction action : playActionsToUpdate.values()) {
String guid = GuidValidator.isValidGuid(action.getGuid()) ? action.getGuid() : null;
FeedItem feedItem = DBReader.getFeedItemByGuidOrEpisodeUrl(guid, action.getEpisode());
if (feedItem == null) {
Log.i(TAG, "Unknown feed item: " + action);
continue;
}
if (feedItem.getMedia() == null) {
Log.i(TAG, "Feed item has no media: " + action);
continue;
}
if (action.getAction() == EpisodeAction.NEW) {
DBWriter.markItemPlayed(feedItem, FeedItem.UNPLAYED, true);
continue;
}
feedItem.getMedia().setPosition(action.getPosition() * 1000);
if (FeedItemUtil.hasAlmostEnded(feedItem.getMedia())) {
Log.d(TAG, "Marking as played: " + action);
feedItem.setPlayed(true);
feedItem.getMedia().setPosition(0);
queueToBeRemoved.add(feedItem.getId());
} else {
Log.d(TAG, "Setting position: " + action);
}
updatedItems.add(feedItem);
}
DBWriter.removeQueueItem(getApplicationContext(), false, queueToBeRemoved.toArray());
DBReader.loadAdditionalFeedItemListData(updatedItems);
DBWriter.setItemList(updatedItems);
}
Aggregations