From 05a40748c4cbc887c20aaab576a7f9e5bdfcdc77 Mon Sep 17 00:00:00 2001 From: Theenoro Date: Sun, 13 Aug 2017 23:47:09 +0200 Subject: [PATCH] 1.3.0 --- app.ico | Bin 0 -> 32988 bytes package.json | 14 +-- src/app/view/init.html | 205 +++++++++++++++++++++++++++++++++++++ src/controller/download.js | 126 +++++++++++++++++++++++ src/index.js | 129 ++++++++++++++++------- src/main.js | 46 +++++++++ src/tmp/dummy | 0 7 files changed, 477 insertions(+), 43 deletions(-) create mode 100644 app.ico create mode 100644 src/app/view/init.html create mode 100644 src/controller/download.js create mode 100644 src/main.js create mode 100644 src/tmp/dummy diff --git a/app.ico b/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..cd1b3b056d4b58086c609ead551a93016ab2f962 GIT binary patch literal 32988 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 QU + + + + + + + + + + + + + + +
+
+
+
+
+
+ +
+
+
+
+
+ + + diff --git a/src/controller/download.js b/src/controller/download.js new file mode 100644 index 0000000..bc0d7bf --- /dev/null +++ b/src/controller/download.js @@ -0,0 +1,126 @@ +const request = require('request'); +const fs = require('fs') +const ipcMain = require('electron').ipcMain; +const unzip = require('unzip') + + +var libsx = { + "ffmpeg":"ffmpeg", + "ffplay":"ffplay", + "ffprobe":"ffprobe", + "youtube-dl":"youtube-dl" +} +var libs = {}; + +libs.listen = null; +libs.libs = null; +ipcMain +.on('download-lib', (event, arg)=>{ + console.log('TEST') + libs.listen = event; + console.log(`This platform is ${process.platform}`); + switch (process.platform) { + case "win32": + for (var lib in libsx) { + libsx[lib] = libsx[lib]+'.exe'; + } + break; + default: + } + for (var lib in libsx) { + if (fs.existsSync(global.dir+"/lib/"+libsx[lib])) { + + }else{ + libsx[lib] = null; + } + } + libs.libs = libsx; + if(libsx['ffmpeg'] === null || libsx['ffplay'] === null || libsx['ffprobe'] === null ){ + var z = 0; + libs.download(libs.ff(process.platform),"ffmpeg",function(data,file){ + fs.createReadStream(file) + .pipe(unzip.Parse()) + .on('entry', function (entry) { + var fileName = entry.path; + var type = entry.type; // 'Directory' or 'File' + var size = entry.size; + console.log(fileName) + if (fileName === "ffmpeg-latest-win32-static/bin/ffmpeg.exe" || fileName === "ffmpeg-latest-win32-static/bin/ffprobe.exe" || fileName === "ffmpeg-latest-win32-static/bin/ffplay.exe") { + entry.pipe(fs.createWriteStream(global.dir+'/lib/'+fileName.split('/')[2])); + console.log('TEST') + z++; + if(z == 3){ + libs.checkNext('youtube-dl'); + } + } else { + entry.autodrain(); + } + }); + }); + }else{ + libs.checkNext('youtube-dl'); + } + console.dir(libsx); +}) +libs.checkNext = (nxt)=>{ + if( libs.libs['youtube-dl'] === null ){ + libs.yt_dl(process.platform,function(){ + libs.startFull(); + }); + }else{ + libs.startFull(); + } +} +libs.startFull = ()=>{ + libs.listen.sender.send('fin-loading',{}); +} +libs.ff = (os)=>{ + var url = ""; + switch (os) { + case "win32": + url = 'http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-latest-win32-static.zip'; + break; + default: + + } + return url; +} +libs.yt_dl = (os,cb)=>{ + var url = ""; + switch (os) { + case "win32": + url = 'https://yt-dl.org/downloads/2017.08.13/youtube-dl.exe' + break; + default: + + } + libs.download(url,"youtube-dl",function(data,file){ + fs.renameSync(file,global.dir+'/lib/youtube-dl.exe'); + cb(); + }) + +} +libs.download = (url,data,cb)=>{ + var r = request(url); + var actual = 1; + var full = 100; + var perc = 0; + r.on('data', function (chunk) { + actual += chunk.length; + perc = actual / full * 100; + console.log(perc); + libs.listen.sender.send('progress',{percent :Math.floor(perc)}); + }); + + r.on('response', function (res) { + res.pipe(fs.createWriteStream(global.dir+'/tmp/' + data + '.' + res.headers['content-type'].split('/')[1])); + full = res.headers[ 'content-length' ] ; + res.on('end', function () { + cb(data,global.dir+'/tmp/' + data + '.' + res.headers['content-type'].split('/')[1]); + }) + }); +} + + + +module.exports = libs; diff --git a/src/index.js b/src/index.js index 4480a44..7c4c4f2 100644 --- a/src/index.js +++ b/src/index.js @@ -9,45 +9,100 @@ const { } = require('electron'); const fs = require('fs'); const yt_dl = require('./controller/youtube-dl') +const dl = require('./controller/download'); -var win ; +if (!fs.existsSync(global.dir+'/tmp/inst')) { + fs.writeFileSync(global.dir+'/tmp/inst',"out"); + var win; + const createWindow = () =>{ + win = new BrowserWindow({ + width: 320, + height: 500, + show: false, + frame: false + }) + win.once('ready-to-show', () => { + }) -app.getPath('documents') -const createWindow = () =>{ - win = new BrowserWindow({ - width: 1010, - height: 800, - minWidth: 1010, - minHeight: 565, - show: false, - frame: true - }) - win.loadURL(`file://${__dirname}/app/view/layout.html`) - win.once('ready-to-show', () => { - win.show() - //var x = new yt_dl("https://www.youtube.com/watch?v=UbQgXeY_zi4") - //x.download(); - }) + win.on('closed', () => { + win = null; + }); + } + app.on('ready', createWindow); + app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit(); + } + }); +}else{ + var win ; - win.on('closed', () => { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. - win = null; + + app.getPath('documents') + const createWindow = () =>{ + + //dl.download(dl.ff(process.platform)); + /* + + win = new BrowserWindow({ + width: 1010, + height: 800, + minWidth: 1010, + minHeight: 565, + show: false, + frame: true + }) + */ + win = new BrowserWindow({ + width: 320, + height: 500, + show: false, + frame: false + }) + ipcMain + .on('start-full', (event, arg)=>{ + + var win2 = new BrowserWindow({ + width: 1010, + height: 800, + minWidth: 1010, + minHeight: 565, + show: true, + frame: true + }) + win.close(); + win2.loadURL(`file://${__dirname}/app/view/layout.html`) + win = win2; + }); + win.loadURL(`file://${__dirname}/app/view/init.html`) + win.once('ready-to-show', () => { + win.show() + //var x = new yt_dl("https://www.youtube.com/watch?v=UbQgXeY_zi4") + //x.download(); + }) + + win.on('closed', () => { + // Dereference the window object, usually you would store windows + // in an array if your app supports multi windows, this is the time + // when you should delete the corresponding element. + win = null; + }); + } + app.on('ready', createWindow); + app.on('window-all-closed', () => { + // On OS X it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + if (process.platform !== 'darwin') { + app.quit(); + } + }); + app.on('activate', () => { + // On OS X it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (mainWindow === null) { + createWindow(); + } }); } -app.on('ready', createWindow); -app.on('window-all-closed', () => { - // On OS X it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q - if (process.platform !== 'darwin') { - app.quit(); - } -}); -app.on('activate', () => { - // On OS X it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (mainWindow === null) { - createWindow(); - } -}); + +module.exports = app; diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..4b8fddb --- /dev/null +++ b/src/main.js @@ -0,0 +1,46 @@ +var app = require('./index'); + +var handleStartupEvent = function() { + if (process.platform !== 'win32') { + return false; + } + + var squirrelCommand = process.argv[1]; + console.log(squirrelCommand); + switch (squirrelCommand) { + case '--squirrel-install': + target = path.basename(process.execPath); + updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'update.exe'); + var createShortcut = updateDotExe + ' --createShortcut=' + target + ' --shortcut-locations=Desktop,StartMenu' ; + console.log (createShortcut); + exec(createShortcut); + // Always quit when done + app.quit(); + return true; + + case '--squirrel-uninstall': + // Undo anything you did in the --squirrel-install and + // --squirrel-updated handlers + target = path.basename(process.execPath); + updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'update.exe'); + var createShortcut = updateDotExe + ' --removeShortcut=' + target ; + console.log (createShortcut); + exec(createShortcut); + // Always quit when done + app.quit(); + return true; + case '--squirrel-obsolete': + // This is called on the outgoing version of your app before + // we update to the new version - it's the opposite of + // --squirrel-updated + app.quit(); + return true; + } +}; + +(function(){ + if (handleStartupEvent()) { + return; + } + +}) diff --git a/src/tmp/dummy b/src/tmp/dummy new file mode 100644 index 0000000..e69de29