Files
fnx_web/svelte/src/filesystem/viewers/FilePreview.svelte

99 lines
2.3 KiB
Svelte
Raw Normal View History

<script>
2023-05-25 20:19:37 +02:00
import { tick } from "svelte";
import Spinner from "../../util/Spinner.svelte";
import { fs_node_type } from "../FilesystemUtil";
import FileManager from "../filemanager/FileManager.svelte";
import Audio from "./Audio.svelte";
import File from "./File.svelte";
import Image from "./Image.svelte";
import Pdf from "./PDF.svelte";
import Text from "./Text.svelte";
import Video from "./Video.svelte";
import Torrent from "./Torrent.svelte";
import Zip from "./Zip.svelte";
2024-02-16 14:50:34 +01:00
import CustomBanner from "./CustomBanner.svelte";
2023-05-17 22:46:27 +02:00
export let fs_navigator
export let edit_window
export let state
let viewer
let viewer_type = ""
let last_path = ""
2023-05-25 20:19:37 +02:00
$: state_update(state.base)
const state_update = async (base) => {
if (base.path === last_path) {
return
}
last_path = base.path
// Update the viewer area with the right viewer type
2023-05-25 20:19:37 +02:00
viewer_type = fs_node_type(base)
2023-05-25 20:19:37 +02:00
console.debug("Previewing file", base, "viewer type", viewer_type)
// Render the viewer component and set the file type
await tick()
if (viewer && viewer.update) {
viewer.update()
}
}
</script>
2023-05-25 17:06:17 +02:00
{#if viewer_type === ""}
<div class="center">
<Spinner></Spinner>
</div>
{:else if viewer_type === "dir"}
<FileManager
fs_navigator={fs_navigator}
state={state}
edit_window={edit_window}
on:loading
2023-05-29 18:01:23 +02:00
on:upload_picker
2024-02-16 14:50:34 +01:00
>
<CustomBanner path={state.path}/>
</FileManager>
2023-05-25 17:06:17 +02:00
{:else if viewer_type === "audio"}
2024-02-16 14:50:34 +01:00
<Audio state={state} on:open_sibling>
<CustomBanner path={state.path}/>
</Audio>
2023-05-25 17:06:17 +02:00
{:else if viewer_type === "image"}
<Image state={state} on:open_sibling/>
{:else if viewer_type === "video"}
<Video state={state} bind:this={viewer} on:open_sibling/>
{:else if viewer_type === "pdf"}
<Pdf state={state}/>
{:else if viewer_type === "text"}
2024-02-16 14:50:34 +01:00
<Text state={state}>
<CustomBanner path={state.path}/>
</Text>
2023-05-25 17:06:17 +02:00
{:else if viewer_type === "torrent"}
2024-02-16 14:50:34 +01:00
<Torrent state={state} bind:this={viewer} on:loading on:download>
<CustomBanner path={state.path}/>
</Torrent>
2023-05-25 17:06:17 +02:00
{:else if viewer_type === "zip"}
2024-02-16 14:50:34 +01:00
<Zip state={state} bind:this={viewer} on:loading on:download>
<CustomBanner path={state.path}/>
</Zip>
2023-05-25 17:06:17 +02:00
{:else}
2024-02-16 14:50:34 +01:00
<File state={state} on:download>
<CustomBanner path={state.path}/>
</File>
2023-05-25 17:06:17 +02:00
{/if}
<style>
.center{
position: relative;
display: block;
margin: auto;
width: 100px;
max-width: 100%;
height: 100px;
max-height: 100%;
top: 50%;
transform: translateY(-50%);
}
</style>