66 lines
1.6 KiB
TypeScript
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');
|
|
}
|
|
}
|