add new settings redirect_to_flutter

This commit is contained in:
2024-02-03 09:35:41 +08:00
parent 80ad61f3e5
commit c9c92f0bd9
2 changed files with 24 additions and 1 deletions

View File

@@ -30,6 +30,7 @@ export type ConfigType = {
fetch_timeout: number; fetch_timeout: number;
download_timeout: number; download_timeout: number;
ffprobe_path: string; ffprobe_path: string;
redirect_to_flutter: boolean;
}; };
export enum ThumbnailMethod { export enum ThumbnailMethod {
@@ -186,6 +187,9 @@ export class Config {
get ffprobe_path() { get ffprobe_path() {
return this._return_string("ffprobe_path") || "ffprobe"; return this._return_string("ffprobe_path") || "ffprobe";
} }
get redirect_to_flutter() {
return this._return_bool("redirect_to_flutter") ?? true;
}
to_json(): ConfigType { to_json(): ConfigType {
return { return {
cookies: typeof this.cookies === "string", cookies: typeof this.cookies === "string",
@@ -215,6 +219,7 @@ export class Config {
fetch_timeout: this.fetch_timeout, fetch_timeout: this.fetch_timeout,
download_timeout: this.download_timeout, download_timeout: this.download_timeout,
ffprobe_path: this.ffprobe_path, ffprobe_path: this.ffprobe_path,
redirect_to_flutter: this.redirect_to_flutter,
}; };
} }
} }

View File

@@ -3,7 +3,10 @@ import { Handlers, PageProps } from "$fresh/server.ts";
import GlobalContext from "../components/GlobalContext.tsx"; import GlobalContext from "../components/GlobalContext.tsx";
import Container from "../islands/Container.tsx"; import Container from "../islands/Container.tsx";
import { get_i18nmap, i18n_handle_request } from "../server/i18ns.ts"; import { get_i18nmap, i18n_handle_request } from "../server/i18ns.ts";
import { get_task_manager } from "../server.ts";
import { UserAgent } from "std/http/user_agent.ts"; import { UserAgent } from "std/http/user_agent.ts";
import { exists } from "std/fs/exists.ts";
import { get_host } from "../server/utils.ts";
type Props = { type Props = {
lang: string; lang: string;
@@ -11,13 +14,28 @@ type Props = {
}; };
export const handler: Handlers<Props> = { export const handler: Handlers<Props> = {
GET(req, ctx) { async GET(req, ctx) {
const re = i18n_handle_request(req); const re = i18n_handle_request(req);
const m = get_task_manager();
if (typeof re === "string") { if (typeof re === "string") {
return ctx.render({ return ctx.render({
lang: re, lang: re,
userAgent: req.headers.get("User-Agent"), userAgent: req.headers.get("User-Agent"),
}); });
} else if (m.cfg.redirect_to_flutter) {
let flutter_base = import.meta.resolve("../static/flutter").slice(
7,
);
if (Deno.build.os === "windows") {
flutter_base = flutter_base.slice(1);
}
if (m.cfg.flutter_frontend) {
flutter_base = m.cfg.flutter_frontend;
}
if (!await exists(flutter_base)) {
return re;
}
return Response.redirect(`${get_host(req)}/flutter/`);
} }
return re; return re;
}, },