🎨 规范化代码

This commit is contained in:
BTMuli
2025-12-24 02:46:28 +08:00
parent 8500668213
commit 651a89145f
199 changed files with 5067 additions and 5390 deletions

View File

@@ -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`, {

View File

@@ -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",

View File

@@ -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",

View File

@@ -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") {

View File

@@ -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>(

View File

@@ -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--"}`;

View File

@@ -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);

View File

@@ -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();

View File

@@ -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);

View File

@@ -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();

View File

@@ -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 = {

View File

@@ -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") ?? "";

View File

@@ -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;

View File

@@ -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;

View File

@@ -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(

View File

@@ -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,

View File

@@ -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;
}