import { Component, EventEmitter, Input, Output } from '@angular/core'; import { faCheck, faClock, faDownload, faFolderOpen, faHome, faPhotoVideo } from '@fortawesome/free-solid-svg-icons'; import { faCheckCircle } from '@fortawesome/free-regular-svg-icons'; import { Theme } from './theme'; export interface FolderNav { name: string; count: number; } @Component({ selector: 'app-sidebar', standalone: false, templateUrl: './sidebar.component.html', styleUrls: ['./sidebar.component.sass'] }) export class SidebarComponent { @Input() status: string; @Input() selectedFolder: string; @Input() statusCounts: { downloading: number; queued: number; completed: number }; @Input() folders: FolderNav[] = []; @Input() allCount = 0; @Input() metubeVersion: string | null = null; @Input() themes: Theme[] = []; @Input() activeTheme: Theme | null = null; @Input() open = false; @Input() mode: 'downloads' | 'library' = 'downloads'; @Input() libraryEnabled = false; @Input() libraryFolders: FolderNav[] = []; @Input() libraryTotal = 0; @Input() selectedLibraryFolder = ''; @Output() statusChange = new EventEmitter(); @Output() folderChange = new EventEmitter(); @Output() modeChange = new EventEmitter<'downloads' | 'library'>(); @Output() libraryFolderChange = new EventEmitter(); @Output() openAdvanced = new EventEmitter(); @Output() openActivity = new EventEmitter(); @Output() themeChanged = new EventEmitter(); @Output() close = new EventEmitter(); faDownload = faDownload; faClock = faClock; faCheckCircle = faCheckCircle; faFolderOpen = faFolderOpen; faHome = faHome; faCheck = faCheck; faPhotoVideo = faPhotoVideo; folderLabel(name: string): string { return name || '未分类'; } folderFilter = ''; get libraryRootCount(): number { return this.libraryFolders.find(f => f.name === '')?.count || 0; } get libraryFoldersNonRoot(): FolderNav[] { const q = this.folderFilter.trim().toLowerCase(); return this.libraryFolders.filter(f => f.name !== '' && (!q || f.name.toLowerCase().includes(q))); } selectStatus(status: string): void { this.statusChange.emit(status); this.close.emit(); } selectFolder(folder: string): void { this.folderChange.emit(folder); this.close.emit(); } selectLibrary(): void { this.modeChange.emit('library'); this.close.emit(); } selectLibraryFolder(folder: string): void { this.libraryFolderChange.emit(folder); this.close.emit(); } }