electron-file-handler.ts 1.46 KB
import { EventEmitter } from 'events';
import { FileHandler } from '../api/file-handler';
import { File } from '../api/file';

export class ElectronFileHandler extends EventEmitter implements FileHandler {

    constructor (private ipcRenderer:any) {
        super();
    }

    download(source:string, target:string) {
        this.ipcRenderer.once('bsync-download-complete', () => {
            this.ipcRenderer.removeAllListeners('bsync-download-progress');
            this.ipcRenderer.removeAllListeners('bsync-download-error');
            this.emit('complete');
        });

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

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

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

        return this;        
    }

    cleanup(files:Array<File>) : Promise<void> {
        return new Promise<void>((resolve, reject) => {

            this.ipcRenderer.once('bsync-cleanup-complete', () => {
                this.emit('cleanup-complete');
                resolve();
            });

            this.ipcRenderer.send('bsync-cleanup', files);

        });
    }

}