Compare commits

...

5 Commits
master ... dev

Author SHA1 Message Date
7f6f74f50b 1.5.4 2018-03-21 23:43:29 +01:00
c569c0beca 1.5.3 2017-10-08 23:21:55 +02:00
6a3d4820c1 Auto stash before merge of "dev" and "origin/dev" 2017-10-01 16:09:10 +02:00
Luca Jäntsch
3d5d5320bd 1.5.2 2017-10-01 16:09:10 +02:00
43fa503dcf Rebase 2017-10-01 16:08:04 +02:00
22 changed files with 17128 additions and 637 deletions

2
.gitignore vendored
View File

@ -71,3 +71,5 @@ out
*.mp3 *.mp3
*.part *.part
*.ytdl *.ytdl
*.webm

16192
package-lock.json generated

File diff suppressed because it is too large Load Diff

BIN
src/app.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,3 +1,4 @@
const shared = require(global.__dirname + '/../js/shared');
$(function() { $(function() {
const Config = require('electron-config'); const Config = require('electron-config');
const config = new Config(); const config = new Config();
@ -147,7 +148,17 @@ $(function() {
var YT = JSON.parse(body); var YT = JSON.parse(body);
$( $(
`<div class="media"> `<div class="media">
<img id="img-` + video_id + `" class="d-flex align-self-start mr-3" src="`+ YT.thumbnail_url +`" alt="Generic placeholder image"> <div class="d-flex alogn-self-start mr-3" style="
background:url(` + YT.thumbnail_url + `);
width: 189px;
height: 104px;
background-size: 189px;
background-position: 0px -18px;
">
<div class="media-out-` + video_id + `" style=" color: #FFF !important;
text-shadow: #454545 1px 1px 1px;
margin: auto;"></div>
</div>
<div class="media-body" id="body-` + video_id + `"> <div class="media-body" id="body-` + video_id + `">
<h5 class="mt-0">` + YT.title + `</h5> <h5 class="mt-0">` + YT.title + `</h5>
Author: ` + YT.author_name + ` Author: ` + YT.author_name + `
@ -195,7 +206,8 @@ $(function() {
cache[video_id] = YT.title; cache[video_id] = YT.title;
ipcRenderer.send('start-download', { ipcRenderer.send('start-download', {
url: $('#url').val(), url: $('#url').val(),
id: video_id id: video_id,
title: helper.replace(YT.title)
}); });
}) })
} }
@ -214,10 +226,14 @@ $(function() {
function getCommandLine() { function getCommandLine() {
switch (process.platform) { switch (process.platform) {
case 'darwin' : return 'open'; case 'darwin':
case 'win32' : return 'start'; return 'open';
case 'win64' : return 'start'; case 'win32':
default : return 'xdg-open'; return 'start';
case 'win64':
return 'start';
default:
return 'xdg-open';
} }
} }
}) })

View File

@ -1,3 +1,4 @@
const shared = require(global.__dirname+'/../js/shared');
$(function() { $(function() {
const ipcRenderer = require('electron').ipcRenderer; const ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.send('pot_real_open', {x:"xx"}); ipcRenderer.send('pot_real_open', {x:"xx"});
@ -20,6 +21,4 @@ $(function() {
$('body').on( "mouseenter",function () { $('body').on( "mouseenter",function () {
$('.navbar').css('opacity',"1") $('.navbar').css('opacity',"1")
}); });
}) })

13
src/app/js/shared.js Normal file
View File

@ -0,0 +1,13 @@
var shared = {};
var test = "";
shared.setLog = (text)=>{
test = text;
}
shared.log = ()=>{
console.log(test);
}
module.exports = shared;

View File

@ -148,15 +148,16 @@
transform: rotate(-48deg); transform: rotate(-48deg);
-webkit-transform: rotate(-48deg); -webkit-transform: rotate(-48deg);
} }
.progress { .progress {
height: 10px; height: 10px;
} }
.progress .progress-bar { .progress .progress-bar {
height: 5px; height: 5px;
width: 30px; width: 30px;
background-color: #FFF; background-color: #FFF;
content: ""; content: "";
} }
</style> </style>
</head> </head>
@ -169,7 +170,8 @@
<div class="center"></div> <div class="center"></div>
<div class="inner"></div> <div class="inner"></div>
</div> </div>
<iframe id="coub" src="https://coub.com/embed/ulak9?muted=false&autostart=true&originalSize=false&startWithHD=false" allowfullscreen="true" frameborder="0" width="320" height="180"></iframe><script async src="https://c-cdn.coub.com/embed-runner.js"></script> <iframe id="coub" src="https://coub.com/embed/ulak9?muted=false&autostart=true&originalSize=false&startWithHD=false" allowfullscreen="true" frameborder="0" width="320" height="180"></iframe>
<script async src="https://c-cdn.coub.com/embed-runner.js"></script>
<hr/> <hr/>
<div class="progress"> <div class="progress">
<div class="progress-bar" id="main"></div> <div class="progress-bar" id="main"></div>
@ -181,8 +183,8 @@
"whbex", "whbex",
"wf0jb", "wf0jb",
"ulak9", "ulak9",
"wcmxa", "wc5e2",
"wc5e2" "xza2z"
]; ];
var x = Math.floor(Math.random() * start.length) var x = Math.floor(Math.random() * start.length)
$('#coub').attr('src', 'https://coub.com/embed/' + start[x] + '?muted=false&autostart=true&originalSize=false&startWithHD=false') $('#coub').attr('src', 'https://coub.com/embed/' + start[x] + '?muted=false&autostart=true&originalSize=false&startWithHD=false')
@ -199,7 +201,7 @@
}) })
}) })
</script> </script>
</body> </body>
</html> </html>

View File

@ -8,19 +8,14 @@
module = undefined; module = undefined;
} }
</script> </script>
<!--<script src="./../libs/jquery/jquery-3.2.1.min.js"></script> <script src="./../libs/jquery/jquery-3.2.1.min.js"></script>
<script src="./../libs/bootstrap/js/bootstrap.js"></script>-->
<script src="./../libs/jquery/jquery-3.2.1.slim.min.js"></script>
<script src="./../libs/popper.min.js"></script> <script src="./../libs/popper.min.js"></script>
<script src="./../libs/bootstrap/bootstrap.min.js"></script> <script src="./../libs/bootstrap/bootstrap.min.js"></script>
<script src="./../js/player.js"></script> <script src="./../js/player.js"></script>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Cyb3r Downloader</title> <title>Cyb3r Downloader</title>
<!--<link rel="stylesheet" href="./../libs/bootstrap/css/bootstrap.css" />
<link rel="stylesheet" href="./../libs/bootstrap/css/bootstrap-theme.css" />-->
<link rel="stylesheet" href="./../libs/bootstrap/bootstrap.min.css"> <link rel="stylesheet" href="./../libs/bootstrap/bootstrap.min.css">
<link rel="stylesheet" href="./../libs/font-awesome/css/font-awesome.min.css" /> <link rel="stylesheet" href="./../libs/font-awesome/css/font-awesome.min.css" />
<link rel="stylesheet" href="./../style/bootstrap.min.css" /> <link rel="stylesheet" href="./../style/bootstrap.min.css" />
<link rel="stylesheet" href="./../style/style.css" /> <link rel="stylesheet" href="./../style/style.css" />
<link rel="stylesheet" href="./../style/player.css" /> <link rel="stylesheet" href="./../style/player.css" />
@ -33,7 +28,9 @@
<div class="list-group" role="tablist" id=""> <div class="list-group" role="tablist" id="">
<li role="presentation" class="list-group-item list-group-item-action"><a href="#download" aria-controls="download" role="tab" data-toggle="tab">Download</a></li> <li role="presentation" class="list-group-item list-group-item-action"><a href="#download" aria-controls="download" role="tab" data-toggle="tab">Download</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#player" aria-controls="player" role="tab" data-toggle="tab">Player</a></li> <li role="presentation" class="list-group-item list-group-item-action"><a href="#player" aria-controls="player" role="tab" data-toggle="tab">Player</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#wt" aria-controls="wt" role="tab" data-toggle="tab">Watch Together</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#info" aria-controls="info" role="tab" data-toggle="tab">Info</a></li> <li role="presentation" class="list-group-item list-group-item-action"><a href="#info" aria-controls="info" role="tab" data-toggle="tab">Info</a></li>
</div> </div>
</div> </div>
</div> </div>
@ -51,6 +48,7 @@
<div class="list-group" role="tablist"> <div class="list-group" role="tablist">
<li role="presentation" class="list-group-item list-group-item-action"><a href="#download" aria-controls="download" role="tab" data-toggle="tab">Download</a></li> <li role="presentation" class="list-group-item list-group-item-action"><a href="#download" aria-controls="download" role="tab" data-toggle="tab">Download</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#player" aria-controls="player" role="tab" data-toggle="tab">Player</a></li> <li role="presentation" class="list-group-item list-group-item-action"><a href="#player" aria-controls="player" role="tab" data-toggle="tab">Player</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#wt" aria-controls="wt" role="tab" data-toggle="tab">Watch Together</a></li>
<li role="presentation" class="list-group-item list-group-item-action"><a href="#info" aria-controls="info" role="tab" data-toggle="tab">Info</a></li> <li role="presentation" class="list-group-item list-group-item-action"><a href="#info" aria-controls="info" role="tab" data-toggle="tab">Info</a></li>
</div> </div>
</div> </div>
@ -98,6 +96,7 @@
<div class="dropdown-menu" aria-labelledby="dropdownMenuLink"> <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
<a class="dropdown-item format" href="#" data-format="mp3">MP3</a> <a class="dropdown-item format" href="#" data-format="mp3">MP3</a>
<a class="dropdown-item format" href="#" data-format="vorbis">OGG</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item format" href="#" data-format="mp4">MP4</a> <a class="dropdown-item format" href="#" data-format="mp4">MP4</a>
</div> </div>
@ -127,13 +126,72 @@
</div> </div>
</div> </div>
</div> </div>
<div role="tabpanel" class="tab-pane fade" id="wt">
<div class="row">
<div class="col-md-12">
<div class="input-group">
<input type="text" class="form-control" id="webview-url" placeholder="www..." aria-label="Product name">
<span class="input-group-btn">
<button class="btn btn-secondary" type="button" id="webviewload">-></button>
<button class="btn btn-secondary" type="button" id="webviewdownload">Cyb3r Download</button>
</span>
</div>
<webview id="foo" src="https://youtube.com/" style="display:inline-flex; width:100%; height:calc(100vh - 144px)"></webview>
</div>
<script>
$(function(){
require('remote').getCurrentWindow().toggleDevTools();
const webview = document.querySelector('webview')
const indicator = document.querySelector('.indicator')
const loadstart = () => {
}
const loadstop = () => {
$('#webview-url').val(webview.getURL());
}
$('#webviewload').click(()=>{
var url = $('#webview-url').val();
webview.loadURL(url)
})
$('#webviewdownload').click(()=>{
var url = $('#webview-url').val();
$.post( "http://127.0.0.1:54167/download?url="+encodeURI(url),function() {
});
})
webview.addEventListener('did-start-loading', loadstart)
webview.addEventListener('did-stop-loading', loadstop)
});
</script>
</div>
</div>
<div role="tabpanel" class="tab-pane fade" id="info"> <div role="tabpanel" class="tab-pane fade" id="info">
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<h1>Info</h1> <h1>Info</h1>
<a href="https://git.tooru.thee.moe/theenoro/electron-simple-youtube-downloader" target="_blank">Git</a> <a href="https://git.tooru.thee.moe/theenoro/electron-simple-youtube-downloader" target="_blank">Git</a>
<div id="rss">
</div>
<script>
/*
$(()=>{
$.get( "https://git.tooru.thee.moe/theenoro/electron-simple-youtube-downloader/commits/master?format=atom", function( data ) {
$xml = $( data ),
$title = $xml.find( "title" );
console.log($xml)
$('#rss').html(data.toString());
alert( "Load was performed." );
});
})
*/
</script>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@ -148,9 +206,10 @@
</div> </div>
<script src="./../js/app.js"></script> <script src="./../js/app.js"></script>
<script> <script>
document.addEventListener("keydown", function(e) { document.addEventListener("keydown", function(e) {
if (e.which === 123) { if (e.which === 123) {
require('remote').getCurrentWindow().toggleDevTools();
} else if (e.which === 116) { } else if (e.which === 116) {
location.reload(); location.reload();
} }

View File

@ -0,0 +1,109 @@
const request = require('request');
// https://vivo.sx/46b5f0d914
var vivo = (url,cb)=>{
request('https://vivo.sx/76aa530aac', function(error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
//console.log('body:', body); // Print the HTML for the Google homepage.
var html = body;
var bse64 = html.split('Core.InitializeStream (\'')[1].split('\');')[0];
console.log(bse64)
var arr = eval(Base64.decode(bse64));
console.log(arr[0])
cb(arr[0]);
});
}
module.exports = vivo;
var Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f < e.length) {
n = e.charCodeAt(f++);
r = e.charCodeAt(f++);
i = e.charCodeAt(f++);
s = n >> 2;
o = (n & 3) << 4 | r >> 4;
u = (r & 15) << 2 | i >> 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f < e.length) {
s = this._keyStr.indexOf(e.charAt(f++));
o = this._keyStr.indexOf(e.charAt(f++));
u = this._keyStr.indexOf(e.charAt(f++));
a = this._keyStr.indexOf(e.charAt(f++));
n = s << 2 | o >> 4;
r = (o & 15) << 4 | u >> 2;
i = (u & 3) << 6 | a;
t = t + String.fromCharCode(n);
if (u != 64) {
t = t + String.fromCharCode(r)
}
if (a != 64) {
t = t + String.fromCharCode(i)
}
}
t = Base64._utf8_decode(t);
return t
},
_utf8_encode: function(e) {
e = e.replace(/rn/g, "n");
var t = "";
for (var n = 0; n < e.length; n++) {
var r = e.charCodeAt(n);
if (r < 128) {
t += String.fromCharCode(r)
} else if (r > 127 && r < 2048) {
t += String.fromCharCode(r >> 6 | 192);
t += String.fromCharCode(r & 63 | 128)
} else {
t += String.fromCharCode(r >> 12 | 224);
t += String.fromCharCode(r >> 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n < e.length) {
r = e.charCodeAt(n);
if (r < 128) {
t += String.fromCharCode(r);
n++
} else if (r > 191 && r < 224) {
c2 = e.charCodeAt(n + 1);
t += String.fromCharCode((r & 31) << 6 | c2 & 63);
n += 2
} else {
c2 = e.charCodeAt(n + 1);
c3 = e.charCodeAt(n + 2);
t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
n += 3
}
}
return t
}
}

View File

@ -1,7 +1,10 @@
const request = require('request'); const request = require('request');
const fs = require('fs') const fs = require('fs')
const ipcMain = require('electron').ipcMain; const ipcMain = require('electron').ipcMain;
const unzip = require('unzip') const unzip = require('unzip');
const {
spawn
} = require('child_process');
var libsx = { var libsx = {
@ -27,6 +30,7 @@ ipcMain
break; break;
default: default:
} }
for (var lib in libsx) { for (var lib in libsx) {
if (fs.existsSync(global.dir + "/lib/" + libsx[lib])) { if (fs.existsSync(global.dir + "/lib/" + libsx[lib])) {
@ -41,6 +45,8 @@ ipcMain
if (url === '') { if (url === '') {
libs.checkNext('youtube-dl'); libs.checkNext('youtube-dl');
} else { } else {
switch (process.platform) {
case "win32":
libs.download(url, "ffmpeg", function(data, file) { libs.download(url, "ffmpeg", function(data, file) {
fs.createReadStream(file) fs.createReadStream(file)
.pipe(unzip.Parse()) .pipe(unzip.Parse())
@ -61,6 +67,43 @@ ipcMain
} }
}); });
}); });
break;
case "linux":
libs.download(url, "ffmpeg", function(data, file) {
const ls = spawn('tar', ['xvf', './src/tmp/ffmpeg.x-xz', '-C', './src/tmp']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
ls.on('close', (code) => {
var folder = "";
console.log(`child process exited with code ${code}`);
const ls = spawn('rm', ['./src/tmp/ffmpeg.x-xz']).on('close', () => {
const ls = spawn('ls', ['./src/tmp/']).stdout.on(data, (data) => {
console.log(data)
if (data.match('ffmpeg-') && data.match('-static')) {
folder = data;
}
}).on('close', () => {
const ls = spawn('cp', ['./src/tmp/' + folder + '/ffmpeg', './src/lib/ffmpeg']).on('close', () => {
const ls = spawn('cp', ['./src/tmp/' + folder + '/ffprobe', './src/lib/ffprobe']).on('close', () => {
libs.checkNext('youtube-dl');
});
});
});
});
});
})
break;
default:
}
} }
} else { } else {
libs.checkNext('youtube-dl'); libs.checkNext('youtube-dl');
@ -86,7 +129,7 @@ libs.ff = (os)=>{
url = 'http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-latest-win32-static.zip'; url = 'http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-latest-win32-static.zip';
break; break;
case "linux": case "linux":
url = '' url = 'https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz'
default: default:
@ -104,8 +147,11 @@ libs.yt_dl = (os,cb)=>{
}) })
break; break;
case "linux": case "linux":
url = '' url = 'https://yt-dl.org/downloads/latest/youtube-dl'
libs.download(url, "youtube-dl", function(data, file) {
fs.renameSync(file, global.dir + '/lib/youtube-dl');
cb(); cb();
})
default: default:
} }
@ -121,7 +167,9 @@ libs.download = (url,data,cb)=>{
actual += chunk.length; actual += chunk.length;
perc = actual / full * 100; perc = actual / full * 100;
console.log(perc); console.log(perc);
libs.listen.sender.send('progress',{percent :Math.floor(perc)}); libs.listen.sender.send('progress', {
percent: Math.floor(perc)
});
}); });
r.on('response', function(res) { r.on('response', function(res) {
@ -133,6 +181,8 @@ libs.download = (url,data,cb)=>{
}); });
} }
function win_ffmpeg() {
}
module.exports = libs; module.exports = libs;

View File

@ -1,4 +1,6 @@
const { exec } = require('child_process'); const {
exec
} = require('child_process');
var install = {}; var install = {};
@ -40,7 +42,9 @@ install.download = (url,cb) =>{
actual += chunk.length; actual += chunk.length;
perc = actual / full * 100; perc = actual / full * 100;
console.log(perc); console.log(perc);
libs.listen.sender.send('progress',{percent :Math.floor(perc)}); libs.listen.sender.send('progress', {
percent: Math.floor(perc)
});
}); });
r.on('response', function(res) { r.on('response', function(res) {
var path = global.dir + '/tmp/' + url.split('/')[url.split('/').length - 1]; var path = global.dir + '/tmp/' + url.split('/')[url.split('/').length - 1];

View File

@ -37,14 +37,18 @@ pot.isOpen = false;
pot.open = (e) => { pot.open = (e) => {
s = e; s = e;
if (win !== null) { if (win !== null) {
e.sender.send('play-in-Window',{do :false}); e.sender.send('play-in-Window', {
do: false
});
win.close(); win.close();
} }
var x = new playerOnTop(e); var x = new playerOnTop(e);
} }
pot.close = () => { pot.close = () => {
console.log('CLOSE') console.log('CLOSE')
s.sender.send('play-in-Window',{do :false}); s.sender.send('play-in-Window', {
do: false
});
win.close(); win.close();
} }
@ -60,7 +64,9 @@ class playerOnTop {
alwaysOnTop: true, alwaysOnTop: true,
icon: global.dir + '/app.ico' icon: global.dir + '/app.ico'
}) })
e.sender.send('play-in-Window',{do :true}); e.sender.send('play-in-Window', {
do: true
});
win = this.win; win = this.win;
win.loadURL(`file://${global.dir}/app/view/pot.html`) win.loadURL(`file://${global.dir}/app/view/pot.html`)
win.once('ready-to-show', () => { win.once('ready-to-show', () => {
@ -74,7 +80,9 @@ class playerOnTop {
}); });
win.on('closed', () => { win.on('closed', () => {
pot.isOpen = false; pot.isOpen = false;
e.sender.send('play-in-Window',{do :false}); e.sender.send('play-in-Window', {
do: false
});
win = null; win = null;
}); });
} }

View File

@ -1,20 +1,41 @@
const {app, Menu, Tray} = require('electron') const {
app,
Menu,
Tray
} = require('electron')
const main_window = require('./windows.js/main.js') const main_window = require('./windows.js/main.js')
const path = require('path')
module.exports = () => { module.exports = () => {
switch (process.platform) {
case 'win32':
let tray = new Tray(global.dir+'/app.ico') break;
const contextMenu = Menu.buildFromTemplate([ case 'linux':
{label: 'Open', click(){ main_window.open() }},
break;
}
let tray = new Tray(path.join(global.dir + '/app.png'))
const contextMenu = Menu.buildFromTemplate([{
label: 'Open',
click() {
main_window.open()
}
},
/*{label: 'About',click() { console.log('item 1 clicked') }}, /*{label: 'About',click() { console.log('item 1 clicked') }},
{label: 'Item1', type: 'radio'}, {label: 'Item1', type: 'radio'},
{type: 'separator'}, {type: 'separator'},
{label: 'Item2', type: 'radio'}, {label: 'Item2', type: 'radio'},
{label: 'Item3', type: 'radio', checked: true},*/ {label: 'Item3', type: 'radio', checked: true},*/
{label: 'Beenden', click() { main_window.close(); }}, {
label: 'Beenden',
click() {
main_window.close();
}
},
]) ])
tray.setToolTip('Cyb3r Downloader.') tray.setToolTip('Cyb3r Downloader.')
tray.setContextMenu(contextMenu) tray.setContextMenu(contextMenu)

View File

@ -22,7 +22,10 @@ class folderWatchr {
}); });
for (var i = 0; i < files.length; i++) { for (var i = 0; i < files.length; i++) {
files[i] = files[i].replace(/\\/g, "/"); files[i] = files[i].replace(/\\/g, "/");
watch_event.sender.send('watchr_file',{type:"add",file:files[i]}); watch_event.sender.send('watchr_file', {
type: "add",
file: files[i]
});
} }
function listener(changeType, fullPath, currentStat, previousStat) { function listener(changeType, fullPath, currentStat, previousStat) {
@ -36,10 +39,16 @@ class folderWatchr {
console.log('the file', fullPath, 'was created', currentStat) console.log('the file', fullPath, 'was created', currentStat)
files.push(fullPath); files.push(fullPath);
watch_event.sender.send('watchr_file',{type:"add",file:fullPath}); watch_event.sender.send('watchr_file', {
type: "add",
file: fullPath
});
break; break;
case 'delete': case 'delete':
watch_event.sender.send('watchr_file',{type:"remove",file:fullPath}); watch_event.sender.send('watchr_file', {
type: "remove",
file: fullPath
});
files.splice(files.indexOf(fullPath), 1); files.splice(files.indexOf(fullPath), 1);
break; break;
} }

View File

@ -1,5 +1,3 @@
const { const {
BrowserWindow, BrowserWindow,
session session
@ -18,7 +16,9 @@ class browser {
icon: global.dir + '/app.ico' icon: global.dir + '/app.ico'
}) })
setInterval(function() { setInterval(function() {
session.defaultSession.cookies.get({url:'http://crunchyroll.com'}, (error, cookies) => { session.defaultSession.cookies.get({
url: 'http://crunchyroll.com'
}, (error, cookies) => {
//console.log(error, cookies) //console.log(error, cookies)
crunch.session_save(cookies); crunch.session_save(cookies);
}) })

View File

@ -1,5 +1,10 @@
const { spawn } = require('child_process'); const {
const {Notification,ipcMain}= require('electron'); spawn
} = require('child_process');
const {
Notification,
ipcMain
} = require('electron');
const dl_routine = require('./youtube-dl.routine') const dl_routine = require('./youtube-dl.routine')
const nodeID3 = require('node-id3'); const nodeID3 = require('node-id3');
@ -15,14 +20,24 @@ var format = "mp3";
var fol = null; var fol = null;
var pot_open_ev = null; var pot_open_ev = null;
var request = require('request').defaults({ encoding: null }); var request = require('request').defaults({
encoding: null
});
var list = [];
ipcMain ipcMain
.on('start-download', (event, arg) => { .on('start-download', (event, arg) => {
path = orig_path path = orig_path;
var download = new yt_dl(arg.url,arg.id); if(list.length != 0){
list.push([arg,event]);
}else{
list.push([arg,event]);
var download = new yt_dl(arg.url, arg.id, arg.title);
download.addListen(event) download.addListen(event)
download.download(); download.download();
}
}) })
.on('set-format', (event, arg) => { .on('set-format', (event, arg) => {
format = arg.format; format = arg.format;
@ -53,11 +68,12 @@ ipcMain
}); });
var yt_dl = class { var yt_dl = class {
constructor(url,id){ constructor(url, id, title) {
this.url = url; this.url = url;
this.percent = 0; this.percent = 0;
this.lwrite = null; this.lwrite = null;
this.id = id; this.id = id;
this.title = title
} }
addListen(e) { addListen(e) {
this.lwrite = e this.lwrite = e
@ -70,7 +86,8 @@ var yt_dl = class{
var me = this; var me = this;
var ls; var ls;
var m = dl_routine(path,this.url,format); var m = dl_routine(path, this.url, format, this.title);
console.log('CMD: '+m[0]+' '+ m[1]);
ls = spawn(m[0], m[1]); ls = spawn(m[0], m[1]);
@ -95,7 +112,10 @@ var yt_dl = class{
var percent = data.split(']')[1].split('of')[0]; var percent = data.split(']')[1].split('of')[0];
//console.log(z) //console.log(z)
me.percent = percent.trim(); me.percent = percent.trim();
me.lwrite.sender.send('download-progress',{percent :me.percent,id:me.id}); me.lwrite.sender.send('download-progress', {
percent: me.percent,
id: me.id
});
break; break;
default: default:
} }
@ -111,7 +131,10 @@ var yt_dl = class{
} }
file = z[x]; file = z[x];
} }
me.lwrite.sender.send('file',{id:me.id,file:file}); me.lwrite.sender.send('file', {
id: me.id,
file: file
});
break; break;
} }
} }
@ -127,41 +150,59 @@ var yt_dl = class{
}); });
ls.on('close', (code) => { ls.on('close', (code) => {
console.log(`child process exited with code ${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('file', {
me.lwrite.sender.send('process-fin',{percent :me.percent,id:me.id}); id: me.id,
file: log[log.length - 2].split('[ffmpeg] Destination: ')[1]
});
me.lwrite.sender.send('process-fin', {
percent: me.percent,
id: me.id
});
list.splice(0,1);
if(list.length>0){
dl(list[0][0],list[0][1]);
}
var title = this.title;
if (this.url.match('youtube') && format === 'mp3') {
if(this.url.match('youtube')){
var url = this.url; var url = this.url;
var video_id = this.url.split('v=')[1]; var video_id = this.url.split('v=')[1];
var ampersandPosition = video_id.indexOf('&'); var ampersandPosition = video_id.indexOf('&');
if (ampersandPosition != -1) { if (ampersandPosition != -1) {
video_id = video_id.substring(0, ampersandPosition); video_id = video_id.substring(0, ampersandPosition);
} }
/* var fornoti = title;
if (title === "") {
fornoti = url;
}
var x = new Notification({ var x = new Notification({
title: "Cyb3r Downloader", title: "Cyb3r Downloader",
body :"finished download for "+url, body: "finished download for " + title,
//icon : body //icon : body
}) })
x.show() x.show()
//request.get('https://i.ytimg.com/vi/'+video_id+'/hqdefault.jpg', function (err, res, body) { request.get('https://i.ytimg.com/vi/' + video_id + '/hqdefault.jpg', function(err, res, body) {
//log[log.length-2].split('[ffmpeg] Destination: ')[1] //log[log.length-2].split('[ffmpeg] Destination: ')[1]
/*var tags = { var tags = {
image: body image: body
} }
var success = nodeID3.write(tags, log[log.length-2].split('[ffmpeg] Destination: ')[1]); var success = nodeID3.write(tags, path + '/' + title + '.' + format);
console.log(success);*/ console.log(success);
//}); });
} }
}); });
} }
} }
function dl(arg,event){
var download = new yt_dl(arg.url, arg.id, arg.title);
download.addListen(event)
download.download();
}
module.exports = yt_dl; module.exports = yt_dl;

View File

@ -1,24 +1,23 @@
module.exports = (path, url, format, title = "%(title)s") => {
module.exports = (path,url,format)=>{
var command = global.dir + '/lib/youtube-dl'; var command = global.dir + '/lib/youtube-dl';
var param = []; var param = [];
console.log(url); console.log(url);
if (url.match('youtube')) { if (url.match('youtube')) {
console.log('youtube') console.log('youtube')
switch (format) { switch (format) {
case "vorbis":
param = ['-x', '-f', 'bestaudio[acodec^=opus]', '--audio-format', 'vorbis', '-i', url, '-o', path + '/'+title+'.%(ext)s'];
break;
case "mp3": case "mp3":
param = ['-x','--audio-format','mp3','-i',url,'-o',path+'/%(title)s.%(ext)s']; param = ['--audio-quality', '0','-f','bestaudio[ext=m4a]','--audio-format','mp3', url, '-o', path + '/'+title+'.%(ext)s'];
break; break;
case "mp4": case "mp4":
param = ['-w','-f','bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4',url,'-o',path+'/%(title)s.%(ext)s']; param = ['-w', '-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4', url, '-o', path + '/'+title+'.%(ext)s'];
break; break;
default: default:
} }
} } else if (url.match('crunchyroll')) {
else if(url.match('crunchyroll')){
console.log('crunchyroll') console.log('crunchyroll')
param = ['--cookie', global.dir + '/tmp/c', '--all-subs', '--sub-format', 'srt', '--write-sub', '--embed-subs', url, '-o', path + '/%(title)s.%(ext)s']; param = ['--cookie', global.dir + '/tmp/c', '--all-subs', '--sub-format', 'srt', '--write-sub', '--embed-subs', url, '-o', path + '/%(title)s.%(ext)s'];
} }

View File

@ -20,29 +20,6 @@ let tray_win = null;
if (!fs.existsSync(global.dir+'/tmp/inst')) { if (!fs.existsSync(global.dir+'/tmp/inst')) {
fs.writeFileSync(global.dir+'/tmp/inst',"out"); fs.writeFileSync(global.dir+'/tmp/inst',"out");
app.quit(); app.quit();
/*var win;
const createWindow = () =>{
win = new BrowserWindow({
width: 320,
height: 500,
show: false,
frame: false,
icon: __dirname + '/app.ico'
})
win.once('ready-to-show', () => {
})
win.on('closed', () => {
win = null;
});
}
app.on('ready', createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
*/
}else{ }else{
var win ; var win ;
app.getPath('documents') app.getPath('documents')
@ -56,8 +33,6 @@ if (!fs.existsSync(global.dir+'/tmp/inst')) {
}) })
ipcMain ipcMain
.on('start-full', (event, arg)=>{ .on('start-full', (event, arg)=>{
//main_window.createWindow(); //main_window.createWindow();
//main_window.open(); //main_window.open();
tray_win = tray(); tray_win = tray();
@ -67,27 +42,18 @@ if (!fs.existsSync(global.dir+'/tmp/inst')) {
win.loadURL(`file://${__dirname}/app/view/init.html`) win.loadURL(`file://${__dirname}/app/view/init.html`)
win.once('ready-to-show', () => { win.once('ready-to-show', () => {
win.show() win.show()
//var x = new yt_dl("https://www.youtube.com/watch?v=UbQgXeY_zi4")
//x.download();
}) })
win.on('closed', () => { 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; win = null;
}); });
} }
app.on('ready', createWindow); app.on('ready', createWindow);
app.on('window-all-closed', () => { 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') { if (process.platform !== 'darwin') {
app.quit(); app.quit();
} }
}); });
app.on('activate', () => { 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) { if (mainWindow === null) {
createWindow(); createWindow();
} }

1
src/tmp/inst Normal file
View File

@ -0,0 +1 @@
out