135 lines
3.7 KiB
TypeScript
135 lines
3.7 KiB
TypeScript
import { type ICommentList, type IProvider, type IVideoList, type Video } from "./iProvider";
|
|
|
|
class YouvideoVideoList implements IVideoList {
|
|
videos: Video[];
|
|
|
|
constructor(initialVideos: Video[]) {
|
|
this.videos = initialVideos;
|
|
}
|
|
|
|
HasMore(): boolean {
|
|
return false;
|
|
}
|
|
|
|
HasPrevious(): boolean {
|
|
return false;
|
|
}
|
|
|
|
Next(): void {
|
|
}
|
|
|
|
Previous(): void {
|
|
}
|
|
}
|
|
|
|
type unprocessedVideo = {
|
|
cached: boolean
|
|
description: string
|
|
extension?: string
|
|
id: string
|
|
metadata: {
|
|
duration: number
|
|
fps: number
|
|
size: number[]
|
|
}
|
|
name: string
|
|
};
|
|
|
|
class YouvideoProvider implements IProvider {
|
|
instanceURL: URL
|
|
|
|
constructor(url: string) {
|
|
this.instanceURL = new URL(url);
|
|
}
|
|
|
|
async GetVideos(): Promise<IVideoList | null> {
|
|
const resp = await fetch(new URL("/api/videos", this.instanceURL))
|
|
if (!resp.ok) {
|
|
return null;
|
|
}
|
|
|
|
let initalVideos: Video[] = [];
|
|
|
|
const json: unprocessedVideo[] = await resp.json();
|
|
json.forEach(video => {
|
|
let convertedVideo: Video = {
|
|
description: video.description,
|
|
hasVideo: true,
|
|
id: video.id,
|
|
mime: "",
|
|
title: video.name,
|
|
fps: video.metadata.fps,
|
|
duration: video.metadata.duration,
|
|
uploader: "Youvideo Provider"
|
|
};
|
|
initalVideos.push(convertedVideo);
|
|
});
|
|
return new YouvideoVideoList(initalVideos);
|
|
}
|
|
|
|
async GetVideoInfo(id: string): Promise<Video | null> {
|
|
const resp = await fetch(new URL("/video/" + id, this.instanceURL));
|
|
if (!resp.ok) {
|
|
return null;
|
|
}
|
|
const video: unprocessedVideo = await resp.json();
|
|
if (video.extension == null) {
|
|
return null;
|
|
}
|
|
let convertedVideo: Video = {
|
|
description: video.description,
|
|
hasVideo: true,
|
|
id: video.id,
|
|
mime: "",
|
|
title: video.name,
|
|
fps: video.metadata.fps,
|
|
duration: video.metadata.duration,
|
|
uploader: "Youvideo Provider",
|
|
videoURL: new URL("/youvideo/api/videofile/with_extension/" + id + video.extension, this.instanceURL).toString()
|
|
};
|
|
return convertedVideo;
|
|
}
|
|
|
|
async GetComments(id: string): Promise<ICommentList | null> {
|
|
return null;
|
|
}
|
|
|
|
async SearchVideos(query: string): Promise<IVideoList | null> {
|
|
const resp = await fetch(new URL("/api/videos", this.instanceURL))
|
|
if (!resp.ok) {
|
|
return null;
|
|
}
|
|
|
|
let initalVideos: Video[] = [];
|
|
|
|
const json: unprocessedVideo[] = await resp.json();
|
|
json.forEach(video => {
|
|
let contains = false;
|
|
contains = video.description.includes(query) || video.name.includes(query);
|
|
// This is like this to allow nicer things
|
|
if (!contains) {
|
|
return;
|
|
}
|
|
let convertedVideo: Video = {
|
|
description: video.description,
|
|
hasVideo: true,
|
|
id: video.id,
|
|
mime: "",
|
|
title: video.name,
|
|
fps: video.metadata.fps,
|
|
duration: video.metadata.duration,
|
|
uploader: "Youvideo Provider",
|
|
width: video.metadata.size[0],
|
|
height: video.metadata.size[1]
|
|
};
|
|
initalVideos.push(convertedVideo);
|
|
});
|
|
return new YouvideoVideoList(initalVideos);
|
|
}
|
|
|
|
async CanUpload(): Promise<boolean> {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export { YouvideoProvider }; |