summaryrefslogtreecommitdiff
path: root/src/main/java/com
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2018-02-09 22:05:08 -0800
committerJesse Morgan <jesse@jesterpm.net>2018-02-09 22:05:08 -0800
commita550b630fca5957939bea9ea7319e6a248407fd8 (patch)
tree22832b90510dc205524110bd7abd7cfb2dfeb160 /src/main/java/com
parentb4b71b902493cac1e5b57c70ab53961c26ceb323 (diff)
Playlist Merge Improvements
Don’t force a user to revisit a previously completed chapter if a new required video is added. Don’t force the user to complete videos which have been removed (because they can’t).
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/p4square/grow/model/Playlist.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/main/java/com/p4square/grow/model/Playlist.java b/src/main/java/com/p4square/grow/model/Playlist.java
index 201b3e2..39976a6 100644
--- a/src/main/java/com/p4square/grow/model/Playlist.java
+++ b/src/main/java/com/p4square/grow/model/Playlist.java
@@ -152,6 +152,12 @@ public class Playlist {
*
* Merge is accomplished by adding all missing Chapters and VideoRecords to
* this playlist.
+ *
+ * Additionally,
+ * * any "required" videos that are only present in this playlist are
+ * marked as "not required".
+ * * any new "required" videos in a completed chapter are marked as
+ * "not required".
*/
public void merge(Playlist source) {
if (source.getLastUpdated().before(mLastUpdated)) {
@@ -170,6 +176,18 @@ public class Playlist {
addChapter(chapterName, myChapter);
}
+ // If my chapter is already complete, no new videos will be required.
+ boolean myChapterComplete = true;
+
+ for (Map.Entry<String, VideoRecord> videoEntry : myChapter.getVideos().entrySet()) {
+ VideoRecord myVideo = videoEntry.getValue();
+ myChapterComplete &= (myVideo.getComplete() || !myVideo.getRequired());
+
+ // Mark all existing, uncompleted videos as not required.
+ // We'll mark them as required again if they are required in the new playlist.
+ myVideo.setRequired(myVideo.getRequired() && myVideo.getComplete());
+ }
+
// Check chapter for missing videos
for (Map.Entry<String, VideoRecord> videoEntry : theirChapter.getVideos().entrySet()) {
String videoId = videoEntry.getKey();
@@ -182,6 +200,9 @@ public class Playlist {
try {
myVideo = videoEntry.getValue().clone();
myChapter.setVideoRecord(videoId, myVideo);
+ if (myChapterComplete) {
+ myVideo.setRequired(false);
+ }
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e); // Unexpected...
}
@@ -190,6 +211,13 @@ public class Playlist {
findChapter(videoId).removeVideoRecord(videoId);
myChapter.setVideoRecord(videoId, myVideo);
}
+ } else {
+ // Copy the required property from the newer video.
+ // However, like new videos, newly required videos aren't applied to completed
+ // chapters.
+ if (!myChapterComplete) {
+ myVideo.setRequired(videoEntry.getValue().getRequired());
+ }
}
}
}