metube/ui/src/app/download-card.component.ts

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();
}
}