Skip to content

Commit

Permalink
feat: support add custom media profile
Browse files Browse the repository at this point in the history
  • Loading branch information
ltaoo committed Jan 1, 2025
1 parent 43713f7 commit 47f5363
Show file tree
Hide file tree
Showing 41 changed files with 974 additions and 546 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@family-flix/admin",
"private": true,
"version": "2.5.0",
"version": "2.6.0",
"scripts": {
"dev": "vite --port 3003 --host",
"build": "tsc && vite build",
Expand Down
39 changes: 21 additions & 18 deletions src/biz/drive/files.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import { ScrollViewCore } from "@/domains/ui";
import { BizError } from "@/domains/error";
import { FileType } from "@/constants/index";

import { AliyunFilePath, AliyunDriveFile } from "./types";
import { DriveFilePath, DriveFile } from "./types";

type FileColumn = {
list: ListCore<RequestCore<typeof fetchDriveFiles>, AliyunDriveFile>;
list: ListCore<RequestCore<typeof fetchDriveFiles>, DriveFile>;
view: ScrollViewCore;
};
enum Events {
Expand All @@ -28,36 +28,38 @@ type TheTypesOfEvents = {
[Events.Initialized]: void;
[Events.FoldersChange]: FileColumn[];
[Events.PathsChange]: { file_id: string; name: string }[];
[Events.SelectFolder]: [AliyunDriveFile, [number, number]];
[Events.SelectFolder]: [DriveFile, [number, number]];
[Events.LoadingChange]: boolean;
[Events.StateChange]: AliyunDriveFilesState;
[Events.StateChange]: DriveFilesState;
[Events.Error]: BizError;
};
type AliyunDriveFilesState = {
type DriveFilesState = {
initialized: boolean;
curFolder: AliyunDriveFile | null;
tmpHoverFile: [AliyunDriveFile, [number, number]] | null;
curFolder: DriveFile | null;
tmpHoverFile: [DriveFile, [number, number]] | null;
};
type AliyunDriveFilesProps = {
type DriveFilesProps = {
id: string;
service?: typeof fetchDriveFiles;
onError?: (err: BizError) => void;
};

export class AliyunDriveFilesCore extends BaseDomain<TheTypesOfEvents> {
export class DriveFilesCore extends BaseDomain<TheTypesOfEvents> {
id: string;
loading = false;
initialized = false;
selectedFolder: AliyunDriveFile | null = null;
virtualSelectedFolder: [AliyunDriveFile, [number, number]] | null = null;
selectedFolder: DriveFile | null = null;
virtualSelectedFolder: [DriveFile, [number, number]] | null = null;
tmpSelectedColumn: FileColumn | null = null;
paths: AliyunFilePath[] = [
paths: DriveFilePath[] = [
{
file_id: "root",
name: "文件",
},
];
/** 文件夹列表 */
folderColumns: FileColumn[] = [];
service: typeof fetchDriveFiles;
get state() {
return {
initialized: this.initialized,
Expand All @@ -66,23 +68,24 @@ export class AliyunDriveFilesCore extends BaseDomain<TheTypesOfEvents> {
};
}

constructor(props: AliyunDriveFilesProps) {
constructor(props: DriveFilesProps) {
super();

const { id, onError } = props;
const { id, service = fetchDriveFiles, onError } = props;

this.id = id;
this.folderColumns = [];
this.service = service;
if (onError) {
this.onError(onError);
}
}
createColumn(folder: { file_id: string; name: string }) {
console.log("[DOMAIN]drive/files - createColumn", this.id);
// console.log("[DOMAIN]drive/files - createColumn", this.id);
const drive_id = this.id;
const { file_id } = folder;
const list = new ListCore(
new RequestCore(fetchDriveFiles, {
new RequestCore(this.service, {
process: fetchDriveFilesProcess,
onFailed: (error) => {
this.tip({ text: [error.message] });
Expand Down Expand Up @@ -158,7 +161,7 @@ export class AliyunDriveFilesCore extends BaseDomain<TheTypesOfEvents> {
this.emit(Events.FoldersChange, [...this.folderColumns]);
}
/** 选中文件/文件夹 */
select(folder: AliyunDriveFile, index: [number, number]) {
select(folder: DriveFile, index: [number, number]) {
this.selectedFolder = folder;
this.emit(Events.SelectFolder, [folder, index]);
const [x, y] = index;
Expand Down Expand Up @@ -192,7 +195,7 @@ export class AliyunDriveFilesCore extends BaseDomain<TheTypesOfEvents> {
})();
this.emit(Events.PathsChange, [...this.paths]);
}
virtualSelect(folder: AliyunDriveFile, position: [number, number]) {
virtualSelect(folder: DriveFile, position: [number, number]) {
this.virtualSelectedFolder = [folder, position];
this.emit(Events.SelectFolder, [folder, position]);
const [x, y] = position;
Expand Down
12 changes: 6 additions & 6 deletions src/biz/drive/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import {
changeDriveFileHash,
refreshDriveProfileProcess,
} from "./services";
import { AliyunDriveFile } from "./types";
import { DriveFile } from "./types";

enum Events {
StateChange,
Expand All @@ -45,7 +45,7 @@ type TheTypesOfEvents = {
refresh_token: string;
folder_name: string;
}>;
[Events.FoldersChange]: AliyunDriveFile[][];
[Events.FoldersChange]: DriveFile[][];
[Events.PathsChange]: { file_id: string; name: string }[];
[Events.Error]: Error;
[Events.Login]: {};
Expand Down Expand Up @@ -97,7 +97,7 @@ export class DriveCore extends BaseDomain<TheTypesOfEvents> {
/** 文件夹列表 */
folderColumns: ({
selected?: boolean;
} & AliyunDriveFile)[][] = [];
} & DriveFile)[][] = [];
/** 当前选中的文件夹 */
selectedFolderPos?: number[];
/** 当前访问路径 */
Expand Down Expand Up @@ -125,7 +125,7 @@ export class DriveCore extends BaseDomain<TheTypesOfEvents> {
*/
async startAnalysis(
options: {
target_folders?: AliyunDriveFile[];
target_folders?: DriveFile[];
quickly?: boolean;
} = {}
) {
Expand Down Expand Up @@ -171,7 +171,7 @@ export class DriveCore extends BaseDomain<TheTypesOfEvents> {
* 索引指定文件/文件夹
* @param {boolean} [quickly=false] 是否增量索引
*/
async analysisSpecialFolders(options: { target_folders: AliyunDriveFile[] }) {
async analysisSpecialFolders(options: { target_folders: DriveFile[] }) {
const { target_folders } = options;
if (this.state.loading) {
return Result.Err("索引正在进行中");
Expand Down Expand Up @@ -202,7 +202,7 @@ export class DriveCore extends BaseDomain<TheTypesOfEvents> {
this.tip({ text: ["索引完成"] });
this.emit(Events.StateChange, { ...this.state });
}
async changeFileHash(options: { file: AliyunDriveFile }) {
async changeFileHash(options: { file: DriveFile }) {
const { file } = options;
const r = await new RequestCore(changeDriveFileHash).run({
drive_id: this.id,
Expand Down
18 changes: 1 addition & 17 deletions src/biz/drive/services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,7 @@ import { media_request } from "@/biz/requests/index";
import { ListResponseWithCursor } from "@/biz/requests/types";
import { RequestPayload, TmpRequestResp, RequestedResource } from "@/domains/request/utils";
import { DriveTypes, FileType } from "@/constants/index";
import { JSONObject } from "@/types/index";
import { bytes_to_size } from "@/utils/index";

/** 解析一段 json 字符串 */
function parseJSONStr<T extends JSONObject>(json: string) {
try {
if (json[0] !== "{") {
return Result.Err("不是合法的 json");
}
const d = JSON.parse(json);
return Result.Ok(d as T);
} catch (err) {
const e = err as Error;
return Result.Err(e);
}
}

import { bytes_to_size, parseJSONStr } from "@/utils/index";
/**
* 新增云盘
* @param {object} body 提交体
Expand Down
8 changes: 4 additions & 4 deletions src/biz/drive/types.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { FileType } from "@/constants";

export type AliyunDriveFile = {
export type DriveFile = {
type: FileType;
file_id: string;
name: string;
size: number;
parent_paths: AliyunFilePath[];
children?: AliyunDriveFile[];
parent_paths: DriveFilePath[];
children?: DriveFile[];
};
export type AliyunFilePath = {
export type DriveFilePath = {
file_id: string;
name: string;
};
37 changes: 37 additions & 0 deletions src/biz/services/drive.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,43 @@ export function fetchDriveFilesProcess(r: TmpRequestResp<typeof fetchDriveFiles>
}
// export type AliyunDriveFile = UnpackedResult<Unpacked<ReturnType<typeof fetchDriveFiles>>>["list"][number];

/**
* 获取文件夹列表
*/
export function fetchLocalFiles(
body: {
/** 云盘id */
drive_id: string;
/** 文件夹id(如果传入说明是获取指定文件夹下的文件列表,不传就是获取根文件夹 */
file_id: string;
/** 在获取文件列表时,如果是获取下一页,就需要传入该值 */
next_marker: string;
/** 按名称搜索时的关键字 */
name?: string;
} & FetchParams
) {
const { drive_id, file_id, name, next_marker, page, pageSize = 24 } = body;
return media_request.post<{
items: {
file_id: string;
name: string;
next_marker: string;
parent_file_id: string;
size: number;
type: "folder" | "file";
thumbnail: string;
}[];
next_marker: string;
}>("/api/v2/local_file/list", {
drive_id,
name,
file_id,
next_marker,
page,
page_size: pageSize,
});
}

/**
* 获取文件详情
* 主要是看该文件关联的影视剧信息
Expand Down
31 changes: 30 additions & 1 deletion src/biz/services/parsed_media.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ export function fetchUnknownMediaList(params: FetchParams & { name?: string; emp
name: string;
};
}[];
has_more_sources: boolean;
source_count: number;
}>
>("/api/v2/admin/parsed_media/list", {
...rest,
Expand All @@ -57,13 +59,15 @@ export function fetchUnknownMediaListProcess(r: TmpRequestResp<typeof fetchUnkno
return Result.Ok({
...r.data,
list: r.data.list.map((tv) => {
const { id, name, season_text, profile, sources } = tv;
const { id, name, season_text, profile, sources, has_more_sources, source_count } = tv;
return {
id,
name,
season_text,
profile,
sources,
has_more_sources,
source_count,
};
}),
});
Expand Down Expand Up @@ -223,6 +227,31 @@ export function setParsedSeasonMediaSourceProfile(body: {
media_source_profile,
});
}
/**
* 创建一个自定义的详情信息后将其设置给一个解析结果
*/
export function createMediaProfileThenSetTo(body: {
parsed_media_id: string;
media_profile: {
type: MediaTypes;
name: string;
overview: string;
poster_path: string;
air_date: string;
order: number;
episodes: {
name: string;
overview: string;
order: number;
}[];
};
}) {
const { parsed_media_id, media_profile } = body;
return media_request.post<void>("/api/v2/admin/parsed_media/set_profile_after_create", {
parsed_media_id,
media_profile,
});
}
/**
* 删除解析出的影视剧记录及对应的剧集记录
*/
Expand Down
Loading

0 comments on commit 47f5363

Please sign in to comment.