mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2026-04-22 21:59:49 +08:00
♻️ 简化错误处理,迁移painterReq
This commit is contained in:
@@ -74,10 +74,7 @@ async function loadNav(): Promise<void> {
|
||||
nav.value = resp.data.data.navigator;
|
||||
if (loadCode.value) loadCode.value = false;
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`加载组件数据失败: ${errMsg}`);
|
||||
await TGLogger.Error(`[TGameNav][loadNav] 加载组件数据失败:${e}`);
|
||||
}
|
||||
@@ -113,10 +110,7 @@ async function tryGetCode(): Promise<void> {
|
||||
loadCode.value = false;
|
||||
} catch (e) {
|
||||
loadCode.value = false;
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取兑换码失败: ${errMsg}`);
|
||||
await TGLogger.Error(`[TGameNav][tryGetCode] 获取兑换码失败:${e}`);
|
||||
}
|
||||
|
||||
@@ -104,10 +104,7 @@ async function loadImageBuffer(): Promise<void> {
|
||||
try {
|
||||
buffer.value = await TGHttps.buffer(imageUrl);
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取图像Buffer失败:${errMsg}`);
|
||||
await TGLogger.Error(`[PaoBirthCard][loadImageBuffer] 获取图像Buffer失败:${imageUrl}`);
|
||||
await TGLogger.Error(`[PaoBirthCard][loadImageBuffer] ${e}`);
|
||||
|
||||
@@ -53,6 +53,7 @@ import TGNotify from "@utils/TGNotify.js";
|
||||
import { postDetailRateLimiter } from "@utils/rateLimiter.js";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { ref, shallowRef, watch } from "vue";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
|
||||
/** 用于渲染的任务项 */
|
||||
type ParseMission = {
|
||||
@@ -197,15 +198,38 @@ async function tryAuto(skip: boolean = false): Promise<void> {
|
||||
if (likeFind) likeCnt = likeFind.process;
|
||||
const viewFind = postFilter.find((i) => i.key === "view_post_0");
|
||||
if (viewFind) viewCnt = viewFind.process;
|
||||
// 获取帖子列表
|
||||
await TGLogger.Script("[米游币任务]获取帖子列表");
|
||||
const listResp = await painterReq.forum.recent(26, 2, 2, undefined, 20);
|
||||
let listResp: TGApp.BBS.Forum.PostForumResp | undefined;
|
||||
try {
|
||||
listResp = await painterReq.forum.recent(26, 2, 2, undefined, 20);
|
||||
if (listResp.retcode !== 0) {
|
||||
showSnackbar.error(`[${listResp.retcode}] ${listResp.message}`);
|
||||
await TGLogger.Script(`获取帖子列表失败: [${listResp.retcode}] ${listResp.message}`, "warn");
|
||||
await TGLogger.ScriptSep("米游币任务", false);
|
||||
loadScript.value = false;
|
||||
loadMission.value = false;
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取帖子列表失败:${errMsg}`);
|
||||
await TGLogger.Script(`获取帖子列表失败`, "error");
|
||||
await TGLogger.Error(`[tus-mission][tryAuto] ${e}`);
|
||||
await TGLogger.ScriptSep("米游币任务", false);
|
||||
loadScript.value = false;
|
||||
loadMission.value = false;
|
||||
return;
|
||||
}
|
||||
if (!listResp) return;
|
||||
// 执行操作
|
||||
const ckShare = {
|
||||
stoken: props.acCur.cookie.stoken,
|
||||
stuid: props.acCur.cookie.stuid,
|
||||
mid: props.acCur.cookie.mid,
|
||||
};
|
||||
const ckPost = { ltoken: props.acCur.cookie.ltoken, ltuid: props.acCur.cookie.ltuid };
|
||||
for (const post of listResp.list) {
|
||||
for (const post of listResp.data.list) {
|
||||
if (!isShare) {
|
||||
await TGLogger.Script(`[米游币任务]正在分享帖子${post.post.post_id}`);
|
||||
const shareResp = await apiHubReq.post.share(post.post.post_id, ckShare);
|
||||
@@ -320,7 +344,6 @@ async function autoSign(ck: TGApp.App.Account.Cookie, skip: boolean, ch?: string
|
||||
}
|
||||
await TGLogger.Script("[米游币任务]正在执行打卡");
|
||||
const ckSign = { stoken: ck.stoken, stuid: ck.stuid, mid: ck.mid };
|
||||
await painterReq.forum.recent(26, 2, 1, undefined, 20, ckSign);
|
||||
const resp = await apiHubReq.sign(ckSign, 2, ch);
|
||||
console.log("打卡情况", resp);
|
||||
if (resp.retcode !== 0) {
|
||||
|
||||
@@ -61,10 +61,7 @@ onMounted(async () => {
|
||||
const viewResp = await Bili.video.view(aid, bvid);
|
||||
videoData.value = viewResp.data;
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取视频信息失败: ${errMsg}`);
|
||||
await TGLogger.Error(`[TpVideo][onMounted] 获取视频信息异常: ${url}`);
|
||||
await TGLogger.Error(`[TpVideo][onMounted] ${e}`);
|
||||
|
||||
@@ -161,10 +161,7 @@ async function loadCoverBuffer(): Promise<void> {
|
||||
try {
|
||||
coverBuffer.value = await TGHttps.buffer(props.data.insert.vod.cover);
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取图像Buffer失败:${errMsg}`);
|
||||
await TGLogger.Error(
|
||||
`[TpVod][loadCoverBuffer] 获取图像Buffer失败:${props.data.insert.vod.cover}`,
|
||||
|
||||
@@ -33,6 +33,8 @@ import useUserStore from "@store/user.js";
|
||||
import { openUrl } from "@tauri-apps/plugin-opener";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { ref, shallowRef, useTemplateRef, watch } from "vue";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
|
||||
const { cookie } = storeToRefs(useUserStore());
|
||||
|
||||
@@ -73,18 +75,34 @@ async function loadMore(refresh: boolean = false): Promise<void> {
|
||||
return;
|
||||
}
|
||||
loading.value = true;
|
||||
const resp = await painterReq.follow(cookie.value, offset.value);
|
||||
if ("retcode" in resp) {
|
||||
showSnackbar.warn(`[${resp.retcode}] ${resp.message}`);
|
||||
// 获取关注帖子列表
|
||||
let resp: TGApp.BBS.Post.FollowPostResp | undefined;
|
||||
try {
|
||||
resp = await painterReq.follow(cookie.value, offset.value);
|
||||
if (resp.retcode !== 0) {
|
||||
showSnackbar.warn(`[${resp.retcode}] ${resp.message}`);
|
||||
await TGLogger.Warn(`[VpOverlayFollow][loadMore] [${resp.retcode}] ${resp.message}`);
|
||||
loading.value = false;
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取关注帖子失败,${errMsg}`);
|
||||
await TGLogger.Error(`[VpOverlayFollow][loadMore] 获取关注帖子失败`);
|
||||
await TGLogger.Error(`[VpOverlayFollow][loadMore] ${e}`);
|
||||
loading.value = false;
|
||||
return;
|
||||
}
|
||||
offset.value = resp.next_offset;
|
||||
isLast.value = resp.is_last;
|
||||
if (refresh) posts.value = resp.list;
|
||||
else posts.value = posts.value.concat(resp.list);
|
||||
if (!resp) {
|
||||
loading.value = false;
|
||||
return;
|
||||
}
|
||||
offset.value = resp.data.next_offset;
|
||||
isLast.value = resp.data.is_last;
|
||||
if (refresh) posts.value = resp.data.list;
|
||||
else posts.value = posts.value.concat(resp.data.list);
|
||||
loading.value = false;
|
||||
showSnackbar.success(`成功加载${resp.list.length}条数据`);
|
||||
showSnackbar.success(`成功加载${resp.data.list.length}条数据`);
|
||||
if (refresh && listEl.value) {
|
||||
listEl.value.scrollTo({ top: 0, behavior: "smooth" });
|
||||
}
|
||||
|
||||
@@ -404,10 +404,7 @@ async function loadImageBuffer(): Promise<void> {
|
||||
try {
|
||||
buffer.value = await TGHttps.buffer(oriLink.value);
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取图像Buffer失败:${errMsg}`);
|
||||
await TGLogger.Error(`[VpOverlayImage][loadImageBuffer] 获取图像Buffer失败:${oriLink.value}`);
|
||||
await TGLogger.Error(`[VpOverlayImage][loadImageBuffer] ${e}`);
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
<template>
|
||||
<TOverlay v-model="visible">
|
||||
<div class="tpol-box" v-if="card">
|
||||
<div v-if="card" class="tpol-box">
|
||||
<div class="tpol-title">
|
||||
<span>抽奖详情</span>
|
||||
<span>{{ timeStatus }}</span>
|
||||
</div>
|
||||
<div class="tpol-info">
|
||||
<TpAvatar @click="toUserProfile(card.creator.uid)" :data="card.creator" position="left" />
|
||||
<TpAvatar :data="card.creator" position="left" @click="toUserProfile(card.creator.uid)" />
|
||||
<div>参与方式:{{ upWay }}</div>
|
||||
<div>奖品详情:</div>
|
||||
<div v-for="reward in card.rewards" :key="reward.name" class="tpol-info-reward">
|
||||
<v-icon size="12" color="var(--tgc-pink-1)">mdi-gift</v-icon>
|
||||
<v-icon color="var(--tgc-pink-1)" size="12">mdi-gift</v-icon>
|
||||
<span>{{ reward.name }}</span>
|
||||
<span>{{ reward.goal }}份</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tpol-title" v-if="timeStatus === '已开奖'">中奖详情</div>
|
||||
<div v-if="timeStatus === '已开奖'" class="tpol-title">中奖详情</div>
|
||||
<template v-if="timeStatus === '已开奖'">
|
||||
<template v-for="reward in card.rewards" :key="reward.name">
|
||||
<div class="vpol-reward-title">{{ reward.name }} {{ reward.win }}/{{ reward.goal }}</div>
|
||||
@@ -24,8 +24,8 @@
|
||||
v-for="user in reward.users"
|
||||
:key="user.uid"
|
||||
:data="user"
|
||||
position="left"
|
||||
class="tpolr-user"
|
||||
position="left"
|
||||
@click="onUserClick(user)"
|
||||
/>
|
||||
</div>
|
||||
@@ -35,7 +35,7 @@
|
||||
</div>
|
||||
</TOverlay>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
<script lang="ts" setup>
|
||||
import TOverlay from "@comp/app/t-overlay.vue";
|
||||
import showSnackbar from "@comp/func/snackbar.js";
|
||||
import TpAvatar from "@comp/viewPost/tp-avatar.vue";
|
||||
@@ -45,6 +45,8 @@ import { openUrl } from "@tauri-apps/plugin-opener";
|
||||
import { generateShareImg } from "@utils/TGShare.js";
|
||||
import { stamp2LastTime } from "@utils/toolFunc.js";
|
||||
import { onUnmounted, ref, shallowRef, watch } from "vue";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
|
||||
type TpoLotteryProps = { lottery: string | undefined };
|
||||
type RenderCard = {
|
||||
@@ -81,13 +83,25 @@ watch(
|
||||
async function load(): Promise<void> {
|
||||
if (!props.lottery) return;
|
||||
if (card.value) return;
|
||||
const resp = await painterReq.lottery(props.lottery);
|
||||
if ("retcode" in resp) {
|
||||
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
|
||||
let resp: TGApp.BBS.Lottery.Resp | undefined;
|
||||
try {
|
||||
resp = await painterReq.lottery(props.lottery);
|
||||
if (resp.retcode !== 0) {
|
||||
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
|
||||
await TGLogger.Warn(`[VpOverlayLottery][load] 获取抽奖数据异常`);
|
||||
await TGLogger.Warn(`[VpOverlayLottery][load] [${resp.retcode}] ${resp.message}`);
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取抽奖数据异常: ${errMsg}`);
|
||||
await TGLogger.Error(`[VpOverlayLottery][load] 获取抽奖数据异常`);
|
||||
await TGLogger.Error(`[VpOverlayLottery][load] ${e}`);
|
||||
return;
|
||||
}
|
||||
jsonData.value = resp;
|
||||
if (resp.status === "Settled") timeStatus.value = "已开奖";
|
||||
if (!resp) return;
|
||||
jsonData.value = resp.data.show_lottery;
|
||||
if (resp.data.show_lottery.status === "Settled") timeStatus.value = "已开奖";
|
||||
else {
|
||||
if (timer !== undefined) {
|
||||
clearInterval(timer);
|
||||
@@ -95,7 +109,7 @@ async function load(): Promise<void> {
|
||||
}
|
||||
timer = setInterval(flushTimeStatus, 1000);
|
||||
}
|
||||
card.value = transLotteryCard(resp);
|
||||
card.value = transLotteryCard(resp.data.show_lottery);
|
||||
upWay.value = getUpWay(card.value?.upWay);
|
||||
}
|
||||
|
||||
|
||||
@@ -439,10 +439,7 @@ async function refreshAvatars(
|
||||
return false;
|
||||
}
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取战绩数据异常: ${errMsg}`);
|
||||
await TGLogger.Error(`[Record][refreshRecord] 获取战绩异常`);
|
||||
await TGLogger.Error(`${e}`);
|
||||
|
||||
@@ -436,10 +436,7 @@ async function refresh(): Promise<void> {
|
||||
}
|
||||
} catch (e) {
|
||||
await showLoading.end();
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取战绩数据异常: ${errMsg}`);
|
||||
await TGLogger.Error(`[Characters][refresh] 获取战绩异常`);
|
||||
await TGLogger.Error(`${e}`);
|
||||
|
||||
@@ -599,10 +599,7 @@ async function loadYatta(): Promise<void> {
|
||||
try {
|
||||
yattaData.value = await fetchYattaJson();
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取Yatta数据失败:${errMsg}`);
|
||||
await TGLogger.Error(`[Gacha][loadYatta] 获取Yatta数据失败`);
|
||||
await TGLogger.Error(`[Gacha][loadYatta] ${e}`);
|
||||
|
||||
@@ -163,10 +163,7 @@ async function refreshRecord(): Promise<void> {
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取战绩数据异常: ${errMsg}`);
|
||||
await TGLogger.Error(`[Record][refreshRecord] 获取战绩异常`);
|
||||
await TGLogger.Error(`${e}`);
|
||||
|
||||
@@ -85,7 +85,6 @@ import TusOutput from "@comp/userScripts/tus-output.vue";
|
||||
import TusSign from "@comp/userScripts/tus-sign.vue";
|
||||
import apiHubReq from "@req/apiHubReq.js";
|
||||
import miscReq from "@req/miscReq.js";
|
||||
import painterReq from "@req/painterReq.js";
|
||||
import TSUserAccount from "@Sqlm/userAccount.js";
|
||||
import useUserStore from "@store/user.js";
|
||||
import { exit } from "@tauri-apps/plugin-process";
|
||||
@@ -184,7 +183,6 @@ async function tryCkVerify(): Promise<void> {
|
||||
let challenge: string | undefined = undefined;
|
||||
while (!flag) {
|
||||
await showLoading.start("正在验证CK有效性");
|
||||
await painterReq.forum.recent(26, 2, 1, undefined, 20, ck);
|
||||
const resp = await apiHubReq.sign(ck, 2, challenge);
|
||||
await showLoading.update(`[${resp.retcode}] ${resp.message}`);
|
||||
if (resp.retcode === -100) {
|
||||
|
||||
@@ -51,10 +51,7 @@ async function test() {
|
||||
}
|
||||
showSnackbar.success("成功获取实时便笺数据");
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取实时便笺失败:${errMsg}`);
|
||||
await TGLogger.Error(`[PageTest][test] 获取实时便笺失败`);
|
||||
await TGLogger.Error(`[PageTest][test] ${e}`);
|
||||
|
||||
@@ -124,6 +124,9 @@ import { createPost } from "@utils/TGWindow.js";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { computed, nextTick, onMounted, ref, shallowRef, watch } from "vue";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
import useAppStore from "@store/app.js";
|
||||
import useUserStore from "@store/user.js";
|
||||
|
||||
type SortSelect<T extends number = number> = { text: string; value: T; icon: string };
|
||||
type SortSelectForum = Omit<SortSelect<TGApp.BBS.Post.ForumSortTypeEnum>, "icon">;
|
||||
@@ -157,6 +160,9 @@ const showUser = ref<boolean>(false);
|
||||
|
||||
const bbsStore = useBBSStore();
|
||||
const { gameList, forumList } = storeToRefs(bbsStore);
|
||||
const { incognito } = storeToRefs(useAppStore());
|
||||
const { cookie } = storeToRefs(useUserStore());
|
||||
|
||||
const selectedForum = shallowRef<SortSelect>();
|
||||
const sortGameList = shallowRef<Array<SortSelectGame>>([]);
|
||||
const postRaw = shallowRef<PostRaw>({ isLast: false, lastId: "", total: 0 });
|
||||
@@ -167,6 +173,10 @@ const curGame = computed<SortSelectGame | undefined>(() => {
|
||||
const curForums = computed<Array<SortSelect>>(() => {
|
||||
return curGame.value?.forum ?? [];
|
||||
});
|
||||
const reqCk = computed<TGApp.App.Account.Cookie | undefined>(() => {
|
||||
if (incognito.value) return undefined;
|
||||
return cookie.value;
|
||||
});
|
||||
|
||||
onMounted(async () => {
|
||||
await showLoading.start("正在加载帖子数据");
|
||||
@@ -253,25 +263,26 @@ function getSortLabel(value: number): string {
|
||||
async function getCurrentPosts(
|
||||
loadMore: boolean = false,
|
||||
forum: number,
|
||||
): Promise<TGApp.BBS.Forum.PostForumRes> {
|
||||
): Promise<TGApp.BBS.Forum.PostForumResp> {
|
||||
const mod20 = postRaw.value.total % 20;
|
||||
const pageSize = mod20 === 0 ? 20 : 20 - mod20;
|
||||
if (curSortType.value === 3) {
|
||||
if (loadMore) {
|
||||
return await painterReq.forum.hot(forum, curGid.value, postRaw.value.lastId, pageSize);
|
||||
}
|
||||
return await painterReq.forum.hot(forum, curGid.value);
|
||||
}
|
||||
if (loadMore) {
|
||||
return await painterReq.forum.recent(
|
||||
return await painterReq.forum.hot(
|
||||
forum,
|
||||
curGid.value,
|
||||
curSortType.value,
|
||||
postRaw.value.lastId,
|
||||
pageSize,
|
||||
loadMore ? postRaw.value.lastId : undefined,
|
||||
loadMore ? pageSize : 20,
|
||||
reqCk.value,
|
||||
);
|
||||
}
|
||||
return await painterReq.forum.recent(forum, curGid.value, curSortType.value);
|
||||
return await painterReq.forum.recent(
|
||||
forum,
|
||||
curGid.value,
|
||||
curSortType.value,
|
||||
loadMore ? postRaw.value.lastId : undefined,
|
||||
loadMore ? pageSize : 20,
|
||||
reqCk.value,
|
||||
);
|
||||
}
|
||||
|
||||
async function freshPostData(): Promise<void> {
|
||||
@@ -293,14 +304,34 @@ async function freshPostData(): Promise<void> {
|
||||
);
|
||||
await showLoading.update(`版块:${forumLabel},排序:${sortLabel}`);
|
||||
document.documentElement.scrollTo({ top: 0, behavior: "smooth" });
|
||||
const postsGet = await getCurrentPosts(false, selectedForum.value.value);
|
||||
posts.value = postsGet.list;
|
||||
// 获取帖子列表
|
||||
let postsResp: TGApp.BBS.Forum.PostForumResp | undefined;
|
||||
try {
|
||||
postsResp = await getCurrentPosts(false, selectedForum.value.value);
|
||||
if (postsResp.retcode !== 0) {
|
||||
showSnackbar.error(`[${postsResp.retcode}] ${postsResp.message}`);
|
||||
await TGLogger.Warn(`[PostForum][freshPostData] 获取帖子列表异常`);
|
||||
await TGLogger.Warn(`[PostForum][freshPostData] ${postsResp.retcode}-${postsResp.message}`);
|
||||
await showLoading.end();
|
||||
isReq.value = false;
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取帖子列表异常:${errMsg}`);
|
||||
await TGLogger.Error(`[PostForum][freshPostData] 获取帖子列表异常`);
|
||||
await TGLogger.Error(`[PostForum][freshPostData] ${e}`);
|
||||
await showLoading.end();
|
||||
isReq.value = false;
|
||||
}
|
||||
if (!postsResp) return;
|
||||
// 处理帖子列表数据
|
||||
posts.value = postsResp.data.list;
|
||||
postRaw.value = {
|
||||
isLast: postsGet.is_last,
|
||||
lastId: postsGet.last_id,
|
||||
total: postsGet.list.length,
|
||||
isLast: postsResp.data.is_last,
|
||||
lastId: postsResp.data.last_id,
|
||||
total: postsResp.data.list.length,
|
||||
};
|
||||
showSnackbar.success(`刷新成功,共加载 ${postsGet.list.length} 条帖子`);
|
||||
showSnackbar.success(`刷新成功,共加载 ${postsResp.data.list.length} 条帖子`);
|
||||
await showLoading.end();
|
||||
isReq.value = false;
|
||||
}
|
||||
@@ -317,17 +348,38 @@ async function loadMore(): Promise<void> {
|
||||
if (isReq.value) return;
|
||||
isReq.value = true;
|
||||
await showLoading.start("正在加载更多帖子数据", `游戏:${curGame.value?.text}`);
|
||||
const postsGet = await getCurrentPosts(true, selectedForum.value.value);
|
||||
await showLoading.update(
|
||||
`版块:${selectedForum.value.text},排序:${getSortLabel(curSortType.value)},数量:${postsGet.list.length}`,
|
||||
);
|
||||
posts.value = posts.value.concat(postsGet.list);
|
||||
|
||||
// 获取帖子列表
|
||||
let postsResp: TGApp.BBS.Forum.PostForumResp | undefined;
|
||||
try {
|
||||
postsResp = await getCurrentPosts(true, selectedForum.value.value);
|
||||
if (postsResp.retcode !== 0) {
|
||||
showSnackbar.error(`[${postsResp.retcode}] ${postsResp.message}`);
|
||||
await TGLogger.Warn(`[PostForum][loadMore] 获取帖子列表异常`);
|
||||
await TGLogger.Warn(`[PostForum][loadMore] ${postsResp.retcode}-${postsResp.message}`);
|
||||
await showLoading.end();
|
||||
isReq.value = false;
|
||||
}
|
||||
await showLoading.update(
|
||||
`版块:${selectedForum.value.text},排序:${getSortLabel(curSortType.value)},数量:${postsResp.data.list.length}`,
|
||||
);
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取帖子列表异常:${errMsg}`);
|
||||
await TGLogger.Error(`[PostForum][loadMore] 获取帖子列表异常`);
|
||||
await TGLogger.Error(`[PostForum][loadMore] ${e}`);
|
||||
await showLoading.end();
|
||||
isReq.value = false;
|
||||
}
|
||||
if (!postsResp) return;
|
||||
// 处理帖子列表数据
|
||||
posts.value = posts.value.concat(postsResp.data.list);
|
||||
postRaw.value = {
|
||||
isLast: postsGet.is_last,
|
||||
lastId: postsGet.last_id,
|
||||
total: postRaw.value.total + postsGet.list.length,
|
||||
isLast: postsResp.data.is_last,
|
||||
lastId: postsResp.data.last_id,
|
||||
total: postRaw.value.total + postsResp.data.list.length,
|
||||
};
|
||||
showSnackbar.success(`加载成功,共加载 ${postsGet.list.length} 条帖子`);
|
||||
showSnackbar.success(`加载成功,共加载 ${postsResp.data.list.length} 条帖子`);
|
||||
await showLoading.end();
|
||||
isReq.value = false;
|
||||
}
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
</v-tabs>
|
||||
<v-text-field
|
||||
v-model="search"
|
||||
:clearable="true"
|
||||
:hide-details="true"
|
||||
append-inner-icon="mdi-magnify"
|
||||
class="pn-nav-search"
|
||||
density="compact"
|
||||
label="请输入帖子 ID 或搜索词"
|
||||
variant="outlined"
|
||||
:clearable="true"
|
||||
@keydown.enter="searchPost()"
|
||||
@click:append-inner="searchPost()"
|
||||
/>
|
||||
@@ -69,6 +69,7 @@ import { createPost } from "@utils/TGWindow.js";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { computed, onMounted, reactive, type Ref, ref, shallowRef, watch } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
|
||||
type PostData = Record<TGApp.BBS.Post.NewsTypeEnum, Ref<Array<TGApp.BBS.Post.FullData>>>;
|
||||
type RawItem = { isLast: boolean; name: string; lastId: number };
|
||||
@@ -134,15 +135,43 @@ async function firstLoad(refresh: boolean = false): Promise<void> {
|
||||
postData[key] = [];
|
||||
rawData[key].lastId = 0;
|
||||
}
|
||||
// 获取咨讯数据
|
||||
await showLoading.start(`正在获取${label.value}${rawData[key].name}数据`);
|
||||
const getData = await painterReq.news(gid, key);
|
||||
await showLoading.update(`数量:${getData.list.length},是否最后一页:${getData.is_last}`);
|
||||
rawData[key] = { isLast: getData.is_last, name: rawData[key].name, lastId: getData.list.length };
|
||||
postData[key] = getData.list;
|
||||
let getResp: TGApp.BBS.Post.NewsResp | undefined;
|
||||
try {
|
||||
getResp = await painterReq.news(gid, key);
|
||||
if (getResp.retcode !== 0) {
|
||||
showSnackbar.error(`[${getResp.retcode}] ${getResp.message}`);
|
||||
await TGLogger.Warn(`[PostNews][firstLoad] 获取咨讯异常`);
|
||||
await TGLogger.Warn(`[PostNews][firstLoad] [${getResp.retcode}] ${getResp.message}`);
|
||||
await showLoading.end();
|
||||
loading.value = false;
|
||||
return;
|
||||
}
|
||||
await showLoading.update(
|
||||
`数量:${getResp.data.list.length},是否最后一页:${getResp.data.is_last}`,
|
||||
);
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取${label.value}${rawData[key].name}异常:${errMsg}`);
|
||||
await TGLogger.Error(`[PostNews][firstLoad] 获取咨讯异常`);
|
||||
await TGLogger.Error(`[PostNews][firstLoad] ${e}`);
|
||||
await showLoading.end();
|
||||
loading.value = false;
|
||||
return;
|
||||
}
|
||||
if (!getResp) return;
|
||||
// 处理咨讯数据
|
||||
rawData[key] = {
|
||||
isLast: getResp.data.is_last,
|
||||
name: rawData[key].name,
|
||||
lastId: getResp.data.list.length,
|
||||
};
|
||||
postData[key] = getResp.data.list;
|
||||
await showLoading.end();
|
||||
await TGLogger.Info(`[News][${gid}][firstLoad] 获取${rawData[key].name}数据成功`);
|
||||
showSnackbar.success(
|
||||
`获取${label.value}${rawData[key].name}数据成功,共 ${getData.list.length} 条`,
|
||||
`获取${label.value}${rawData[key].name}数据成功,共 ${getResp.data.list.length} 条`,
|
||||
);
|
||||
loading.value = false;
|
||||
}
|
||||
@@ -166,11 +195,36 @@ async function loadMore(): Promise<void> {
|
||||
await showLoading.start(`正在获取${label.value}${rawData[key].name}数据`);
|
||||
const mod = rawData[key].lastId % 20;
|
||||
const pageSize = mod === 0 ? 20 : 20 - mod;
|
||||
const getData = await painterReq.news(gid, key, pageSize, rawData[key].lastId);
|
||||
await showLoading.update(`数量:${getData.list.length},是否最后一页:${getData.is_last}`);
|
||||
rawData[key].lastId = rawData[key].lastId + getData.list.length;
|
||||
rawData[key].isLast = getData.is_last;
|
||||
postData[key] = postData[key].concat(getData.list);
|
||||
// 获取咨讯数据
|
||||
await showLoading.start(`正在获取${label.value}${rawData[key].name}数据`);
|
||||
let getResp: TGApp.BBS.Post.NewsResp | undefined;
|
||||
try {
|
||||
getResp = await painterReq.news(gid, key, pageSize, rawData[key].lastId);
|
||||
if (getResp.retcode !== 0) {
|
||||
showSnackbar.error(`[${getResp.retcode}] ${getResp.message}`);
|
||||
await TGLogger.Warn(`[PostNews][loadMore] 获取咨讯异常`);
|
||||
await TGLogger.Warn(`[PostNews][loadMore] [${getResp.retcode}] ${getResp.message}`);
|
||||
await showLoading.end();
|
||||
loading.value = false;
|
||||
return;
|
||||
}
|
||||
await showLoading.update(
|
||||
`数量:${getResp.data.list.length},是否最后一页:${getResp.data.is_last}`,
|
||||
);
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取${label.value}${rawData[key].name}异常:${errMsg}`);
|
||||
await TGLogger.Error(`[PostNews][loadMore] 获取咨讯异常`);
|
||||
await TGLogger.Error(`[PostNews][loadMore] ${e}`);
|
||||
await showLoading.end();
|
||||
loading.value = false;
|
||||
return;
|
||||
}
|
||||
if (!getResp) return;
|
||||
// 处理咨讯数据
|
||||
rawData[key].lastId = rawData[key].lastId + getResp.data.list.length;
|
||||
rawData[key].isLast = getResp.data.is_last;
|
||||
postData[key] = postData[key].concat(getResp.data.list);
|
||||
if (rawData[key].isLast) {
|
||||
await showLoading.end();
|
||||
showSnackbar.warn("已经是最后一页了");
|
||||
@@ -179,7 +233,7 @@ async function loadMore(): Promise<void> {
|
||||
}
|
||||
await showLoading.end();
|
||||
loading.value = false;
|
||||
showSnackbar.success(`加载成功,共加载 ${getData.list.length} 条`);
|
||||
showSnackbar.success(`加载成功,共加载 ${getResp.data.list.length} 条`);
|
||||
}
|
||||
|
||||
async function searchPost(): Promise<void> {
|
||||
|
||||
@@ -46,10 +46,7 @@ async function getMixinKey(): Promise<string> {
|
||||
try {
|
||||
navResp = await getNavResp();
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await TGLogger.Error(`[Bili][GetMixinKey] Nav 请求异常:${errMsg}`);
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
/**
|
||||
* painter 下的请求
|
||||
* @since Beta v0.9.9
|
||||
* @since Beta v0.10.0
|
||||
*/
|
||||
import bbsEnum from "@enum/bbs.js";
|
||||
import { getRequestHeader } from "@utils/getRequestHeader.js";
|
||||
import TGHttp from "@utils/TGHttp.js";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
|
||||
// BBSApiPainterBaseUrl => bapBu
|
||||
const bapBu: Readonly<string> = "https://bbs-api.miyoushe.com/painter/wapi/";
|
||||
|
||||
/**
|
||||
* 获取 News 列表
|
||||
* @since Beta v0.7.1
|
||||
* @since Beta v0.10.0
|
||||
* @param gid - GID
|
||||
* @param newsType - 资讯类型: 1 为公告,2 为活动,3 为资讯
|
||||
* @param newsType - 资讯类型
|
||||
* @param pageSize - 返回数量
|
||||
* @param lastId - 上一次请求的最后一条数据的 id
|
||||
* @returns News 列表响应数据
|
||||
@@ -23,23 +23,22 @@ async function getNewsList(
|
||||
newsType: TGApp.BBS.Post.NewsTypeEnum = bbsEnum.post.newsType.NEWS,
|
||||
pageSize: number = 20,
|
||||
lastId: number = 0,
|
||||
): Promise<TGApp.BBS.Post.NewsRes> {
|
||||
return (
|
||||
await TGHttp<TGApp.BBS.Post.NewsResp>(`${bapBu}getNewsList`, {
|
||||
method: "GET",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
query: { gids: gid, page_size: pageSize, type: newsType, last_id: lastId },
|
||||
})
|
||||
).data;
|
||||
): Promise<TGApp.BBS.Post.NewsResp> {
|
||||
const resp = await TGHttps.get<TGApp.BBS.Post.NewsResp>(`${bapBu}getNewsList`, {
|
||||
headers: { "Content-Type": "application/json" },
|
||||
query: { gids: gid, page_size: pageSize, type: newsType, last_id: lastId },
|
||||
});
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最近版块热门帖子列表
|
||||
* @since Beta v0.7.9
|
||||
* @since Beta v0.10.0
|
||||
* @param forumId - 版块 ID
|
||||
* @param gid - 社区 ID
|
||||
* @param pageSize - 每页数量
|
||||
* @param lastId - 最后 ID
|
||||
* @param cookie - 请求 CK
|
||||
* @returns 帖子列表数据
|
||||
*/
|
||||
async function getHotForumPostList(
|
||||
@@ -47,33 +46,27 @@ async function getHotForumPostList(
|
||||
gid: number,
|
||||
lastId?: string,
|
||||
pageSize: number = 20,
|
||||
): Promise<TGApp.BBS.Forum.PostForumRes> {
|
||||
type ReqParams = {
|
||||
forum_id: number;
|
||||
gids: number;
|
||||
page_size: number;
|
||||
is_good: boolean;
|
||||
last_id?: string;
|
||||
};
|
||||
const params: ReqParams = {
|
||||
cookie?: TGApp.App.Account.Cookie,
|
||||
): Promise<TGApp.BBS.Forum.PostForumResp> {
|
||||
const params: TGApp.BBS.Forum.PostForumParams = {
|
||||
forum_id: forumId,
|
||||
gids: gid,
|
||||
page_size: pageSize,
|
||||
is_good: false,
|
||||
};
|
||||
if (lastId) params.last_id = lastId;
|
||||
return (
|
||||
await TGHttp<TGApp.BBS.Forum.PostForumResp>(`${bapBu}getHotForumPostList`, {
|
||||
method: "GET",
|
||||
query: params,
|
||||
headers: { cookie: "" },
|
||||
})
|
||||
).data;
|
||||
let header: Record<string, string> = { cookie: "" };
|
||||
if (cookie) header = getRequestHeader(cookie, "GET", params);
|
||||
const resp = await TGHttps.get<TGApp.BBS.Forum.PostForumResp>(`${bapBu}getHotForumPostList`, {
|
||||
query: params,
|
||||
headers: header,
|
||||
});
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最近版块帖子列表
|
||||
* @since Beta v0.9.9
|
||||
* @since Beta v0.10.0
|
||||
* @param forumId - 版块 ID
|
||||
* @param gid - 社区 ID
|
||||
* @param type - 排序方式: 1-最新回复,2-最新发布
|
||||
@@ -88,17 +81,9 @@ async function getRecentForumPostList(
|
||||
type: TGApp.BBS.Post.ForumSortTypeEnum = bbsEnum.post.forumSortType.LATEST_REPLY,
|
||||
lastId?: string,
|
||||
pageSize: number = 20,
|
||||
cookie?: Record<string, string>,
|
||||
): Promise<TGApp.BBS.Forum.PostForumRes> {
|
||||
type ReqParams = {
|
||||
forum_id: number;
|
||||
gids: number;
|
||||
sort_type: TGApp.BBS.Post.ForumSortTypeEnum;
|
||||
is_good: boolean;
|
||||
page_size: number;
|
||||
last_id?: string;
|
||||
};
|
||||
const params: ReqParams = {
|
||||
cookie?: TGApp.App.Account.Cookie,
|
||||
): Promise<TGApp.BBS.Forum.PostForumResp> {
|
||||
const params: TGApp.BBS.Forum.PostForumParams = {
|
||||
forum_id: forumId,
|
||||
gids: gid,
|
||||
sort_type: type,
|
||||
@@ -108,18 +93,16 @@ async function getRecentForumPostList(
|
||||
if (lastId) params.last_id = lastId;
|
||||
let header: Record<string, string> = { cookie: "" };
|
||||
if (cookie) header = getRequestHeader(cookie, "GET", params);
|
||||
return (
|
||||
await TGHttp<TGApp.BBS.Forum.PostForumResp>(`${bapBu}getRecentForumPostList`, {
|
||||
method: "GET",
|
||||
query: params,
|
||||
headers: header,
|
||||
})
|
||||
).data;
|
||||
const resp = await TGHttps.get<TGApp.BBS.Forum.PostForumResp>(`${bapBu}getRecentForumPostList`, {
|
||||
query: params,
|
||||
headers: header,
|
||||
});
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取关注动态帖子
|
||||
* @since Beta v0.7.2
|
||||
* @since Beta v0.10.0
|
||||
* @param cookie - 用户 Cookie
|
||||
* @param offset - 偏移量
|
||||
* @returns 帖子
|
||||
@@ -127,42 +110,30 @@ async function getRecentForumPostList(
|
||||
async function getTimelineList(
|
||||
cookie: TGApp.App.Account.Cookie,
|
||||
offset?: number,
|
||||
): Promise<TGApp.BBS.Response.Base | TGApp.BBS.Post.FollowPostRes> {
|
||||
): Promise<TGApp.BBS.Post.FollowPostResp> {
|
||||
let param: Record<string, number> = { gids: 0, size: 20 };
|
||||
if (offset) param = { ...param, offset };
|
||||
const ck = { ltoken: cookie.ltoken, ltuid: cookie.ltuid };
|
||||
const header = getRequestHeader(ck, "GET", param, "X4", true);
|
||||
const resp = await TGHttp<TGApp.BBS.Response.Base | TGApp.BBS.Post.FollowPostResp>(
|
||||
`${bapBu}timeline/list`,
|
||||
{
|
||||
method: "GET",
|
||||
headers: header,
|
||||
query: param,
|
||||
},
|
||||
);
|
||||
if (resp.retcode !== 0) return <TGApp.BBS.Response.Base>resp;
|
||||
const resp = await TGHttps.get<TGApp.BBS.Post.FollowPostResp>(`${bapBu}timeline/list`, {
|
||||
headers: header,
|
||||
query: param,
|
||||
});
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取抽奖信息
|
||||
* @since Beta v0.7.1
|
||||
* @since Beta v0.10.0
|
||||
* @param lotteryId - 抽奖 ID
|
||||
* @returns 抽奖详情
|
||||
*/
|
||||
async function lotteryUserShow(
|
||||
lotteryId: string,
|
||||
): Promise<TGApp.BBS.Response.Base | TGApp.BBS.Lottery.FullData> {
|
||||
const resp = await TGHttp<TGApp.BBS.Response.Base | TGApp.BBS.Lottery.Resp>(
|
||||
`${bapBu}lottery/user/show`,
|
||||
{
|
||||
method: "GET",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
query: { id: lotteryId },
|
||||
},
|
||||
);
|
||||
if (resp.retcode !== 0) return <TGApp.BBS.Response.Base>resp;
|
||||
return resp.data.show_lottery;
|
||||
async function lotteryUserShow(lotteryId: string): Promise<TGApp.BBS.Lottery.Resp> {
|
||||
const resp = await TGHttps.get<TGApp.BBS.Lottery.Resp>(`${bapBu}lottery/user/show`, {
|
||||
headers: { "Content-Type": "application/json" },
|
||||
query: { id: lotteryId },
|
||||
});
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
const painterReq = {
|
||||
|
||||
22
src/types/BBS/Forum.d.ts
vendored
22
src/types/BBS/Forum.d.ts
vendored
@@ -15,6 +15,28 @@ declare namespace TGApp.BBS.Forum {
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取版块帖子列表请求参数
|
||||
* @since Beta v0.10.0
|
||||
*/
|
||||
type PostForumParams = {
|
||||
/** 版块ID */
|
||||
forum_id: number;
|
||||
/** 分区ID */
|
||||
gids: number;
|
||||
/**
|
||||
* 排序类型
|
||||
* @remarks 仅用于获取最近帖子
|
||||
*/
|
||||
sort_type?: TGApp.BBS.Post.ForumSortTypeEnum;
|
||||
/** 页面尺寸 */
|
||||
page_size: number;
|
||||
/** 是否精华 */
|
||||
is_good: boolean;
|
||||
/** 偏移ID */
|
||||
last_id?: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取版块帖子列表返回
|
||||
* @since Beta v0.7.1
|
||||
|
||||
@@ -19,10 +19,7 @@ async function getLrv(): Promise<string> {
|
||||
const lrResp = await TGHttps.get<TGApp.Plugins.Github.LastestReleaseResp>(LR_API);
|
||||
return lrResp.data.tag_name.replace("v", "");
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.warn(`获取远程仓库版本异常:${errMsg}`);
|
||||
await TGLogger.Error(`[Github][getLrv] 获取远程仓库版本异常 ${LR_API}`);
|
||||
await TGLogger.Error(`[Github][getLrv] ${e}`);
|
||||
|
||||
@@ -137,6 +137,21 @@ async function request<T>(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否为 HTTP 错误
|
||||
* @since Beta v0.10.0
|
||||
* @param error - 错误对象
|
||||
* @returns 是否为 HTTP 错误
|
||||
*/
|
||||
function isHttpErr(error: unknown): error is TGApp.App.Response.HttpErr {
|
||||
return (
|
||||
typeof error === "object" &&
|
||||
error !== null &&
|
||||
"message" in error &&
|
||||
typeof error.message === "string"
|
||||
);
|
||||
}
|
||||
|
||||
const TGHttps = {
|
||||
/**
|
||||
* GET 请求
|
||||
@@ -184,7 +199,7 @@ const TGHttps = {
|
||||
return await rawResponse.arrayBuffer();
|
||||
} catch (error) {
|
||||
let httpError: TGApp.App.Response.HttpErr;
|
||||
if (this.isHttpErr(error)) {
|
||||
if (isHttpErr(error)) {
|
||||
httpError = error;
|
||||
} else if (error instanceof Error) {
|
||||
httpError = createHttpError(error.message, { cause: error });
|
||||
@@ -210,18 +225,17 @@ const TGHttps = {
|
||||
): Promise<TGApp.App.Response.Resp<T>> => request<T>(method, url, config),
|
||||
|
||||
/**
|
||||
* 判断是否为 HTTP 错误
|
||||
* 获取 ErrMsg
|
||||
* @since Beta v0.10.0
|
||||
* @param error - 错误对象
|
||||
* @returns 是否为 HTTP 错误
|
||||
* @returns 错误信息
|
||||
*/
|
||||
isHttpErr: (error: unknown): error is TGApp.App.Response.HttpErr => {
|
||||
return (
|
||||
typeof error === "object" &&
|
||||
error !== null &&
|
||||
"message" in error &&
|
||||
typeof error.message === "string"
|
||||
);
|
||||
getErrMsg(error: unknown): string {
|
||||
let res = String(error);
|
||||
if (isHttpErr(error)) {
|
||||
res = error.status ? `[${error.status}] ${error.statusText}` : error.message;
|
||||
}
|
||||
return res;
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* 日志工具
|
||||
* @since Beta v0.7.0
|
||||
* @since Beta v0.10.0
|
||||
*/
|
||||
|
||||
import { event } from "@tauri-apps/api";
|
||||
@@ -76,15 +76,18 @@ class Logger {
|
||||
|
||||
/**
|
||||
* 输出日志-脚本
|
||||
* @since Beta v0.7.0
|
||||
* @since Beta v0.10.0
|
||||
* @param message - 日志信息
|
||||
* @param type - 日志类型
|
||||
* @returns 无返回值
|
||||
*/
|
||||
async Script(message: string): Promise<void> {
|
||||
async Script(message: string, type: string = "info"): Promise<void> {
|
||||
const timeNow = timestampToDate(new Date().getTime());
|
||||
const msg = `[${timeNow}]${message}`;
|
||||
const msg = `[${type.toUpperCase()}][${timeNow}]${message}`;
|
||||
await event.emitTo("TeyvatGuide", "userScriptLog", msg);
|
||||
await info(message);
|
||||
if (type === "info") await info(message);
|
||||
if (type === "warn") await warn(message);
|
||||
if (type === "error") await error(message);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -60,10 +60,7 @@ export async function saveImgFile(url: string, fn: string, fmt?: string): Promis
|
||||
try {
|
||||
buffer = await TGHttps.buffer(url);
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取图像Buffer失败:${errMsg}`);
|
||||
await TGLogger.Error(`[TGShare][saveImgFile] 获取图像Buffer失败:${url}`);
|
||||
await TGLogger.Error(`${e}`);
|
||||
@@ -85,10 +82,7 @@ export async function saveImgBlob(url: string): Promise<string> {
|
||||
try {
|
||||
buffer = await TGHttps.buffer(url);
|
||||
} catch (e) {
|
||||
let errMsg = String(e);
|
||||
if (TGHttps.isHttpErr(e)) {
|
||||
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
|
||||
}
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await TGLogger.Error(`[TGShare][saveImgBlob] 获取图像Buffer失败: ${url}`);
|
||||
await TGLogger.Error(`[TGShare][saveImgBlob] ${errMsg}`);
|
||||
return url;
|
||||
|
||||
Reference in New Issue
Block a user