1.4.0 Alpha
This commit is contained in:
parent
acab4b1908
commit
d7958e1594
@ -3,6 +3,9 @@
|
||||
![./current-preview.PNG](./current-preview.PNG)
|
||||
|
||||
|
||||
# v 1.4.0 Alpha
|
||||
|
||||
Preview [Video](https://cl.thee.moe/index.php/s/T8FEaFFxyhlxIj6)
|
||||
|
||||
# Download 1.3.0
|
||||
|
||||
|
@ -49,9 +49,12 @@
|
||||
"dependencies": {
|
||||
"electron": "^1.6.11",
|
||||
"electron-compile": "^6.4.1",
|
||||
"fs": "0.0.1-security",
|
||||
"mkdirp": "^0.5.1",
|
||||
"path": "^0.12.7",
|
||||
"request": "^2.81.0",
|
||||
"unzip": "^0.1.11"
|
||||
"unzip": "^0.1.11",
|
||||
"watchr": "^3.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-plugin-transform-async-to-generator": "^6.24.1",
|
||||
|
@ -1,14 +1,34 @@
|
||||
$(function() {
|
||||
var download_progress = $('#download-progress');
|
||||
var format = null;
|
||||
var out = $('#output');
|
||||
var video = document.getElementById('video');
|
||||
const ipcRenderer = require('electron').ipcRenderer;
|
||||
const request = require('request');
|
||||
const helper = require('./../../helper/string');
|
||||
|
||||
const {
|
||||
dialog
|
||||
} = require('electron').remote;
|
||||
|
||||
var cache = {};
|
||||
var path = "";
|
||||
|
||||
var pot = false;
|
||||
|
||||
ipcRenderer.send('watchr_event', {});
|
||||
ipcRenderer.on('play-in-Window',function(event,arg){
|
||||
pot = arg.do;
|
||||
})
|
||||
ipcRenderer.on('watchr_file', function(event, arg) {
|
||||
arg.file = encodeURI(arg.file)
|
||||
if (arg.type === "add") {
|
||||
$('#watchr_files').append('<tr class="file" data-file="' + arg.file + '"><td>' + arg.file + '</td><td><button class="play-file btn btn-success" data-file="' + 'file://' + arg.file + '"><i class="fa fa-play-circle-o" aria-hidden="true"></i></button></td></tr>')
|
||||
} else if (arg.type === "remove") {
|
||||
$('.file[data-file="' + arg.file + '"]').remove();
|
||||
}
|
||||
$('#download-progress-' + arg.id).html(arg.percent);
|
||||
})
|
||||
ipcRenderer.on('download-progress', function(event, arg) {
|
||||
console.log(arg); // prints "pong"
|
||||
$('#download-progress-' + arg.id).css("width", arg.percent);
|
||||
@ -20,8 +40,12 @@ $(function() {
|
||||
$('#download-progress-' + arg.id).html("CONVERTED");
|
||||
});
|
||||
ipcRenderer.on('file', function(event, arg) {
|
||||
console.log('DOWNLOADED')
|
||||
console.log(arg); // prints "pong"
|
||||
$('#body-' + arg.id).append('<audio src="file://' + path + '/' + cache[arg.id] + '.mp3" controls="true"/>');
|
||||
|
||||
$('.media-out-' + arg.id).html('<button class="play-file" data-file="' + 'file://' + path + '/' + encodeURI(cache[arg.id]) + '.' + format + '">Play</button>');
|
||||
//var video = document.getElementById('video');
|
||||
//$('#body-' + arg.id).append('<audio src="file://' + path + '/' + cache[arg.id] + '.'+format+'" controls="true"/>');
|
||||
});
|
||||
document.getElementById('party').addEventListener('click', _ => {
|
||||
path = dialog.showOpenDialog({
|
||||
@ -32,7 +56,20 @@ $(function() {
|
||||
path: path
|
||||
});
|
||||
})
|
||||
$('#pot').click(function(){
|
||||
ipcRenderer.send('open-pot', {
|
||||
});
|
||||
});
|
||||
$('body').delegate('.play-file', 'click', function(e) {
|
||||
if(pot === false){
|
||||
video.setAttribute("src", e.currentTarget.dataset.file);
|
||||
video.play();
|
||||
}else{
|
||||
ipcRenderer.send('pot_run', {file:e.currentTarget.dataset.file});
|
||||
}
|
||||
})
|
||||
$('body').delegate('.format', 'click', function(e) {
|
||||
format = e.currentTarget.dataset.format;
|
||||
ipcRenderer.send('set-format', {
|
||||
format: e.currentTarget.dataset.format
|
||||
});
|
||||
@ -43,7 +80,7 @@ $(function() {
|
||||
|
||||
if (url.match('crunchyroll')) {
|
||||
var video_id = Math.floor(Date.now() / 1000);
|
||||
$('<div class="media" ><div class="media-left"><a href="#"><img id="img-' + video_id + '" width="128" class="media-object" src="' + '" alt="..."></a></div><div class="media-body" id="body-' + video_id + '"><h4 class="media-heading">' + url + '</h4> Author: ' + '<div class="progress"><div class="progress-bar" id="download-progress-' + video_id + '" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">0%</div></div></div></div>').prependTo('#output');
|
||||
$('<div class="media" ><div class="media-left"><a href="#"><img id="img-' + video_id + '" width="128" class="media-object" src="' + '" alt="..."></a></div><div class="media-body" id="body-' + video_id + '"><h4 class="media-heading">' + url + '</h4> Author: ' + '<div class="progress"><div class="progress-bar" id="download-progress-' + video_id + '" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">0%</div></div><div class="media-out-' + video_id + '"></div></div></div>').prependTo('#output');
|
||||
ipcRenderer.send('start-download', {
|
||||
url: $('#url').val(),
|
||||
id: video_id
|
||||
@ -65,19 +102,19 @@ $(function() {
|
||||
request
|
||||
.get('https://www.youtube.com/oembed?url=https://www.youtube.com/playlist?list=' + playlist_id + '&format=json', function(err, httpResponse, body) {
|
||||
var YT = JSON.parse(body);
|
||||
$('<div class="media" ><div class="media-left"><a href="#"><img id="img-' + video_id + '" width="128" class="media-object" src="' + YT.thumbnail_url + '" alt="..."></a></div><div class="media-body" id="body-' + video_id + '"><h4 class="media-heading">' + YT.title + '</h4> Playlistauthor: ' + YT.author_name + '<div class="progress"><div class="progress-bar" id="download-progress-' + video_id + '" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">0%</div></div></div></div>').prependTo('#output');
|
||||
$('<div class="media" ><div class="media-left"><a href="#"><img id="img-' + video_id + '" width="128" class="media-object" src="' + YT.thumbnail_url + '" alt="..."></a></div><div class="media-body" id="body-' + video_id + '"><h4 class="media-heading">' + YT.title + '</h4> Playlistauthor: ' + YT.author_name + '<div class="progress"><div class="progress-bar" id="download-progress-' + video_id + '" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">0%</div></div><div class="media-out-' + video_id + '"></div></div></div>').prependTo('#output');
|
||||
cache[video_id] = YT.title;
|
||||
ipcRenderer.send('start-download-pl', {
|
||||
url: $('#url').val(),
|
||||
id: video_id,
|
||||
folder: YT.author_name + '-' + YT.title
|
||||
folder: YT.author_name + '-' + YT.title.replace(/\|/g, "_")
|
||||
});
|
||||
})
|
||||
} else {
|
||||
request
|
||||
.get('https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=' + video_id + '&format=json', function(err, httpResponse, body) {
|
||||
var YT = JSON.parse(body);
|
||||
$('<div class="media" ><div class="media-left"><a href="#"><img id="img-' + video_id + '" width="128" class="media-object" src="' + YT.thumbnail_url + '" alt="..."></a></div><div class="media-body" id="body-' + video_id + '"><h4 class="media-heading">' + YT.title + '</h4> Author: ' + YT.author_name + '<div class="progress"><div class="progress-bar" id="download-progress-' + video_id + '" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">0%</div></div></div></div>').prependTo('#output');
|
||||
$('<div class="media" ><div class="media-left"><a href="#"><img id="img-' + video_id + '" width="128" class="media-object" src="' + YT.thumbnail_url + '" alt="..."></a></div><div class="media-body" id="body-' + video_id + '"><h4 class="media-heading">' + YT.title + '</h4> Author: ' + YT.author_name + '<div class="progress"><div class="progress-bar" id="download-progress-' + video_id + '" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">0%</div></div><div class="media-out-' + video_id + '"></div></div></div>').prependTo('#output');
|
||||
cache[video_id] = YT.title;
|
||||
ipcRenderer.send('start-download', {
|
||||
url: $('#url').val(),
|
||||
|
66
src/app/js/pot_main.js
Normal file
66
src/app/js/pot_main.js
Normal file
@ -0,0 +1,66 @@
|
||||
$(function() {
|
||||
const ipcRenderer = require('electron').ipcRenderer;
|
||||
ipcRenderer.send('pot_real_open', {x:"xx"});
|
||||
var video = document.getElementById('video');
|
||||
console.log('TEST')
|
||||
ipcRenderer.on('pot_play',function(event,arg){
|
||||
var file = arg.file;
|
||||
video.setAttribute("src", file);
|
||||
video.play();
|
||||
})
|
||||
|
||||
|
||||
// btn
|
||||
var st_play = '<i class="fa fa-play-circle-o" aria-hidden="true"></i>';
|
||||
var st_pause = '<i class="fa fa-pause-circle-o" aria-hidden="true"></i>';
|
||||
|
||||
video.ontimeupdate = function(){
|
||||
var percentage = ( video.currentTime / video.duration ) * 100;
|
||||
$("#time span").css("width", percentage+"%");
|
||||
};
|
||||
|
||||
$("#time").on("click", function(e){
|
||||
var offset = $(this).offset();
|
||||
var left = (e.pageX - offset.left);
|
||||
var totalWidth = $("#time").width();
|
||||
var percentage = ( left / totalWidth );
|
||||
var vidTime = video.duration * percentage;
|
||||
video.currentTime = vidTime;
|
||||
})
|
||||
$("#volume span").css('width',(100*video.volume)+'%')
|
||||
$("#volume").on("click", function(e){
|
||||
var offset = $(this).offset();
|
||||
var left = (e.pageX - offset.left);
|
||||
var totalWidth = $("#volume").width();
|
||||
var percentage = ( left / totalWidth );
|
||||
var volume = 1 * percentage;
|
||||
video.volume = volume;
|
||||
$("#volume span").css('width',(100*percentage)+'%')
|
||||
console.log(volume)
|
||||
})
|
||||
$('#close').click(function () {
|
||||
ipcRenderer.send('close_pot',{});
|
||||
});
|
||||
|
||||
|
||||
$('#play').click(function(){
|
||||
if(video.paused){
|
||||
video.play();
|
||||
$('#play').html(st_pause)
|
||||
}else{
|
||||
video.pause();
|
||||
$('#play').html(st_play)
|
||||
}
|
||||
})
|
||||
$('.navbar').on( "mouseleave",function () {
|
||||
$('.navbar').css('opacity',"0")
|
||||
});
|
||||
$('.navbar').on( "mouseenter",function () {
|
||||
$('.navbar').css('opacity',"1")
|
||||
});
|
||||
$('body').on( "mouseenter",function () {
|
||||
$('.navbar').css('opacity',"1")
|
||||
});
|
||||
|
||||
|
||||
})
|
@ -1,59 +1 @@
|
||||
body {
|
||||
margin: 0;
|
||||
background: #131313;
|
||||
color:#e9188d;
|
||||
}
|
||||
.btn-success {
|
||||
color: #e9188d;
|
||||
background-color: #131313;
|
||||
border-color: #e9188d;
|
||||
transition: all .3s;
|
||||
}
|
||||
.btn-success:hover ,.btn-success:active,.btn-success:focus,.dropdown-toggle:focus,.dropdown-toggle:active,.btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success {
|
||||
color: #131313 !important;
|
||||
background-color: #e9188d !important;
|
||||
border-color: #e9188d !important;
|
||||
transition: all .3s;
|
||||
}
|
||||
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: rgb(233, 24, 141);
|
||||
background-color: #131313;
|
||||
}
|
||||
.dropdown-menu{
|
||||
background-color: #131313;
|
||||
}
|
||||
span.input-group-btn.open > ul > li> a{
|
||||
background-image:none;
|
||||
}
|
||||
.progress{
|
||||
background-image:none;
|
||||
background-color: #131313;
|
||||
box-shadow: inset 0px 0px 3px 0px #da1985;
|
||||
}
|
||||
.progress-bar{
|
||||
background-image:none;
|
||||
background-color: #131313;
|
||||
box-shadow: inset 0px 0px 12px 0px #da1985;
|
||||
}
|
||||
.media:first-child {
|
||||
margin-top: 15px;
|
||||
}
|
||||
.media {
|
||||
box-shadow: 0px 0px 6px 1px #ff008e;
|
||||
}
|
||||
.sidebar-nav {
|
||||
padding: 10px;
|
||||
}
|
||||
.nav.nav-list a {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.nav-header {
|
||||
|
||||
font-weight: bold;
|
||||
}
|
||||
.scroll{
|
||||
overflow-y: scroll;
|
||||
height: calc( 100vh - 46px);
|
||||
}
|
||||
body{margin:0;margin-top:50px;background:#1d2247;color:#e01931}.btn-success{color:#e01931;background-color:#1d2247;border-color:#e01931;transition:all .3s}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.dropdown-toggle:active,.dropdown-toggle:focus,.open>.dropdown-toggle.btn-success{color:#1d2247!important;background-color:#e01931!important;border-color:#e01931!important;transition:all .3s}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#e01931;background-color:#1d2247}.dropdown-menu{background-color:#1d2247}span.input-group-btn.open>ul>li>a{background-image:none}.progress{background-image:none;background-color:#1d2247;box-shadow:inset 0 0 3px 0 #e01931}.progress-bar{background-image:none;background-color:#1d2247;box-shadow:inset 0 0 12px 0 #e01931;transition:.3s all}.media:first-child{margin-top:15px}.media{box-shadow:0 0 6px 1px #e01931}.sidebar-nav{padding:10px}.nav.nav-list a{padding:5px 10px}.nav-header{font-weight:700}.scroll{overflow-y:scroll;height:calc(100vh - 96px)}.left-playlist{box-shadow:0 0 6px 1px #e01931;height:calc(100vh - 20vw - 30px)}
|
76
src/app/style/style.less
Normal file
76
src/app/style/style.less
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
@main-front-color: #E01931;
|
||||
@background-color: #1D2247;
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
margin-top: 50px;
|
||||
background: @background-color;
|
||||
color:@main-front-color;
|
||||
}
|
||||
.btn-success {
|
||||
color: @main-front-color;
|
||||
background-color: @background-color;
|
||||
border-color: @main-front-color;
|
||||
transition: all .3s;
|
||||
}
|
||||
.btn-success:hover ,.btn-success:active,.btn-success:focus,.dropdown-toggle:focus,.dropdown-toggle:active,.btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success {
|
||||
color: @background-color !important;
|
||||
background-color: @main-front-color !important;
|
||||
border-color: @main-front-color !important;
|
||||
transition: all .3s;
|
||||
}
|
||||
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: @main-front-color;
|
||||
background-color: @background-color;
|
||||
}
|
||||
.dropdown-menu{
|
||||
background-color: @background-color;
|
||||
}
|
||||
span.input-group-btn.open > ul > li> a{
|
||||
background-image:none;
|
||||
}
|
||||
.progress{
|
||||
background-image:none;
|
||||
background-color: @background-color;
|
||||
box-shadow: inset 0px 0px 3px 0px @main-front-color;
|
||||
}
|
||||
.progress-bar{
|
||||
background-image:none;
|
||||
background-color: @background-color;
|
||||
box-shadow: inset 0px 0px 12px 0px @main-front-color;
|
||||
transition: .3s all;
|
||||
}
|
||||
.media:first-child {
|
||||
margin-top: 15px;
|
||||
}
|
||||
.media {
|
||||
box-shadow: 0px 0px 6px 1px @main-front-color;
|
||||
}
|
||||
.sidebar-nav {
|
||||
padding: 10px;
|
||||
}
|
||||
.nav.nav-list a {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.nav-header {
|
||||
|
||||
font-weight: bold;
|
||||
}
|
||||
.scroll{
|
||||
overflow-y: scroll;
|
||||
height: ~"calc( 100vh - 96px)";
|
||||
}
|
||||
|
||||
.left-playlist{
|
||||
box-shadow: 0px 0px 6px 1px @main-front-color;
|
||||
height: ~"calc(100vh - 20vw - 30px )";
|
||||
}
|
@ -25,14 +25,15 @@
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="sidebar-nav">
|
||||
<ul class="nav nav-list">
|
||||
<li class="nav-header">Navigation</li>
|
||||
<li class="active"><a href=""><i class="fa fa-download" aria-hidden="true"></i> Downloader</a></li>
|
||||
<li><a href="#"><i class="fa fa-play-circle-o" aria-hidden="true"></i> Player</a></li>
|
||||
<ul class="nav nav-tabs nav-pills nav-stacked" role="tablist">
|
||||
<li role="presentation" class="active"><a href="#download" aria-controls="download" role="tab" data-toggle="tab">Download</a></li>
|
||||
<li role="presentation"><a href="#player" aria-controls="player" role="tab" data-toggle="tab">Player</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<dic class="col-md-10">
|
||||
<div class="col-md-6">
|
||||
<div class="tab-content">
|
||||
<div role="tabpanel" class="tab-pane fade in active" id="download">
|
||||
<input id="business" type="file" style="display: none" />
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
@ -63,6 +64,23 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div role="tabpanel" class="tab-pane fade" id="player">
|
||||
<table class="table table-striped" id="watchr_files">
|
||||
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<video controls="true" id="video"></video>
|
||||
</div>
|
||||
<button id="pot">POT</button>
|
||||
<div class="left-playlist">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="./../js/app.js"></script>
|
||||
|
112
src/app/view/pot.html
Normal file
112
src/app/view/pot.html
Normal file
@ -0,0 +1,112 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<script>
|
||||
if (typeof module === 'object') {
|
||||
window.module = module;
|
||||
module = undefined;
|
||||
}
|
||||
</script>
|
||||
<script src="./../libs/jquery/jquery-3.2.1.min.js"></script>
|
||||
<script src="./../libs/bootstrap/js/bootstrap.js"></script>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<title>Cyb3r Downloader - Player on Top</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/font-awesome/css/font-awesome.min.css" />
|
||||
<link rel="stylesheet" href="./../style/progress.css" />
|
||||
<link rel="stylesheet" href="./../style/style.css" />
|
||||
<style>
|
||||
video {
|
||||
max-width: 100%;
|
||||
width:100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
body{
|
||||
overflow:hidden;
|
||||
}
|
||||
body > nav > div > button {
|
||||
margin: 0;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
.navbar{
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
height: 35px;
|
||||
min-height: 35px;
|
||||
width:100%;
|
||||
}
|
||||
#time
|
||||
{
|
||||
cursor: pointer;
|
||||
height: 10px;
|
||||
margin-bottom: 10px;
|
||||
outline: thin solid #e01931;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
vertical-align: -webkit-baseline-middle;
|
||||
line-height: 1.42857143; height: 9px;
|
||||
display:inline-block;
|
||||
top: 13px;
|
||||
}
|
||||
#volume
|
||||
{
|
||||
cursor: pointer;
|
||||
height: 10px;
|
||||
margin-bottom: 10px;
|
||||
outline: thin solid #e01931;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
width: 200px;
|
||||
vertical-align: -webkit-baseline-middle;
|
||||
line-height: 1.42857143; height: 9px;
|
||||
display:inline-block;
|
||||
top: 13px;
|
||||
}
|
||||
#time span ,#volume span
|
||||
{
|
||||
background-color: #e01931;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 10px;
|
||||
width: 0px;
|
||||
}
|
||||
body .navbar{
|
||||
opacity: 0;
|
||||
transition: .3s all;
|
||||
position: fixed;
|
||||
}
|
||||
body:hover .navbar{
|
||||
opacity: 1;
|
||||
transition: .3s all;
|
||||
background-color: rgba(51, 51, 51, 0.64);
|
||||
box-shadow: 5px 0px 6px 6px rgba(51, 51, 51, 0.64);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body style="margin:0">
|
||||
<nav class="navbar navbar-static-top">
|
||||
<div style=" margin: 0; padding: 0; height: 35px; display:flex;">
|
||||
<button class="btn nabbar-btn btn-success" style="margin:0;" id="play"><i class="fa fa-pause-circle-o" aria-hidden="true"></i></button>
|
||||
<div id="time">
|
||||
<span></span>
|
||||
</div>
|
||||
<button class="btn nabbar-btn btn-success" style="margin:0;" ><i class="fa fa-volume-up" aria-hidden="true"></i></button>
|
||||
<div id="volume">
|
||||
<span></span>
|
||||
</div>
|
||||
<button class="btn navbar-btn btn-success" style="-webkit-app-region: drag;margin: 0;"><i class="fa fa-arrows" aria-hidden="true"></i></button>
|
||||
<button class="btn navbar-btn btn-success" id="close" style="margin:0;"><i class="fa fa-window-close-o" aria-hidden="true"></i></button>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<video id="video"></video>
|
||||
<script src="./../js/pot_main.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -22,13 +22,13 @@ crunch.session_save = (session)=>{
|
||||
}
|
||||
net += session[i].domain+' '+session[i].httpOnly.toString().toUpperCase()+' '+session[i].path+' '+session[i].secure.toString().toUpperCase()+' '+Math.ceil(session[i].expirationDate)+' '+session[i].name+' '+session[i].value+'\n';
|
||||
}
|
||||
console.log(net);
|
||||
fs.writeFile(global.dir+"/tmp/c", net, function(err) {
|
||||
//console.log(net);
|
||||
/*fs.writeFile(global.dir+"/tmp/c", net, function(err) {
|
||||
if(err) {
|
||||
return console.log(err);
|
||||
}
|
||||
console.log("T!");
|
||||
});
|
||||
//console.log("T!");
|
||||
});*/
|
||||
}
|
||||
|
||||
module.exports = crunch;
|
||||
|
73
src/controller/player_onTop.js
Normal file
73
src/controller/player_onTop.js
Normal file
@ -0,0 +1,73 @@
|
||||
const {
|
||||
app,
|
||||
BrowserWindow,
|
||||
Menu,
|
||||
dialog,
|
||||
ipcMain
|
||||
} = require('electron');
|
||||
|
||||
//alwaysOnTop
|
||||
|
||||
var win = null;
|
||||
|
||||
var pot = {};
|
||||
var s = null;
|
||||
|
||||
ipcMain
|
||||
.on('close_pot',(event,arg)=>{
|
||||
console.log('CLOSE')
|
||||
pot.close(event);
|
||||
})
|
||||
|
||||
pot.isOpen = false;
|
||||
|
||||
pot.open = (e) => {
|
||||
s = e;
|
||||
if (win !== null) {
|
||||
e.sender.send('play-in-Window',{do :false});
|
||||
win.close();
|
||||
}
|
||||
var x = new playerOnTop(e);
|
||||
console.log('XX');
|
||||
}
|
||||
pot.close = ()=>{
|
||||
console.log('CLOSE')
|
||||
s.sender.send('play-in-Window',{do :false});
|
||||
win.close();
|
||||
}
|
||||
|
||||
|
||||
class playerOnTop {
|
||||
constructor(e) {
|
||||
pot.isOpen = true;
|
||||
this.win = new BrowserWindow({
|
||||
width: 320,
|
||||
height: 500,
|
||||
show: false,
|
||||
frame: false,
|
||||
alwaysOnTop: true,
|
||||
icon: global.dir + '/app.ico'
|
||||
})
|
||||
e.sender.send('play-in-Window',{do :true});
|
||||
win = this.win;
|
||||
win.loadURL(`file://${global.dir}/app/view/pot.html`)
|
||||
win.once('ready-to-show', () => {
|
||||
win.show();
|
||||
console.log('XX');
|
||||
})
|
||||
win.on('resize', function () {
|
||||
setTimeout(function () {
|
||||
var size = win.getSize();
|
||||
win.setSize(size[0], parseInt(size[0] * 9 / 16));
|
||||
}, 0);
|
||||
});
|
||||
win.on('closed', () => {
|
||||
pot.isOpen = false;
|
||||
e.sender.send('play-in-Window',{do :false});
|
||||
win = null;
|
||||
console.log('XX');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = pot;
|
61
src/controller/watchr.js
Normal file
61
src/controller/watchr.js
Normal file
@ -0,0 +1,61 @@
|
||||
const watchr = require('watchr');
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const ipcMain = require('electron').ipcMain;
|
||||
|
||||
var watch_event = null;
|
||||
|
||||
ipcMain
|
||||
.on('watchr_event', (event, arg)=>{
|
||||
watch_event = event
|
||||
})
|
||||
|
||||
class folderWatchr {
|
||||
constructor(folder) {
|
||||
this.folder = folder;
|
||||
this.files = [];
|
||||
var files = this.files;
|
||||
|
||||
fs.readdirSync(this.folder).forEach(file => {
|
||||
files.push(folder + '/' + file);
|
||||
|
||||
});
|
||||
for(var i = 0;i<files.length;i++){
|
||||
files[i]=files[i].replace(/\\/g, "/");
|
||||
watch_event.sender.send('watchr_file',{type:"add",file:files[i]});
|
||||
}
|
||||
|
||||
function listener(changeType, fullPath, currentStat, previousStat) {
|
||||
console.log(changeType);
|
||||
fullPath = fullPath.replace(/\\/g, "/");
|
||||
switch (changeType) {
|
||||
case 'update':
|
||||
|
||||
break;
|
||||
case 'create':
|
||||
|
||||
console.log('the file', fullPath, 'was created', currentStat)
|
||||
files.push(fullPath);
|
||||
watch_event.sender.send('watchr_file',{type:"add",file:fullPath});
|
||||
break;
|
||||
case 'delete':
|
||||
watch_event.sender.send('watchr_file',{type:"remove",file:fullPath});
|
||||
files.splice(files.indexOf(fullPath), 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function next(err) {
|
||||
if (err) return console.log('watch failed on', path, 'with error', err);
|
||||
console.log('watch successful on', path);
|
||||
}
|
||||
|
||||
// Watch the path with the change listener and completion callback
|
||||
this.stalker = watchr.open(this.folder , listener, next);
|
||||
}
|
||||
destroy(){
|
||||
this.stalker.close()
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = folderWatchr;
|
@ -1,13 +1,31 @@
|
||||
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('pot_run',(event,arg)=>{
|
||||
pot_open_ev.sender.send('pot_play',arg);
|
||||
})
|
||||
|
||||
.on('pot_real_open',(event,arg)=>{
|
||||
console.log('POT EVENT SET')
|
||||
pot_open_ev = event;
|
||||
})
|
||||
ipcMain
|
||||
.on('open-pot',(event,arg)=>{
|
||||
|
||||
pot.open(event);
|
||||
})
|
||||
.on('start-download', (event, arg)=>{
|
||||
path = orig_path
|
||||
var download = new yt_dl(arg.url,arg.id);
|
||||
@ -35,6 +53,10 @@ ipcMain
|
||||
ipcMain.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)
|
||||
});
|
||||
|
||||
@ -79,7 +101,23 @@ var yt_dl = class{
|
||||
me.lwrite.sender.send('download-progress',{percent :me.percent,id:me.id});
|
||||
break;
|
||||
default:
|
||||
|
||||
}
|
||||
var m = z.length;
|
||||
for(var i = 0;i<m;i++){
|
||||
if(z[i] === '[ffmpeg]'){
|
||||
if(z[i+1] === 'Merging'){
|
||||
var file = "";
|
||||
for(var x = i+4;x<m;x++){
|
||||
console.log(z[x])
|
||||
if(z[x] === 'has' && z[x+1] === "already" && z[x+2] === "been" && z[x+3] === 'downloaded'){
|
||||
break;
|
||||
}
|
||||
file = z[x];
|
||||
}
|
||||
me.lwrite.sender.send('file',{id:me.id,file:file});
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}catch(e){
|
||||
console.log(e);
|
||||
|
@ -12,7 +12,7 @@ module.exports = (path,url,format)=>{
|
||||
param = ['-x','--audio-format','mp3','-i',url,'-o',path+'/%(title)s.%(ext)s'];
|
||||
break;
|
||||
case "mp4":
|
||||
param = ['-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)s.%(ext)s'];
|
||||
break;
|
||||
default:
|
||||
|
||||
|
15
src/helper/string.js
Normal file
15
src/helper/string.js
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
|
||||
|
||||
|
||||
var st = {};
|
||||
|
||||
|
||||
st.replace = (str)=>{
|
||||
return sub
|
||||
.replace(/\|/g, "_");
|
||||
}
|
||||
|
||||
|
||||
|
||||
module.exports = st;
|
@ -78,7 +78,7 @@ if (!fs.existsSync(global.dir+'/tmp/inst')) {
|
||||
icon: __dirname + '/app.ico'
|
||||
})
|
||||
win.close();
|
||||
var z = new browser('http://www.crunchyroll.com/');
|
||||
//var z = new browser('http://www.crunchyroll.com/');
|
||||
win2.loadURL(`file://${__dirname}/app/view/layout.html`)
|
||||
win = win2;
|
||||
});
|
||||
|
76
src/themes/standard/style.less
Normal file
76
src/themes/standard/style.less
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
@main-front-color: #E01931;
|
||||
@background-color: #1D2247;
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
margin-top: 50px;
|
||||
background: @background-color;
|
||||
color:@main-front-color;
|
||||
}
|
||||
.btn-success {
|
||||
color: @main-front-color;
|
||||
background-color: @background-color;
|
||||
border-color: @main-front-color;
|
||||
transition: all .3s;
|
||||
}
|
||||
.btn-success:hover ,.btn-success:active,.btn-success:focus,.dropdown-toggle:focus,.dropdown-toggle:active,.btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success {
|
||||
color: @background-color !important;
|
||||
background-color: @main-front-color !important;
|
||||
border-color: @main-front-color !important;
|
||||
transition: all .3s;
|
||||
}
|
||||
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: @main-front-color;
|
||||
background-color: @background-color;
|
||||
}
|
||||
.dropdown-menu{
|
||||
background-color: @background-color;
|
||||
}
|
||||
span.input-group-btn.open > ul > li> a{
|
||||
background-image:none;
|
||||
}
|
||||
.progress{
|
||||
background-image:none;
|
||||
background-color: @background-color;
|
||||
box-shadow: inset 0px 0px 3px 0px @main-front-color;
|
||||
}
|
||||
.progress-bar{
|
||||
background-image:none;
|
||||
background-color: @background-color;
|
||||
box-shadow: inset 0px 0px 12px 0px @main-front-color;
|
||||
transition: .3s all;
|
||||
}
|
||||
.media:first-child {
|
||||
margin-top: 15px;
|
||||
}
|
||||
.media {
|
||||
box-shadow: 0px 0px 6px 1px @main-front-color;
|
||||
}
|
||||
.sidebar-nav {
|
||||
padding: 10px;
|
||||
}
|
||||
.nav.nav-list a {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.nav-header {
|
||||
|
||||
font-weight: bold;
|
||||
}
|
||||
.scroll{
|
||||
overflow-y: scroll;
|
||||
height: ~"calc( 100vh - 96px)";
|
||||
}
|
||||
|
||||
.left-playlist{
|
||||
box-shadow: 0px 0px 6px 1px @main-front-color;
|
||||
height: ~"calc(100vh - 20vw - 30px )";
|
||||
}
|
15
src/tmp/c
Normal file
15
src/tmp/c
Normal file
@ -0,0 +1,15 @@
|
||||
# Netscape HTTP Cookie File
|
||||
# http://curl.haxx.se/rfc/cookie_spec.html
|
||||
# This is a generated file! Do not edit.
|
||||
|
||||
.crunchyroll.com TRUE / FALSE 1534887951 __cfduid db1426254a0b86e7ca8b70551a18644361503351951
|
||||
.crunchyroll.com TRUE / FALSE 1537220753 __qca P0-1835482882-1503351953593
|
||||
.crunchyroll.com TRUE / FALSE 1566942248 _ga GA1.2.1843711990.1503351953
|
||||
.crunchyroll.com TRUE / FALSE 1503956648 _gid GA1.2.1726060626.1503868189
|
||||
.crunchyroll.com TRUE / FALSE 1504561873 c_d p%3D1
|
||||
.crunchyroll.com TRUE / FALSE 1504561873 c_userid 64927993
|
||||
.crunchyroll.com TRUE / FALSE 1504561873 c_userkey 2%3AZxOX%2BsILKGFm2Nmfc6%2FX12lxWjo%3D
|
||||
.crunchyroll.com TRUE / FALSE 1518903952 c_visitor 95852853-d74d-4e9c-b5ad-182b74e6f44f
|
||||
.crunchyroll.com TRUE / FALSE 1503960371 cf_clearance fb4b8c534496cdfec5683c51ec28dc2e4c70e5ce-1503351970-604800
|
||||
.crunchyroll.com TRUE / FALSE 1537220753 sess_id jjdcwcg0amrsbt44eviz34disrmrqd2m
|
||||
.crunchyroll.com TRUE / FALSE 1537220753 session_id 2074779edf6db7782876092c0d2f03db
|
Loading…
Reference in New Issue
Block a user