cic-staff-client/src/app/_services/electron.service.ts

66 lines
1.6 KiB
TypeScript

import { Injectable } from '@angular/core';
import { IpcRenderer } from 'electron';
import {BehaviorSubject} from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class ElectronService {
private ipc: IpcRenderer;
images = new BehaviorSubject<string[]>([]);
directory = new BehaviorSubject<string[]>([]);
constructor() {
if ((window as any).require) {
console.log('Pass');
try {
console.log('supported');
this.ipc = (window as any).require('electron').ipcRenderer;
} catch (error) {
console.error(error);
throw error;
}
} else {
console.warn('Could not load electron ipc');
}
}
testIpc(): void {
this.ipc.on('my-custom-signal', (event, arg) => {
console.log('Received acknowledged from backend about receipt of our signal.');
console.log(event);
console.log(arg);
});
this.ipc.on('getImageResponse', (event, images) => {
this.images.next(images);
});
this.ipc.on('getDirectoryResponse', (event, directory) => {
this.directory.next(directory);
});
console.log('Sending message to backend.');
this.ipc.send('my-custom-signal', 'hello, are you there?');
}
navigateDirectory(path): any {
this.ipc.send('navigateDirectory', path);
}
async getFiles(): Promise<string[]> {
console.log('Starting');
return new Promise<string[]>((resolve, reject) => {
this.ipc.once('getFilesResponse', (event, arg) => {
resolve(arg);
});
this.ipc.send('getFiles');
});
}
openModal(): void {
console.log('Open a modal.');
this.ipc.send('openModal');
}
}