transfersMenu.component.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { Component, Input, Output, EventEmitter } from '@angular/core'
  2. import { TranslateService } from '@ngx-translate/core'
  3. import { FileDownload, FileTransfer, PlatformService } from '../api/platform'
  4. /** @hidden */
  5. @Component({
  6. selector: 'transfers-menu',
  7. templateUrl:'./transfersMenu.component.pug',
  8. styleUrls: ['./transfersMenu.component.scss'],
  9. })
  10. export class TransfersMenuComponent {
  11. @Input() transfers: FileTransfer[]
  12. @Output() transfersChange = new EventEmitter<FileTransfer[]>()
  13. constructor (
  14. private platform: PlatformService,
  15. private translate: TranslateService,
  16. ) { }
  17. isDownload (transfer: FileTransfer): boolean {
  18. return transfer instanceof FileDownload
  19. }
  20. getProgress (transfer: FileTransfer): number {
  21. return Math.round(100 * transfer.getCompletedBytes() / transfer.getSize())
  22. }
  23. showTransfer (transfer: FileTransfer): void {
  24. const fp = transfer['filePath']
  25. if (fp) {
  26. this.platform.showItemInFolder(fp)
  27. }
  28. }
  29. removeTransfer (transfer: FileTransfer): void {
  30. if (!transfer.isComplete()) {
  31. transfer.cancel()
  32. }
  33. this.transfers = this.transfers.filter(x => x !== transfer)
  34. this.transfersChange.emit(this.transfers)
  35. }
  36. async removeAll (): Promise<void> {
  37. if (this.transfers.some(x => !x.isComplete())) {
  38. if ((await this.platform.showMessageBox({
  39. type: 'warning',
  40. message: this.translate.instant('There are active file transfers'),
  41. buttons: [
  42. this.translate.instant('Abort all'),
  43. this.translate.instant('Do not abort'),
  44. ],
  45. defaultId: 1,
  46. cancelId: 1,
  47. })).response === 1) {
  48. return
  49. }
  50. }
  51. for (const t of this.transfers) {
  52. this.removeTransfer(t)
  53. }
  54. }
  55. }