89 lines
1.8 KiB
JavaScript
89 lines
1.8 KiB
JavaScript
const inquirer = require("inquirer");
|
|
const sqlite3 = require("@journeyapps/sqlcipher");
|
|
const sqlite = require("sqlite");
|
|
|
|
let pushSQL =
|
|
"INSERT INTO msg (\
|
|
msg_id,\
|
|
create_time,\
|
|
msg_type,\
|
|
composed_type,\
|
|
content,\
|
|
from_name,\
|
|
from_nickname,\
|
|
to_name,\
|
|
to_nickname,\
|
|
is_group_message,\
|
|
speaking_group_member_name,\
|
|
filename,\
|
|
display_filename\
|
|
) VALUES (\
|
|
$messageID,\
|
|
$createTimestamp,\
|
|
$messageType,\
|
|
$type,\
|
|
$content,\
|
|
$fromName,\
|
|
$fromNickName,\
|
|
$toName,\
|
|
$toNickName,\
|
|
$isGroupMessage,\
|
|
$speakingGroupMemberName,\
|
|
$filename,\
|
|
$displayFilename\
|
|
)";
|
|
|
|
let db, pushStatement;
|
|
async function initDB(dbFile) {
|
|
db = await sqlite.open({
|
|
filename: dbFile,
|
|
driver: sqlite3.Database,
|
|
});
|
|
while (true) {
|
|
try {
|
|
const { password } = await inquirer.prompt([
|
|
{ type: "password", name: "password", message: "密码:", prefix: "" },
|
|
]);
|
|
password && (await db.exec(`PRAGMA KEY=${password}`));
|
|
await db.exec(
|
|
`CREATE TABLE IF NOT EXISTS msg (
|
|
msg_id TEXT NOT NULL,
|
|
create_time INTEGER NOT NULL,
|
|
msg_type INTEGER NOT NULL,
|
|
composed_type TEXT NOT NULL,
|
|
content TEXT,
|
|
from_name TEXT,
|
|
from_nickname TEXT,
|
|
to_name TEXT,
|
|
to_nickname TEXT,
|
|
is_group_message INTEGER,
|
|
speaking_group_member_name TEXT,
|
|
filename TEXT,
|
|
display_filename TEXT)`
|
|
);
|
|
break;
|
|
} catch (e) {
|
|
if (e.name === "SQLITE_NOTADB") {
|
|
console.warn("密码错误");
|
|
} else {
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
pushStatement = await db.prepare(pushSQL);
|
|
}
|
|
|
|
/** 将消息存储到数据库 */
|
|
async function pushMessage(message) {
|
|
const m = {};
|
|
for (const key of Object.keys(message)) {
|
|
m["$" + key] = message[key];
|
|
}
|
|
await pushStatement.run(m);
|
|
}
|
|
|
|
module.exports = {
|
|
initDB,
|
|
pushMessage,
|
|
};
|