mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2026-04-23 22:09:51 +08:00
🎨 规范化代码
This commit is contained in:
@@ -9,7 +9,7 @@ const HAKUSHI_API = "https://api.hakush.in/gi/data/";
|
||||
/**
|
||||
* 请求角色数据
|
||||
* @since Beta v0.9.0
|
||||
* @returns {Promise<TGApp.Plugins.Hakushi.AvatarResp>}
|
||||
* @returns 角色数据
|
||||
*/
|
||||
async function fetchAvatar(): Promise<TGApp.Plugins.Hakushi.AvatarResp> {
|
||||
return await TGHttp<TGApp.Plugins.Hakushi.AvatarResp>(`${HAKUSHI_API}character.json`, {
|
||||
@@ -20,7 +20,7 @@ async function fetchAvatar(): Promise<TGApp.Plugins.Hakushi.AvatarResp> {
|
||||
/**
|
||||
* 请求武器数据
|
||||
* @since Beta v0.9.0
|
||||
* @returns {Promise<TGApp.Plugins.Hakushi.WeaponResp>}
|
||||
* @returns 武器数据
|
||||
*/
|
||||
async function fetchWeapon(): Promise<TGApp.Plugins.Hakushi.WeaponResp> {
|
||||
return await TGHttp<TGApp.Plugins.Hakushi.WeaponResp>(`${HAKUSHI_API}weapon.json`, {
|
||||
|
||||
@@ -15,8 +15,8 @@ const BBS_UA_PC: Readonly<string> = `Mozilla/5.0 (Windows NT 10.0; Win64; x64) m
|
||||
|
||||
/**
|
||||
* salt 值
|
||||
* @version 2.95.1
|
||||
* @since Beta v0.8.4
|
||||
* @remarks 2.95.1
|
||||
*/
|
||||
const BBS_SALT: Readonly<Record<SaltKey, string>> = {
|
||||
K2: "sfYPEgpxkOe1I3XVMLdwp1Lyt9ORgZsq",
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/**
|
||||
* @file utils TGBuild.ts
|
||||
* @description 用于获取 vite 打包时间
|
||||
* 用于获取 vite 打包时间
|
||||
* @see https://gitee.com/lihanspace/vite-plugin-build-time
|
||||
* @since Alpha v0.1.4
|
||||
*/
|
||||
@@ -9,7 +8,7 @@ import type { Plugin } from "vite";
|
||||
|
||||
const buildTimeKey = "buildTime";
|
||||
|
||||
const buildTimePlugin = (modes: string[] = []): Plugin => {
|
||||
const buildTimePlugin = (modes: Array<string> = []): Plugin => {
|
||||
let _mode = "";
|
||||
return {
|
||||
name: "build-time",
|
||||
|
||||
@@ -24,7 +24,7 @@ import { getDeviceInfo } from "./toolFunc.js";
|
||||
|
||||
class Client {
|
||||
private listener: UnlistenFn | undefined;
|
||||
private route: string[] = [];
|
||||
private route: Array<string> = [];
|
||||
|
||||
private constructor() {
|
||||
this.route = [];
|
||||
@@ -56,9 +56,9 @@ class Client {
|
||||
/**
|
||||
* 回调函数
|
||||
* @since Beta v0.5.0
|
||||
* @param {string} callback - 回调函数名
|
||||
* @param {object} data - 回调数据
|
||||
* @returns Promise<void>
|
||||
* @param callback - 回调函数名
|
||||
* @param data - 回调数据
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async callback(callback: string, data: object): Promise<void> {
|
||||
const response = { retcode: 0, message: "success", data: data ?? {} };
|
||||
@@ -70,8 +70,8 @@ class Client {
|
||||
/**
|
||||
* 获取保存图片的 JS
|
||||
* @since Beta v0.5.1
|
||||
* @param {string} url - 图片链接
|
||||
* @param {string} format - 图片格式
|
||||
* @param url - 图片链接
|
||||
* @param format - 图片格式
|
||||
* @returns JS代码字符串
|
||||
*/
|
||||
getSaveImgJS(url: string, format: string): string {
|
||||
@@ -97,8 +97,8 @@ class Client {
|
||||
/**
|
||||
* 获取 url
|
||||
* @since Beta v0.5.0
|
||||
* @param {string} func - 方法名
|
||||
* @returns {string} - url
|
||||
* @param func - 方法名
|
||||
* @returns url
|
||||
*/
|
||||
getUrl(func: string): string {
|
||||
switch (func) {
|
||||
@@ -122,8 +122,8 @@ class Client {
|
||||
/**
|
||||
* 处理米游社客户端的 callback
|
||||
* @since Beta v0.6.1
|
||||
* @param {Event<string>} arg - 事件参数
|
||||
* @returns {Promise<void>} - 返回值
|
||||
* @param arg - 事件参数
|
||||
* @returns - 返回值
|
||||
*/
|
||||
async handleCallback(arg: Event<string>): Promise<void> {
|
||||
const argParse: TGApp.Plugins.JSBridge.Arg<any> = JSON.parse(arg.payload);
|
||||
@@ -234,11 +234,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func handleCustomCallback
|
||||
* 处理自定义的 callback
|
||||
* @since Beta v0.7.6
|
||||
* @desc 处理自定义的 callback
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<any>} arg - 事件参数
|
||||
* @returns {Promise<void>} - 返回值
|
||||
* @param arg - 事件参数
|
||||
* @returns 返回值
|
||||
*/
|
||||
async handleCustomCallback(arg: TGApp.Plugins.JSBridge.Arg<any>): Promise<void> {
|
||||
await TGLogger.Info(`[TGClient][handleCustomCallback] ${JSON.stringify(arg)}`);
|
||||
@@ -347,10 +346,9 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func hideOverlay
|
||||
* 隐藏遮罩
|
||||
* @since Beta v0.5.0
|
||||
* @desc 隐藏遮罩
|
||||
* @returns {Promise<void>}
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async hideOverlay(): Promise<void> {
|
||||
const executeJS = `javascript:(function(){
|
||||
@@ -363,10 +361,9 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func hideSideBar
|
||||
* 隐藏侧边栏
|
||||
* @since Beta v0.5.0
|
||||
* @desc 隐藏侧边栏
|
||||
* @returns {void} - 无返回值
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async hideSideBar(): Promise<void> {
|
||||
const executeJS = `javascript:(function(){
|
||||
@@ -383,10 +380,9 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func loadJSBridge
|
||||
* 加载 JSBridge
|
||||
* @since Beta v0.5.0
|
||||
* @desc 加载 JSBridge
|
||||
* @returns {void} - 无返回值
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async loadJSBridge(): Promise<void> {
|
||||
const executeJS = `javascript:(function() {
|
||||
@@ -400,23 +396,21 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func nullCallback
|
||||
* 空回调函数
|
||||
* @since Beta v0.3.9
|
||||
* @desc 空回调函数
|
||||
* @param {TGApp.Plugins.JSBridge.NullArg} arg - 回调参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 回调参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async nullCallback(arg: TGApp.Plugins.JSBridge.NullArg): Promise<void> {
|
||||
await this.callback(arg.callback, {});
|
||||
}
|
||||
|
||||
/**
|
||||
* @func open
|
||||
* 打开米游社客户端
|
||||
* @since Beta v0.5.5
|
||||
* @desc 打开米游社客户端
|
||||
* @param {string} func - 方法名
|
||||
* @param {string} url - url
|
||||
* @returns {void} - 无返回值
|
||||
* @param func - 方法名
|
||||
* @param url - url
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async open(func: string, url?: string): Promise<void> {
|
||||
if (url === undefined) url = this.getUrl(func);
|
||||
@@ -437,11 +431,10 @@ class Client {
|
||||
|
||||
/* JSBridge 回调处理 */
|
||||
/**
|
||||
* @func closePage
|
||||
* 关闭米游社客户端的页面
|
||||
* @since Beta v0.5.0
|
||||
* @desc 关闭米游社客户端的页面
|
||||
* @param {TGApp.Plugins.JSBridge.NullArg} arg - 请求参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 请求参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async closePage(arg: TGApp.Plugins.JSBridge.NullArg): Promise<void> {
|
||||
this.route.pop();
|
||||
@@ -460,11 +453,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func configShare
|
||||
* 配置分享
|
||||
* @since Beta v0.3.9
|
||||
* @desc 配置分享
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.ConfigSharePayload>} arg - 请求参数
|
||||
* @returns {Promise<void>} - 无返回值
|
||||
* @param arg - 请求参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async configShare(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.ConfigSharePayload>,
|
||||
@@ -475,11 +467,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func eventTrack
|
||||
* 事件跟踪
|
||||
* @since Beta v0.3.9
|
||||
* @desc 事件跟踪
|
||||
* @param {TGApp.Plugins.Arg<TGApp.Plugins.JSBridge.EventTrackPayload>} arg - 请求参数
|
||||
* @returns {Promise<void>} - 无返回值
|
||||
* @param arg - 请求参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async eventTrack(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.EventTrackPayload>,
|
||||
@@ -490,11 +481,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func genAuthKey
|
||||
* 获取米游社客户端的 authkey
|
||||
* @since Beta v0.3.9
|
||||
* @desc 获取米游社客户端的 authkey
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.GenAuthkeyPayload>} arg - 请求参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 请求参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async genAuthKey(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.GenAuthkeyPayload>,
|
||||
@@ -507,11 +497,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func getActionTicket
|
||||
* 获取米游社客户端的 action_ticket
|
||||
* @since Beta v0.3.9
|
||||
* @desc 获取米游社客户端的 action_ticket
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.GetActionTicketPayload>} arg - 请求参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 请求参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async getActionTicket(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.GetActionTicketPayload>,
|
||||
@@ -527,11 +516,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func getCookieInfo
|
||||
* 获取米游社客户端的 cookie
|
||||
* @since Beta v0.8.3
|
||||
* @desc 获取米游社客户端的 cookie
|
||||
* @param {TGApp.Plugins.JSBridge.NullArg} arg - 请求参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 请求参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async getCookieInfo(arg: TGApp.Plugins.JSBridge.NullArg): Promise<void> {
|
||||
const user = useUserStore();
|
||||
@@ -555,11 +543,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func getCookieToken
|
||||
* 获取米游社客户端的 cookie_token
|
||||
* @since Beta v0.8.3
|
||||
* @desc 获取米游社客户端的 cookie_token
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.GetCookieTokenPayload>} arg - 请求参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 请求参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async getCookieToken(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.GetCookieTokenPayload>,
|
||||
@@ -591,11 +578,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func getDS
|
||||
* 获取米游社客户端的 DS 参数
|
||||
* @since Beta v0.7.3
|
||||
* @desc 获取米游社客户端的 DS 参数
|
||||
* @param {TGApp.Plugins.JSBridge.NullArg} arg - 方法参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 方法参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async getDS(arg: TGApp.Plugins.JSBridge.NullArg): Promise<void> {
|
||||
const data = { DS: getDS4JS("LK2", 1) };
|
||||
@@ -603,11 +589,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func getDS2
|
||||
* 获取米游社客户端的 DS 参数
|
||||
* @since Beta v0.3.9
|
||||
* @desc 获取米游社客户端的 DS 参数
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.GetDS2Payload>} arg
|
||||
* @returns {Promise<void>}
|
||||
* @param arg - 方法参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async getDS2(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.GetDS2Payload>,
|
||||
@@ -619,11 +604,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func getHTTPRequestHeaders
|
||||
* 获取米游社客户端的 HTTP 请求头
|
||||
* @since Beta v0.3.9
|
||||
* @desc 获取米游社客户端的 HTTP 请求头
|
||||
* @param {TGApp.Plugins.JSBridge.NullArg} arg - 请求参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 请求参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async getHTTPRequestHeaders(arg: TGApp.Plugins.JSBridge.NullArg): Promise<void> {
|
||||
const localFp = getDeviceInfo("device_fp");
|
||||
@@ -640,11 +624,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func getStatusBarHeight
|
||||
* 获取状态栏高度
|
||||
* @since Beta v0.3.9
|
||||
* @desc 获取状态栏高度
|
||||
* @param {TGApp.Plugins.JSBridge.NullArg} arg - 请求参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 请求参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async getStatusBarHeight(arg: TGApp.Plugins.JSBridge.NullArg): Promise<void> {
|
||||
const data = { statusBarHeight: 0 };
|
||||
@@ -654,8 +637,8 @@ class Client {
|
||||
/**
|
||||
* 获取对应区服的角色信息
|
||||
* @since Beta v0.8.4
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.GetRegionRoleInfoPayload>} arg - 方法参数
|
||||
* @returns {Promise<void>} - 无返回值
|
||||
* @param arg - 方法参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async getRegionRoleInfo(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.GetRegionRoleInfoPayload>,
|
||||
@@ -672,11 +655,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func getUserInfo
|
||||
* 获取米游社客户端的用户信息
|
||||
* @since Beta v0.3.9
|
||||
* @desc 获取米游社客户端的用户信息
|
||||
* @param {TGApp.Plugins.JSBridge.NullArg} arg - 类型参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 类型参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async getUserInfo(arg: TGApp.Plugins.JSBridge.NullArg): Promise<void> {
|
||||
const user = useUserStore();
|
||||
@@ -690,11 +672,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func onClickImg
|
||||
* 点击图片,下载到本地
|
||||
* @since Beta v0.5.0
|
||||
* @desc 点击图片,下载到本地
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.OnClickImgPayload>} arg - 方法参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 方法参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async onClickImg(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.OnClickImgPayload>,
|
||||
@@ -706,11 +687,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func openApplication
|
||||
* 打开应用
|
||||
* @since Beta v0.5.5
|
||||
* @desc 打开应用
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.OpenApplicationPayload>} arg - 方法参数
|
||||
* @returns {void} - 无返回值
|
||||
* @param arg - 方法参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async openApplication(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.OpenApplicationPayload>,
|
||||
@@ -725,11 +705,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func openSystemBrowser
|
||||
* 打开系统浏览器
|
||||
* @since Beta v0.6.1
|
||||
* @desc 打开系统浏览器
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.OpenSystemBrowserPayload>} arg - 方法参数
|
||||
* @returns {Promise<void>}
|
||||
* @param arg - 方法参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async openSystemBrowser(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.OpenSystemBrowserPayload>,
|
||||
@@ -740,11 +719,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func pushPage
|
||||
* 打开米游社客户端的页面
|
||||
* @since Beta v0.5.5
|
||||
* @desc 打开米游社客户端的页面
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.PushPagePayload>} arg - 方法参数
|
||||
* @returns {Promise<void>} - 无返回值
|
||||
* @param arg - 方法参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async pushPage(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.PushPagePayload>,
|
||||
@@ -781,11 +759,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func setPresentationStyle
|
||||
* 设置米游社客户端的展示方式
|
||||
* @since Beta v0.3.9
|
||||
* @desc 设置米游社客户端的展示方式
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.SetPresentationStylePayload>} arg - 方法参数
|
||||
* @returns {Promise<void>} - 无返回值
|
||||
* @param arg - 方法参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async setPresentationStyle(
|
||||
arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.SetPresentationStylePayload>,
|
||||
@@ -796,11 +773,10 @@ class Client {
|
||||
}
|
||||
|
||||
/**
|
||||
* @func share
|
||||
* 分享
|
||||
* @since Beta v0.5.1
|
||||
* @desc 分享
|
||||
* @param {TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.SharePayload>} arg - 方法参数
|
||||
* @returns {Promise<void>} - 无返回值
|
||||
* @param arg - 方法参数
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async share(arg: TGApp.Plugins.JSBridge.Arg<TGApp.Plugins.JSBridge.SharePayload>): Promise<void> {
|
||||
if (arg.payload.type === "default") {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/**
|
||||
* @file utils/TGHttp.ts
|
||||
* @description 封装HTTP请求
|
||||
* 封装HTTP请求
|
||||
* @since Beta v0.6.8
|
||||
*/
|
||||
|
||||
@@ -9,30 +8,29 @@ import { fetch } from "@tauri-apps/plugin-http";
|
||||
import TGLogger from "./TGLogger.js";
|
||||
|
||||
/**
|
||||
* @description 请求参数
|
||||
* 请求参数
|
||||
* @since Beta v0.5.1
|
||||
* @property {"GET"|"POST"} method 请求方法
|
||||
* @property {Record<string,string>} headers 请求头
|
||||
* @property {Record<string,string>} query 请求参数
|
||||
* @property {string} body 请求体
|
||||
* @property {boolean} isBlob 是否为Blob
|
||||
* @return TGHttpParams
|
||||
*/
|
||||
type TGHttpParams = {
|
||||
/** 请求方法 */
|
||||
method: "GET" | "POST";
|
||||
/** 请求头 */
|
||||
headers?: Record<string, string>;
|
||||
/** 请求参数 */
|
||||
query?: Record<string, any>;
|
||||
/** 请求体 */
|
||||
body?: string;
|
||||
/** 是否是Blob */
|
||||
isBlob?: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* @description 发送请求
|
||||
* 发送请求
|
||||
* @since Beta v0.5.1
|
||||
* @template T
|
||||
* @param {string} url 请求地址
|
||||
* @param {TGHttpParams} options 请求参数
|
||||
* @returns {Promise<T>} 请求结果
|
||||
* @typeParam T - 返回数据类型
|
||||
* @param url - 请求地址
|
||||
* @param options - 请求参数
|
||||
* @returns 请求结果
|
||||
*/
|
||||
async function TGHttp<T>(url: string, options: TGHttpParams): Promise<T>;
|
||||
async function TGHttp<T>(
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/**
|
||||
* @file utils/TGLogger.ts
|
||||
* @description 日志工具
|
||||
* 日志工具
|
||||
* @since Beta v0.7.0
|
||||
*/
|
||||
|
||||
@@ -10,7 +9,7 @@ import { attachConsole, debug, error, info, warn } from "@tauri-apps/plugin-log"
|
||||
import { timestampToDate } from "./toolFunc.js";
|
||||
|
||||
/**
|
||||
* @description 日志工具
|
||||
* 日志工具
|
||||
* @since Beta v0.4.4
|
||||
*/
|
||||
class Logger {
|
||||
@@ -28,11 +27,11 @@ class Logger {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 输出日志-调试
|
||||
* 输出日志-调试
|
||||
* @since Beta v0.6.8
|
||||
* @param {string} message 日志信息
|
||||
* @param {boolean} [write] 是否写入日志文件,默认为 true
|
||||
* @returns {Promise<void>} 无返回值
|
||||
* @param message - 日志信息
|
||||
* @param write - 是否写入日志文件,默认为 true
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async Debug(message: string, write: boolean = true): Promise<void> {
|
||||
if (write) await debug(message);
|
||||
@@ -40,11 +39,11 @@ class Logger {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 输出日志-信息
|
||||
* 输出日志-信息
|
||||
* @since Beta v0.4.2
|
||||
* @param {string} message 日志信息
|
||||
* @param {boolean} [write] 是否写入日志文件,默认为 true
|
||||
* @returns {Promise<void>} 无返回值
|
||||
* @param message - 日志信息
|
||||
* @param write - 是否写入日志文件,默认为 true
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async Info(message: string, write: boolean = true): Promise<void> {
|
||||
if (write) await info(message);
|
||||
@@ -52,11 +51,11 @@ class Logger {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 输出日志-警告
|
||||
* 输出日志-警告
|
||||
* @since Beta v0.4.2
|
||||
* @param {string} message 日志信息
|
||||
* @param {boolean} [write] 是否写入日志文件,默认为 true
|
||||
* @returns {Promise<void>} 无返回值
|
||||
* @param message - 日志信息
|
||||
* @param write - 是否写入日志文件,默认为 true
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async Warn(message: string, write: boolean = true): Promise<void> {
|
||||
if (write) await warn(message);
|
||||
@@ -64,11 +63,11 @@ class Logger {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 输出日志-错误
|
||||
* 输出日志-错误
|
||||
* @since Beta v0.4.2
|
||||
* @param {string} message 日志信息
|
||||
* @param {boolean} [write] 是否写入日志文件,默认为 true
|
||||
* @returns {Promise<void>} 无返回值
|
||||
* @param message - 日志信息
|
||||
* @param write - 是否写入日志文件,默认为 true
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async Error(message: string, write: boolean = true): Promise<void> {
|
||||
if (write) await error(message);
|
||||
@@ -76,10 +75,10 @@ class Logger {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 输出日志-脚本
|
||||
* 输出日志-脚本
|
||||
* @since Beta v0.7.0
|
||||
* @param {string} message 日志信息
|
||||
* @returns {Promise<void>} 无返回值
|
||||
* @param message - 日志信息
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async Script(message: string): Promise<void> {
|
||||
const timeNow = timestampToDate(new Date().getTime());
|
||||
@@ -89,11 +88,11 @@ class Logger {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 输出日志-脚本分隔符
|
||||
* 输出日志-脚本分隔符
|
||||
* @since Beta v0.7.0
|
||||
* @param {string} label 标签
|
||||
* @param {boolean} [start] 是否为开始,默认为 true
|
||||
* @returns {Promise<void>} 无返回值
|
||||
* @param label - 标签
|
||||
* @param start - 是否为开始,默认为 true
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async ScriptSep(label: string, start: boolean = true): Promise<void> {
|
||||
const midStr = `${label} ${start ? "START" : "END--"}`;
|
||||
|
||||
@@ -20,10 +20,10 @@ import { bytesToSize } from "./toolFunc.js";
|
||||
/**
|
||||
* 保存图片-canvas
|
||||
* @since Beta v0.9.0
|
||||
* @param {Uint8Array} buffer - 图片数据
|
||||
* @param {string} filename - 文件名
|
||||
* @param {string} format - 文件格式
|
||||
* @returns {Promise<void>} 无返回值
|
||||
* @param buffer - 图片数据
|
||||
* @param filename - 文件名
|
||||
* @param format - 文件格式
|
||||
* @returns 无返回值
|
||||
*/
|
||||
export async function saveCanvasImg(
|
||||
buffer: ArrayBuffer,
|
||||
@@ -49,10 +49,10 @@ export async function saveCanvasImg(
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将图片保存到本地
|
||||
* 将图片保存到本地
|
||||
* @since Beta v0.5.0
|
||||
* @param {string} url - 图片链接
|
||||
* @returns {Promise<string>} 图片元素
|
||||
* @param url - 图片链接
|
||||
* @returns 图片元素
|
||||
*/
|
||||
export async function saveImgLocal(url: string): Promise<string> {
|
||||
const res = await TGHttp<Uint8Array>(url, { method: "GET", isBlob: true });
|
||||
@@ -64,8 +64,8 @@ export async function saveImgLocal(url: string): Promise<string> {
|
||||
/**
|
||||
* 返回图片 buffer
|
||||
* @since Beta v0.9.0
|
||||
* @param {string} url - 图片链接
|
||||
* @returns {Promise<Uint8Array>} 图片 buffer
|
||||
* @param url - 图片链接
|
||||
* @returns 图片 buffer
|
||||
*/
|
||||
export async function getImageBuffer(url: string): Promise<ArrayBuffer> {
|
||||
return await TGHttp<ArrayBuffer>(url, { method: "GET", isBlob: true });
|
||||
@@ -74,7 +74,7 @@ export async function getImageBuffer(url: string): Promise<ArrayBuffer> {
|
||||
/**
|
||||
* 获取分享截图背景色
|
||||
* @since Beta v0.9.0
|
||||
* @returns {string} 背景色
|
||||
* @returns 背景色
|
||||
*/
|
||||
function getShareImgBgColor(): string {
|
||||
let theme = localStorage.getItem("theme");
|
||||
@@ -86,11 +86,11 @@ function getShareImgBgColor(): string {
|
||||
/**
|
||||
* 生成分享截图
|
||||
* @since Beta v0.9.0
|
||||
* @param {string} fileName - 文件名
|
||||
* @param {HTMLElement} element - 元素
|
||||
* @param {number} scale - 缩放比例
|
||||
* @param {boolean} scrollable - 是否可滚动,一般为上下滚动
|
||||
* @returns {Promise<void>} 无返回值
|
||||
* @param fileName - 文件名
|
||||
* @param element - 元素
|
||||
* @param scale - 缩放比例
|
||||
* @param scrollable - 是否可滚动,一般为上下滚动
|
||||
* @returns 无返回值
|
||||
*/
|
||||
export async function generateShareImg(
|
||||
fileName: string,
|
||||
@@ -156,8 +156,8 @@ export async function generateShareImg(
|
||||
/**
|
||||
* 复制到剪贴板
|
||||
* @since Beta v0.9.0
|
||||
* @param {Uint8Array} buffer - 图片数据
|
||||
* @returns {Promise<void>} 无返回值
|
||||
* @param buffer - 图片数据
|
||||
* @returns 无返回值
|
||||
*/
|
||||
export async function copyToClipboard(buffer: ArrayBuffer): Promise<void> {
|
||||
const bf = new Uint8Array(buffer);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/**
|
||||
* @file utils/TGWindow.ts
|
||||
* @description 窗口创建相关工具函数
|
||||
* 窗口创建相关工具函数
|
||||
* @since Beta v0.7.9
|
||||
*/
|
||||
|
||||
@@ -14,17 +13,16 @@ import { openUrl } from "@tauri-apps/plugin-opener";
|
||||
import TGLogger from "./TGLogger.js";
|
||||
|
||||
/**
|
||||
* @description 创建TG窗口
|
||||
* 创建TG窗口
|
||||
* @since Beta v0.5.0
|
||||
* @see https://github.com/tauri-apps/tauri/issues/5380
|
||||
* @param {string} url 窗口地址
|
||||
* @param {string} label 窗口标签
|
||||
* @param {string} title 窗口标题
|
||||
* @param {number} width 窗口宽度
|
||||
* @param {number} height 窗口高度
|
||||
* @param {boolean} resizable 是否可调整大小
|
||||
* @param {boolean} visible 是否可见
|
||||
* @returns {Promise<void>}
|
||||
* @param url - 窗口地址
|
||||
* @param label - 窗口标签
|
||||
* @param title - 窗口标题
|
||||
* @param width - 窗口宽度
|
||||
* @param height - 窗口高度
|
||||
* @param resizable - 是否可调整大小
|
||||
* @param visible - 是否可见
|
||||
* @returns 无返回值
|
||||
*/
|
||||
export async function createTGWindow(
|
||||
url: string,
|
||||
@@ -48,11 +46,11 @@ export async function createTGWindow(
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 打开帖子
|
||||
* 打开帖子
|
||||
* @since Beta v0.4.2
|
||||
* @param {RenderCard | string | number} item 帖子内容或ID
|
||||
* @param {string} title 帖子标题
|
||||
* @returns {Promise<void>}
|
||||
* @param item - 帖子内容或ID
|
||||
* @param title - 帖子标题
|
||||
* @returns 无返回值
|
||||
*/
|
||||
export async function createPost(
|
||||
item: RenderCard | string | number,
|
||||
@@ -72,10 +70,10 @@ export async function createPost(
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 打开观测枢
|
||||
* 打开观测枢
|
||||
* @since Beta 0.7.6
|
||||
* @param {string} contentId
|
||||
* @returns {Promise<void>}
|
||||
* @param contentId - 观测枢内容ID
|
||||
* @returns 无返回值
|
||||
*/
|
||||
export async function toObcPage(contentId: number): Promise<void> {
|
||||
const obcUrl = `https://bbs.mihoyo.com/ys/obc/content/${contentId}/detail?bbs_presentation_style=no_header`;
|
||||
@@ -83,10 +81,10 @@ export async function toObcPage(contentId: number): Promise<void> {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取不同label下的默认窗口大小
|
||||
* 获取不同label下的默认窗口大小
|
||||
* @since Beta v0.7.2
|
||||
* @param {string} label 窗口标签
|
||||
* @returns {PhysicalSize}
|
||||
* @param label - 窗口标签
|
||||
* @returns 物理大小
|
||||
*/
|
||||
export function getWindowSize(label: string): PhysicalSize {
|
||||
switch (label) {
|
||||
@@ -101,9 +99,9 @@ export function getWindowSize(label: string): PhysicalSize {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 窗口适配
|
||||
* 窗口适配
|
||||
* @since Beta v0.7.9
|
||||
* @returns Promise<void>
|
||||
* @returns 无返回值
|
||||
*/
|
||||
export async function resizeWindow(): Promise<void> {
|
||||
const screen = await currentMonitor();
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/**
|
||||
* @file utils/UIAF.ts
|
||||
* @description UIAF工具类
|
||||
* UIAF工具类
|
||||
* @since Beta v0.6.0
|
||||
*/
|
||||
|
||||
@@ -15,9 +14,9 @@ import TGLogger from "./TGLogger.js";
|
||||
import { UiafSchema } from "@/data/index.js";
|
||||
|
||||
/**
|
||||
* @description 获取 UIAF 头部信息
|
||||
* 获取 UIAF 头部信息
|
||||
* @since Beta v0.3.4
|
||||
* @returns {Promise<TGApp.Plugins.UIAF.Export>}
|
||||
* @returns UIAF 头部信息
|
||||
*/
|
||||
export async function getUiafHeader(): Promise<TGApp.Plugins.UIAF.Export> {
|
||||
return {
|
||||
@@ -29,10 +28,10 @@ export async function getUiafHeader(): Promise<TGApp.Plugins.UIAF.Export> {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 检测是否存在 UIAF 数据,采用 ajv 验证 schema
|
||||
* 检测是否存在 UIAF 数据,采用 ajv 验证 schema
|
||||
* @since Beta v0.5.0
|
||||
* @param {string} path - UIAF 数据路径
|
||||
* @returns {Promise<boolean>} 是否存在 UIAF 数据
|
||||
* @param path - UIAF 数据路径
|
||||
* @returns 是否存在 UIAF 数据
|
||||
*/
|
||||
export async function verifyUiafData(path: string): Promise<boolean> {
|
||||
const fileData: string = await readTextFile(path);
|
||||
@@ -59,9 +58,9 @@ export async function verifyUiafData(path: string): Promise<boolean> {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 验证UIAF数据-剪贴板
|
||||
* 验证UIAF数据-剪贴板
|
||||
* @since Beta v0.4.7
|
||||
* @returns {boolean} 是否验证通过
|
||||
* @returns 是否验证通过
|
||||
*/
|
||||
export async function verifyUiafDataClipboard(): Promise<boolean> {
|
||||
// @ts-expect-error-next-line
|
||||
@@ -88,10 +87,10 @@ export async function verifyUiafDataClipboard(): Promise<boolean> {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 读取 UIAF 数据
|
||||
* 读取 UIAF 数据
|
||||
* @since Beta v0.5.0
|
||||
* @param {string} userPath - UIAF 数据路径
|
||||
* @returns {Promise<TGApp.Plugins.UIAF.Data>} UIAF 数据
|
||||
* @param userPath - UIAF 数据路径
|
||||
* @returns UIAF 数据
|
||||
*/
|
||||
export async function readUiafData(userPath: string): Promise<TGApp.Plugins.UIAF.Data> {
|
||||
const fileData = await readTextFile(userPath);
|
||||
|
||||
@@ -19,8 +19,8 @@ import { Uigf4Schema, UigfSchema } from "@/data/index.js";
|
||||
/**
|
||||
* 获取 UIGF 时区
|
||||
* @since Beta v0.3.5
|
||||
* @param {string} uid - UID
|
||||
* @returns {number} 时区
|
||||
* @param uid - UID
|
||||
* @returns 时区
|
||||
*/
|
||||
function getUigfTimeZone(uid: string): number {
|
||||
if (uid.startsWith("6")) return -5;
|
||||
@@ -31,9 +31,9 @@ function getUigfTimeZone(uid: string): number {
|
||||
/**
|
||||
* 传入utc8时间字符串跟目标时区,转成目标时区时间字符串
|
||||
* @since Beta v0.7.5
|
||||
* @param {string} time - 时间字符串
|
||||
* @param {number} timezone - 时区
|
||||
* @return {string} 转换后的时间字符串
|
||||
* @param time - 时间字符串
|
||||
* @param timezone - 时区
|
||||
* @returns 转换后的时间字符串
|
||||
*/
|
||||
function getExportTime(time: string, timezone: number): string {
|
||||
const date = new Date(time);
|
||||
@@ -45,9 +45,9 @@ function getExportTime(time: string, timezone: number): string {
|
||||
/**
|
||||
* 获取 UIGF 头部信息
|
||||
* @since Beta v0.7.5
|
||||
* @param {string} uid - UID
|
||||
* @param {number} timezone - 时区
|
||||
* @returns {Promise<TGApp.Plugins.UIGF.Info>}
|
||||
* @param uid - UID
|
||||
* @param timezone - 时区
|
||||
* @returns UIGF头部信息
|
||||
*/
|
||||
async function getUigfHeader(uid: string, timezone: number): Promise<TGApp.Plugins.UIGF.Info> {
|
||||
const stamp = Date.now();
|
||||
@@ -66,7 +66,7 @@ async function getUigfHeader(uid: string, timezone: number): Promise<TGApp.Plugi
|
||||
/**
|
||||
* 获取 UIGF v4.1 头部信息
|
||||
* @since Beta v0.7.10
|
||||
* @returns {TGApp.Plugins.UIGF.Info4} UIGF v4.1 头部信息
|
||||
* @returns UIGF v4.1 头部信息
|
||||
*/
|
||||
export async function getUigf4Header(): Promise<TGApp.Plugins.UIGF.Info4> {
|
||||
const stamp = Date.now();
|
||||
@@ -82,14 +82,14 @@ export async function getUigf4Header(): Promise<TGApp.Plugins.UIGF.Info4> {
|
||||
/**
|
||||
* 数据转换-数据库到 UIGF
|
||||
* @since Beta v0.7.5
|
||||
* @param {TGApp.Sqlite.GachaRecords.TableGacha[]} data - 数据库数据
|
||||
* @param {number} timezone - 时区
|
||||
* @returns {TGApp.Plugins.UIGF.GachaItem[]} UIGF 数据
|
||||
* @param data - 数据库数据
|
||||
* @param timezone - 时区
|
||||
* @returns UIGF 数据
|
||||
*/
|
||||
function convertDataToUigf(
|
||||
data: TGApp.Sqlite.GachaRecords.TableGacha[],
|
||||
data: Array<TGApp.Sqlite.Gacha.Gacha>,
|
||||
timezone: number,
|
||||
): TGApp.Plugins.UIGF.GachaItem[] {
|
||||
): Array<TGApp.Plugins.UIGF.GachaItem> {
|
||||
return data.map((gacha) => {
|
||||
return {
|
||||
gacha_type: gacha.gachaType,
|
||||
@@ -108,9 +108,9 @@ function convertDataToUigf(
|
||||
/**
|
||||
* 检测是否存在 UIGF 数据,采用 ajv 验证 schema
|
||||
* @since Beta v0.6.5
|
||||
* @param {string} path - UIGF 数据路径
|
||||
* @param {boolean} isVersion4 - 是否为 UIGF v4.0
|
||||
* @returns {Promise<boolean>} 是否存在 UIGF 数据
|
||||
* @param path - UIGF 数据路径
|
||||
* @param isVersion4 - 是否为 UIGF v4.0
|
||||
* @returns 是否存在 UIGF 数据
|
||||
*/
|
||||
export async function verifyUigfData(path: string, isVersion4: boolean = false): Promise<boolean> {
|
||||
try {
|
||||
@@ -129,8 +129,8 @@ export async function verifyUigfData(path: string, isVersion4: boolean = false):
|
||||
/**
|
||||
* 验证 UIGF 数据
|
||||
* @since Beta v0.5.1
|
||||
* @param {object} data - UIGF 数据
|
||||
* @returns {boolean} 是否验证通过
|
||||
* @param data - UIGF 数据
|
||||
* @returns 是否验证通过
|
||||
*/
|
||||
function validateUigfData(data: object): boolean {
|
||||
const ajv = new Ajv();
|
||||
@@ -152,8 +152,8 @@ function validateUigfData(data: object): boolean {
|
||||
/**
|
||||
* 验证 UIGF v4.0 数据
|
||||
* @since Beta v0.5.0
|
||||
* @param {object} data - UIGF 数据
|
||||
* @returns {boolean} 是否验证通过
|
||||
* @param data - UIGF 数据
|
||||
* @returns 是否验证通过
|
||||
*/
|
||||
function validateUigf4Data(data: object): boolean {
|
||||
const ajv = new Ajv();
|
||||
@@ -168,8 +168,8 @@ function validateUigf4Data(data: object): boolean {
|
||||
/**
|
||||
* 读取 UIGF 数据
|
||||
* @since Beta v0.5.0
|
||||
* @param {string} userPath - UIGF 数据路径
|
||||
* @returns {Promise<TGApp.Plugins.UIGF.Schema>} UIGF 数据
|
||||
* @param userPath - UIGF 数据路径
|
||||
* @returns UIGF 数据
|
||||
*/
|
||||
export async function readUigfData(userPath: string): Promise<TGApp.Plugins.UIGF.Schema> {
|
||||
const fileData: string = await readTextFile(userPath);
|
||||
@@ -179,8 +179,8 @@ export async function readUigfData(userPath: string): Promise<TGApp.Plugins.UIGF
|
||||
/**
|
||||
* 读取 UIGF 4.0 数据
|
||||
* @since Beta v0.5.0
|
||||
* @param {string} userPath - UIGF 数据路径
|
||||
* @returns {Promise<TGApp.Plugins.UIGF.Schema4>} UIGF 数据
|
||||
* @param userPath - UIGF 数据路径
|
||||
* @returns UIGF 数据
|
||||
*/
|
||||
export async function readUigf4Data(userPath: string): Promise<TGApp.Plugins.UIGF.Schema4> {
|
||||
const fileData: string = await readTextFile(userPath);
|
||||
@@ -190,14 +190,14 @@ export async function readUigf4Data(userPath: string): Promise<TGApp.Plugins.UIG
|
||||
/**
|
||||
* 导出 UIGF 数据
|
||||
* @since Beta v0.7.5
|
||||
* @param {string} uid - UID
|
||||
* @param {TGApp.Sqlite.GachaRecords.TableGacha[]} gachaList - 祈愿列表
|
||||
* @param {string} savePath - 保存路径
|
||||
* @returns {Promise<void>}
|
||||
* @param uid - UID
|
||||
* @param gachaList - 祈愿列表
|
||||
* @param savePath - 保存路径
|
||||
* @returns 无返回值
|
||||
*/
|
||||
export async function exportUigfData(
|
||||
uid: string,
|
||||
gachaList: TGApp.Sqlite.GachaRecords.TableGacha[],
|
||||
gachaList: Array<TGApp.Sqlite.Gacha.Gacha>,
|
||||
savePath?: string,
|
||||
): Promise<void> {
|
||||
const timezone = getUigfTimeZone(uid);
|
||||
@@ -212,9 +212,9 @@ export async function exportUigfData(
|
||||
/**
|
||||
* 导出UIGF4数据
|
||||
* @since Beta v0.9.0
|
||||
* @param {Array<string>} uids - UID列表
|
||||
* @param {string} [savePath] - 保存路径
|
||||
* @returns {Promise<void>}
|
||||
* @param uids - UID列表
|
||||
* @param savePath - 保存路径
|
||||
* @returns
|
||||
*/
|
||||
export async function exportUigf4Data(uids: Array<string> = [], savePath?: string): Promise<void> {
|
||||
const header = await getUigf4Header();
|
||||
|
||||
@@ -9,10 +9,10 @@ import { h, render } from "vue";
|
||||
import { decodeRegExp } from "./toolFunc.js";
|
||||
|
||||
/**
|
||||
* @description 预处理table
|
||||
* 预处理table
|
||||
* @since Beta v0.4.7
|
||||
* @param {HTMLTableElement} table table 元素
|
||||
* @returns {HTMLTableElement} 解析后的 table 元素
|
||||
* @param table - table 元素
|
||||
* @returns 解析后的 table 元素
|
||||
*/
|
||||
function handleAnnoTable(table: HTMLTableElement): HTMLTableElement {
|
||||
table.style.borderColor = "var(--common-shadow-2)";
|
||||
@@ -25,10 +25,10 @@ function handleAnnoTable(table: HTMLTableElement): HTMLTableElement {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 预处理公告内容
|
||||
* 预处理公告内容
|
||||
* @since Beta v0.7.0
|
||||
* @param {string} data 游戏内公告数据
|
||||
* @returns {string} 解析后的数据
|
||||
* @param data - 游戏内公告数据
|
||||
* @returns 解析后的数据
|
||||
*/
|
||||
function handleAnnoContent(data: string): string {
|
||||
const htmlBase = new DOMParser().parseFromString(decodeRegExp(data), "text/html");
|
||||
@@ -39,10 +39,10 @@ function handleAnnoContent(data: string): string {
|
||||
/**
|
||||
* 解析公告内容,转换为结构化数据
|
||||
* @since Beta v0.8.4
|
||||
* @param {TGApp.BBS.Announcement.AnnoDetail} anno - 公告内容
|
||||
* @returns {Array<TGApp.BBS.SctPost.Base>} 结构化数据
|
||||
* @param anno - 公告内容
|
||||
* @returns 结构化数据
|
||||
*/
|
||||
function parseAnnoContent(anno: TGApp.BBS.Announcement.AnnoDetail): Array<TGApp.BBS.SctPost.Base> {
|
||||
function parseAnnoContent(anno: TGApp.Game.Anno.AnnoDetail): Array<TGApp.BBS.SctPost.Base> {
|
||||
const parser = new DOMParser();
|
||||
const first = handleAnnoContent(anno.content);
|
||||
const doc = parser.parseFromString(first, "text/html");
|
||||
@@ -57,11 +57,11 @@ function parseAnnoContent(anno: TGApp.BBS.Announcement.AnnoDetail): Array<TGApp.
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 解析公告节点
|
||||
* 解析公告节点
|
||||
* @since Beta v0.7.0
|
||||
* @param {Node} node - 节点
|
||||
* @param {Record<string, string>} attr - 属性
|
||||
* @returns {TGApp.BBS.SctPost.Base} 结构化数据
|
||||
* @param node - 节点
|
||||
* @param attr - 属性
|
||||
* @returns 结构化数据
|
||||
*/
|
||||
function parseAnnoNode(node: Node, attr?: Record<string, string>): Array<TGApp.BBS.SctPost.Base> {
|
||||
let defaultRes: TGApp.BBS.SctPost.Base = {
|
||||
@@ -139,11 +139,11 @@ function parseAnnoNode(node: Node, attr?: Record<string, string>): Array<TGApp.B
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 解析公告段落
|
||||
* 解析公告段落
|
||||
* @since Beta v0.7.0
|
||||
* @param {HTMLElement} p - 段落元素
|
||||
* @param {Record<string, string>} attr - 属性
|
||||
* @returns {TGApp.BBS.SctPost.Base} 结构化数据
|
||||
* @param p - 段落元素
|
||||
* @param attr - 属性
|
||||
* @returns 结构化数据
|
||||
*/
|
||||
function parseAnnoParagraph(p: HTMLElement, attr?: Record<string, string>): TGApp.BBS.SctPost.Base {
|
||||
const defaultRes = {
|
||||
@@ -218,11 +218,11 @@ function parseAnnoParagraph(p: HTMLElement, attr?: Record<string, string>): TGAp
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 解析公告 span
|
||||
* 解析公告 span
|
||||
* @since Beta v0.7.0
|
||||
* @param {HTMLElement} span - span 元素
|
||||
* @param {Record<string, string>} attr - 属性
|
||||
* @returns {TGApp.BBS.SctPost.Base} 结构化数据
|
||||
* @param span - span 元素
|
||||
* @param attr - 属性
|
||||
* @returns 结构化数据
|
||||
*/
|
||||
function parseAnnoSpan(span: HTMLElement, attr?: Record<string, string>): TGApp.BBS.SctPost.Base {
|
||||
const defaultRes = {
|
||||
@@ -269,10 +269,10 @@ function parseAnnoSpan(span: HTMLElement, attr?: Record<string, string>): TGApp.
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 解析公告图片
|
||||
* 解析公告图片
|
||||
* @since Beta v0.7.0
|
||||
* @param {HTMLElement} img - 图片元素
|
||||
* @returns {TGApp.BBS.SctPost.Base} 结构化数据
|
||||
* @param img - 图片元素
|
||||
* @returns 结构化数据
|
||||
*/
|
||||
function parseAnnoImage(img: HTMLElement): TGApp.BBS.SctPost.Base {
|
||||
if (img.tagName !== "IMG") {
|
||||
@@ -292,10 +292,10 @@ function parseAnnoImage(img: HTMLElement): TGApp.BBS.SctPost.Base {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 解析公告锚点
|
||||
* 解析公告锚点
|
||||
* @since Beta v0.7.0
|
||||
* @param {HTMLElement} a - 锚点元素
|
||||
* @returns {TGApp.BBS.SctPost.Base} 结构化数据
|
||||
* @param a - 锚点元素
|
||||
* @returns 结构化数据
|
||||
*/
|
||||
function parseAnnoAnchor(a: HTMLElement): TGApp.BBS.SctPost.Base {
|
||||
if (a.tagName !== "A") {
|
||||
@@ -321,10 +321,10 @@ function parseAnnoAnchor(a: HTMLElement): TGApp.BBS.SctPost.Base {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 解析公告详情
|
||||
* 解析公告详情
|
||||
* @since Beta v0.7.0
|
||||
* @param {HTMLElement} details - 详情元素
|
||||
* @returns {TGApp.BBS.SctPost.Base} 结构化数据
|
||||
* @param details - 详情元素
|
||||
* @returns 结构化数据
|
||||
*/
|
||||
function parseAnnoDetails(details: HTMLElement): TGApp.BBS.SctPost.Base {
|
||||
const defaultRes = {
|
||||
@@ -356,10 +356,10 @@ function parseAnnoDetails(details: HTMLElement): TGApp.BBS.SctPost.Base {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 解析公告表格
|
||||
* 解析公告表格
|
||||
* @since Beta v0.7.0
|
||||
* @param {HTMLElement} table - 表格元素
|
||||
* @returns {TGApp.BBS.SctPost.Base} 结构化数据
|
||||
* @param table - 表格元素
|
||||
* @returns 结构化数据
|
||||
*/
|
||||
function parseAnnoTable(table: HTMLElement): TGApp.BBS.SctPost.Base {
|
||||
const defaultRes = {
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
*/
|
||||
export function parseBirthSrc(data: Document): TGApp.Archive.Birth.GalSrcFull {
|
||||
const res: TGApp.Archive.Birth.GalSrcFull = { resource: [], roles: [] };
|
||||
const tmpRes: TGApp.Archive.Birth.GalSrcRes[] = [];
|
||||
const tmpRoles: TGApp.Archive.Birth.GalSrcRole[] = [];
|
||||
const tmpRes: Array<TGApp.Archive.Birth.GalSrcRes> = [];
|
||||
const tmpRoles: Array<TGApp.Archive.Birth.GalSrcRole> = [];
|
||||
const resElements = data.querySelector("resource");
|
||||
const roleElements = data.querySelector("characters");
|
||||
if (resElements !== null) {
|
||||
@@ -47,9 +47,9 @@ export function parseBirthSrc(data: Document): TGApp.Archive.Birth.GalSrcFull {
|
||||
/**
|
||||
* 解析Gal数据
|
||||
* @since Beta v0.9.1
|
||||
* @param {Document} data - XML数据
|
||||
* @param {TGApp.Archive.Birth.GalSrcFull} src - 解析的资源数据
|
||||
* @return {TGApp.Archive.Birth.GalScenes}
|
||||
* @param data - XML数据
|
||||
* @param src - 解析的资源数据
|
||||
* @returns 解析结果
|
||||
*/
|
||||
export function parseBirthGal(
|
||||
data: Document,
|
||||
@@ -68,9 +68,9 @@ export function parseBirthGal(
|
||||
/**
|
||||
* 解析场景数据
|
||||
* @since Beta v0.9.1
|
||||
* @param {Document} data - XML数据
|
||||
* @param {TGApp.Archive.Birth.GalSrcFull} src - 解析的资源数据
|
||||
* @return {TGApp.Archive.Birth.GalScriptScene}
|
||||
* @param data - XML数据
|
||||
* @param src - 解析的资源数据
|
||||
* @returns 解析结果
|
||||
*/
|
||||
function parseBirthScenes(
|
||||
data: Element,
|
||||
@@ -89,7 +89,7 @@ function parseBirthScenes(
|
||||
res.bg = src.resource.find((i) => i.id === bgKey)?.src ?? "";
|
||||
}
|
||||
const dialogElements = data.querySelectorAll("simple_dialog");
|
||||
const tmpScripts: TGApp.Archive.Birth.GalDialog[] = [];
|
||||
const tmpScripts: Array<TGApp.Archive.Birth.GalDialog> = [];
|
||||
for (let di = 0; di < dialogElements.length; di++) {
|
||||
const dialogEl = dialogElements.item(di);
|
||||
const imgKey = dialogEl.getAttribute("img") ?? "";
|
||||
|
||||
@@ -7,8 +7,8 @@ import { score } from "wcag-color";
|
||||
/**
|
||||
* 根据传入星级获取对应颜色
|
||||
* @since Beta v0.9.0
|
||||
* @param {number} star
|
||||
* @returns {string} color
|
||||
* @param star - 星级
|
||||
* @returns 颜色变量字符串
|
||||
*/
|
||||
export function getOdStarColor(star: number): string {
|
||||
switch (star) {
|
||||
@@ -30,20 +30,20 @@ export function getOdStarColor(star: number): string {
|
||||
/**
|
||||
* 判断颜色是否相似
|
||||
* @since Beta v0.9.0
|
||||
* @param {string} colorBg - 背景颜色
|
||||
* @param {string} colorText - 文本颜色
|
||||
* @returns {boolean} 是否相似
|
||||
* @param colorBg - 背景颜色
|
||||
* @param colorText - 文本颜色
|
||||
* @returns 是否相似
|
||||
*/
|
||||
export function isColorSimilar(colorBg: string, colorText: string): boolean {
|
||||
return score(colorText, colorBg) === "Fail";
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 根据字符串生成颜色
|
||||
* 根据字符串生成颜色
|
||||
* @since Beta v0.8.2
|
||||
* @param {string} str - 输入字符串
|
||||
* @param {number} adjust - 亮度调整值,正数变亮,负数变暗
|
||||
* @returns {string} 生成的颜色 rgb(r, g, b)
|
||||
* @param str - 输入字符串
|
||||
* @param adjust - 亮度调整值,正数变亮,负数变暗
|
||||
* @returns 生成的颜色 rgb(r, g, b)
|
||||
*/
|
||||
export function str2Color(str: string, adjust: number): string {
|
||||
let hash = 0;
|
||||
|
||||
@@ -18,8 +18,8 @@ import TGLogger from "./TGLogger.js";
|
||||
* 备份用户数据
|
||||
* @since Beta v0.9.0
|
||||
* @TODO 重构祈愿部分备份&读取,处理胡桃数据&应用自身数据的导入
|
||||
* @param {string} dir 备份目录路径
|
||||
* @returns {Promise<void>}
|
||||
* @param dir - 备份目录路径
|
||||
* @returns 无返回值
|
||||
*/
|
||||
export async function backUpUserData(dir: string): Promise<void> {
|
||||
if (!(await exists(dir))) {
|
||||
@@ -43,8 +43,8 @@ export async function backUpUserData(dir: string): Promise<void> {
|
||||
/**
|
||||
* 恢复用户数据
|
||||
* @since Beta v0.9.0
|
||||
* @param {string} dir 备份目录路径
|
||||
* @returns {Promise<void>}
|
||||
* @param dir - 备份目录路径
|
||||
* @returns 无返回值
|
||||
*/
|
||||
export async function restoreUserData(dir: string): Promise<void> {
|
||||
let errNum = 0;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/**
|
||||
* @file web/utils/getRequestHeader.ts
|
||||
* @description 获取请求头
|
||||
* 获取请求头
|
||||
* @since Beta v0.7.6
|
||||
*/
|
||||
|
||||
@@ -10,24 +9,24 @@ import TGBbs, { type SaltKey } from "./TGBbs.js";
|
||||
import { getDeviceInfo, getRandomString } from "./toolFunc.js";
|
||||
|
||||
/**
|
||||
* @description 获取随机数
|
||||
* 获取随机数
|
||||
* @since Alpha v0.2.0
|
||||
* @param {number} min 最小值
|
||||
* @param {number} max 最大值
|
||||
* @returns {number} 随机数
|
||||
* @param min - 最小值
|
||||
* @param max - 最大值
|
||||
* @returns 随机数
|
||||
*/
|
||||
function getRandomNumber(min: number, max: number): number {
|
||||
return Math.floor(Math.random() * (max - min + 1) + min);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取 ds
|
||||
* 获取 ds
|
||||
* @since Beta v0.7.3
|
||||
* @param {string} method 请求方法
|
||||
* @param {string} data 请求数据
|
||||
* @param {SaltKey} saltType salt 类型
|
||||
* @param {boolean} isSign 是否为签名
|
||||
* @returns {string} ds
|
||||
* @param method - 请求方法
|
||||
* @param data - 请求数据
|
||||
* @param saltType - salt 类型
|
||||
* @param isSign - 是否为签名
|
||||
* @returns ds
|
||||
*/
|
||||
function getDS(method: string, data: string, saltType: SaltKey, isSign: boolean): string {
|
||||
const salt = TGBbs.salt[saltType];
|
||||
@@ -43,10 +42,10 @@ function getDS(method: string, data: string, saltType: SaltKey, isSign: boolean)
|
||||
}
|
||||
|
||||
/**
|
||||
* @description ds 算法需要数据转换后的字符串是按照字典序排序的
|
||||
* ds 算法需要数据转换后的字符串是按照字典序排序的
|
||||
* @since Beta v0.6.5
|
||||
* @param { Record<string, string | number | boolean | Array<string>> | string} obj object
|
||||
* @returns {string} query string
|
||||
* @param obj - object
|
||||
* @returns query string
|
||||
*/
|
||||
function transParams(
|
||||
obj: Record<string, string | number | boolean | Array<string>> | string,
|
||||
@@ -61,10 +60,10 @@ function transParams(
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将 cookie 对象转换为字符串
|
||||
* 将 cookie 对象转换为字符串
|
||||
* @since Alpha v0.1.5
|
||||
* @param {Record<string, string>} cookie cookie
|
||||
* @returns {string} 转换后的 cookie
|
||||
* @param cookie - cookie
|
||||
* @returns 转换后的 cookie
|
||||
*/
|
||||
function transCookie(cookie: Record<string, string>): string {
|
||||
let res = "";
|
||||
@@ -75,14 +74,14 @@ function transCookie(cookie: Record<string, string>): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取请求头
|
||||
* 获取请求头
|
||||
* @since Beta v0.7.3
|
||||
* @param {Record<string, string>} cookie cookie
|
||||
* @param {string} method 请求方法
|
||||
* @param {Record<string, string | number | boolean | Array<string>> | string} data 请求数据
|
||||
* @param {SaltKey} saltType salt 类型
|
||||
* @param {boolean} isSign 是否为签名
|
||||
* @returns {Record<string, string>} 请求头
|
||||
* @param cookie - cookie
|
||||
* @param method - 请求方法
|
||||
* @param data - 请求数据
|
||||
* @param saltType - salt 类型
|
||||
* @param isSign - 是否为签名
|
||||
* @returns 请求头
|
||||
*/
|
||||
export function getRequestHeader(
|
||||
cookie: Record<string, string>,
|
||||
@@ -105,13 +104,13 @@ export function getRequestHeader(
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取 DS
|
||||
* 获取 DS
|
||||
* @since Beta v0.7.3
|
||||
* @param {SaltKey} saltType salt 类型
|
||||
* @param {number} dsType ds 类型
|
||||
* @param {Record<string, string|number>|string} body
|
||||
* @param {Record<string, string|number>|string} query
|
||||
* @returns {string} DS
|
||||
* @param saltType - salt 类型
|
||||
* @param dsType - ds 类型
|
||||
* @param body - body
|
||||
* @param query - query
|
||||
* @returns DS
|
||||
*/
|
||||
export function getDS4JS(saltType: SaltKey, dsType: 1, body?: never, query?: never): string;
|
||||
export function getDS4JS(
|
||||
|
||||
@@ -13,8 +13,8 @@ import { createPost } from "./TGWindow.js";
|
||||
/**
|
||||
* 处理帖子链接
|
||||
* @since Beta v0.6.9
|
||||
* @param {string} link
|
||||
* @returns {Promise<false|string>} - 处理情况,或者转换后的链接
|
||||
* @param link - 链接
|
||||
* @returns 处理情况,或者转换后的链接
|
||||
*/
|
||||
export async function parsePost(link: string): Promise<false | string> {
|
||||
const url = new URL(link);
|
||||
@@ -54,9 +54,9 @@ export async function parsePost(link: string): Promise<false | string> {
|
||||
/**
|
||||
* 处理链接
|
||||
* @since Beta v0.7.2
|
||||
* @param {string} link - 链接
|
||||
* @param {boolean} useInner - 是否采用内置 JSBridge 打开
|
||||
* @returns {Promise<boolean|string>} - 处理情况,或者转换后的链接
|
||||
* @param link - 链接
|
||||
* @param useInner - 是否采用内置 JSBridge 打开
|
||||
* @returns 处理情况,或者转换后的链接
|
||||
*/
|
||||
export async function parseLink(
|
||||
link: string,
|
||||
|
||||
@@ -4,20 +4,21 @@
|
||||
*/
|
||||
|
||||
import showSnackbar from "@comp/func/snackbar.js";
|
||||
import { AvatarExtResTypeEnum, AvatarExtTypeEnum } from "@enum/bbs.js";
|
||||
import bbsEnum from "@enum/bbs.js";
|
||||
import staticDataEnum from "@enum/staticData.js";
|
||||
import { path } from "@tauri-apps/api";
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
import { type } from "@tauri-apps/plugin-os";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
import { v4 } from "uuid";
|
||||
|
||||
import { AppCharacterData, AppWeaponData } from "@/data/index.js";
|
||||
import { AppCalendarData, AppCharacterData, AppWeaponData } from "@/data/index.js";
|
||||
|
||||
/**
|
||||
* @description 时间戳转换为时间字符串
|
||||
* 时间戳转换为时间字符串
|
||||
* @since Beta v0.8.0
|
||||
* @param {number} time - 时间戳(毫秒)
|
||||
* @returns {string} 时间字符串 d天 hh:mm:ss
|
||||
* @param time - 时间戳(毫秒)
|
||||
* @returns 时间字符串 d天 hh:mm:ss
|
||||
*/
|
||||
export function stamp2LastTime(time: number): string {
|
||||
const day = Math.floor(time / (24 * 3600 * 1000));
|
||||
@@ -30,10 +31,10 @@ export function stamp2LastTime(time: number): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 时间戳转换为日期
|
||||
* 时间戳转换为日期
|
||||
* @since Beta v0.6.0
|
||||
* @param {number} timestamp - 时间戳(毫秒)
|
||||
* @returns {string} 日期 2021-01-01 00:00:00
|
||||
* @param timestamp - 时间戳(毫秒)
|
||||
* @returns 日期 2021-01-01 00:00:00
|
||||
*/
|
||||
export function timestampToDate(timestamp: number): string {
|
||||
const date = new Date(timestamp);
|
||||
@@ -47,13 +48,15 @@ export function timestampToDate(timestamp: number): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取相近时间
|
||||
* @description 如果是今天,只显示 hh:mm
|
||||
* @description 如果是今年,显示 MM-dd
|
||||
* @description 否则显示 yyyy-MM-dd
|
||||
* 获取相近时间
|
||||
* @since Beta v0.7.2
|
||||
* @param {number} timestamp - 时间戳(秒)
|
||||
* @returns {string} 相近时间
|
||||
* @remarks
|
||||
* - 如果是今天,只显示 hh:mm
|
||||
* - 如果是今年,显示 MM-dd
|
||||
* - 否则显示 yyyy-MM-dd
|
||||
*
|
||||
* @param timestamp - 时间戳(秒)
|
||||
* @returns 相近时间
|
||||
*/
|
||||
export function getNearTime(timestamp: number): string {
|
||||
const date = new Date(timestamp * 1000);
|
||||
@@ -75,9 +78,9 @@ export function getNearTime(timestamp: number): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取设备信息(初始化时)
|
||||
* 获取设备信息(初始化时)
|
||||
* @since Beta v0.4.1
|
||||
* @returns {TGApp.App.Device.DeviceInfo} 设备信息
|
||||
* @returns 设备信息
|
||||
*/
|
||||
export function getInitDeviceInfo(): TGApp.App.Device.DeviceInfo {
|
||||
return {
|
||||
@@ -91,12 +94,12 @@ export function getInitDeviceInfo(): TGApp.App.Device.DeviceInfo {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取设备信息(登录时)
|
||||
* 获取设备信息(登录时)
|
||||
* @since Beta v0.3.6
|
||||
* @param {string} key - 设备信息 key
|
||||
* @returns {string} 设备信息
|
||||
* @param key - 设备信息 key
|
||||
* @returns 设备信息
|
||||
*/
|
||||
export function getDeviceInfo(key: keyof TGApp.App.Device.DeviceInfo): string {
|
||||
export function getDeviceInfo(key: TGApp.App.Device.DeviceInfoKey): string {
|
||||
const localDevice = localStorage.getItem("deviceInfo");
|
||||
let deviceInfo: TGApp.App.Device.DeviceInfo;
|
||||
if (localDevice === null) {
|
||||
@@ -107,10 +110,10 @@ export function getDeviceInfo(key: keyof TGApp.App.Device.DeviceInfo): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description byte 转成 KB MB GB
|
||||
* byte 转成 KB MB GB
|
||||
* @since Beta v0.3.4
|
||||
* @param {number} bytes - 字节数
|
||||
* @returns {string} KB MB GB
|
||||
* @param bytes - 字节数
|
||||
* @returns KB MB GB
|
||||
*/
|
||||
export function bytesToSize(bytes: number): string {
|
||||
if (bytes === 0) return "0 B";
|
||||
@@ -122,7 +125,8 @@ export function bytesToSize(bytes: number): string {
|
||||
|
||||
/**
|
||||
* 获取缓存目录
|
||||
* @returns {Array<string>|false} 缓存目录
|
||||
* @since Beta v0.9.1
|
||||
* @returns 缓存目录
|
||||
*/
|
||||
export async function getCacheDir(): Promise<Array<string> | false> {
|
||||
const cacheDir = await path.appCacheDir();
|
||||
@@ -138,11 +142,11 @@ export async function getCacheDir(): Promise<Array<string> | false> {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取随机字符串
|
||||
* 获取随机字符串
|
||||
* @since Beta v0.4.1
|
||||
* @param {number} length 字符串长度
|
||||
* @param {string} type
|
||||
* @returns {string} 随机字符串
|
||||
* @param length - 字符串长度
|
||||
* @param type - 字符串类型
|
||||
* @returns 随机字符串
|
||||
*/
|
||||
export function getRandomString(length: number, type: string = "all"): string {
|
||||
const char = "abcdefghijklmnopqrstuvwxyz";
|
||||
@@ -181,10 +185,10 @@ export function getRandomString(length: number, type: string = "all"): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 解析带样式的文本
|
||||
* 解析带样式的文本
|
||||
* @since Beta v0.8.1
|
||||
* @param {string} desc - 带样式的文本
|
||||
* @returns {string} 解析后的文本
|
||||
* @param desc - 带样式的文本
|
||||
* @returns 解析后的文本
|
||||
*/
|
||||
export function parseHtmlText(desc: string): string {
|
||||
const linkReg = /\{LINK#(.*?)}(.*?)\{\/LINK}/g;
|
||||
@@ -212,10 +216,10 @@ export function parseHtmlText(desc: string): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 根据英文element获取中文
|
||||
* 根据英文element获取中文
|
||||
* @since Beta v0.5.3
|
||||
* @param {string} element - 英文element
|
||||
* @returns {string} 中文element
|
||||
* @param element - 英文element
|
||||
* @returns 中文element
|
||||
*/
|
||||
export function getZhElement(element: string): string {
|
||||
const elementUpper = element.toUpperCase();
|
||||
@@ -240,10 +244,10 @@ export function getZhElement(element: string): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取视频时长
|
||||
* 获取视频时长
|
||||
* @since Beta v0.6.7
|
||||
* @param {number} durationMill - 视频时长(毫秒)
|
||||
* @returns {string} 视频时长
|
||||
* @param durationMill - 视频时长(毫秒)
|
||||
* @returns 视频时长
|
||||
*/
|
||||
export function getVideoDuration(durationMill: number): string {
|
||||
const duration = Math.floor(durationMill / 1000);
|
||||
@@ -258,10 +262,10 @@ export function getVideoDuration(durationMill: number): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 转义正则表达式
|
||||
* 转义正则表达式
|
||||
* @since Beta v0.3.3
|
||||
* @param {string} data 内容
|
||||
* @returns {string} 转义后的内容
|
||||
* @param data - 内容
|
||||
* @returns 转义后的内容
|
||||
*/
|
||||
export function decodeRegExp(data: string): string {
|
||||
let res = data;
|
||||
@@ -277,44 +281,57 @@ export function decodeRegExp(data: string): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 根据id获取对应角色/武器数据
|
||||
* @since Beta v0.6.8
|
||||
* @param {number|string} id
|
||||
* @returns {TGApp.App.Character.WikiBriefInfo|TGApp.App.Weapon.WikiBriefInfo}
|
||||
* 根据id获取对应角色/武器数据
|
||||
* @since Beta v0.9.1
|
||||
* @param id - id
|
||||
* @returns 角色/武器数据
|
||||
*/
|
||||
export function getWikiBrief(
|
||||
id: number | string,
|
||||
): TGApp.App.Character.WikiBriefInfo | TGApp.App.Weapon.WikiBriefInfo | false {
|
||||
const len = id.toString().length;
|
||||
if (len === 5) {
|
||||
const find = AppCalendarData.find((i) => i.id === id);
|
||||
if (find === undefined) return false;
|
||||
if (find.itemType === staticDataEnum.calendarItem.weapon) {
|
||||
return AppWeaponData.find((item) => item.id.toString() === id.toString()) ?? false;
|
||||
}
|
||||
return AppCharacterData.find((item) => item.id.toString() === id.toString()) ?? false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 根据传入角色信息获取头像
|
||||
* @since Beta v0.7.9
|
||||
* @param {TGApp.BBS.Reply.User|TGApp.BBS.Post.User} user - 用户信息
|
||||
* @returns {string} 头像链接
|
||||
* 根据传入角色信息获取头像
|
||||
* @since Beta v0.9.1
|
||||
* @param user - 用户信息
|
||||
* @returns 头像链接
|
||||
*/
|
||||
export function getUserAvatar(
|
||||
user: TGApp.BBS.Reply.User | TGApp.BBS.Post.User | TGApp.BBS.User.Info,
|
||||
): string {
|
||||
if (!user.avatar_ext) return user.avatar_url;
|
||||
if (user.avatar_ext.avatar_type === AvatarExtTypeEnum.CUSTOM) return user.avatar_url;
|
||||
if (user.avatar_ext.avatar_type === AvatarExtTypeEnum.GIF) {
|
||||
const findGH = user.avatar_ext.hd_resources.find((i) => i.format === AvatarExtResTypeEnum.GIF);
|
||||
if (user.avatar_ext.avatar_type === bbsEnum.user.avatarExtType.CUSTOM) return user.avatar_url;
|
||||
if (user.avatar_ext.avatar_type === bbsEnum.user.avatarExtType.GIF) {
|
||||
const findGH = user.avatar_ext.hd_resources.find(
|
||||
(i) => i.format === bbsEnum.user.avatarResType.GIF,
|
||||
);
|
||||
if (findGH) return findGH.url;
|
||||
const findG = user.avatar_ext.resources.find((i) => i.format === AvatarExtResTypeEnum.GIF);
|
||||
const findG = user.avatar_ext.resources.find(
|
||||
(i) => i.format === bbsEnum.user.avatarResType.GIF,
|
||||
);
|
||||
if (findG) return findG.url;
|
||||
const findWH = user.avatar_ext.hd_resources.find((i) => i.format === AvatarExtResTypeEnum.WEBP);
|
||||
const findWH = user.avatar_ext.hd_resources.find(
|
||||
(i) => i.format === bbsEnum.user.avatarResType.WEBP,
|
||||
);
|
||||
if (findWH) return findWH.url;
|
||||
const findW = user.avatar_ext.resources.find((i) => i.format === AvatarExtResTypeEnum.WEBP);
|
||||
const findW = user.avatar_ext.resources.find(
|
||||
(i) => i.format === bbsEnum.user.avatarResType.WEBP,
|
||||
);
|
||||
if (findW) return findW.url;
|
||||
const findPH = user.avatar_ext.hd_resources.find((i) => i.format === AvatarExtResTypeEnum.PNG);
|
||||
const findPH = user.avatar_ext.hd_resources.find(
|
||||
(i) => i.format === bbsEnum.user.avatarResType.PNG,
|
||||
);
|
||||
if (findPH) return findPH.url;
|
||||
const findP = user.avatar_ext.resources.find((i) => i.format === AvatarExtResTypeEnum.PNG);
|
||||
const findP = user.avatar_ext.resources.find(
|
||||
(i) => i.format === bbsEnum.user.avatarResType.PNG,
|
||||
);
|
||||
if (findP) return findP.url;
|
||||
return user.avatar_url;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user