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

92 lines
2.6 KiB
Svelte
Raw Normal View History

<script>
2022-04-26 14:51:11 +02:00
import { tick } from "svelte";
import Spinner from "../../util/Spinner.svelte";
import Video from "./Video.svelte";
import Audio from "./Audio.svelte";
import Image from "./Image.svelte";
import PDF from "./PDF.svelte";
import Text from "./Text.svelte";
import File from "./File.svelte";
import Abuse from "./Abuse.svelte";
import { file_type } from "../FileUtilities.svelte";
import RateLimit from "./RateLimit.svelte";
2022-01-11 18:53:01 +01:00
import Torrent from "./Torrent.svelte";
2022-03-05 10:49:12 +01:00
import SpeedLimit from "./SpeedLimit.svelte";
2022-12-24 11:37:02 +01:00
import { download_limits } from "../DownloadLimitStore";
2023-01-17 16:13:26 +01:00
import Zip from "./Zip.svelte";
let viewer
let viewer_type = "loading"
2022-10-25 12:13:50 +02:00
export let is_list = false
2022-12-24 11:37:02 +01:00
let current_file
2023-01-30 11:09:16 +01:00
let premium_download = false
export const set_file = async file => {
if (file.id === "") {
viewer_type = "loading"
return
} else if (file.abuse_type !== "") {
viewer_type = "abuse"
2022-02-28 16:57:54 +01:00
} else if (
2022-02-28 21:52:12 +01:00
file.availability === "file_rate_limited_captcha_required" ||
2022-03-05 10:49:12 +01:00
file.availability === "ip_download_limited_captcha_required"
2022-02-28 16:57:54 +01:00
) {
viewer_type = "rate_limit"
} else {
viewer_type = file_type(file)
}
console.log("opening file", file)
2022-12-24 11:37:02 +01:00
current_file = file
2023-01-30 11:09:16 +01:00
premium_download = !file.show_ads
// Render the viewer component and set the file type
await tick()
2022-12-24 11:37:02 +01:00
if (viewer) {
viewer.set_file(file)
}
}
</script>
2023-01-30 11:09:16 +01:00
{#if !premium_download && $download_limits.transfer_limit_used > $download_limits.transfer_limit}
2022-12-24 11:37:02 +01:00
<SpeedLimit file={current_file} on:download></SpeedLimit>
{:else if viewer_type === "loading"}
2022-01-17 14:10:50 +01:00
<div class="center">
<Spinner></Spinner>
</div>
{:else if viewer_type === "abuse"}
<Abuse bind:this={viewer}></Abuse>
{:else if viewer_type === "rate_limit"}
2022-04-26 14:51:11 +02:00
<RateLimit bind:this={viewer} on:download></RateLimit>
2022-01-17 14:10:50 +01:00
{:else if viewer_type === "image"}
2022-04-26 14:51:11 +02:00
<Image bind:this={viewer} on:loading></Image>
2022-01-17 14:10:50 +01:00
{:else if viewer_type === "video"}
2022-10-25 12:13:50 +02:00
<Video bind:this={viewer} is_list={is_list} on:loading on:download on:prev on:next on:reload></Video>
2022-01-17 14:10:50 +01:00
{:else if viewer_type === "audio"}
2022-10-25 12:13:50 +02:00
<Audio bind:this={viewer} is_list={is_list} on:loading on:prev on:next on:reload></Audio>
2022-01-17 14:10:50 +01:00
{:else if viewer_type === "pdf"}
<PDF bind:this={viewer}></PDF>
{:else if viewer_type === "text"}
<Text bind:this={viewer}></Text>
{:else if viewer_type === "torrent"}
2023-01-17 16:13:26 +01:00
<Torrent bind:this={viewer} on:loading on:download />
{:else if viewer_type === "zip"}
<Zip bind:this={viewer} on:loading on:download />
2022-01-17 14:10:50 +01:00
{:else if viewer_type === "file"}
2022-04-26 14:51:11 +02:00
<File bind:this={viewer} on:download on:reload></File>
2022-01-17 14:10:50 +01:00
{/if}
<style>
.center{
position: relative;
display: block;
margin: auto;
2022-01-17 14:10:50 +01:00
width: 100px;
max-width: 100%;
2022-01-17 14:10:50 +01:00
height: 100px;
max-height: 100%;
top: 50%;
transform: translateY(-50%);
}
</style>