You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
YoutubeDL-Material/src/app/app.component.ts

174 lines
4.6 KiB
TypeScript

8 years ago
import { Component, OnInit } from '@angular/core';
import {PostsService} from './posts.services';
import { Observable } from 'rxjs/Observable';
import {FormControl, Validators} from '@angular/forms';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {MatSnackBar} from '@angular/material';
8 years ago
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/mapTo';
import 'rxjs/add/operator/toPromise';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
determinateProgress: boolean = false;
8 years ago
downloadingfile: boolean = false;
8 years ago
audioOnly: boolean;
urlError: boolean = false;
path: string = '';
url: string = '';
8 years ago
exists: string = "";
8 years ago
topBarTitle: string = "Youtube Downloader";
percentDownloaded: number;
constructor(private postsService: PostsService, public snackBar: MatSnackBar) {
8 years ago
this.audioOnly = true;
this.postsService.loadNavItems().subscribe(result => { // loads settings
var backendUrl = result.YoutubeDLMaterial.Host.backendurl;
this.topBarTitle = result.YoutubeDLMaterial.Extra.title_top;
this.postsService.path = backendUrl;
this.postsService.startPath = backendUrl;
this.postsService.startPathSSL = backendUrl;
});
8 years ago
}
urlForm = new FormControl('', [Validators.required]);
doHandshake(url: string) {
this.postsService.startHandshake(url).subscribe(theurl => {
this.postsService.path = theurl;
this.postsService.handShakeComplete = true;
console.log("Handshake complete!");
},
error => {
console.log("Initial handshake failed on http.");
this.doHandshakeSSL(url);
});
}
doHandshakeSSL(url: string) {
this.postsService.startHandshakeSSL(url).subscribe(theurl => {
this.postsService.path = theurl;
8 years ago
this.postsService.handShakeComplete = true;
console.log("Handshake complete!");
},
error => {
console.log("Initial handshake failed on https too! Make sure port 17442 is open.");
8 years ago
this.postsService.handShakeComplete = false;
});
}
ngOnInit() {
}
downloadHelperMp3(name: string)
{
this.postsService.getFileStatusMp3(name).subscribe(fileExists => {
var exists = fileExists;
this.exists = exists[0];
if (exists[0] == "failed")
8 years ago
{
var percent = exists[2];
console.log(percent);
if (percent > 0.30)
{
this.determinateProgress = true;
this.percentDownloaded = percent*100;
}
setTimeout(() => this.downloadHelperMp3(name), 500);
8 years ago
}
else
{
8 years ago
window.location.href = this.exists;
8 years ago
}
});
}
downloadHelperMp4(name: string)
{
this.postsService.getFileStatusMp4(name).subscribe(fileExists => {
var exists = fileExists;
this.exists = exists[0];
if (exists[0] == "failed")
8 years ago
{
var percent = exists[2];
if (percent > 0.30)
{
this.determinateProgress = true;
this.percentDownloaded = percent*100;
}
setTimeout(() => this.downloadHelperMp4(name), 500);
8 years ago
}
else
{
8 years ago
window.location.href = this.exists;
8 years ago
}
});
}
downloadClicked()
{
if (this.ValidURL(this.url))
{
this.urlError = false;
this.path = "";
if (this.audioOnly)
{
8 years ago
this.downloadingfile = true;
8 years ago
this.postsService.makeMP3(this.url).subscribe(posts => {
this.path = posts;
if (this.path != "-1")
{
this.downloadHelperMp3(this.path);
}
},
error => { // can't access server
this.downloadingfile = false;
this.openSnackBar("Download failed!", "OK.");
8 years ago
});
}
else
{
8 years ago
this.downloadingfile = true;
8 years ago
this.postsService.makeMP4(this.url).subscribe(posts => {
this.path = posts;
if (this.path != "-1")
{
this.downloadHelperMp4(this.path);
}
},
error => { // can't access server
this.downloadingfile = false;
this.openSnackBar("Download failed!", "OK.");
});
8 years ago
}
}
else
{
this.urlError = true;
}
}
ValidURL(str) {
var strRegex = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/;
var re=new RegExp(strRegex);
return re.test(str);
}
openSnackBar(message: string, action: string) {
this.snackBar.open(message, action, {
duration: 2000,
});
}
}