import { Component, OnInit, Input, Output } from '@angular/core'; import { faGithub } from '@fortawesome/free-brands-svg-icons'; import { Subject } from 'rxjs'; import { faArrowDown, faTrash, faTrashAlt, faPencilAlt } from '@fortawesome/free-solid-svg-icons'; import { Package, InstallStatusEnum } from '../../core/services/packages.service'; import { DomainService } from '../../core/services/domain.service'; @Component({ selector: 'app-package-detailed', templateUrl: './package-detailed.component.html', styleUrls: ['./package-detailed.component.scss'] }) export class PackageDetailedComponent implements OnInit { faGithub = faGithub; faArrowDown = faArrowDown; faTrash = faTrash; faTrashAlt = faTrashAlt; faPencilAlt = faPencilAlt; @Input() package: Package; updatingStatus: string; @Output() deletedEvent = new Subject<Package>(); constructor( private domainService: DomainService, ) { } ngOnInit(): void { } install(): boolean { this.domainService.install(this.package); return false; } remove(): boolean { this.domainService.remove(this.package); return false; } update(): boolean { this.domainService.update(this.package); return false; } getWorkingInfo(): string { const p = this.package; if (p.state === InstallStatusEnum.downloading) { if (p.downloaded) { return `${p.downloaded} MB`; } else { return `0 MB`; } } if (p.state === InstallStatusEnum.extracting) { return "Extracting..."; } if (p.state === InstallStatusEnum.installing) { return "Installing..."; } } resetError(): boolean { const p = this.package; if(p.state === InstallStatusEnum.error) { this.domainService.resetPackage(p.id); } return false; } cleanUpVersion(version: string): string { if(!version && this.package.state === InstallStatusEnum.untrackedPackageFound) return "Unknown"; const pattern = this.package.versionPatternToRemove; if(!pattern || !version) return version; return version.replace(pattern, ''); } removePackage(): boolean { if(!this.package.isCustomPackage && !this.package.isOnlinePackage) return false; if(this.package.isCustomPackage){ this.domainService.removeCustomPackage(this.package); } else { this.domainService.removeOnlinePackage(this.package); } this.deletedEvent.next(this.package); return false; } getSize(size: number): string { if(size > 1024*1024*1024){ return `${(size/(1024*1024*1024)).toFixed(2)}GB`; } if(size > 1024*1024){ return `${(size/(1024*1024)).toFixed(2)}MB`; } if(size > 1024){ return `${(size/(1024)).toFixed(2)}KB`; } return `${(size).toFixed(2)}B`; } }