mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-14 09:38:13 +08:00
📦 add(db): 添加数据库信息
This commit is contained in:
@@ -61,6 +61,18 @@
|
|||||||
<v-list-item-subtitle>{{ osVersion }}</v-list-item-subtitle>
|
<v-list-item-subtitle>{{ osVersion }}</v-list-item-subtitle>
|
||||||
</template>
|
</template>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
|
<v-list-item title="数据库更新时间" prepend-icon="mdi-database">
|
||||||
|
<template #append>
|
||||||
|
<v-list-item-subtitle>{{ dbInfo.find(item => item.key === "dataUpdated")?.value }}</v-list-item-subtitle>
|
||||||
|
</template>
|
||||||
|
<v-list-item-subtitle>更新于 {{ dbInfo.find(item => item.key === "dataUpdated")?.updated }}</v-list-item-subtitle>
|
||||||
|
</v-list-item>
|
||||||
|
<v-list-item title="数据库版本" prepend-icon="mdi-database">
|
||||||
|
<template #append>
|
||||||
|
<v-list-item-subtitle>{{ dbInfo.find(item => item.key === "appVersion")?.value }}</v-list-item-subtitle>
|
||||||
|
</template>
|
||||||
|
<v-list-item-subtitle>更新于 {{ dbInfo.find(item => item.key === "appVersion")?.updated }}</v-list-item-subtitle>
|
||||||
|
</v-list-item>
|
||||||
<v-list-subheader inset class="config-header">
|
<v-list-subheader inset class="config-header">
|
||||||
设置
|
设置
|
||||||
</v-list-subheader>
|
</v-list-subheader>
|
||||||
@@ -117,7 +129,6 @@
|
|||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item title="删除 IndexedDB" prepend-icon="mdi-delete" @click="tryConfirm('delDB')" />
|
<v-list-item title="删除 IndexedDB" prepend-icon="mdi-delete" @click="tryConfirm('delDB')" />
|
||||||
<v-list-item title="检测 SQLite 数据库完整性" prepend-icon="mdi-database-check" @click="tryConfirm('checkDB')" />
|
<v-list-item title="检测 SQLite 数据库完整性" prepend-icon="mdi-database-check" @click="tryConfirm('checkDB')" />
|
||||||
<v-list-item title="重置 SQLite 数据库" prepend-icon="mdi-database-remove" @click="tryConfirm('resetDB')" />
|
|
||||||
<v-list-subheader inset class="config-header">
|
<v-list-subheader inset class="config-header">
|
||||||
路径
|
路径
|
||||||
</v-list-subheader>
|
</v-list-subheader>
|
||||||
@@ -174,6 +185,7 @@ const buildTime = ref(getBuildTime());
|
|||||||
// About OS
|
// About OS
|
||||||
const osPlatform = ref("" as string);
|
const osPlatform = ref("" as string);
|
||||||
const osVersion = ref("" as string);
|
const osVersion = ref("" as string);
|
||||||
|
const dbInfo = ref([] as { key: string, value: string, updated: string }[]);
|
||||||
|
|
||||||
// loading
|
// loading
|
||||||
const loading = ref(true as boolean);
|
const loading = ref(true as boolean);
|
||||||
@@ -199,9 +211,8 @@ onMounted(async () => {
|
|||||||
versionTauri.value = await app.getTauriVersion();
|
versionTauri.value = await app.getTauriVersion();
|
||||||
osPlatform.value = `${await os.platform()}`;
|
osPlatform.value = `${await os.platform()}`;
|
||||||
osVersion.value = await os.version();
|
osVersion.value = await os.version();
|
||||||
setTimeout(() => {
|
dbInfo.value = await TGSqlite.getAppData();
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}, 1000);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// 打开外部链接
|
// 打开外部链接
|
||||||
@@ -257,11 +268,6 @@ function tryConfirm (oper: string) {
|
|||||||
confirmOper.value = "checkDB";
|
confirmOper.value = "checkDB";
|
||||||
confirmShow.value = true;
|
confirmShow.value = true;
|
||||||
break;
|
break;
|
||||||
case "resetDB":
|
|
||||||
confirmText.value = "确认重置 SQlite 数据库吗?";
|
|
||||||
confirmOper.value = "resetDB";
|
|
||||||
confirmShow.value = true;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,9 +302,6 @@ async function doConfirm (oper: string) {
|
|||||||
case "checkDB":
|
case "checkDB":
|
||||||
await checkDB();
|
await checkDB();
|
||||||
break;
|
break;
|
||||||
case "resetDB":
|
|
||||||
await resetDB();
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -430,6 +433,7 @@ async function checkDB () {
|
|||||||
confirmShow.value = true;
|
confirmShow.value = true;
|
||||||
} else {
|
} else {
|
||||||
loadingTitle.value = "正在更新数据库表单...";
|
loadingTitle.value = "正在更新数据库表单...";
|
||||||
|
loading.value = true;
|
||||||
await TGSqlite.update();
|
await TGSqlite.update();
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
snackbarText.value = "数据库已是最新!";
|
snackbarText.value = "数据库已是最新!";
|
||||||
@@ -444,7 +448,7 @@ async function resetDB () {
|
|||||||
loading.value = true;
|
loading.value = true;
|
||||||
await TGSqlite.reset();
|
await TGSqlite.reset();
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
snackbarText.value = "数据库已重置!请载入备份数据。";
|
snackbarText.value = "数据库已重置!请进行再次检查。";
|
||||||
snackbarColor.value = "success";
|
snackbarColor.value = "success";
|
||||||
snackbar.value = true;
|
snackbar.value = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,16 +25,6 @@ function initAppTable (): string[] {
|
|||||||
updated TEXT DEFAULT NULL
|
updated TEXT DEFAULT NULL
|
||||||
);
|
);
|
||||||
`);
|
`);
|
||||||
// 创建触发器
|
|
||||||
sqlRes.push(`
|
|
||||||
CREATE TRIGGER IF NOT EXISTS updateAppData
|
|
||||||
AFTER UPDATE OF value ON AppData
|
|
||||||
FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
UPDATE BBSPost SET isRead = 1, updated = datetime('now', 'localtime')
|
|
||||||
WHERE created < NEW.value OR modified < NEW.value AND NEW.key = 'bbsPost';
|
|
||||||
END;
|
|
||||||
`);
|
|
||||||
return sqlRes;
|
return sqlRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,9 +174,8 @@ function initAchievementSeriesData (): string[] {
|
|||||||
const oriData = TGAppData.achievementSeries;
|
const oriData = TGAppData.achievementSeries;
|
||||||
oriData.map((data) => {
|
oriData.map((data) => {
|
||||||
const sql = `
|
const sql = `
|
||||||
INSERT INTO AchievementSeries (id, "order", name, version, icon, nameCard, updated)
|
INSERT OR IGNORE 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'))
|
VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}', '${data.icon}', '${data.card}', datetime('now', 'localtime'));
|
||||||
ON CONFLICT(id) DO NOTHING;
|
|
||||||
`;
|
`;
|
||||||
return sqlRes.push(sql);
|
return sqlRes.push(sql);
|
||||||
});
|
});
|
||||||
@@ -203,9 +192,8 @@ function initAchievementData (): string[] {
|
|||||||
const oriData = TGAppData.achievements;
|
const oriData = TGAppData.achievements;
|
||||||
oriData.map((data) => {
|
oriData.map((data) => {
|
||||||
const sql = `
|
const sql = `
|
||||||
INSERT INTO Achievements (id, series, "order", name, description, reward, version, updated)
|
INSERT OR IGNORE 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'))
|
VALUES (${data.id}, ${data.series}, ${data.order}, '${data.name}', '${data.description}', ${data.reward}, '${data.version}', datetime('now', 'localtime'));
|
||||||
ON CONFLICT(id) DO NOTHING;
|
|
||||||
`;
|
`;
|
||||||
return sqlRes.push(sql);
|
return sqlRes.push(sql);
|
||||||
});
|
});
|
||||||
@@ -222,9 +210,8 @@ function initNameCardData (): string[] {
|
|||||||
const oriData = TGAppData.nameCards;
|
const oriData = TGAppData.nameCards;
|
||||||
oriData.map((data) => {
|
oriData.map((data) => {
|
||||||
const sql = `
|
const sql = `
|
||||||
INSERT INTO NameCard (name, description, icon, bg, profile, type, source, updated)
|
INSERT OR IGNORE 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'))
|
VALUES ('${data.name}', '${data.description}', '${data.icon}', '${data.bg}', '${data.profile}', ${data.type}, '${data.source}', datetime('now', 'localtime'));
|
||||||
ON CONFLICT(id) DO NOTHING;
|
|
||||||
`;
|
`;
|
||||||
return sqlRes.push(sql);
|
return sqlRes.push(sql);
|
||||||
});
|
});
|
||||||
@@ -258,7 +245,8 @@ export function importUIAFData (data: TGPlugin.UIAF.Achievement[]): string[] {
|
|||||||
// 获取完成状态
|
// 获取完成状态
|
||||||
const isCompleted = achievement.status === 2 || achievement.status === 3;
|
const isCompleted = achievement.status === 2 || achievement.status === 3;
|
||||||
if (isCompleted) {
|
if (isCompleted) {
|
||||||
const completedTime = new Date(achievement.timestamp * 1000).toISOString().replace("T", " ").replace("Z", "");
|
const completedTime = new Date(achievement.timestamp * 1000).toISOString().replace("T", " ").slice(0, 19);
|
||||||
|
console.log(completedTime);
|
||||||
sql = `
|
sql = `
|
||||||
UPDATE Achievements
|
UPDATE Achievements
|
||||||
SET isCompleted = 1, completedTime = '${completedTime}', progress = ${achievement.current}, updated = datetime('now', 'localtime')
|
SET isCompleted = 1, completedTime = '${completedTime}', progress = ${achievement.current}, updated = datetime('now', 'localtime')
|
||||||
|
|||||||
@@ -53,6 +53,20 @@ class TGSqlite {
|
|||||||
await db.close();
|
await db.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取数据库信息
|
||||||
|
* @memberof TGSqlite
|
||||||
|
* @since Alpha v0.1.4
|
||||||
|
* @returns {Promise<{ key: string, value: string, updated: string }[]>}
|
||||||
|
*/
|
||||||
|
public async getAppData (): Promise<Array<{ key: string, value: string, updated: string }>> {
|
||||||
|
const db = await Database.load(this.dbPath);
|
||||||
|
const sql = "SELECT * FROM AppData;";
|
||||||
|
const res: Array<{ key: string, value: string, updated: string }> = await db.select(sql);
|
||||||
|
await db.close();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 已有数据表跟触发器不变的情况下,更新数据库数据
|
* @description 已有数据表跟触发器不变的情况下,更新数据库数据
|
||||||
* @memberof TGSqlite
|
* @memberof TGSqlite
|
||||||
@@ -80,8 +94,9 @@ class TGSqlite {
|
|||||||
// 检测数据表是否都存在
|
// 检测数据表是否都存在
|
||||||
const sqlT = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;";
|
const sqlT = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;";
|
||||||
const res: Array<{ name: string }> = await db.select(sqlT);
|
const res: Array<{ name: string }> = await db.select(sqlT);
|
||||||
if (res.length === this.tables.length) {
|
// 考虑到 sqlite_sequence 表,所以需要 +1
|
||||||
if (res.every((item) => this.tables.includes(item.name))) {
|
if (res.length === this.tables.length + 1) {
|
||||||
|
if (this.tables.every((item) => res.map((i) => i.name).includes(item))) {
|
||||||
isVertified = true;
|
isVertified = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user