Files
Bridge-Multi/src-angular/app/components/browse/status-bar/status-bar.component.ts
2023-12-14 13:36:45 -06:00

115 lines
3.5 KiB
TypeScript

import { ChangeDetectorRef, Component } from '@angular/core'
import { groupBy } from '../../../../../src-shared/UtilFunctions'
import { DownloadService } from '../../../core/services/download.service'
import { SearchService } from '../../../core/services/search.service'
import { SelectionService } from '../../../core/services/selection.service'
@Component({
selector: 'app-status-bar',
templateUrl: './status-bar.component.html',
styleUrls: ['./status-bar.component.scss'],
})
export class StatusBarComponent {
multipleCompleted = false
downloading = false
error = false
percent = 0
// TODO
// eslint-disable-next-line @typescript-eslint/no-explicit-any
batchResults: any[]
// eslint-disable-next-line @typescript-eslint/no-explicit-any
chartGroups: any[][]
constructor(
private downloadService: DownloadService,
public searchService: SearchService,
private selectionService: SelectionService,
ref: ChangeDetectorRef
) {
downloadService.onDownloadUpdated(() => {
setTimeout(() => { // Make sure this is the last callback executed to get the accurate downloadCount
this.downloading = downloadService.downloadCount > 0
this.multipleCompleted = downloadService.completedCount > 1
this.percent = downloadService.totalDownloadingPercent
this.error = downloadService.anyErrorsExist
ref.detectChanges()
}, 0)
})
}
get allResultsVisible() {
return false // this.searchService.allResultsVisible
}
get selectedResults() {
return this.selectionService.getSelectedResults()
}
showDownloads() {
// TODO
// $('#downloadsModal').modal('show')
}
async downloadSelected() {
this.chartGroups = []
// TODO
// this.batchResults = await window.electron.invoke.getBatchSongDetails(this.selectedResults.map(result => result.id))
const versionGroups = groupBy(this.batchResults, 'songID')
for (const versionGroup of versionGroups) {
if (versionGroup.findIndex(version => version.chartID !== versionGroup[0].chartID) !== -1) {
// Must have multiple charts of this song
this.chartGroups.push(versionGroup.filter(version => version.versionID === version.latestVersionID))
}
}
if (this.chartGroups.length === 0) {
for (const versions of versionGroups) {
// this.searchService.sortChart(versions)
const downloadVersion = versions[0]
const downloadSong = this.selectedResults.find(song => song.id === downloadVersion.songID)!
this.downloadService.addDownload(
downloadVersion.versionID, {
chartName: downloadVersion.chartName,
artist: downloadSong.artist,
charter: downloadVersion.charters,
driveData: downloadVersion.driveData,
})
}
} else {
// TODO
// $('#selectedModal').modal('show')
// [download all charts for each song] [deselect these songs] [X]
}
}
downloadAllCharts() {
const songChartGroups = groupBy(this.batchResults, 'songID', 'chartID')
for (const chart of songChartGroups) {
// this.searchService.sortChart(chart)
const downloadVersion = chart[0]
const downloadSong = this.selectedResults.find(song => song.id === downloadVersion.songID)!
this.downloadService.addDownload(
downloadVersion.versionID, {
chartName: downloadVersion.chartName,
artist: downloadSong.artist,
charter: downloadVersion.charters,
driveData: downloadVersion.driveData,
}
)
}
}
deselectSongsWithMultipleCharts() {
// TODO
// for (const chartGroup of this.chartGroups) {
// this.selectionService.deselectSong(chartGroup[0].songID)
// }
}
clearCompleted() {
this.downloadService.cancelCompleted()
}
}