52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
import { faDownload, faExternalLinkAlt, faPlay, faRedoAlt, faTrashAlt } from '@fortawesome/free-solid-svg-icons';
|
|
import { faCheckCircle, faTimesCircle } from '@fortawesome/free-regular-svg-icons';
|
|
import { Download, DownloadsService } from './downloads.service';
|
|
import { KeyedDownload } from './active-downloads.component';
|
|
import { formatLabel, qualityLabel, relativeTime } from './labels';
|
|
|
|
@Component({
|
|
selector: 'app-download-card',
|
|
standalone: false,
|
|
templateUrl: './download-card.component.html',
|
|
styleUrls: ['./download-card.component.sass']
|
|
})
|
|
export class DownloadCardComponent {
|
|
@Input() row: KeyedDownload;
|
|
@Input() selected = false;
|
|
@Input() customDirs: string[] = [];
|
|
@Input() allowCustomDir: (tag: string) => string | boolean = () => false;
|
|
@Input() downloadUrl = '';
|
|
|
|
@Output() selectChange = new EventEmitter<boolean>();
|
|
@Output() del = new EventEmitter<string>();
|
|
@Output() retry = new EventEmitter<{ key: string; dl: Download }>();
|
|
@Output() folderChange = new EventEmitter<{ key: string; folder: string }>();
|
|
@Output() play = new EventEmitter<void>();
|
|
|
|
faDownload = faDownload;
|
|
faExternalLinkAlt = faExternalLinkAlt;
|
|
faPlay = faPlay;
|
|
faRedoAlt = faRedoAlt;
|
|
faTrashAlt = faTrashAlt;
|
|
faCheckCircle = faCheckCircle;
|
|
faTimesCircle = faTimesCircle;
|
|
qualityLabel = qualityLabel;
|
|
formatLabel = formatLabel;
|
|
relativeTime = relativeTime;
|
|
|
|
constructor(private downloads: DownloadsService) {}
|
|
|
|
thumbUrl(): string {
|
|
return this.downloads.thumbnailUrl(this.row.key);
|
|
}
|
|
|
|
folderLabel(): string {
|
|
return this.row.value.folder || '默认';
|
|
}
|
|
|
|
fullTime(): string {
|
|
return new Date((this.row.value.timestamp || 0) / 1e6).toLocaleString();
|
|
}
|
|
}
|