Update
This commit is contained in:
@ -72,46 +72,53 @@ export async function initializeJMdict(): Promise<void> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to load existing database with retry logic
|
// Check if we have the JSON file first
|
||||||
let retryCount = 0;
|
const dataDir = path.dirname(JMDICT_DB_PATH);
|
||||||
const maxRetries = 2;
|
const jsonPath = path.join(dataDir, "jmdict-eng-3.1.0.json");
|
||||||
|
|
||||||
|
let hasJsonFile = false;
|
||||||
|
try {
|
||||||
|
await fs.access(jsonPath);
|
||||||
|
hasJsonFile = true;
|
||||||
|
console.log("JMdict JSONファイルが見つかりました");
|
||||||
|
} catch {
|
||||||
|
console.log("JMdict JSONファイルが見つかりません");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to load existing database (only if it might exist)
|
||||||
|
let databaseLoaded = false;
|
||||||
|
try {
|
||||||
|
// Check if database directory exists and has content
|
||||||
|
const dbStats = await fs.stat(JMDICT_DB_PATH);
|
||||||
|
if (dbStats.isDirectory()) {
|
||||||
|
const dbContents = await fs.readdir(JMDICT_DB_PATH);
|
||||||
|
if (dbContents.length > 0) {
|
||||||
|
console.log(
|
||||||
|
"既存のデータベースディレクトリが見つかりました。読み込みを試行します...",
|
||||||
|
);
|
||||||
|
|
||||||
while (retryCount <= maxRetries) {
|
|
||||||
try {
|
try {
|
||||||
jmdictDb = await setup(JMDICT_DB_PATH);
|
jmdictDb = await setup(JMDICT_DB_PATH);
|
||||||
console.log(
|
console.log(
|
||||||
`JMdict データベース読み込み完了 (辞書日付: ${jmdictDb.dictDate})`,
|
`JMdict データベース読み込み完了 (辞書日付: ${jmdictDb.dictDate})`,
|
||||||
);
|
);
|
||||||
return;
|
databaseLoaded = true;
|
||||||
} catch (error) {
|
} catch (loadError) {
|
||||||
console.log(
|
console.log("既存データベースの読み込みに失敗:", loadError.message);
|
||||||
`データベース読み込み試行 ${retryCount + 1}/${maxRetries + 1} 失敗:`,
|
// Clean up corrupted database
|
||||||
error,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (retryCount < maxRetries) {
|
|
||||||
// Clean up potentially corrupted database and retry
|
|
||||||
await cleanupDatabase(JMDICT_DB_PATH);
|
await cleanupDatabase(JMDICT_DB_PATH);
|
||||||
retryCount++;
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 1000)); // Wait 1 second
|
|
||||||
} else {
|
|
||||||
throw error;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch {
|
||||||
|
// Database directory doesn't exist, which is fine
|
||||||
|
console.log("既存のデータベースが見つかりません");
|
||||||
|
}
|
||||||
|
|
||||||
// If we get here, all retries failed
|
// If database loading failed or no database exists, try to create from JSON
|
||||||
console.log(
|
if (!databaseLoaded && hasJsonFile) {
|
||||||
"既存のデータベース読み込みに失敗しました。新規作成を試行します...",
|
|
||||||
);
|
|
||||||
|
|
||||||
// Check if we have the JSON file locally
|
|
||||||
const dataDir = path.dirname(JMDICT_DB_PATH);
|
|
||||||
const jsonPath = path.join(dataDir, "jmdict-eng-3.1.0.json");
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await fs.access(jsonPath);
|
console.log("JMdict JSONファイルからデータベースを作成中...");
|
||||||
console.log("JMdict JSONファイルを使用してデータベースを作成中...");
|
|
||||||
|
|
||||||
// Ensure clean directory for new database
|
// Ensure clean directory for new database
|
||||||
await cleanupDatabase(JMDICT_DB_PATH);
|
await cleanupDatabase(JMDICT_DB_PATH);
|
||||||
@ -120,13 +127,23 @@ export async function initializeJMdict(): Promise<void> {
|
|||||||
console.log(
|
console.log(
|
||||||
`JMdict データベース作成完了 (辞書日付: ${jmdictDb.dictDate})`,
|
`JMdict データベース作成完了 (辞書日付: ${jmdictDb.dictDate})`,
|
||||||
);
|
);
|
||||||
} catch (jsonError) {
|
databaseLoaded = true;
|
||||||
|
} catch (createError) {
|
||||||
|
console.error("JSONからのデータベース作成に失敗:", createError.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If still no database, provide instructions and use minimal database
|
||||||
|
if (!databaseLoaded) {
|
||||||
|
if (!hasJsonFile) {
|
||||||
console.log("JMdict JSONファイルが見つかりません。");
|
console.log("JMdict JSONファイルが見つかりません。");
|
||||||
console.log(`手動でダウンロードしてください: ${JMDICT_DATA_URL}`);
|
console.log(`手動でダウンロードしてください: ${JMDICT_DATA_URL}`);
|
||||||
console.log(
|
console.log(
|
||||||
`ダウンロード後、解凍して以下のパスに配置してください: ${jsonPath}`,
|
`ダウンロード後、解凍して以下のパスに配置してください: ${jsonPath}`,
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("最小限のデータベースを使用します。");
|
||||||
await createMinimalJMdictDatabase();
|
await createMinimalJMdictDatabase();
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
Reference in New Issue
Block a user