105 lines
5.5 KiB
HTML
105 lines
5.5 KiB
HTML
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
|
|
<a class="navbar-brand" href="#">MeTube</a>
|
|
<!--
|
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsDefault" aria-controls="navbarsDefault" aria-expanded="false" aria-label="Toggle navigation">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
<div class="collapse navbar-collapse" id="navbarsDefault">
|
|
<ul class="navbar-nav mr-auto">
|
|
<li class="nav-item active">
|
|
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
-->
|
|
</nav>
|
|
|
|
<main role="main" class="container">
|
|
<form #f="ngForm">
|
|
<div class="input-group add-url-box">
|
|
<input type="text" class="form-control" placeholder="Video or playlist URL" name="addUrl" [(ngModel)]="addUrl" [disabled]="addInProgress || downloads.loading">
|
|
<div class="input-group-append">
|
|
<select class="custom-select" name="quality" [(ngModel)]="quality" [disabled]="addInProgress || downloads.loading">
|
|
<option *ngFor="let q of qualities" [ngValue]="q.id">{{ q.text }}</option>
|
|
</select>
|
|
</div>
|
|
<button class="btn btn-primary add-url" type="submit" (click)="addDownload()" [disabled]="addInProgress || downloads.loading">
|
|
<span class="spinner-border spinner-border-sm" role="status" id="add-spinner" *ngIf="addInProgress"></span>
|
|
{{ addInProgress ? "Adding..." : "Add" }}
|
|
</button>
|
|
</div>
|
|
</form>
|
|
|
|
<div *ngIf="downloads.loading" class="alert alert-info" role="alert">
|
|
Connecting to server...
|
|
</div>
|
|
<div class="metube-section-header">Downloading</div>
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" style="width: 1rem;">
|
|
<app-master-checkbox #queueMasterCheckbox [id]="'queue'" [list]="downloads.queue" (changed)="queueSelectionChanged($event)"></app-master-checkbox>
|
|
</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> Cancel selected</button>
|
|
</th>
|
|
<th scope="col" style="width: 14rem;"></th>
|
|
<th scope="col" style="width: 8rem;">Speed</th>
|
|
<th scope="col" style="width: 7rem;">ETA</th>
|
|
<th scope="col" style="width: 2rem;"></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr *ngFor="let download of downloads.queue | keyvalue: asIsOrder" [class.disabled]='download.value.deleting'>
|
|
<td>
|
|
<app-slave-checkbox [id]="download.key" [master]="queueMasterCheckbox" [checkable]="download.value"></app-slave-checkbox>
|
|
</td>
|
|
<td>{{ download.value.title }}</td>
|
|
<td><ngb-progressbar height="1.5rem" [showValue]="download.value.status != 'preparing'" [striped]="download.value.status == 'preparing'" [animated]="download.value.status == 'preparing'" type="success" [value]="download.value.status == 'preparing' ? 100 : download.value.percent | number:'1.0-0'"></ngb-progressbar></td>
|
|
<td>{{ download.value.speed | speed }}</td>
|
|
<td>{{ download.value.eta | eta }}</td>
|
|
<td><button type="button" class="btn btn-link" (click)="delDownload('queue', download.key)"><fa-icon [icon]="faTrashAlt"></fa-icon></button></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<div class="metube-section-header">Completed</div>
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" style="width: 1rem;">
|
|
<app-master-checkbox #doneMasterCheckbox [id]="'done'" [list]="downloads.done" (changed)="doneSelectionChanged($event)"></app-master-checkbox>
|
|
</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> Clear selected</button>
|
|
<button type="button" class="btn btn-link px-0 mr-4" disabled #doneClearCompleted (click)="clearCompletedDownloads()"><fa-icon [icon]="faCheckCircle"></fa-icon> Clear completed</button>
|
|
<button type="button" class="btn btn-link px-0 mr-4" disabled #doneClearFailed (click)="clearFailedDownloads()"><fa-icon [icon]="faTimesCircle"></fa-icon> Clear failed</button>
|
|
</th>
|
|
<th scope="col" style="width: 2rem;"></th>
|
|
<th scope="col" style="width: 2rem;"></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr *ngFor="let download of downloads.done | keyvalue: asIsOrder" [class.disabled]='download.value.deleting'>
|
|
<td>
|
|
<app-slave-checkbox [id]="download.key" [master]="doneMasterCheckbox" [checkable]="download.value"></app-slave-checkbox>
|
|
</td>
|
|
<td>
|
|
<div style="display: inline-block; width: 1.5rem;">
|
|
<fa-icon *ngIf="download.value.status == 'finished'" [icon]="faCheckCircle" style="color: green;"></fa-icon>
|
|
<fa-icon *ngIf="download.value.status == 'error'" [icon]="faTimesCircle" style="color: red;"></fa-icon>
|
|
</div>
|
|
<span ngbTooltip="{{download.value.msg}}">{{ download.value.title }}</span>
|
|
</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 -->
|