diff --git a/src/background/background.js b/src/background/background.js index 88044b1..eb0f833 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -227,6 +227,8 @@ const startSphinx = (callback) => { } sphinx = spawn(sphinxPath, options) + const optimizeResolvers = {} + sphinx.stdout.on('data', (data) => { console.log(`sphinx: ${data}`) if (data.includes('accepting connections')) { @@ -234,6 +236,16 @@ const startSphinx = (callback) => { if(callback) callback() } + + const checkOptimized = String(data).match(/index ([\w]+): optimized/) + if(checkOptimized) + { + if(optimizeResolvers[checkOptimized[1]]) + { + console.log('resolve optimizer', checkOptimized[1]) + optimizeResolvers[checkOptimized[1]]() + } + } }) sphinx.on('close', (code, signal) => { @@ -245,6 +257,13 @@ const startSphinx = (callback) => { console.log('sphinx closing...') exec(`"${sphinxPath}" --config "${config}" --stopwait`) } + + sphinx.waitOptimized = (table) => new Promise((resolve) => { + optimizeResolvers[table] = () => { + delete optimizeResolvers[table]; + resolve() + } + }) } // log autoupdate @@ -365,7 +384,7 @@ app.on("ready", () => { callback.apply(null, arg) }) }, app.getPath("userData"), app.getVersion(), env.name) - }, mainWindow) + }, mainWindow, sphinx) }) }); diff --git a/src/background/dbPatcher.js b/src/background/dbPatcher.js index 8048810..4ddb673 100644 --- a/src/background/dbPatcher.js +++ b/src/background/dbPatcher.js @@ -5,7 +5,7 @@ import { BrowserWindow } from "electron"; import url from 'url' import path from 'path' -module.exports = (callback, mainWindow) => { +module.exports = (callback, mainWindow, sphinxApp) => { const sphinx = mysql.createConnection({ host : config.sphinx.host, port : config.sphinx.port @@ -52,6 +52,67 @@ module.exports = (callback, mainWindow) => { patchWindow = new BrowserWindow({width: 800, height: 400, closable: false}) patchWindow.setMenu(null) + + patchWindow.loadURL("data:text/html;charset=utf-8," + encodeURI(` + + Database patching... + + + + +
+ + + + `)) } const patch = async (version) => { @@ -64,67 +125,6 @@ module.exports = (callback, mainWindow) => { openPatchWindow() let i = 1 - if(patchWindow) - { - patchWindow.loadURL("data:text/html;charset=utf-8," + encodeURI(` - - Database patching... - - - - -
- - - - `)) - } - const torrents = (await query("SELECT COUNT(*) AS c FROM torrents"))[0].c const files = (await query("SELECT COUNT(*) AS c FROM files"))[0].c @@ -149,6 +149,24 @@ module.exports = (callback, mainWindow) => { }) await query(`UPDATE version SET version = 2 WHERE id = 1`) } + case 2: + { + openPatchWindow() + + console.log('optimizing torrents') + if(patchWindow) + patchWindow.webContents.send('optimize', {field: 'torrents'}) + query(`OPTIMIZE INDEX torrents`) + await sphinxApp.waitOptimized('torrents') + + console.log('optimizing files') + if(patchWindow) + patchWindow.webContents.send('optimize', {field: 'files'}) + query(`OPTIMIZE INDEX files`) + await sphinxApp.waitOptimized('files') + + await query(`UPDATE version SET version = 3 WHERE id = 1`) + } } console.log('db patch done') sphinx.destroy()