mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-12 09:18:14 +08:00
🎨 fix(db): 调整结构,将名片数据也写到数据库里
This commit is contained in:
@@ -37,7 +37,7 @@ export const AppDataList = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "nameCards.json",
|
name: "nameCards.json",
|
||||||
data: nameCards as Record<number, BTMuli.Genshin.NameCard[]>,
|
data: nameCards as BTMuli.Genshin.NameCard[],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "weapon.json",
|
name: "weapon.json",
|
||||||
@@ -46,11 +46,11 @@ export const AppDataList = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
export const AppData = {
|
export const AppData = {
|
||||||
achievements: achievements as Record<number, BTMuli.Genshin.Achievement>,
|
achievements: achievements as BTMuli.Genshin.Achievement[],
|
||||||
achievementSeries: achievementSeries as Record<number, BTMuli.Genshin.AchievementSeries>,
|
achievementSeries: achievementSeries as BTMuli.Genshin.AchievementSeries[],
|
||||||
calendar: calendar as Record<number, BTMuli.Genshin.Calendar.Data>,
|
calendar: calendar as Record<number, BTMuli.Genshin.Calendar.Data>,
|
||||||
character: character as BTMuli.Genshin.Wiki.Character.BriefInfo[],
|
character: character as BTMuli.Genshin.Wiki.Character.BriefInfo[],
|
||||||
GCG: GCG as BTMuli.Genshin.Wiki.GCG.BriefInfo[],
|
GCG: GCG as BTMuli.Genshin.Wiki.GCG.BriefInfo[],
|
||||||
nameCards: nameCards as Record<number, BTMuli.Genshin.NameCard[]>,
|
nameCards: nameCards as BTMuli.Genshin.NameCard[],
|
||||||
weapon: weapon as BTMuli.Genshin.Wiki.Weapon.BriefInfo[],
|
weapon: weapon as BTMuli.Genshin.Wiki.Weapon.BriefInfo[],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
{
|
[
|
||||||
"0": [
|
|
||||||
{
|
{
|
||||||
"name": "稻妻·雷电之纹",
|
"name": "稻妻·雷电之纹",
|
||||||
"description": "名片纹饰。 大御所将军的纹样,亦即麾下军势之旗印,「雷之三重巴」。",
|
"description": "名片纹饰。 大御所将军的纹样,亦即麾下军势之旗印,「雷之三重巴」。",
|
||||||
@@ -125,9 +124,7 @@
|
|||||||
"profile": "/source/nameCard/profile/原神·印象.webp",
|
"profile": "/source/nameCard/profile/原神·印象.webp",
|
||||||
"type": 0,
|
"type": 0,
|
||||||
"source": "初次登录游戏获取。 "
|
"source": "初次登录游戏获取。 "
|
||||||
}
|
},
|
||||||
],
|
|
||||||
"1": [
|
|
||||||
{
|
{
|
||||||
"name": "成就·遍历",
|
"name": "成就·遍历",
|
||||||
"description": "名片纹饰。 旅人将遍历的一万个故事,都将成为旅人灵魂的一部分。",
|
"description": "名片纹饰。 旅人将遍历的一万个故事,都将成为旅人灵魂的一部分。",
|
||||||
@@ -478,9 +475,7 @@
|
|||||||
"profile": "/source/nameCard/profile/须弥·瑶林.webp",
|
"profile": "/source/nameCard/profile/须弥·瑶林.webp",
|
||||||
"type": 1,
|
"type": 1,
|
||||||
"source": "达成「须弥·玄识深藏的雨林」下所有成就时获取。 "
|
"source": "达成「须弥·玄识深藏的雨林」下所有成就时获取。 "
|
||||||
}
|
},
|
||||||
],
|
|
||||||
"2": [
|
|
||||||
{
|
{
|
||||||
"name": "阿贝多·阳花",
|
"name": "阿贝多·阳花",
|
||||||
"description": "名片纹饰。 请让我来当这项奇迹的见证者吧。",
|
"description": "名片纹饰。 请让我来当这项奇迹的见证者吧。",
|
||||||
@@ -1074,9 +1069,7 @@
|
|||||||
"profile": "/source/nameCard/profile/重云·灵刃.webp",
|
"profile": "/source/nameCard/profile/重云·灵刃.webp",
|
||||||
"type": 2,
|
"type": 2,
|
||||||
"source": "重云的好感等级达到10级时获取。 "
|
"source": "重云的好感等级达到10级时获取。 "
|
||||||
}
|
},
|
||||||
],
|
|
||||||
"3": [
|
|
||||||
{
|
{
|
||||||
"name": "纪行·白垩",
|
"name": "纪行·白垩",
|
||||||
"description": "名片纹饰。 踏足雪山,注意保暖。",
|
"description": "名片纹饰。 踏足雪山,注意保暖。",
|
||||||
@@ -1283,9 +1276,7 @@
|
|||||||
"profile": "/source/nameCard/profile/纪行·逐月.webp",
|
"profile": "/source/nameCard/profile/纪行·逐月.webp",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"source": "纪行系统奖励获取。 "
|
"source": "纪行系统奖励获取。 "
|
||||||
}
|
},
|
||||||
],
|
|
||||||
"4": [
|
|
||||||
{
|
{
|
||||||
"name": "庆典·灯昼",
|
"name": "庆典·灯昼",
|
||||||
"description": "名片纹饰。 年年今日,灯明如昼。愿火不灭,愿人依旧。",
|
"description": "名片纹饰。 年年今日,灯明如昼。愿火不灭,愿人依旧。",
|
||||||
@@ -1383,7 +1374,7 @@
|
|||||||
"bg": "/source/nameCard/bg/庆典·倾耳.webp",
|
"bg": "/source/nameCard/bg/庆典·倾耳.webp",
|
||||||
"profile": "/source/nameCard/profile/庆典·倾耳.webp",
|
"profile": "/source/nameCard/profile/庆典·倾耳.webp",
|
||||||
"type": 4,
|
"type": 4,
|
||||||
"source": "「万籁协奏」礼包获得"
|
"source": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "庆典·盛宴",
|
"name": "庆典·盛宴",
|
||||||
@@ -1422,4 +1413,3 @@
|
|||||||
"source": "「百人一揆」活动获取。 "
|
"source": "「百人一揆」活动获取。 "
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
|
||||||
|
|||||||
@@ -110,7 +110,6 @@ import { dialog, fs } from "@tauri-apps/api";
|
|||||||
// Store
|
// Store
|
||||||
import { useAchievementsStore } from "../store/modules/achievements";
|
import { useAchievementsStore } from "../store/modules/achievements";
|
||||||
// Utils
|
// Utils
|
||||||
import { TGAppData } from "../data";
|
|
||||||
import { createTGWindow } from "../utils/TGWindow";
|
import { createTGWindow } from "../utils/TGWindow";
|
||||||
import { getUiafHeader, readUiafData, verifyUiafData } from "../utils/UIAF";
|
import { getUiafHeader, readUiafData, verifyUiafData } from "../utils/UIAF";
|
||||||
import TGSqlite from "../utils/TGSqlite";
|
import TGSqlite from "../utils/TGSqlite";
|
||||||
@@ -124,8 +123,7 @@ const loadingTitle = ref("正在加载数据" as string);
|
|||||||
|
|
||||||
// data
|
// data
|
||||||
const title = ref(achievementsStore.title as string);
|
const title = ref(achievementsStore.title as string);
|
||||||
const CardsInfo = ref([] as BTMuli.Genshin.NameCard[]);
|
const getCardInfo = ref({} as BTMuli.SQLite.NameCard);
|
||||||
const getCardInfo = ref({} as BTMuli.Genshin.NameCard);
|
|
||||||
// series
|
// series
|
||||||
const seriesList = ref([] as BTMuli.SQLite.AchievementSeries[]);
|
const seriesList = ref([] as BTMuli.SQLite.AchievementSeries[]);
|
||||||
const selectedIndex = ref(-1 as number);
|
const selectedIndex = ref(-1 as number);
|
||||||
@@ -147,18 +145,9 @@ async function loadData () {
|
|||||||
const { total, fin } = await TGSqlite.getAchievementsOverview();
|
const { total, fin } = await TGSqlite.getAchievementsOverview();
|
||||||
achievementsStore.flushData(total, fin);
|
achievementsStore.flushData(total, fin);
|
||||||
loadingTitle.value = "正在获取成就系列数据";
|
loadingTitle.value = "正在获取成就系列数据";
|
||||||
CardsInfo.value = TGAppData.nameCards[1];
|
|
||||||
seriesList.value = await TGSqlite.getAchievementSeries();
|
seriesList.value = await TGSqlite.getAchievementSeries();
|
||||||
loadingTitle.value = "正在获取成就数据";
|
loadingTitle.value = "正在获取成就数据";
|
||||||
const getAchievements = await TGSqlite.getAchievements();
|
selectedAchievement.value = await TGSqlite.getAchievements();
|
||||||
getAchievements.sort((a, b) => {
|
|
||||||
if (a.isCompleted === b.isCompleted) {
|
|
||||||
return a.id - b.id;
|
|
||||||
} else {
|
|
||||||
return a.isCompleted ? 1 : -1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
selectedAchievement.value = getAchievements;
|
|
||||||
title.value = achievementsStore.title;
|
title.value = achievementsStore.title;
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}
|
}
|
||||||
@@ -174,16 +163,11 @@ async function selectSeries (index: number) {
|
|||||||
loadingTitle.value = "正在获取对应的成就数据";
|
loadingTitle.value = "正在获取对应的成就数据";
|
||||||
selectedIndex.value = index;
|
selectedIndex.value = index;
|
||||||
selectedSeries.value = seriesList.value[index].id;
|
selectedSeries.value = seriesList.value[index].id;
|
||||||
const getAchievements = await TGSqlite.getAchievements(selectedSeries.value);
|
selectedAchievement.value = await TGSqlite.getAchievements(selectedSeries.value);
|
||||||
loadingTitle.value = "正在查找对应的成就名片";
|
loadingTitle.value = "正在查找对应的成就名片";
|
||||||
let getCard: BTMuli.Genshin.NameCard;
|
|
||||||
if (selectedSeries.value !== 0 && selectedSeries.value !== 17) {
|
if (selectedSeries.value !== 0 && selectedSeries.value !== 17) {
|
||||||
getCard = CardsInfo.value.find((card) => card.name === seriesList.value[index].nameCard)!;
|
getCardInfo.value = await TGSqlite.getNameCard(selectedSeries.value);
|
||||||
} else {
|
|
||||||
getCard = {} as BTMuli.Genshin.NameCard;
|
|
||||||
}
|
}
|
||||||
selectedAchievement.value = getAchievements;
|
|
||||||
getCardInfo.value = getCard;
|
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}
|
}
|
||||||
// 打开图片
|
// 打开图片
|
||||||
@@ -202,18 +186,13 @@ async function searchCard () {
|
|||||||
}
|
}
|
||||||
loadingTitle.value = "正在搜索";
|
loadingTitle.value = "正在搜索";
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
const res = await TGSqlite.searchAchievements(search.value);
|
selectedAchievement.value = await TGSqlite.searchAchievements(search.value);
|
||||||
selectedIndex.value = -1;
|
selectedIndex.value = -1;
|
||||||
setTimeout(() => {
|
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}, 500);
|
if (selectedAchievement.value.length === 0) {
|
||||||
if (res.length === 0) {
|
|
||||||
snackbarColor.value = "#F5810A";
|
snackbarColor.value = "#F5810A";
|
||||||
snackbarText.value = "没有找到对应的成就";
|
snackbarText.value = "没有找到对应的成就";
|
||||||
snackbar.value = true;
|
snackbar.value = true;
|
||||||
selectedAchievement.value = await TGSqlite.getAchievements();
|
|
||||||
} else {
|
|
||||||
selectedAchievement.value = res;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 导入 UIAF 数据,进行数据合并、刷新
|
// 导入 UIAF 数据,进行数据合并、刷新
|
||||||
@@ -236,12 +215,9 @@ async function importJson () {
|
|||||||
}
|
}
|
||||||
loadingTitle.value = "正在解析数据";
|
loadingTitle.value = "正在解析数据";
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
const remoteData: TGPlugin.UIAF.BaseData = JSON.parse(remoteRaw);
|
|
||||||
loadingTitle.value = "正在合并成就数据";
|
loadingTitle.value = "正在合并成就数据";
|
||||||
await TGSqlite.mergeUIAF(remoteData.list);
|
await TGSqlite.mergeUIAF(JSON.parse(remoteRaw).list);
|
||||||
loadingTitle.value = "正在刷新数据";
|
loadingTitle.value = "正在刷新数据";
|
||||||
const overview = await TGSqlite.getAchievementsOverview();
|
|
||||||
achievementsStore.flushData(overview.total, overview.fin);
|
|
||||||
// 刷新数据
|
// 刷新数据
|
||||||
await loadData();
|
await loadData();
|
||||||
selectedIndex.value = -1;
|
selectedIndex.value = -1;
|
||||||
|
|||||||
31
src/types/NameCard.d.ts
vendored
31
src/types/NameCard.d.ts
vendored
@@ -2,7 +2,7 @@
|
|||||||
* @file core types TGNameCard.d.ts
|
* @file core types TGNameCard.d.ts
|
||||||
* @description 本应用的名片类型定义
|
* @description 本应用的名片类型定义
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.1.2
|
* @since Alpha v0.1.4
|
||||||
*/
|
*/
|
||||||
|
|
||||||
declare namespace BTMuli.Genshin {
|
declare namespace BTMuli.Genshin {
|
||||||
@@ -29,3 +29,32 @@ declare namespace BTMuli.Genshin {
|
|||||||
source: string
|
source: string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare namespace BTMuli.SQLite {
|
||||||
|
/**
|
||||||
|
* @description 数据库内的名片类型
|
||||||
|
* @since Alpha v0.1.4
|
||||||
|
* @interface NameCard
|
||||||
|
* @property {number} id - 名片 ID
|
||||||
|
* @property {string} name - 名片名称
|
||||||
|
* @property {string} description - 名片描述
|
||||||
|
* @property {string} icon - 名片图标路径
|
||||||
|
* @property {string} bg - 名片背景图路径
|
||||||
|
* @property {string} profile - 名片 Profile 图路径
|
||||||
|
* @property {number} type - 名片类型 (0: 其他,1: 成就,2:角色,3:纪行,4:活动)
|
||||||
|
* @property {string} source - 名片来源
|
||||||
|
* @property {string} updated - 名片更新时间
|
||||||
|
* @returns {NameCard}
|
||||||
|
*/
|
||||||
|
export interface NameCard {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
description: string
|
||||||
|
icon: string
|
||||||
|
bg: string
|
||||||
|
profile: string
|
||||||
|
type: number
|
||||||
|
source: string
|
||||||
|
updated: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,29 +9,6 @@ import { app } from "@tauri-apps/api";
|
|||||||
import { getBuildTime } from "./TGBuild";
|
import { getBuildTime } from "./TGBuild";
|
||||||
import { TGAppData } from "../data";
|
import { TGAppData } from "../data";
|
||||||
|
|
||||||
const TGSql = {
|
|
||||||
initTable: {
|
|
||||||
all: initSQLiteTable(),
|
|
||||||
app: initAppTable(),
|
|
||||||
achievement: initAchievementTable(),
|
|
||||||
achievementSeries: initAchievementSeriesTable(),
|
|
||||||
},
|
|
||||||
initData: {
|
|
||||||
all: initSQLiteData(),
|
|
||||||
app: initAppData(),
|
|
||||||
achievement: initAchievementData(),
|
|
||||||
achievementSeries: initAchievementSeriesData(),
|
|
||||||
},
|
|
||||||
insert: {
|
|
||||||
achievement: insertAchievementData,
|
|
||||||
achievementSeries: insertAchievementSeriesData,
|
|
||||||
UIAF: importUIAFData,
|
|
||||||
},
|
|
||||||
update: {
|
|
||||||
achievement: updateAchievementData,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 初始化应用数据表
|
* @description 初始化应用数据表
|
||||||
* @since Alpha v0.1.4
|
* @since Alpha v0.1.4
|
||||||
@@ -79,7 +56,7 @@ function initAchievementSeriesTable (): string[] {
|
|||||||
totalCount INTEGER DEFAULT 0,
|
totalCount INTEGER DEFAULT 0,
|
||||||
finCount INTEGER DEFAULT 0,
|
finCount INTEGER DEFAULT 0,
|
||||||
icon TEXT NOT NULL,
|
icon TEXT NOT NULL,
|
||||||
nameCard TEXT DEFAULT NULL,
|
nameCard TEXT NOT NULL,
|
||||||
updated TEXT DEFAULT NULL
|
updated TEXT DEFAULT NULL
|
||||||
);
|
);
|
||||||
`);
|
`);
|
||||||
@@ -133,16 +110,42 @@ function initAchievementTable (): string[] {
|
|||||||
`);
|
`);
|
||||||
return sqlRes;
|
return sqlRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 初始化名片数据表
|
||||||
|
* @since Alpha v0.1.4
|
||||||
|
* @returns {string[]} sql
|
||||||
|
*/
|
||||||
|
function initNameCardTable (): string[] {
|
||||||
|
const sqlRes = [];
|
||||||
|
// 创建名片数据表
|
||||||
|
sqlRes.push(`
|
||||||
|
CREATE TABLE IF NOT EXISTS NameCard
|
||||||
|
(
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
name TEXT DEFAULT NULL,
|
||||||
|
description TEXT DEFAULT NULL,
|
||||||
|
icon TEXT NOT NULL,
|
||||||
|
bg TEXT NOT NULL,
|
||||||
|
profile TEXT NOT NULL,
|
||||||
|
type INTEGER DEFAULT 0,
|
||||||
|
source TEXT DEFAULT NULL,
|
||||||
|
updated TEXT DEFAULT NULL
|
||||||
|
);
|
||||||
|
`);
|
||||||
|
return sqlRes;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @description 初始化数据库表
|
* @description 初始化数据库表
|
||||||
* @since Alpha v0.1.4
|
* @since Alpha v0.1.4
|
||||||
* @returns {string[]} sql
|
* @returns {string[]} sql
|
||||||
*/
|
*/
|
||||||
function initSQLiteTable (): string[] {
|
export function initSQLiteTable (): string[] {
|
||||||
const sqlRes = [];
|
const sqlRes = [];
|
||||||
sqlRes.push(...initAppTable());
|
sqlRes.push(...initAppTable());
|
||||||
sqlRes.push(...initAchievementSeriesTable());
|
sqlRes.push(...initAchievementSeriesTable());
|
||||||
sqlRes.push(...initAchievementTable());
|
sqlRes.push(...initAchievementTable());
|
||||||
|
sqlRes.push(...initNameCardTable());
|
||||||
return sqlRes;
|
return sqlRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,8 +180,11 @@ async function initAppData (): Promise<string[]> {
|
|||||||
function initAchievementSeriesData (): string[] {
|
function initAchievementSeriesData (): string[] {
|
||||||
const sqlRes: string[] = [];
|
const sqlRes: string[] = [];
|
||||||
const oriData = TGAppData.achievementSeries;
|
const oriData = TGAppData.achievementSeries;
|
||||||
Object.values(oriData).map((series) => {
|
oriData.map((data) => {
|
||||||
const sql = insertAchievementSeriesData(series);
|
const sql = `
|
||||||
|
INSERT INTO AchievementSeries (id, "order", name, version, icon, nameCard, updated)
|
||||||
|
VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}', '${data.icon}', '${data.card}', datetime('now', 'localtime'));
|
||||||
|
`;
|
||||||
return sqlRes.push(sql);
|
return sqlRes.push(sql);
|
||||||
});
|
});
|
||||||
return sqlRes;
|
return sqlRes;
|
||||||
@@ -192,8 +198,29 @@ function initAchievementSeriesData (): string[] {
|
|||||||
function initAchievementData (): string[] {
|
function initAchievementData (): string[] {
|
||||||
const sqlRes: string[] = [];
|
const sqlRes: string[] = [];
|
||||||
const oriData = TGAppData.achievements;
|
const oriData = TGAppData.achievements;
|
||||||
Object.values(oriData).map((achievement) => {
|
oriData.map((data) => {
|
||||||
const sql = insertAchievementData(achievement);
|
const sql = `
|
||||||
|
INSERT INTO Achievements (id, series, "order", name, description, reward, version, updated)
|
||||||
|
VALUES (${data.id}, ${data.series}, ${data.order}, '${data.name}', '${data.description}', ${data.reward}, '${data.version}', datetime('now', 'localtime'));
|
||||||
|
`;
|
||||||
|
return sqlRes.push(sql);
|
||||||
|
});
|
||||||
|
return sqlRes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 初始化名片数据
|
||||||
|
* @since Alpha v0.1.4
|
||||||
|
* @returns {string[]} sql
|
||||||
|
*/
|
||||||
|
function initNameCardData (): string[] {
|
||||||
|
const sqlRes: string[] = [];
|
||||||
|
const oriData = TGAppData.nameCards;
|
||||||
|
oriData.map((data) => {
|
||||||
|
const sql = `
|
||||||
|
INSERT INTO NameCard (name, description, icon, bg, profile, type, source, updated)
|
||||||
|
VALUES ('${data.name}', '${data.description}', '${data.icon}', '${data.bg}', '${data.profile}', ${data.type}, '${data.source}', datetime('now', 'localtime'));
|
||||||
|
`;
|
||||||
return sqlRes.push(sql);
|
return sqlRes.push(sql);
|
||||||
});
|
});
|
||||||
return sqlRes;
|
return sqlRes;
|
||||||
@@ -204,82 +231,22 @@ function initAchievementData (): string[] {
|
|||||||
* @since Alpha v0.1.4
|
* @since Alpha v0.1.4
|
||||||
* @returns {Promise<string[]>} sql
|
* @returns {Promise<string[]>} sql
|
||||||
*/
|
*/
|
||||||
async function initSQLiteData (): Promise<string[]> {
|
export async function initSQLiteData (): Promise<string[]> {
|
||||||
const sqlRes = [];
|
const sqlRes = [];
|
||||||
sqlRes.push(...initAchievementSeriesData());
|
sqlRes.push(...initAchievementSeriesData());
|
||||||
sqlRes.push(...initAchievementData());
|
sqlRes.push(...initAchievementData());
|
||||||
|
sqlRes.push(...initNameCardData());
|
||||||
sqlRes.push(...await initAppData());
|
sqlRes.push(...await initAppData());
|
||||||
return sqlRes;
|
return sqlRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 插入数据-成就系列
|
|
||||||
* @since Alpha v0.1.4
|
|
||||||
* @param {BTMuli.Genshin.AchievementSeries} data
|
|
||||||
* @returns {string} sql
|
|
||||||
*/
|
|
||||||
function insertAchievementSeriesData (data: BTMuli.Genshin.AchievementSeries): string {
|
|
||||||
let sql;
|
|
||||||
if (data.card) {
|
|
||||||
sql = `
|
|
||||||
INSERT INTO AchievementSeries (id, "order", name, version, icon, nameCard, updated)
|
|
||||||
VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}', '${data.icon}', '${data.card}', datetime('now', 'localtime'));
|
|
||||||
`;
|
|
||||||
} else {
|
|
||||||
sql = `
|
|
||||||
INSERT INTO AchievementSeries (id, "order", name, version, icon, updated)
|
|
||||||
VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}', '${data.icon}', datetime('now', 'localtime'));
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
return sql;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 插入数据-成就
|
|
||||||
* @since Alpha v0.1.4
|
|
||||||
* @param {BTMuli.Genshin.Achievement} data
|
|
||||||
* @returns {string} sql
|
|
||||||
*/
|
|
||||||
function insertAchievementData (data: BTMuli.Genshin.Achievement): string {
|
|
||||||
const sql = `
|
|
||||||
INSERT INTO Achievements (id, series, "order", name, description, reward, version, updated)
|
|
||||||
VALUES (${data.id}, ${data.series}, ${data.order}, '${data.name}', '${data.description}', ${data.reward}, '${data.version}', datetime('now', 'localtime'));
|
|
||||||
`;
|
|
||||||
return sql;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 更新数据-成就
|
|
||||||
* @since Alpha v0.1.4
|
|
||||||
* @param {BTMuli.Genshin.Achievement} data
|
|
||||||
* @returns {string} sql
|
|
||||||
*/
|
|
||||||
function updateAchievementData (data: BTMuli.Genshin.Achievement): string {
|
|
||||||
let sql;
|
|
||||||
const isCompleted = data.completed ? 1 : 0;
|
|
||||||
if (data.completed && data.completed_time) {
|
|
||||||
sql = `
|
|
||||||
UPDATE Achievements
|
|
||||||
SET completed = ${isCompleted}, completedTime = '${data.completed_time}', progress = ${data.progress}, updated = datetime('now', 'localtime')
|
|
||||||
WHERE id = ${data.id};
|
|
||||||
`;
|
|
||||||
} else {
|
|
||||||
sql = `
|
|
||||||
UPDATE Achievements
|
|
||||||
SET completed = ${isCompleted}, progress = ${data.progress}, updated = datetime('now', 'localtime')
|
|
||||||
WHERE id = ${data.id};
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
return sql;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 导入UIAF数据
|
* @description 导入UIAF数据
|
||||||
* @since Alpha v0.1.4
|
* @since Alpha v0.1.4
|
||||||
* @param {TGPlugin.UIAF.Achievement[]} data
|
* @param {TGPlugin.UIAF.Achievement[]} data
|
||||||
* @returns {string[]} sql
|
* @returns {string[]} sql
|
||||||
*/
|
*/
|
||||||
function importUIAFData (data: TGPlugin.UIAF.Achievement[]): string[] {
|
export function importUIAFData (data: TGPlugin.UIAF.Achievement[]): string[] {
|
||||||
const sqlRes: string[] = [];
|
const sqlRes: string[] = [];
|
||||||
data.map((achievement) => {
|
data.map((achievement) => {
|
||||||
let sql;
|
let sql;
|
||||||
@@ -303,5 +270,3 @@ function importUIAFData (data: TGPlugin.UIAF.Achievement[]): string[] {
|
|||||||
});
|
});
|
||||||
return sqlRes;
|
return sqlRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default TGSql;
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import Database from "tauri-plugin-sql-api";
|
import Database from "tauri-plugin-sql-api";
|
||||||
import TGSql from "./TGSql";
|
import { importUIAFData, initSQLiteData, initSQLiteTable } from "./TGSql";
|
||||||
import { getUiafStatus } from "./UIAF";
|
import { getUiafStatus } from "./UIAF";
|
||||||
|
|
||||||
const dbLink = await Database.load("sqlite:tauri-genshin.db");
|
const dbLink = await Database.load("sqlite:tauri-genshin.db");
|
||||||
@@ -39,6 +39,7 @@ class TGSqlite {
|
|||||||
"AppData",
|
"AppData",
|
||||||
"Achievements",
|
"Achievements",
|
||||||
"AchievementSeries",
|
"AchievementSeries",
|
||||||
|
"NameCard",
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -60,11 +61,11 @@ class TGSqlite {
|
|||||||
* @memberof TGSqlite
|
* @memberof TGSqlite
|
||||||
*/
|
*/
|
||||||
public async init (): Promise<void> {
|
public async init (): Promise<void> {
|
||||||
const sqlT = TGSql.initTable.all;
|
const sqlT = initSQLiteTable();
|
||||||
for (const item of sqlT) {
|
for (const item of sqlT) {
|
||||||
await this.db.execute(item);
|
await this.db.execute(item);
|
||||||
}
|
}
|
||||||
const sqlD = await TGSql.initData.all;
|
const sqlD = await initSQLiteData();
|
||||||
for (const item of sqlD) {
|
for (const item of sqlD) {
|
||||||
await this.db.execute(item);
|
await this.db.execute(item);
|
||||||
}
|
}
|
||||||
@@ -127,6 +128,19 @@ class TGSqlite {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取成就系列对应的名片
|
||||||
|
* @memberof TGSqlite
|
||||||
|
* @since Alpha v0.1.4
|
||||||
|
* @param {number} seriesId 系列 ID
|
||||||
|
* @returns {Promise<BTMuli.SQLite.NameCard>}
|
||||||
|
*/
|
||||||
|
public async getNameCard (seriesId: number): Promise<BTMuli.SQLite.NameCard> {
|
||||||
|
const sql = `SELECT * FROM NameCard WHERE name=(SELECT nameCard FROM AchievementSeries WHERE id=${seriesId});`;
|
||||||
|
const res: BTMuli.SQLite.NameCard[] = await this.db.select(sql);
|
||||||
|
return res[0];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 获取成就列表
|
* @description 获取成就列表
|
||||||
* @memberof TGSqlite
|
* @memberof TGSqlite
|
||||||
@@ -184,7 +198,7 @@ class TGSqlite {
|
|||||||
* @returns {Promise<void>}
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
public async mergeUIAF (achievements: TGPlugin.UIAF.Achievement[]): Promise<void> {
|
public async mergeUIAF (achievements: TGPlugin.UIAF.Achievement[]): Promise<void> {
|
||||||
const sql = TGSql.insert.UIAF(achievements);
|
const sql = importUIAFData(achievements);
|
||||||
for (const item of sql) {
|
for (const item of sql) {
|
||||||
await this.db.execute(item);
|
await this.db.execute(item);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user