const { spawn } = require('child_process'); const {Notification,ipcMain}= require('electron'); const dl_routine = require('./youtube-dl.routine') const nodeID3 = require('node-id3'); //const web = require('./webLoader/router'); 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; var request = require('request').defaults({ encoding: 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}`); switch(format){ case "wma": me.lwrite.sender.send('process-fin',{percent :101,id:me.id}); setTimeout(function(){ var fo = log[log.length-2].split('[ffmpeg] Destination: ')[1].replace(/\\/g,'/').trim(); var f = fo.replace('.mp3','.'+format); console.log(f) const bat = spawn(global.dir+'/lib/ffmpeg', ['-i',fo,f,'-loglevel','repeat+level+verbose']); console.dir(bat) bat.stdout.on('data', (data) => { console.log(data.toString()); }); bat.stderr.on('data', (data) => { console.log(data.toString()); }); bat.on('exit', (code) => { console.log(`Child 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}); }); },2000) break; default: 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}); break; } /* if(this.url.match('youtube')){ var url = this.url; var video_id = this.url.split('v=')[1]; var ampersandPosition = video_id.indexOf('&'); if (ampersandPosition != -1) { video_id = video_id.substring(0, ampersandPosition); } /* var x = new Notification({ title:"Cyb3r Downloader", body :"finished download for "+url, //icon : body }) x.show() //request.get('https://i.ytimg.com/vi/'+video_id+'/hqdefault.jpg', function (err, res, body) { //log[log.length-2].split('[ffmpeg] Destination: ')[1] /*var tags = { image: body } var success = nodeID3.write(tags, log[log.length-2].split('[ffmpeg] Destination: ')[1]); console.log(success); }); }*/ }); } } module.exports = yt_dl;