Search in sources :

Example 6 with Pair

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());
}
Also used : ArrayList(java.util.ArrayList) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date) EpisodeAction(de.danoeh.antennapod.net.sync.model.EpisodeAction) Pair(androidx.core.util.Pair)

Example 7 with Pair

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());
}
Also used : ArrayList(java.util.ArrayList) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date) EpisodeAction(de.danoeh.antennapod.net.sync.model.EpisodeAction) Pair(androidx.core.util.Pair)

Example 8 with Pair

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());
}
Also used : ArrayList(java.util.ArrayList) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date) EpisodeAction(de.danoeh.antennapod.net.sync.model.EpisodeAction) Pair(androidx.core.util.Pair)

Example 9 with Pair

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());
}
Also used : ArrayList(java.util.ArrayList) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date) EpisodeAction(de.danoeh.antennapod.net.sync.model.EpisodeAction) Pair(androidx.core.util.Pair)

Example 10 with Pair

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);
}
Also used : FeedItem(de.danoeh.antennapod.model.feed.FeedItem) ArrayList(java.util.ArrayList) LongList(de.danoeh.antennapod.core.util.LongList) EpisodeAction(de.danoeh.antennapod.net.sync.model.EpisodeAction) Pair(androidx.core.util.Pair)

Aggregations

Pair (androidx.core.util.Pair)31 ArrayList (java.util.ArrayList)9 EpisodeAction (de.danoeh.antennapod.net.sync.model.EpisodeAction)7 ReferenceManager (org.javarosa.core.reference.ReferenceManager)6 Test (org.junit.Test)6 AppDependencyModule (org.odk.collect.android.injection.config.AppDependencyModule)6 CollectHelpers.setupFakeReferenceManager (org.odk.collect.android.support.CollectHelpers.setupFakeReferenceManager)6 MockFormEntryPromptBuilder (org.odk.collect.android.support.MockFormEntryPromptBuilder)6 Date (java.util.Date)5 ImageView (android.widget.ImageView)4 SimpleDateFormat (java.text.SimpleDateFormat)4 RandomString (net.bytebuddy.utility.RandomString)4 BitmapDrawable (android.graphics.drawable.BitmapDrawable)3 Drawable (android.graphics.drawable.Drawable)3 Uri (android.net.Uri)3 View (android.view.View)3 Nullable (androidx.annotation.Nullable)3 FileWidgetTest (org.odk.collect.android.widgets.base.FileWidgetTest)3 SynchronousImageLoader (org.odk.collect.android.widgets.support.SynchronousImageLoader)3 ImageLoader (org.odk.collect.imageloader.ImageLoader)3