|
|
@ -1,4 +1,4 @@ |
|
|
|
import { MWMediaMeta } from "providers"; |
|
|
|
import { getProviderMetadata, MWMediaMeta } from "providers"; |
|
|
|
import { createContext, ReactNode, useContext, useState } from "react"; |
|
|
|
import { createContext, ReactNode, useContext, useState } from "react"; |
|
|
|
import { BookmarkStore } from "./store"; |
|
|
|
import { BookmarkStore } from "./store"; |
|
|
|
|
|
|
|
|
|
|
@ -8,11 +8,13 @@ interface BookmarkStoreData { |
|
|
|
|
|
|
|
|
|
|
|
interface BookmarkStoreDataWrapper { |
|
|
|
interface BookmarkStoreDataWrapper { |
|
|
|
setItemBookmark(media: MWMediaMeta, bookedmarked: boolean): void; |
|
|
|
setItemBookmark(media: MWMediaMeta, bookedmarked: boolean): void; |
|
|
|
|
|
|
|
getFilteredBookmarks(): MWMediaMeta[]; |
|
|
|
bookmarkStore: BookmarkStoreData; |
|
|
|
bookmarkStore: BookmarkStoreData; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const BookmarkedContext = createContext<BookmarkStoreDataWrapper>({ |
|
|
|
const BookmarkedContext = createContext<BookmarkStoreDataWrapper>({ |
|
|
|
setItemBookmark: () => {}, |
|
|
|
setItemBookmark: () => {}, |
|
|
|
|
|
|
|
getFilteredBookmarks: () => [], |
|
|
|
bookmarkStore: { |
|
|
|
bookmarkStore: { |
|
|
|
bookmarks: [], |
|
|
|
bookmarks: [], |
|
|
|
}, |
|
|
|
}, |
|
|
@ -40,7 +42,7 @@ export function BookmarkContextProvider(props: { children: ReactNode }) { |
|
|
|
setItemBookmark(media: MWMediaMeta, bookmarked: boolean) { |
|
|
|
setItemBookmark(media: MWMediaMeta, bookmarked: boolean) { |
|
|
|
setBookmarked((data: BookmarkStoreData) => { |
|
|
|
setBookmarked((data: BookmarkStoreData) => { |
|
|
|
if (bookmarked) { |
|
|
|
if (bookmarked) { |
|
|
|
const itemIndex = getBookmarkIndexFromPortable(data, media); |
|
|
|
const itemIndex = getBookmarkIndexFromMedia(data.bookmarks, media); |
|
|
|
if (itemIndex === -1) { |
|
|
|
if (itemIndex === -1) { |
|
|
|
const item = { |
|
|
|
const item = { |
|
|
|
mediaId: media.mediaId, |
|
|
|
mediaId: media.mediaId, |
|
|
@ -54,7 +56,7 @@ export function BookmarkContextProvider(props: { children: ReactNode }) { |
|
|
|
data.bookmarks.push(item); |
|
|
|
data.bookmarks.push(item); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
const itemIndex = getBookmarkIndexFromPortable(data, media); |
|
|
|
const itemIndex = getBookmarkIndexFromMedia(data.bookmarks, media); |
|
|
|
if (itemIndex !== -1) { |
|
|
|
if (itemIndex !== -1) { |
|
|
|
data.bookmarks.splice(itemIndex); |
|
|
|
data.bookmarks.splice(itemIndex); |
|
|
|
} |
|
|
|
} |
|
|
@ -62,6 +64,11 @@ export function BookmarkContextProvider(props: { children: ReactNode }) { |
|
|
|
return data; |
|
|
|
return data; |
|
|
|
}); |
|
|
|
}); |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
getFilteredBookmarks() { |
|
|
|
|
|
|
|
return bookmarkStorage.bookmarks.filter((bookmark) => { |
|
|
|
|
|
|
|
return getProviderMetadata(bookmark.providerId)?.enabled; |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}, |
|
|
|
bookmarkStore: bookmarkStorage, |
|
|
|
bookmarkStore: bookmarkStorage, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
@ -76,11 +83,11 @@ export function useBookmarkContext() { |
|
|
|
return useContext(BookmarkedContext); |
|
|
|
return useContext(BookmarkedContext); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function getBookmarkIndexFromPortable( |
|
|
|
function getBookmarkIndexFromMedia( |
|
|
|
store: BookmarkStoreData, |
|
|
|
bookmarks: MWMediaMeta[], |
|
|
|
media: MWMediaMeta |
|
|
|
media: MWMediaMeta |
|
|
|
): number { |
|
|
|
): number { |
|
|
|
const a = store.bookmarks.findIndex((v) => { |
|
|
|
const a = bookmarks.findIndex((v) => { |
|
|
|
return ( |
|
|
|
return ( |
|
|
|
v.mediaId === media.mediaId && |
|
|
|
v.mediaId === media.mediaId && |
|
|
|
v.providerId === media.providerId && |
|
|
|
v.providerId === media.providerId && |
|
|
@ -92,9 +99,9 @@ function getBookmarkIndexFromPortable( |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
export function getIfBookmarkedFromPortable( |
|
|
|
export function getIfBookmarkedFromPortable( |
|
|
|
store: BookmarkStoreData, |
|
|
|
bookmarks: MWMediaMeta[], |
|
|
|
media: MWMediaMeta |
|
|
|
media: MWMediaMeta |
|
|
|
): boolean { |
|
|
|
): boolean { |
|
|
|
const bookmarked = getBookmarkIndexFromPortable(store, media); |
|
|
|
const bookmarked = getBookmarkIndexFromMedia(bookmarks, media); |
|
|
|
return bookmarked !== -1; |
|
|
|
return bookmarked !== -1; |
|
|
|
} |
|
|
|
} |
|
|
|