Files
VRCX/src/services/sqlite.js
2026-03-13 20:04:32 +09:00

89 lines
3.0 KiB
JavaScript

import { i18n } from '../plugins/i18n';
import { openExternalLink } from '../shared/utils';
import { useModalStore } from '../stores';
// requires binding of SQLite
class SQLiteService {
handleSQLiteError(e) {
if (typeof e.message === 'string') {
const modalStore = useModalStore();
if (e.message.includes('database disk image is malformed')) {
modalStore
.confirm({
description:
'Please repair or delete your database file by following these instructions.',
title: 'Your database is corrupted'
})
.then(({ ok }) => {
if (!ok) return;
openExternalLink(
'https://github.com/vrcx-team/VRCX/wiki#how-to-repair-vrcx-database'
);
})
.catch(() => {});
}
if (e.message.includes('database or disk is full')) {
modalStore.alert({
description: i18n.global.t('message.database.disk_space'),
title: 'Disk containing database is full'
});
}
if (
e.message.includes('database is locked') ||
e.message.includes('attempt to write a readonly database')
) {
modalStore.alert({
description:
'Please close other applications that might be using the database file.',
title: 'Database is locked'
});
}
if (e.message.includes('disk I/O error')) {
modalStore.alert({
description: i18n.global.t('message.database.disk_error'),
title: 'Disk I/O error'
});
}
}
throw e;
}
async execute(callback, sql, args = null) {
try {
if (LINUX) {
if (args) {
args = new Map(Object.entries(args));
}
var json = await SQLite.ExecuteJson(sql, args);
var items = JSON.parse(json);
items.forEach((item) => {
callback(item);
});
return;
}
var data = await SQLite.Execute(sql, args);
data.forEach((row) => {
callback(row);
});
} catch (e) {
this.handleSQLiteError(e);
}
}
async executeNonQuery(sql, args = null) {
try {
if (LINUX && args) {
args = new Map(Object.entries(args));
}
return await SQLite.ExecuteNonQuery(sql, args);
} catch (e) {
this.handleSQLiteError(e);
}
}
}
var self = new SQLiteService();
window.sqliteService = self;
export { self as default, SQLiteService };