ElectronPlatform: Add support for a event index using Seshat.
parent
a0599e84d9
commit
1dbdd0a366
|
@ -5,11 +5,17 @@
|
||||||
"version": "1.4.2",
|
"version": "1.4.2",
|
||||||
"description": "A feature-rich client for Matrix.org",
|
"description": "A feature-rich client for Matrix.org",
|
||||||
"author": "New Vector Ltd.",
|
"author": "New Vector Ltd.",
|
||||||
|
"scripts": {
|
||||||
|
"build": "electron-build-env --electron 6.0.3 neon build seshat-node --release",
|
||||||
|
"postinstall": "yarn build"
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"auto-launch": "^5.0.1",
|
"auto-launch": "^5.0.1",
|
||||||
"electron-store": "^2.0.0",
|
"electron-store": "^2.0.0",
|
||||||
"electron-window-state": "^4.1.0",
|
"electron-window-state": "^4.1.0",
|
||||||
"minimist": "^1.2.0",
|
"minimist": "^1.2.0",
|
||||||
"png-to-ico": "^1.0.2"
|
"png-to-ico": "^1.0.2",
|
||||||
|
"make-dir": "^3.0.0",
|
||||||
|
"seshat-node": "^0.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,8 @@ const { migrateFromOldOrigin } = require('./originMigrator');
|
||||||
|
|
||||||
const windowStateKeeper = require('electron-window-state');
|
const windowStateKeeper = require('electron-window-state');
|
||||||
const Store = require('electron-store');
|
const Store = require('electron-store');
|
||||||
|
const seshat = require('seshat-node');
|
||||||
|
const makeDir = require('make-dir');
|
||||||
|
|
||||||
if (argv["help"]) {
|
if (argv["help"]) {
|
||||||
console.log("Options:");
|
console.log("Options:");
|
||||||
|
@ -82,8 +84,12 @@ try {
|
||||||
// Could not load local config, this is expected in most cases.
|
// Could not load local config, this is expected in most cases.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const eventStorePath = path.join(app.getPath('userData'), 'EventStore');
|
||||||
const store = new Store({ name: "electron-config" });
|
const store = new Store({ name: "electron-config" });
|
||||||
|
|
||||||
|
let eventIndex = null;
|
||||||
|
|
||||||
let mainWindow = null;
|
let mainWindow = null;
|
||||||
global.appQuitting = false;
|
global.appQuitting = false;
|
||||||
global.minimizeToTray = store.get('minimizeToTray', true);
|
global.minimizeToTray = store.get('minimizeToTray', true);
|
||||||
|
@ -149,6 +155,17 @@ autoUpdater.on('update-downloaded', (ev, releaseNotes, releaseName, releaseDate,
|
||||||
ipcMain.on('ipcCall', async function(ev, payload) {
|
ipcMain.on('ipcCall', async function(ev, payload) {
|
||||||
if (!mainWindow) return;
|
if (!mainWindow) return;
|
||||||
|
|
||||||
|
const send_error = (id, e) => {
|
||||||
|
const error = {
|
||||||
|
message: e.message
|
||||||
|
}
|
||||||
|
|
||||||
|
mainWindow.webContents.send('ipcReply', {
|
||||||
|
id:id,
|
||||||
|
error: error
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const args = payload.args || [];
|
const args = payload.args || [];
|
||||||
let ret;
|
let ret;
|
||||||
|
|
||||||
|
@ -200,6 +217,105 @@ ipcMain.on('ipcCall', async function(ev, payload) {
|
||||||
case 'getConfig':
|
case 'getConfig':
|
||||||
ret = vectorConfig;
|
ret = vectorConfig;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'initEventIndex':
|
||||||
|
if (args[0] && eventIndex === null) {
|
||||||
|
let p = path.normalize(path.join(eventStorePath, args[0]));
|
||||||
|
try {
|
||||||
|
await makeDir(p);
|
||||||
|
eventIndex = new seshat(p);
|
||||||
|
console.log("Initialized event store");
|
||||||
|
} catch (e) {
|
||||||
|
send_error(payload.id, e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'deleteEventIndex':
|
||||||
|
await eventIndex.delete();
|
||||||
|
eventIndex = null;
|
||||||
|
|
||||||
|
case 'isEventIndexEmpty':
|
||||||
|
if (eventIndex === null) ret = true;
|
||||||
|
else ret = await eventIndex.isEmpty();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'addEventToIndex':
|
||||||
|
try {
|
||||||
|
eventIndex.addEvent(args[0], args[1]);
|
||||||
|
} catch (e) {
|
||||||
|
send_error(payload.id, e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'commitLiveEvents':
|
||||||
|
try {
|
||||||
|
ret = await eventIndex.commit();
|
||||||
|
} catch (e) {
|
||||||
|
send_error(payload.id, e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'searchEventIndex':
|
||||||
|
try {
|
||||||
|
ret = await eventIndex.search(args[0]);
|
||||||
|
} catch (e) {
|
||||||
|
send_error(payload.id, e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'addHistoricEvents':
|
||||||
|
if (eventIndex === null) ret = false;
|
||||||
|
else {
|
||||||
|
try {
|
||||||
|
ret = await eventIndex.addHistoricEvents(
|
||||||
|
args[0], args[1], args[2]);
|
||||||
|
} catch (e) {
|
||||||
|
send_error(payload.id, e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'removeCrawlerCheckpoint':
|
||||||
|
if (eventIndex === null) ret = false;
|
||||||
|
else {
|
||||||
|
try {
|
||||||
|
ret = await eventIndex.removeCrawlerCheckpoint(args[0]);
|
||||||
|
} catch (e) {
|
||||||
|
send_error(payload.id, e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'addCrawlerCheckpoint':
|
||||||
|
if (eventIndex === null) ret = false;
|
||||||
|
else {
|
||||||
|
try {
|
||||||
|
ret = await eventIndex.addCrawlerCheckpoint(args[0]);
|
||||||
|
} catch (e) {
|
||||||
|
send_error(payload.id, e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'loadCheckpoints':
|
||||||
|
if (eventIndex === null) ret = [];
|
||||||
|
else {
|
||||||
|
try {
|
||||||
|
ret = await eventIndex.loadCheckpoints();
|
||||||
|
} catch (e) {
|
||||||
|
ret = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
mainWindow.webContents.send('ipcReply', {
|
mainWindow.webContents.send('ipcReply', {
|
||||||
id: payload.id,
|
id: payload.id,
|
||||||
|
|
|
@ -148,7 +148,9 @@
|
||||||
"source-map-loader": "^0.2.4",
|
"source-map-loader": "^0.2.4",
|
||||||
"webpack": "^4.23.1",
|
"webpack": "^4.23.1",
|
||||||
"webpack-cli": "^3.1.2",
|
"webpack-cli": "^3.1.2",
|
||||||
"webpack-dev-server": "^3.1.11"
|
"webpack-dev-server": "^3.1.11",
|
||||||
|
"electron-build-env": "^0.2.0",
|
||||||
|
"neon-cli": "^0.3.1"
|
||||||
},
|
},
|
||||||
"build": {
|
"build": {
|
||||||
"appId": "im.riot.app",
|
"appId": "im.riot.app",
|
||||||
|
|
|
@ -293,4 +293,48 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||||
callbacks.resolve(payload.reply);
|
callbacks.resolve(payload.reply);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async initEventIndex(user_id: string): void {
|
||||||
|
return this._ipcCall('initEventIndex', user_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
supportsEventIndexing(): boolean {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
async addEventToIndex(ev: {}, profile: {}) {
|
||||||
|
return this._ipcCall('addEventToIndex', ev, profile);
|
||||||
|
}
|
||||||
|
|
||||||
|
async isEventIndexEmpty(): Promise<boolean> {
|
||||||
|
return this._ipcCall('isEventIndexEmpty');
|
||||||
|
}
|
||||||
|
|
||||||
|
async commitLiveEvents(): Promise<{}> {
|
||||||
|
return this._ipcCall('commitLiveEvents');
|
||||||
|
}
|
||||||
|
|
||||||
|
async searchEventIndex(term: string): Promise<{}> {
|
||||||
|
return this._ipcCall('searchEventIndex', term);
|
||||||
|
}
|
||||||
|
|
||||||
|
async addHistoricEvents(events: string, checkpoint = null, oldCheckpoint = null): Promise<{}> {
|
||||||
|
return this._ipcCall('addHistoricEvents', events, checkpoint, oldCheckpoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
async addCrawlerCheckpoint(checkpoint: {}): Promise<{}> {
|
||||||
|
return this._ipcCall('addCrawlerCheckpoint', checkpoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
async removeCrawlerCheckpoint(checkpoint: {}): Promise<{}> {
|
||||||
|
return this._ipcCall('removeCrawlerCheckpoint', checkpoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
async loadCheckpoints(checkpoint: {}): Promise<[{}]> {
|
||||||
|
return this._ipcCall('loadCheckpoints');
|
||||||
|
}
|
||||||
|
|
||||||
|
async deleteEventIndex(): Promise<> {
|
||||||
|
return this._ipcCall('deleteEventIndex');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue