fix play previous, fix dragging highlight, show offline only files in online mode
Mwebclient/src/App.tsx
@@ -100,7 +100,6 @@ const App: Component = () => {
const oldSrc = navigator.mediaSession.metadata?.artwork[0]?.src ?? "";
if (oldSrc.startsWith("blob:")) URL.revokeObjectURL(oldSrc);
const artwork = await getCover(playerState.currentTrack.path.split("/").slice(0, -1).join("/"), isOffline());
console.log(artwork);
navigator.mediaSession.metadata = new MediaMetadata({
title: getItemName(playerState.currentTrack),
artwork: [
@@ -186,8 +185,8 @@ const App: Component = () => {
function playPrevious() {
const currentTrack = playerState.currentTrack;
if (!currentTrack) return;
const track = playlist().find((item) => item.id === currentTrack.id);
if (track) playTrack(track);
const currentIndex = playlist().findIndex((item) => item.id === currentTrack.id);
if (currentIndex > 0) playTrack(playlist()[currentIndex - 1]);
}
// Toggle play/pause
Mwebclient/src/components/DraggableList.tsx
@@ -164,7 +164,7 @@ export function DraggableList<T>(props: DraggableListProps<T>) {
>
<For each={props.items()}>
{(item, index) => {
const isDragging = createMemo(() => draggingItem === item);
const isDragging = createMemo(() => draggingItem() === item);
const dropPosition = createMemo(() => {
const overIdx = dragOverIndex();
return overIdx === index() ? "before" : overIdx === index() + 1 ? "after" : null;
Mwebclient/src/offline.ts
@@ -169,6 +169,22 @@ function pruneChildren(listing: FileListing) {
return cloned;
}
function combineFileListings(listing1: FileListing, listing2: FileListing): FileListing {
const result = new Map(listing1);
for (const [key, value2] of listing2.entries()) {
const value1 = result.get(key);
if (value1 && "files" in value1 && "files" in value2) {
result.set(key, { files: combineFileListings(value1.files, value2.files) });
} else {
result.set(key, value2);
}
}
return result;
}
export async function listFiles(dir: string, offline: boolean, recursive: boolean): Promise<FileListing> {
if (offline) {
const files = listOfflineFiles(dir);
@@ -176,12 +192,14 @@ export async function listFiles(dir: string, offline: boolean, recursive: boolea
}
const cached = getDirInTree(dir, false, false);
if (cached !== null && cached.status === "Scanned" && (!recursive || fullyKnown(cached))) {
return recursive ? cached.files : pruneChildren(cached.files);
const combined = combineFileListings(cached.files, listOfflineFiles(dir));
return recursive ? combined : pruneChildren(combined);
}
const files = await listOnlineFiles(dir, recursive);
if (!files) return new Map();
updateFileTree(dir, { files, status: "Scanned" }, false);
return recursive ? files : pruneChildren(files);
const combined = combineFileListings(files, listOfflineFiles(dir));
return recursive ? combined : pruneChildren(combined);
}
export async function getCover(dir: string, offline: boolean) {