From 26798a4930da04d5ce4d54742e0d8ca8d802e9ba Mon Sep 17 00:00:00 2001 From: asuyou Date: Wed, 3 Nov 2021 21:57:34 +0000 Subject: Any now shows all avaliable formats --- ui/src/app/app.component.html | 2 +- ui/src/app/app.component.ts | 17 +++++++++-------- ui/src/app/formats.ts | 39 +++++++++++++++++++++++++++++---------- 3 files changed, 39 insertions(+), 19 deletions(-) (limited to 'ui') diff --git a/ui/src/app/app.component.html b/ui/src/app/app.component.html index 039aab6..fda6033 100644 --- a/ui/src/app/app.component.html +++ b/ui/src/app/app.component.html @@ -29,7 +29,7 @@ Quality diff --git a/ui/src/app/app.component.ts b/ui/src/app/app.component.ts index ed19618..dd0b7f1 100644 --- a/ui/src/app/app.component.ts +++ b/ui/src/app/app.component.ts @@ -5,7 +5,7 @@ import { CookieService } from 'ngx-cookie-service'; import { DownloadsService, Status } from './downloads.service'; import { MasterCheckboxComponent } from './master-checkbox.component'; -import { Formats, Format, Quality } from './formats'; +import { Formats, Format, Quality, fillQualities, getQualityById } from './formats'; @Component({ selector: 'app-root', @@ -14,9 +14,9 @@ import { Formats, Format, Quality } from './formats'; }) export class AppComponent implements AfterViewInit { addUrl: string; - formats: Format[] = Formats; + formats: Format[] = fillQualities(Formats); qualities: Quality[]; - quality: string; + quality: Quality; format: string; addInProgress = false; @@ -33,10 +33,11 @@ export class AppComponent implements AfterViewInit { faRedoAlt = faRedoAlt; constructor(public downloads: DownloadsService, private cookieService: CookieService) { - this.quality = cookieService.get('metube_quality') || 'best'; this.format = cookieService.get('metube_format') || 'any'; // Needs to be set or qualities won't automatically be set this.setQualities() + let qualityId = cookieService.get('metube_quality') || this.qualities[0].id + this.quality = getQualityById(this.formats, qualityId); } ngAfterViewInit() { @@ -64,7 +65,7 @@ export class AppComponent implements AfterViewInit { } qualityChanged() { - this.cookieService.set('metube_quality', this.quality, { expires: 3650 }); + this.cookieService.set('metube_quality', this.quality.id, { expires: 3650 }); } formatChanged() { @@ -84,13 +85,13 @@ export class AppComponent implements AfterViewInit { setQualities() { // qualities for specific format this.qualities = this.formats.find(el => el.id == this.format).qualities - this.quality = "best" + this.quality = this.qualities.find(el => el.value === "best") } addDownload(url?: string, quality?: string, format?: string) { url = url ?? this.addUrl - quality = quality ?? this.quality - format = format ?? this.format + quality = quality ?? this.quality.value + format = format ?? this.quality.fmt this.addInProgress = true; this.downloads.add(url, quality, format).subscribe((status: Status) => { diff --git a/ui/src/app/formats.ts b/ui/src/app/formats.ts index 5264cd0..4f8dd0c 100644 --- a/ui/src/app/formats.ts +++ b/ui/src/app/formats.ts @@ -7,33 +7,52 @@ export interface Format { export interface Quality { id: string; text: string; + value: string; + fmt?: string; } export const Formats: Format[] = [ { id: 'any', text: 'Any', - qualities: [{ id: 'best', text: 'Best' }], + qualities: [], }, { id: 'mp4', text: 'MP4', qualities: [ - { id: 'best', text: 'Best' }, - { id: '1440', text: '1440p' }, - { id: '1080', text: '1080p' }, - { id: '720', text: '720p' }, - { id: '480', text: '480p' }, + { id: "1", value: 'best', text: 'Best MP4' }, + { id: "2", value: '1440', text: '1440p' }, + { id: "3", value: '1080', text: '1080p' }, + { id: "4", value: '720', text: '720p' }, + { id: "5", value: '480', text: '480p' }, ], }, { id: 'mp3', text: 'MP3', qualities: [ - { id: 'best', text: 'Best' }, - { id: '128', text: '128 kbps' }, - { id: '192', text: '192 kbps' }, - { id: '320', text: '320 kbps' }, + { id: "6", value: 'best', text: 'Best MP3' }, + { id: "7", value: '128', text: '128 kbps' }, + { id: "8", value: '192', text: '192 kbps' }, + { id: "9", value: '320', text: '320 kbps' }, ], }, ]; + +export const fillQualities = (formats: Format[]): Format[] => { + let allQualities: Quality[] = []; + formats.forEach((fmt) => { + fmt.qualities = fmt.qualities.map((ql) => ({ ...ql, fmt: fmt.id })); + allQualities = allQualities.concat(fmt.qualities); + }); + + formats.find((format) => format.id === 'any').qualities = allQualities; + return formats; +}; + +export const getQualityById = (formats: Format[], id: string): Quality => { + return formats + .find(ql => ql.qualities.find(el => el.id === id)).qualities + .find(el => el.id === id) +} -- cgit