Created
July 23, 2015 20:54
-
-
Save mgp/2375b4aabb4c237866fc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.khanacademy.core.mylist; | |
import static com.google.common.base.Preconditions.checkNotNull; | |
import org.khanacademy.core.mylist.persistence.database.BookmarkDatabase; | |
import org.khanacademy.core.net.api.ApiBaseUrl; | |
import org.khanacademy.core.net.downloadmanager.FileDownloadManager; | |
import org.khanacademy.core.net.downloadmanager.KhanDownloadableResource; | |
import org.khanacademy.core.net.downloadmanager.KhanDownloadableResource.Key; | |
import org.khanacademy.core.net.downloadmanager.VideoDownloadManager; | |
import org.khanacademy.core.net.downloadmanager.persistence.database.DownloadManagerDatabase; | |
import org.khanacademy.core.topictree.identifiers.ContentItemIdentifier; | |
import org.khanacademy.core.topictree.identifiers.KhanIdentifier; | |
import com.google.common.base.Optional; | |
import java.util.List; | |
/** | |
* TODO(mgp) | |
*/ | |
public final class BookmarkManager { | |
private final BookmarkDatabase mBookmarkDatabase; | |
private final DownloadManagerDatabase mDownloadManagerDatabase; | |
private final VideoDownloadManager mVideoDownloadManager; | |
public BookmarkManager(final BookmarkDatabase bookmarkDatabase, | |
final DownloadManagerDatabase downloadManagerDatabase, | |
final ApiBaseUrl apiBaseUrl, | |
final FileDownloadManager<Key, KhanDownloadableResource> fileDownloadManager) { | |
mBookmarkDatabase = checkNotNull(bookmarkDatabase); | |
mDownloadManagerDatabase = checkNotNull(downloadManagerDatabase); | |
// TODO(mgp): Pass in the database. | |
mVideoDownloadManager = new VideoDownloadManager(apiBaseUrl, fileDownloadManager, null); | |
} | |
/** | |
* Adds the given {@link Bookmark}. | |
* | |
* @throws | |
*/ | |
public void addBookmark(final Bookmark bookmark, final String userKaid) { | |
mBookmarkDatabase.addBookmark(bookmark, userKaid); | |
} | |
private static boolean isVideoItemIdentifier(KhanIdentifier khanIdentifier) { | |
switch (khanIdentifier.getIdentifierType()) { | |
case CONTENT_ITEM: | |
final ContentItemIdentifier contentItemIdentifier = | |
(ContentItemIdentifier) khanIdentifier; | |
switch (contentItemIdentifier.itemKind) { | |
case VIDEO: | |
return true; | |
default: | |
break; | |
} | |
default: | |
break; | |
} | |
return false; | |
} | |
/** | |
* Deletes any {@link Bookmark} with the given {@link KhanIdentifier} from the database. | |
* | |
* @return {@code true} if the bookmark was found and removed, {@code false} if no such | |
* bookmark was found | |
*/ | |
public boolean removeBookmark(final KhanIdentifier identifier) { | |
if (isVideoItemIdentifier(identifier)) { | |
final ContentItemIdentifier videoItemIdentifier = (ContentItemIdentifier) identifier; | |
getVideoDownloadManager().remove(videoItemIdentifier); | |
} | |
return mBookmarkDatabase.removeBookmark(identifier); | |
} | |
/** | |
* @return an {@link Optional} containing the {@link Bookmark} for the given identifier, or | |
* {@link Optional#absent()} if no such bookmark exists | |
*/ | |
public Optional<Bookmark> fetchBookmark(final KhanIdentifier identifier) { | |
return mBookmarkDatabase.fetchBookmark(identifier); | |
} | |
/** | |
* @return a list of all {@link Bookmark} instances | |
*/ | |
public List<Bookmark> fetchAllBookmarks() { | |
return mBookmarkDatabase.fetchAllBookmarks(); | |
} | |
/** | |
* @return the manager for video downloads | |
*/ | |
public VideoDownloadManager getVideoDownloadManager() { | |
return mVideoDownloadManager; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment