import { Component, computed, inject } from '@angular/core'; import { NgIcon } from '@ng-icons/core'; import { I18nService } from '../i18n.service'; import type { TransferSnapshot } from '@shared/types'; import { formatSpeed } from '../format'; import { PanelsService } from '../panels.service'; import { SettingsService } from '../settings.service'; import { TransfersService } from '../transfers.service'; @Component({ selector: 'app-status-bar', imports: [NgIcon], template: `
{{ activePanel().sessionId() === 'local' ? i18n.t('common.local') : activePanel().title() }} · {{ i18n.t('transfer.items', { count: activePanel().sorted().length }) }} @if (activePanel().selected().size; as count) { · {{ i18n.t('transfer.selected', { count }) }} }
`, }) export class StatusBar { readonly i18n = inject(I18nService); readonly transfers = inject(TransfersService); readonly panels = inject(PanelsService); readonly settings = inject(SettingsService); readonly activePanel = computed(() => this.panels.get(this.panels.activeSide())); percent(job: TransferSnapshot): number { if (!job.totalBytes) return 0; return Math.min(100, Math.round((job.doneBytes / job.totalBytes) * 100)); } speedSuffix(job: TransferSnapshot): string { const speed = this.transfers.speeds().get(job.id); return speed ? ` · ${formatSpeed(speed, this.settings.speedUnit())}` : ''; } }