Commit a2e52969 authored by Chunchi Che's avatar Chunchi Che

update sqlite middleware to adjust super pre release

parent 5d9e7f31
Pipeline #25496 passed with stages
in 16 minutes and 15 seconds
...@@ -19,7 +19,8 @@ ...@@ -19,7 +19,8 @@
], ],
"assetsPath":"/neos-assets", "assetsPath":"/neos-assets",
"cardImgUrl":"https://cdn02.moecube.com:444/images/ygopro-images-zh-CN", "cardImgUrl":"https://cdn02.moecube.com:444/images/ygopro-images-zh-CN",
"cardsDbUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/cards.cdb", "releaseDbUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/cards.cdb",
"preReleaseDbUrl":"https://cdn02.moecube.com:444/ygopro-super-pre/data/test-release.cdb",
"stringsUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/strings.conf", "stringsUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/strings.conf",
"lflistUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/lflist.conf", "lflistUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/lflist.conf",
"replayUrl":"replay.neos.moe", "replayUrl":"replay.neos.moe",
......
...@@ -10,11 +10,17 @@ ...@@ -10,11 +10,17 @@
"name":"mycard-athletic", "name":"mycard-athletic",
"ip":"tiramisu.moecube.com", "ip":"tiramisu.moecube.com",
"port":"8912" "port":"8912"
},
{
"name":"pre-release",
"ip":"koishi.momobako.com",
"port":"889"
} }
], ],
"assetsPath":"/neos-assets", "assetsPath":"/neos-assets",
"cardImgUrl":"https://cdn02.moecube.com:444/images/ygopro-images-zh-CN", "cardImgUrl":"https://cdn02.moecube.com:444/images/ygopro-images-zh-CN",
"cardsDbUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/cards.cdb", "releaseDbUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/cards.cdb",
"preReleaseDbUrl":"https://cdn02.moecube.com:444/ygopro-super-pre/data/test-release.cdb",
"stringsUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/strings.conf", "stringsUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/strings.conf",
"lflistUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/lflist.conf", "lflistUrl":"https://cdn02.moecube.com:444/ygopro-database/zh-CN/lflist.conf",
"replayUrl":"replay.neos.moe", "replayUrl":"replay.neos.moe",
......
...@@ -11,6 +11,7 @@ import { CardData, CardMeta, CardText } from "@/api/cards"; ...@@ -11,6 +11,7 @@ import { CardData, CardMeta, CardText } from "@/api/cards";
import { useConfig } from "@/config"; import { useConfig } from "@/config";
import { pfetch } from "@/infra"; import { pfetch } from "@/infra";
import SuperReleaseData from "../../../super-pre-release.json";
import { FtsParams, invokeFts } from "./fts"; import { FtsParams, invokeFts } from "./fts";
const NeosConfig = useConfig(); const NeosConfig = useConfig();
...@@ -28,7 +29,8 @@ export interface sqliteAction<T extends sqliteCmd> { ...@@ -28,7 +29,8 @@ export interface sqliteAction<T extends sqliteCmd> {
cmd: T; cmd: T;
// 初始化DB需要业务方传入的数据 // 初始化DB需要业务方传入的数据
initInfo?: { initInfo?: {
dbUrl: string; releaseDbUrl: string;
preReleaseDbUrl: string;
progressCallback?: (progress: number) => void; // 用于获取读取进度 progressCallback?: (progress: number) => void; // 用于获取读取进度
}; };
payload?: { payload?: {
...@@ -42,7 +44,6 @@ export interface sqliteResult { ...@@ -42,7 +44,6 @@ export interface sqliteResult {
ftsResult?: CardMeta[]; ftsResult?: CardMeta[];
} }
let YGODB: Database | null = null;
const sqlPromise = initSqlJs({ const sqlPromise = initSqlJs({
locateFile: (file) => `${NeosConfig.assetsPath}/${file}`, locateFile: (file) => `${NeosConfig.assetsPath}/${file}`,
}); });
...@@ -53,17 +54,37 @@ export default function <T extends sqliteCmd>( ...@@ -53,17 +54,37 @@ export default function <T extends sqliteCmd>(
return helper(action) as any; return helper(action) as any;
} }
// TODO: may defining a class be better?
interface YgoDbs {
release: Database | null;
preRelease: Database | null;
}
let YGODBS: YgoDbs = { release: null, preRelease: null };
// FIXME: 应该有个返回值,告诉业务方本次请求的结果,比如初始化DB失败 // FIXME: 应该有个返回值,告诉业务方本次请求的结果,比如初始化DB失败
function helper<T extends sqliteCmd>(action: sqliteAction<T>) { function helper<T extends sqliteCmd>(action: sqliteAction<T>) {
switch (action.cmd) { switch (action.cmd) {
case sqliteCmd.INIT: { case sqliteCmd.INIT: {
const info = action.initInfo; const info = action.initInfo;
if (info) { if (info) {
const dataPromise = pfetch(info.dbUrl, { const releasePromise = pfetch(info.releaseDbUrl, {
progressCallback: action.initInfo?.progressCallback, progressCallback: action.initInfo?.progressCallback,
}).then((res) => res.arrayBuffer()); // TODO: i18n }).then((res) => res.arrayBuffer()); // TODO: i18n
return Promise.all([sqlPromise, dataPromise]).then(([SQL, buffer]) => { const preReleasePromise = pfetch(info.preReleaseDbUrl, {
YGODB = new SQL.Database(new Uint8Array(buffer)); progressCallback: action.initInfo?.progressCallback,
}).then((res) => res.arrayBuffer());
return Promise.all([
sqlPromise,
releasePromise,
preReleasePromise,
]).then(([SQL, releaseBuffer, preReleaseBuffer]) => {
YGODBS.release = new SQL.Database(new Uint8Array(releaseBuffer));
YGODBS.preRelease = new SQL.Database(
new Uint8Array(preReleaseBuffer),
);
console.log("YGODB inited!"); console.log("YGODB inited!");
}); });
} else { } else {
...@@ -72,12 +93,22 @@ function helper<T extends sqliteCmd>(action: sqliteAction<T>) { ...@@ -72,12 +93,22 @@ function helper<T extends sqliteCmd>(action: sqliteAction<T>) {
} }
} }
case sqliteCmd.SELECT: { case sqliteCmd.SELECT: {
if (YGODB && action.payload && action.payload.id) { if (
YGODBS.release &&
YGODBS.preRelease &&
action.payload &&
action.payload.id
) {
const code = action.payload.id; const code = action.payload.id;
const dataStmt = YGODB.prepare("SELECT * FROM datas WHERE ID = $id"); const db =
SuperReleaseData.find((id) => id === code) !== undefined
? YGODBS.preRelease
: YGODBS.release;
const dataStmt = db.prepare("SELECT * FROM datas WHERE ID = $id");
const dataResult = dataStmt.getAsObject({ $id: code }); const dataResult = dataStmt.getAsObject({ $id: code });
const textStmt = YGODB.prepare("SELECT * FROM texts WHERE ID = $id"); const textStmt = db.prepare("SELECT * FROM texts WHERE ID = $id");
const textResult = textStmt.getAsObject({ $id: code }); const textResult = textStmt.getAsObject({ $id: code });
return { return {
...@@ -93,8 +124,22 @@ function helper<T extends sqliteCmd>(action: sqliteAction<T>) { ...@@ -93,8 +124,22 @@ function helper<T extends sqliteCmd>(action: sqliteAction<T>) {
return {}; return {};
} }
case sqliteCmd.FTS: { case sqliteCmd.FTS: {
if (YGODB && action.payload && action.payload.ftsParams) { if (
const metas = invokeFts(YGODB, action.payload.ftsParams); YGODBS.release &&
YGODBS.preRelease &&
action.payload &&
action.payload.ftsParams
) {
const releaseMetas = invokeFts(
YGODBS.release,
action.payload.ftsParams,
);
const preReleaseMetas = invokeFts(
YGODBS.preRelease,
action.payload.ftsParams,
);
const metas = releaseMetas.concat(preReleaseMetas);
return { ftsResult: metas }; return { ftsResult: metas };
} else { } else {
......
...@@ -11,7 +11,7 @@ import { useConfig } from "@/config"; ...@@ -11,7 +11,7 @@ import { useConfig } from "@/config";
import { useEnv } from "@/hook"; import { useEnv } from "@/hook";
import sqliteMiddleWare, { sqliteCmd } from "@/middleware/sqlite"; import sqliteMiddleWare, { sqliteCmd } from "@/middleware/sqlite";
import { accountStore, deckStore, initStore, type User } from "@/stores"; import { accountStore, deckStore, initStore, type User } from "@/stores";
const { cardsDbUrl } = useConfig(); const { releaseDbUrl, preReleaseDbUrl } = useConfig();
const { BASE_URL } = useEnv(); const { BASE_URL } = useEnv();
/** 加载ygodb */ /** 加载ygodb */
...@@ -23,7 +23,7 @@ export const initSqlite = async () => { ...@@ -23,7 +23,7 @@ export const initSqlite = async () => {
sqlite.progress = 0.01; sqlite.progress = 0.01;
await sqliteMiddleWare({ await sqliteMiddleWare({
cmd: sqliteCmd.INIT, cmd: sqliteCmd.INIT,
initInfo: { dbUrl: cardsDbUrl, progressCallback }, initInfo: { releaseDbUrl, preReleaseDbUrl, progressCallback },
}); });
sqlite.progress = 1; sqlite.progress = 1;
} }
......
...@@ -26,7 +26,10 @@ export const connectSrvpro = async (params: { ...@@ -26,7 +26,10 @@ export const connectSrvpro = async (params: {
// 初始化sqlite // 初始化sqlite
await sqliteMiddleWare({ await sqliteMiddleWare({
cmd: sqliteCmd.INIT, cmd: sqliteCmd.INIT,
initInfo: { dbUrl: NeosConfig.cardsDbUrl }, initInfo: {
releaseDbUrl: NeosConfig.releaseDbUrl,
preReleaseDbUrl: NeosConfig.preReleaseDbUrl,
},
}); });
// 初始化I18N文案 // 初始化I18N文案
......
[
100219001,
100219002,
100200251,
101205000,
101205001,
101205002,
101205003,
101205004,
101205005,
101205006,
101205033,
101205053,
101205054,
101205055,
101205068,
101205069,
101203081,
101203082,
101203083,
101203084,
101203085,
101203086,
101203087,
101203088,
101203089,
101203090,
101203091,
101203092,
101203093,
101203094,
101203095,
101203096,
100216001
]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment