Skip to content

Instantly share code, notes, and snippets.

@mgp
Created July 23, 2015 20:54
Show Gist options
  • Save mgp/2375b4aabb4c237866fc to your computer and use it in GitHub Desktop.
Save mgp/2375b4aabb4c237866fc to your computer and use it in GitHub Desktop.
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