const { spawn } = require('child_process'); const ipcMain = require('electron').ipcMain; const dl_routine = require('./youtube-dl.routine') const pot = require('./player_onTop') const folderWatchr = require('./watchr') console.log(global.dir); var orig_path = ""; var path = ""; var format = "mp3"; var fol = null; var pot_open_ev = null; ipcMain .on('start-download', (event, arg)=>{ path = orig_path var download = new yt_dl(arg.url,arg.id); download.addListen(event) download.download(); }) .on('set-format',(event,arg)=>{ format = arg.format; }) .on('start-download-pl', (event, arg)=>{ var mkdirp = require('mkdirp'); if(orig_path === ""){ path = '.' }else{ path = orig_path } mkdirp(path+'/'+arg.folder, function(err) { path = path+'/'+arg.folder; // path exists unless there was an error var download = new yt_dl(arg.url,arg.id); download.addListen(event) download.download(); }); }) .on('setPath', function(event, arg) { path = arg.path; orig_path = arg.path; if(fol !== null){ fol.destroy() } fol = new folderWatchr(path); console.log('SET Path: '+path) }); var yt_dl = class{ constructor(url,id){ this.url = url ; this.percent = 0; this.lwrite = null; this.id = id; } addListen(e){ this.lwrite = e } status(stat){ this.lwrite('download-progress', stat); } download(){ var log = []; var me = this; var ls; var m = dl_routine(path,this.url,format); ls = spawn(m[0],m[1]); if(path == ''){ //ls = spawn(global.dir+'/lib/youtube-dl', ['-x','--audio-format','mp3','-i',this.url]); }else{ //ls = spawn(global.dir+'/lib/youtube-dl', ['-x','--audio-format','mp3','-i',this.url,'-o',path+'/%(title)s.%(ext)s']); } ls.stdout.on('data', (data) => { data = data.toString('utf8'); log.push(data); //console.log(data); try{ var z = data.replace(/(\r\n|\n|\r)/gm,"").split(' '); console.log(z) switch (z[0]) { case '[download]': var percent = data.split(']')[1].split('of')[0]; //console.log(z) me.percent = percent.trim(); me.lwrite.sender.send('download-progress',{percent :me.percent,id:me.id}); break; default: } var m = z.length; for(var i = 0;i { console.log(`stderr: ${data}`); }); ls.on('close', (code) => { console.log(`child process exited with code ${code}`); me.lwrite.sender.send('file',{id:me.id,file:log[log.length-2].split('[ffmpeg] Destination: ')[1]}); me.lwrite.sender.send('process-fin',{percent :me.percent,id:me.id}); }); } } module.exports = yt_dl;