aboutsummaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authorRpsl <gmail@rpsl.info>2021-07-29 11:12:40 +0300
committerRpsl <gmail@rpsl.info>2021-07-29 11:12:40 +0300
commitfffba9065acf10f1a2d6a1e2f3bc3aa531b6a8ca (patch)
treee6690b68dfdc8eeb5f48bb016a22f57beea3dba1 /ui
parentMerge pull request #37 from Rpsl/master (diff)
downloadmetube-fffba9065acf10f1a2d6a1e2f3bc3aa531b6a8ca.tar.gz
metube-fffba9065acf10f1a2d6a1e2f3bc3aa531b6a8ca.tar.bz2
metube-fffba9065acf10f1a2d6a1e2f3bc3aa531b6a8ca.zip
Added retry button for failed download
Diffstat (limited to 'ui')
-rw-r--r--ui/package-lock.json23
-rw-r--r--ui/package.json1
-rw-r--r--ui/src/app/app.component.html14
-rw-r--r--ui/src/app/app.component.ts15
-rw-r--r--ui/src/app/downloads.service.ts1
5 files changed, 47 insertions, 7 deletions
diff --git a/ui/package-lock.json b/ui/package-lock.json
index ec5bb1b..270de65 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -20,6 +20,7 @@
"@fortawesome/angular-fontawesome": "^0.7.0",
"@fortawesome/fontawesome-svg-core": "^1.2.28",
"@fortawesome/free-regular-svg-icons": "^5.15.2",
+ "@fortawesome/free-solid-svg-icons": "^5.15.3",
"@ng-bootstrap/ng-bootstrap": "^8.0.4",
"bootstrap": "^4.5.0",
"ngx-socket-io": "~3.2.0",
@@ -1958,6 +1959,18 @@
"node": ">=6"
}
},
+ "node_modules/@fortawesome/free-solid-svg-icons": {
+ "version": "5.15.3",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz",
+ "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "^0.2.35"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/@istanbuljs/schema": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
@@ -18662,6 +18675,14 @@
"@fortawesome/fontawesome-common-types": "^0.2.35"
}
},
+ "@fortawesome/free-solid-svg-icons": {
+ "version": "5.15.3",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz",
+ "integrity": "sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "^0.2.35"
+ }
+ },
"@istanbuljs/schema": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
@@ -20257,6 +20278,8 @@
"integrity": "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==",
"dev": true,
"requires": {
+ "@angular/compiler": "9.0.0",
+ "@angular/core": "9.0.0",
"app-root-path": "^3.0.0",
"aria-query": "^3.0.0",
"axobject-query": "2.0.2",
diff --git a/ui/package.json b/ui/package.json
index 7f713d0..06e491d 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -23,6 +23,7 @@
"@fortawesome/angular-fontawesome": "^0.7.0",
"@fortawesome/fontawesome-svg-core": "^1.2.28",
"@fortawesome/free-regular-svg-icons": "^5.15.2",
+ "@fortawesome/free-solid-svg-icons": "^5.15.3",
"@ng-bootstrap/ng-bootstrap": "^8.0.4",
"bootstrap": "^4.5.0",
"ngx-socket-io": "~3.2.0",
diff --git a/ui/src/app/app.component.html b/ui/src/app/app.component.html
index e1f29d6..2ec41dd 100644
--- a/ui/src/app/app.component.html
+++ b/ui/src/app/app.component.html
@@ -39,7 +39,7 @@
<tr>
<th scope="col" style="width: 1rem;">
<app-master-checkbox #queueMasterCheckbox [id]="'queue'" [list]="downloads.queue" (changed)="queueSelectionChanged($event)"></app-master-checkbox>
- </th>
+ </th>
<th scope="col">
<button type="button" class="btn btn-link px-0 mr-4" disabled #queueDelSelected (click)="delSelectedDownloads('queue')"><fa-icon [icon]="faTrashAlt"></fa-icon>&nbsp; Cancel selected</button>
</th>
@@ -69,13 +69,14 @@
<tr>
<th scope="col" style="width: 1rem;">
<app-master-checkbox #doneMasterCheckbox [id]="'done'" [list]="downloads.done" (changed)="doneSelectionChanged($event)"></app-master-checkbox>
- </th>
+ </th>
<th scope="col">
<button type="button" class="btn btn-link px-0 mr-4" disabled #doneDelSelected (click)="delSelectedDownloads('done')"><fa-icon [icon]="faTrashAlt"></fa-icon>&nbsp; Clear selected</button>
<button type="button" class="btn btn-link px-0 mr-4" disabled #doneClearCompleted (click)="clearCompletedDownloads()"><fa-icon [icon]="faCheckCircle"></fa-icon>&nbsp; Clear completed</button>
<button type="button" class="btn btn-link px-0 mr-4" disabled #doneClearFailed (click)="clearFailedDownloads()"><fa-icon [icon]="faTimesCircle"></fa-icon>&nbsp; Clear failed</button>
</th>
<th scope="col" style="width: 2rem;"></th>
+ <th scope="col" style="width: 2rem;"></th>
</tr>
</thead>
<tbody>
@@ -90,9 +91,14 @@
</div>
<span ngbTooltip="{{download.value.msg}}">{{ download.value.title }}</span>
</td>
- <td><button type="button" class="btn btn-link" (click)="delDownload('done', download.key)"><fa-icon [icon]="faTrashAlt"></fa-icon></button></td>
+ <td>
+ <button *ngIf="download.value.status == 'error'" type="button" class="btn btn-link" (click)="retryDownload(download.key, download.value.quality)"><fa-icon [icon]="faRedoAlt"></fa-icon></button>
+ </td>
+ <td>
+ <button type="button" class="btn btn-link" (click)="delDownload('done', download.key)"><fa-icon [icon]="faTrashAlt"></fa-icon></button>
+ </td>
</tr>
</tbody>
</table>
-
+
</main><!-- /.container -->
diff --git a/ui/src/app/app.component.ts b/ui/src/app/app.component.ts
index cc8ceb2..f25bb5e 100644
--- a/ui/src/app/app.component.ts
+++ b/ui/src/app/app.component.ts
@@ -1,5 +1,6 @@
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
import { faTrashAlt, faCheckCircle, faTimesCircle } from '@fortawesome/free-regular-svg-icons';
+import { faRedoAlt } from '@fortawesome/free-solid-svg-icons';
import { DownloadsService, Status } from './downloads.service';
import { MasterCheckboxComponent } from './master-checkbox.component';
@@ -21,7 +22,7 @@ export class AppComponent implements AfterViewInit {
];
quality: string = "best";
addInProgress = false;
-
+
@ViewChild('queueMasterCheckbox') queueMasterCheckbox: MasterCheckboxComponent;
@ViewChild('queueDelSelected') queueDelSelected: ElementRef;
@ViewChild('doneMasterCheckbox') doneMasterCheckbox: MasterCheckboxComponent;
@@ -32,6 +33,7 @@ export class AppComponent implements AfterViewInit {
faTrashAlt = faTrashAlt;
faCheckCircle = faCheckCircle;
faTimesCircle = faTimesCircle;
+ faRedoAlt = faRedoAlt;
constructor(public downloads: DownloadsService) {
}
@@ -68,9 +70,12 @@ export class AppComponent implements AfterViewInit {
this.doneDelSelected.nativeElement.disabled = checked == 0;
}
- addDownload() {
+ addDownload(url?: string, quality?: string) {
+ url = url ?? this.addUrl
+ quality = quality ?? this.quality
+
this.addInProgress = true;
- this.downloads.add(this.addUrl, this.quality).subscribe((status: Status) => {
+ this.downloads.add(url, quality).subscribe((status: Status) => {
if (status.status === 'error') {
alert(`Error adding URL: ${status.msg}`);
} else {
@@ -80,6 +85,10 @@ export class AppComponent implements AfterViewInit {
});
}
+ retryDownload(key: string, quality:string){
+ this.addDownload(key, quality);
+ }
+
delDownload(where: string, id: string) {
this.downloads.delById(where, [id]).subscribe();
}
diff --git a/ui/src/app/downloads.service.ts b/ui/src/app/downloads.service.ts
index 4da30fe..5fd3b5a 100644
--- a/ui/src/app/downloads.service.ts
+++ b/ui/src/app/downloads.service.ts
@@ -15,6 +15,7 @@ interface Download {
url: string,
status: string;
msg: string;
+ quality: string;
percent: number;
speed: number;
eta: number;
bgstack15