diff --git a/app.ico b/app.ico
new file mode 100644
index 0000000..cd1b3b0
Binary files /dev/null and b/app.ico differ
diff --git a/package.json b/package.json
index 5bb5df2..cd7209a 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
"productName": "cyb3r-youtube-downloader",
"version": "1.0.0",
"description": "My Electron application description",
- "main": "src/index.js",
+ "main": "src/main.js",
"scripts": {
"start": "electron-forge start",
"package": "electron-forge package",
@@ -31,13 +31,14 @@
"packageManager": "npm"
},
"electronWinstallerConfig": {
- "name": "cyb3r_youtube_downloader"
+ "name": "cyb3r_youtube_downloader",
+ "icon": "app.ico"
},
"electronInstallerDebian": {},
"electronInstallerRedhat": {},
"github_repository": {
- "owner": "",
- "name": ""
+ "owner": "Theenoro",
+ "name": "https://git.tooru.thee.moe/theenoro/electron-simple-youtube-downloader"
},
"windowsStoreConfig": {
"packageName": "",
@@ -46,10 +47,11 @@
}
},
"dependencies": {
- "electron-compile": "^6.4.1",
"electron": "^1.6.11",
+ "electron-compile": "^6.4.1",
"mkdirp": "^0.5.1",
- "request": "^2.81.0"
+ "request": "^2.81.0",
+ "unzip": "^0.1.11"
},
"devDependencies": {
"babel-plugin-transform-async-to-generator": "^6.24.1",
diff --git a/src/app/view/init.html b/src/app/view/init.html
new file mode 100644
index 0000000..c1f40fa
--- /dev/null
+++ b/src/app/view/init.html
@@ -0,0 +1,205 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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