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(); @Output() del = new EventEmitter(); @Output() retry = new EventEmitter<{ key: string; dl: Download }>(); @Output() folderChange = new EventEmitter<{ key: string; folder: string }>(); @Output() play = new EventEmitter(); 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(); } }