electron-file-handler.ts 1.19 KB
import { Observable, Subscriber } from 'rxjs';
import { FileHandler } from '../api/file-handler';

export class ElectronFileHandler implements FileHandler {

    constructor (private ipcRenderer:any) {
    }

    download(source:string, target:string) : Observable<number> {
        return Observable.create((subscriber:Subscriber<number>) => {

            this.ipcRenderer.once('bsync-download-complete', () => {
                this.ipcRenderer.removeAllListeners('bsync-download-progress');
                this.ipcRenderer.removeAllListeners('bsync-download-error');
                subscriber.complete();
            });

            this.ipcRenderer.on('bsync-download-progress', (progress:number) => {
                subscriber.next(progress);
            });

            this.ipcRenderer.once('bsync-download-error', (error:any) => {
                this.ipcRenderer.removeAllListeners('bsync-download-progress');
                this.ipcRenderer.removeAllListeners('bsync-download-complete');
                subscriber.error(error);
            });

            this.ipcRenderer.send('bsync-download', {
                source : source ,
                target : target
            });
        });
    }

}