数据迁移
This commit is contained in:
parent
d9fdded7fb
commit
67ba515b2c
@ -1,6 +1,9 @@
|
||||
import { getStorageName } from "@App/pkg/utils/utils";
|
||||
import { db } from "./repo/dao";
|
||||
import { Script, ScriptAndCode, ScriptCodeDAO, ScriptDAO } from "./repo/scripts";
|
||||
import { Subscribe, SubscribeDAO } from "./repo/subscribe";
|
||||
import { Value, ValueDAO } from "./repo/value";
|
||||
import { Permission, PermissionDAO } from "./repo/permission";
|
||||
|
||||
// 0.10.0重构,重命名字段,统一使用小峰驼
|
||||
function renameField() {
|
||||
@ -33,14 +36,19 @@ function renameField() {
|
||||
// export是0.10.x时的兼容性处理
|
||||
export: "++id,&scriptId",
|
||||
});
|
||||
const v = 36;
|
||||
// 将脚本数据迁移到chrome.storage
|
||||
db.version(18).upgrade(async (tx) => {
|
||||
db.version(v).upgrade(() => {
|
||||
// 默认使用的事务,这里加个延时,用db.open()打开数据库后,再执行
|
||||
setTimeout(async () => {
|
||||
try {
|
||||
// 迁移脚本
|
||||
const scripts = await tx.table("scripts").toArray();
|
||||
const scripts = await db.table("scripts").toArray();
|
||||
const scriptDAO = new ScriptDAO();
|
||||
const scriptCodeDAO = new ScriptCodeDAO();
|
||||
console.log("开始迁移脚本数据", scripts.length);
|
||||
await Promise.all(
|
||||
scripts.map((script: ScriptAndCode) => {
|
||||
scripts.map(async (script: ScriptAndCode) => {
|
||||
const {
|
||||
uuid,
|
||||
name,
|
||||
@ -56,36 +64,57 @@ function renameField() {
|
||||
createtime,
|
||||
checktime,
|
||||
code,
|
||||
checkUpdateUrl,
|
||||
downloadUrl,
|
||||
selfMetadata,
|
||||
config,
|
||||
error,
|
||||
updatetime,
|
||||
lastruntime,
|
||||
nextruntime,
|
||||
} = script;
|
||||
return scriptDAO
|
||||
.save({
|
||||
const s = await scriptDAO.save({
|
||||
uuid,
|
||||
name,
|
||||
namespace,
|
||||
author,
|
||||
originDomain,
|
||||
subscribeUrl,
|
||||
type,
|
||||
sort,
|
||||
status,
|
||||
runStatus,
|
||||
origin,
|
||||
checkUpdateUrl,
|
||||
downloadUrl,
|
||||
metadata,
|
||||
selfMetadata,
|
||||
subscribeUrl,
|
||||
config,
|
||||
type,
|
||||
status,
|
||||
sort,
|
||||
runStatus,
|
||||
error,
|
||||
createtime,
|
||||
updatetime,
|
||||
checktime,
|
||||
})
|
||||
.then((s) =>
|
||||
scriptCodeDAO.save({
|
||||
lastruntime,
|
||||
nextruntime,
|
||||
});
|
||||
return scriptCodeDAO
|
||||
.save({
|
||||
uuid: s.uuid,
|
||||
code,
|
||||
})
|
||||
);
|
||||
.catch((e) => {
|
||||
console.log("脚本代码迁移失败", e);
|
||||
return Promise.reject(e);
|
||||
});
|
||||
})
|
||||
);
|
||||
// 迁移订阅
|
||||
const subscribe = await tx.table("subscribe").toArray();
|
||||
const subscribe = await db.table("subscribe").toArray();
|
||||
const subscribeDAO = new SubscribeDAO();
|
||||
if (subscribe.length) {
|
||||
await Promise.all(
|
||||
subscribe.map((s: Subscribe) => {
|
||||
console.log("1234", s);
|
||||
const { url, name, code, author, scripts, metadata, status, createtime, updatetime, checktime } = s;
|
||||
return subscribeDAO.save({
|
||||
url,
|
||||
@ -101,6 +130,8 @@ function renameField() {
|
||||
});
|
||||
})
|
||||
);
|
||||
}
|
||||
console.log("订阅数据迁移完成", subscribe.length);
|
||||
// 迁移value
|
||||
interface MV2Value {
|
||||
id: number;
|
||||
@ -111,21 +142,91 @@ function renameField() {
|
||||
createtime: number;
|
||||
updatetime: number;
|
||||
}
|
||||
const values = await tx.table("value").toArray();
|
||||
const valueDAO = new ScriptCodeDAO();
|
||||
const values = await db.table("value").toArray();
|
||||
const valueDAO = new ValueDAO();
|
||||
const valueMap = new Map<string, Value>();
|
||||
await Promise.all(
|
||||
values.map((v) => {
|
||||
values.map((v: MV2Value) => {
|
||||
const { scriptId, storageName, key, value, createtime } = v;
|
||||
return valueDAO.save({
|
||||
scriptId,
|
||||
storageName,
|
||||
key,
|
||||
value,
|
||||
return db
|
||||
.table("scripts")
|
||||
.where("id")
|
||||
.equals(scriptId)
|
||||
.first((script: Script) => {
|
||||
if (script) {
|
||||
let data: { [key: string]: any } = {};
|
||||
if (!valueMap.has(script.uuid)) {
|
||||
valueMap.set(script.uuid, {
|
||||
uuid: script.uuid,
|
||||
storageName: getStorageName(script),
|
||||
data: data,
|
||||
createtime,
|
||||
updatetime: 0,
|
||||
});
|
||||
} else {
|
||||
data = valueMap.get(script.uuid)!.data;
|
||||
}
|
||||
data[key] = value;
|
||||
}
|
||||
});
|
||||
})
|
||||
);
|
||||
// 保存到数据库
|
||||
await Promise.all(
|
||||
Array.from(valueMap.keys()).map((uuid) => {
|
||||
const { storageName, data, createtime } = valueMap.get(uuid)!;
|
||||
return valueDAO.save(storageName!, {
|
||||
uuid,
|
||||
storageName,
|
||||
data,
|
||||
createtime,
|
||||
updatetime: 0,
|
||||
});
|
||||
})
|
||||
);
|
||||
console.log("脚本value数据迁移完成", values.length);
|
||||
// 迁移permission
|
||||
const permissions = await db.table("permission").toArray();
|
||||
const permissionDAO = new PermissionDAO();
|
||||
await Promise.all(
|
||||
permissions.map((p: Permission & { scriptId: number }) => {
|
||||
const { scriptId, permission, permissionValue, createtime, updatetime, allow } = p;
|
||||
return db
|
||||
.table("scripts")
|
||||
.where("id")
|
||||
.equals(scriptId)
|
||||
.first((script: Script) => {
|
||||
if (script) {
|
||||
return permissionDAO.save({
|
||||
uuid: script.uuid,
|
||||
permission,
|
||||
permissionValue,
|
||||
createtime,
|
||||
updatetime,
|
||||
allow,
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
);
|
||||
console.log("脚本permission数据迁移完成", permissions.length);
|
||||
// 打开页面,告知数据储存+升级至了mv3,重启一次扩展
|
||||
setTimeout(async () => {
|
||||
const scripts = await scriptDAO.all();
|
||||
console.log("脚本数据迁移完成", scripts.length);
|
||||
if (scripts.length > 0) {
|
||||
chrome.tabs.create({
|
||||
url: "https://docs.scriptcat.org/docs/change/v0.17/",
|
||||
});
|
||||
setTimeout(() => {
|
||||
chrome.runtime.reload();
|
||||
}, 1000);
|
||||
}
|
||||
}, 2000);
|
||||
} catch (e) {
|
||||
console.error("脚本数据迁移失败", e);
|
||||
}
|
||||
}, 200);
|
||||
});
|
||||
return db.open();
|
||||
}
|
||||
|
@ -20,6 +20,10 @@ export class OffscreenManager {
|
||||
|
||||
private serviceWorker = new ServiceWorkerClient(this.extensionMessage);
|
||||
|
||||
constructor(private extensionMessage:MessageSend) {
|
||||
|
||||
}
|
||||
|
||||
logger(data: Logger) {
|
||||
const dao = new LoggerDAO();
|
||||
dao.save(data);
|
||||
|
@ -1,20 +1,19 @@
|
||||
import migrate from "./app/migrate";
|
||||
import { MessageSend } from "@Packages/message/server";
|
||||
import LoggerCore from "./app/logger/core";
|
||||
import DBWriter from "./app/logger/db_writer";
|
||||
import { LoggerDAO } from "./app/repo/logger";
|
||||
import MessageWriter from "./app/logger/message_writer";
|
||||
import { OffscreenManager } from "./app/service/offscreen";
|
||||
|
||||
migrate();
|
||||
import { ExtensionMessageSend } from "@Packages/message/extension_message";
|
||||
|
||||
function main() {
|
||||
// 初始化日志组件
|
||||
const extensionMessage: MessageSend = new ExtensionMessageSend();
|
||||
const loggerCore = new LoggerCore({
|
||||
writer: new DBWriter(new LoggerDAO()),
|
||||
writer: new MessageWriter(extensionMessage),
|
||||
labels: { env: "offscreen" },
|
||||
});
|
||||
loggerCore.logger().debug("offscreen start");
|
||||
// 初始化管理器
|
||||
const manager = new OffscreenManager();
|
||||
const manager = new OffscreenManager(extensionMessage);
|
||||
manager.initManager();
|
||||
}
|
||||
|
||||
|
@ -8,12 +8,12 @@ import "@App/index.css";
|
||||
import { Provider } from "react-redux";
|
||||
import { store } from "@App/pages/store/store.ts";
|
||||
import LoggerCore from "@App/app/logger/core.ts";
|
||||
import { LoggerDAO } from "@App/app/repo/logger.ts";
|
||||
import DBWriter from "@App/app/logger/db_writer.ts";
|
||||
import MessageWriter from "@App/app/logger/message_writer.ts";
|
||||
import { message } from "../store/global.ts";
|
||||
|
||||
// 初始化日志组件
|
||||
const loggerCore = new LoggerCore({
|
||||
writer: new DBWriter(new LoggerDAO()),
|
||||
writer: new MessageWriter(message),
|
||||
labels: { env: "confirm" },
|
||||
});
|
||||
|
||||
|
@ -8,12 +8,12 @@ import "@App/index.css";
|
||||
import { Provider } from "react-redux";
|
||||
import { store } from "@App/pages/store/store.ts";
|
||||
import LoggerCore from "@App/app/logger/core.ts";
|
||||
import { LoggerDAO } from "@App/app/repo/logger.ts";
|
||||
import DBWriter from "@App/app/logger/db_writer.ts";
|
||||
import MessageWriter from "@App/app/logger/message_writer.ts";
|
||||
import { message } from "../store/global.ts";
|
||||
|
||||
// 初始化日志组件
|
||||
const loggerCore = new LoggerCore({
|
||||
writer: new DBWriter(new LoggerDAO()),
|
||||
writer: new MessageWriter(message),
|
||||
labels: { env: "import" },
|
||||
});
|
||||
|
||||
|
@ -8,12 +8,12 @@ import "@App/index.css";
|
||||
import { Provider } from "react-redux";
|
||||
import { store } from "@App/pages/store/store.ts";
|
||||
import LoggerCore from "@App/app/logger/core.ts";
|
||||
import { LoggerDAO } from "@App/app/repo/logger.ts";
|
||||
import DBWriter from "@App/app/logger/db_writer.ts";
|
||||
import MessageWriter from "@App/app/logger/message_writer.ts";
|
||||
import { message } from "../store/global.ts";
|
||||
|
||||
// 初始化日志组件
|
||||
const loggerCore = new LoggerCore({
|
||||
writer: new DBWriter(new LoggerDAO()),
|
||||
writer: new MessageWriter(message),
|
||||
labels: { env: "install" },
|
||||
});
|
||||
|
||||
|
@ -13,6 +13,9 @@ import { LoggerDAO } from "@App/app/repo/logger.ts";
|
||||
import DBWriter from "@App/app/logger/db_writer.ts";
|
||||
import registerEditor from "@App/pkg/utils/monaco-editor.ts";
|
||||
import storeSubscribe from "../store/subscribe.ts";
|
||||
import migrate from "@App/app/migrate.ts";
|
||||
|
||||
migrate();
|
||||
|
||||
registerEditor();
|
||||
// 初始化日志组件
|
||||
|
@ -2,18 +2,18 @@ import React from "react";
|
||||
import ReactDOM from "react-dom/client";
|
||||
import App from "./App.tsx";
|
||||
import LoggerCore from "@App/app/logger/core.ts";
|
||||
import { LoggerDAO } from "@App/app/repo/logger.ts";
|
||||
import DBWriter from "@App/app/logger/db_writer.ts";
|
||||
import "@arco-design/web-react/dist/css/arco.css";
|
||||
import "@App/locales/locales";
|
||||
import "@App/index.css";
|
||||
import "./index.css";
|
||||
import { Provider } from "react-redux";
|
||||
import { store } from "../store/store.ts";
|
||||
import MessageWriter from "@App/app/logger/message_writer.ts";
|
||||
import { message } from "../store/global.ts";
|
||||
|
||||
// 初始化日志组件
|
||||
const loggerCore = new LoggerCore({
|
||||
writer: new DBWriter(new LoggerDAO()),
|
||||
writer: new MessageWriter(message),
|
||||
labels: { env: "install" },
|
||||
});
|
||||
|
||||
|
@ -48,14 +48,14 @@ async function setupOffscreenDocument() {
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// 初始化管理器
|
||||
const message = new ExtensionMessage(true);
|
||||
// 初始化日志组件
|
||||
const loggerCore = new LoggerCore({
|
||||
writer: new DBWriter(new LoggerDAO()),
|
||||
labels: { env: "service_worker" },
|
||||
});
|
||||
loggerCore.logger().debug("service worker start");
|
||||
// 初始化管理器
|
||||
const message = new ExtensionMessage(true);
|
||||
const server = new Server("serviceWorker", message);
|
||||
const messageQueue = new MessageQueue();
|
||||
const manager = new ServiceWorkerManager(server, messageQueue, new ServiceWorkerMessageSend());
|
||||
|
Loading…
x
Reference in New Issue
Block a user