mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-04-17 17:51:30 +03:00
added url params on home page to auto download content
created chrome extension to facilitate this feature
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -43,6 +43,7 @@ Thumbs.db
|
|||||||
|
|
||||||
node_modules/*
|
node_modules/*
|
||||||
backend/node_modules/*
|
backend/node_modules/*
|
||||||
|
backend/public/*
|
||||||
YoutubeDL-Material/node_modules/*
|
YoutubeDL-Material/node_modules/*
|
||||||
backend/video/*
|
backend/video/*
|
||||||
backend/audio/*
|
backend/audio/*
|
||||||
|
|||||||
BIN
chrome-extension.crx
Normal file
BIN
chrome-extension.crx
Normal file
Binary file not shown.
28
chrome-extension.pem
Normal file
28
chrome-extension.pem
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMX9Wk5SM5cIfY
|
||||||
|
6ReKX3ybY1rsbNbOzG8ceN7yyeXB0mor8pVsX1MOna2HewOyBuaaYNJRO4tJBxic
|
||||||
|
7a8zQErfgHL/i/QrVvVCpfJ7xKvq6zij5NYoqd/FBUwawqjeH5/voIcAp9z5Vmsr
|
||||||
|
kL0sxJUKy6b4IWNp3noU7Nvq2RwxnXQbKDhz8FrX6oQAnDC6gsG5a2OSPsaE4oqw
|
||||||
|
6nmonORJypmpP5hqyHY8ffXBT2lAxjHT7OnYbaCBe2TQP8+rH6rDBOhjVNtUJ089
|
||||||
|
ocTQL6LtQEPkcF4yKJmtcOwHl8OPGZs5l9i8xb4j9RuSPkm2lbzZX8sOsdGGoqJZ
|
||||||
|
q68nYhsHAgMBAAECggEAXmtKEzfPObq88B/kAcgSk+FngMHZzcmR7bgD3GwdSxnQ
|
||||||
|
dkRI9zvk7eQ35tcUwntAr4Lat6/ILjFqlBmVLxrdXHuF5Xz9jcZLYgKzz61xdYM9
|
||||||
|
dC6FKF0u5eGIIvbauGAo7jaeGFX1F3Zu5b4lP9kEOGwU1B7sxF0FzsQM5+dtCJgv
|
||||||
|
We/hWQeF+9gtoVnkCSS/Mq2p0UomXXHW0Bz4+HuHlTR9aiYbviYnotABiLUhZyzt
|
||||||
|
v5yUaktb9qniBfdLpRlq8cp06xYlTEA9gJpa4Pnok8OWUsbAiW6EiXUSaZ/cchVa
|
||||||
|
AnO8WWYvVOnnt6WHI3+QdFTnqVjE5TBX4N/7bVhHGQKBgQD0dtbFqp7vZK/jVYvE
|
||||||
|
z0WPdySOg2ZDmoSfk5ZlR1+Y9zWToHv0qu8zqoOjL8Ubxrh9fGlOow+cCVdkEuaa
|
||||||
|
jWC2AWetuRvW0Z5A3XMXr0/N/1fgOkTqtp3WNrUPjVJahEg3lN+90opgFoT8swSi
|
||||||
|
s1oxW0oLcVIlrjhGBXAPCfsAuQKBgQDWBLRhHsRAvGcK5wGuVnxVApTIyBOermsW
|
||||||
|
3bJt+7+UI+4sYrBAwkWdQG93IG0cQtn48TEPBgmR2fjRF5IFT9M4/u+QOeeByT7I
|
||||||
|
we7nVtHgSY5ByC9N0mjWbcmSg8fktz/LonjldNC4kWdOFb75fxGf8kOGS5rUaMA4
|
||||||
|
zHucfB6ZvwKBgQCPHJrysMXGY21MaqIeHzEboaX3ABl37hdBzAa5V6UxSVdGCydF
|
||||||
|
vmO2HVZey/JaJmWOoKyNaowSzq0oWqBBTg6VvhDR9JHFmoVId9uOvAS+FYN+Mt5x
|
||||||
|
gWK5KuGoLxVNBC+6yh6JY526TrSfsrU+Aj0Es+qO9FIg2PL8muZVB4S3kQKBgH/5
|
||||||
|
CDMaxpc/EQ5/2413wZjDllwI51J3USm3Hz6Mzp2ybnSz/lh60k2Zfg1polTH1Lb6
|
||||||
|
4i7tmUNRZ2sAARyUAuWN64n+VeRRhe1dqZFDZPQMh7fmEAMk0fOGaoXlrt2ghdEq
|
||||||
|
Mchi9Xun1nHmpu9hgBR4NNBU3RwuFuLfwvprbZDZAoGAWa62QJChE86xQGP1MrL2
|
||||||
|
SbIzw3cfeP5xdQ3MKldJiy5IkbMR7Z13WZ7FwvPTy0g/onLHD1rqlm1kUMsGRHpD
|
||||||
|
5vH06PNpKXQ6x8BYaRGtE6P39jLycO/X+WK/lYTrWo1bR+mGCebDh4B5XrwT3gI6
|
||||||
|
x4Gvz134pZCTyQCf5JCwbQs=
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
20
chrome-extension/background.js
Normal file
20
chrome-extension/background.js
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
// background.js
|
||||||
|
|
||||||
|
// Called when the user clicks on the browser action.
|
||||||
|
chrome.browserAction.onClicked.addListener(function(tab) {
|
||||||
|
// get the frontend_url
|
||||||
|
chrome.storage.sync.get({
|
||||||
|
frontend_url: 'http://localhost',
|
||||||
|
audio_only: false
|
||||||
|
}, function(items) {
|
||||||
|
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
|
||||||
|
var activeTab = tabs[0];
|
||||||
|
var url = activeTab.url;
|
||||||
|
if (url.includes('youtube.com')) {
|
||||||
|
var new_url = items.frontend_url + '/#/home;url=' + encodeURIComponent(url) + ';audioOnly=' + items.audio_only;
|
||||||
|
chrome.tabs.create({ url: new_url });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
BIN
chrome-extension/favicon.png
Normal file
BIN
chrome-extension/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.8 KiB |
20
chrome-extension/manifest.json
Normal file
20
chrome-extension/manifest.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "YoutubeDL-Material",
|
||||||
|
"version": "0.1",
|
||||||
|
"description": "The official chrome extension of YoutubeDL-Material, an open-source and self-hosted YouTube downloader.",
|
||||||
|
"background": {
|
||||||
|
"scripts": ["background.js"]
|
||||||
|
},
|
||||||
|
"browser_action": {
|
||||||
|
"default_icon": "favicon.png"
|
||||||
|
},
|
||||||
|
"permissions": [
|
||||||
|
"tabs",
|
||||||
|
"storage"
|
||||||
|
],
|
||||||
|
"options_ui": {
|
||||||
|
"page": "options.html",
|
||||||
|
"open_in_tab": false
|
||||||
|
}
|
||||||
|
}
|
||||||
29
chrome-extension/options.html
Normal file
29
chrome-extension/options.html
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head><title>YoutubeDL-Material Extension Options</title></head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h2>Settings</h2>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h4>Frontend URL</h4>
|
||||||
|
<input placeholder="Frontend URL" type="text" id="frontend_url">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" id="audio_only">
|
||||||
|
Audio only
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<div id="status"></div>
|
||||||
|
<button id="save">Save</button>
|
||||||
|
|
||||||
|
<script src="options.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
31
chrome-extension/options.js
Normal file
31
chrome-extension/options.js
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// Saves options to chrome.storage
|
||||||
|
function save_options() {
|
||||||
|
var frontend_url = document.getElementById('frontend_url').value;
|
||||||
|
var audio_only = document.getElementById('audio_only').checked;
|
||||||
|
chrome.storage.sync.set({
|
||||||
|
frontend_url: frontend_url,
|
||||||
|
audio_only: audio_only
|
||||||
|
}, function() {
|
||||||
|
// Update status to let user know options were saved.
|
||||||
|
var status = document.getElementById('status');
|
||||||
|
status.textContent = 'Options saved.';
|
||||||
|
setTimeout(function() {
|
||||||
|
status.textContent = '';
|
||||||
|
}, 750);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restores select box and checkbox state using the preferences
|
||||||
|
// stored in chrome.storage.
|
||||||
|
function restore_options() {
|
||||||
|
chrome.storage.sync.get({
|
||||||
|
frontend_url: 'http://localhost',
|
||||||
|
audio_only: false
|
||||||
|
}, function(items) {
|
||||||
|
document.getElementById('frontend_url').value = items.frontend_url;
|
||||||
|
document.getElementById('audio_only').checked = items.audio_only;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
document.addEventListener('DOMContentLoaded', restore_options);
|
||||||
|
document.getElementById('save').addEventListener('click',
|
||||||
|
save_options);
|
||||||
@@ -15,7 +15,7 @@ import 'rxjs/add/operator/debounceTime'
|
|||||||
import 'rxjs/add/operator/do'
|
import 'rxjs/add/operator/do'
|
||||||
import 'rxjs/add/operator/switch'
|
import 'rxjs/add/operator/switch'
|
||||||
import { YoutubeSearchService, Result } from '../youtube-search.service';
|
import { YoutubeSearchService, Result } from '../youtube-search.service';
|
||||||
import { Router } from '@angular/router';
|
import { Router, ActivatedRoute } from '@angular/router';
|
||||||
import { CreatePlaylistComponent } from 'app/create-playlist/create-playlist.component';
|
import { CreatePlaylistComponent } from 'app/create-playlist/create-playlist.component';
|
||||||
import { Platform } from '@angular/cdk/platform';
|
import { Platform } from '@angular/cdk/platform';
|
||||||
import { v4 as uuid } from 'uuid';
|
import { v4 as uuid } from 'uuid';
|
||||||
@@ -56,6 +56,7 @@ export class MainComponent implements OnInit {
|
|||||||
url = '';
|
url = '';
|
||||||
exists = '';
|
exists = '';
|
||||||
percentDownloaded: number;
|
percentDownloaded: number;
|
||||||
|
autoStartDownload = false;
|
||||||
|
|
||||||
// settings
|
// settings
|
||||||
fileManagerEnabled = false;
|
fileManagerEnabled = false;
|
||||||
@@ -198,7 +199,7 @@ export class MainComponent implements OnInit {
|
|||||||
};
|
};
|
||||||
|
|
||||||
constructor(private postsService: PostsService, private youtubeSearch: YoutubeSearchService, public snackBar: MatSnackBar,
|
constructor(private postsService: PostsService, private youtubeSearch: YoutubeSearchService, public snackBar: MatSnackBar,
|
||||||
private router: Router, public dialog: MatDialog, private platform: Platform) {
|
private router: Router, public dialog: MatDialog, private platform: Platform, private route: ActivatedRoute) {
|
||||||
this.audioOnly = false;
|
this.audioOnly = false;
|
||||||
|
|
||||||
// loading config
|
// loading config
|
||||||
@@ -241,12 +242,38 @@ export class MainComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.autoStartDownload) {
|
||||||
|
this.downloadClicked();
|
||||||
|
}
|
||||||
|
|
||||||
}, error => {
|
}, error => {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// app initialization.
|
||||||
|
ngOnInit() {
|
||||||
|
this.iOS = this.platform.IOS;
|
||||||
|
|
||||||
|
if (localStorage.getItem('audioOnly') !== null) {
|
||||||
|
this.audioOnly = localStorage.getItem('audioOnly') === 'true';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (localStorage.getItem('multiDownloadMode') !== null) {
|
||||||
|
this.multiDownloadMode = localStorage.getItem('multiDownloadMode') === 'true';
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if params exist
|
||||||
|
if (this.route.snapshot.paramMap.get('url')) {
|
||||||
|
this.url = decodeURIComponent(this.route.snapshot.paramMap.get('url'));
|
||||||
|
this.audioOnly = this.route.snapshot.paramMap.get('audioOnly') === 'true';
|
||||||
|
|
||||||
|
// set auto start flag to true
|
||||||
|
this.autoStartDownload = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// file manager stuff
|
// file manager stuff
|
||||||
|
|
||||||
getMp3s() {
|
getMp3s() {
|
||||||
@@ -372,21 +399,6 @@ export class MainComponent implements OnInit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// app initialization.
|
|
||||||
ngOnInit() {
|
|
||||||
// this.iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window['MSStream'];
|
|
||||||
this.iOS = this.platform.IOS;
|
|
||||||
|
|
||||||
if (localStorage.getItem('audioOnly') !== null) {
|
|
||||||
this.audioOnly = localStorage.getItem('audioOnly') === 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (localStorage.getItem('multiDownloadMode') !== null) {
|
|
||||||
this.multiDownloadMode = localStorage.getItem('multiDownloadMode') === 'true';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// download helpers
|
// download helpers
|
||||||
|
|
||||||
downloadHelperMp3(name, is_playlist = false, forceView = false, new_download = null) {
|
downloadHelperMp3(name, is_playlist = false, forceView = false, new_download = null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user