From 88bbdd0da16e5efa220b4e000f87674f057e64b5 Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Sat, 22 Jan 2022 14:16:59 +0100 Subject: [PATCH] debounce tab progress updates --- tabby-core/src/components/baseTab.component.ts | 17 +++++++---------- .../src/components/tabHeader.component.ts | 5 ++++- tabby-electron/src/index.ts | 3 ++- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/tabby-core/src/components/baseTab.component.ts b/tabby-core/src/components/baseTab.component.ts index 9ef8250a..3f236fe6 100644 --- a/tabby-core/src/components/baseTab.component.ts +++ b/tabby-core/src/components/baseTab.component.ts @@ -1,4 +1,4 @@ -import { Observable, Subject, distinctUntilChanged } from 'rxjs' +import { Observable, Subject, distinctUntilChanged, filter, debounceTime } from 'rxjs' import { EmbeddedViewRef, ViewContainerRef, ViewRef } from '@angular/core' import { RecoveryToken } from '../api/tabRecovery' import { BaseComponent } from './base.component' @@ -61,7 +61,6 @@ export abstract class BaseTabComponent extends BaseComponent { /* @hidden */ viewContainerEmbeddedRef?: EmbeddedViewRef - private progressClearTimeout: number private titleChange = new Subject() private focused = new Subject() private blurred = new Subject() @@ -87,6 +86,12 @@ export abstract class BaseTabComponent extends BaseComponent { this.blurred$.subscribe(() => { this.hasFocus = false }) + this.subscribeUntilDestroyed(this.progress.pipe( + filter(x => x !== null), + debounceTime(5000), + ), () => { + this.setProgress(null) + }) } setTitle (title: string): void { @@ -103,14 +108,6 @@ export abstract class BaseTabComponent extends BaseComponent { */ setProgress (progress: number|null): void { this.progress.next(progress) - if (progress) { - if (this.progressClearTimeout) { - clearTimeout(this.progressClearTimeout) - } - this.progressClearTimeout = setTimeout(() => { - this.setProgress(null) - }, 5000) as any - } } /** diff --git a/tabby-core/src/components/tabHeader.component.ts b/tabby-core/src/components/tabHeader.component.ts index 2cf8780c..dff41661 100644 --- a/tabby-core/src/components/tabHeader.component.ts +++ b/tabby-core/src/components/tabHeader.component.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { Component, Input, Optional, Inject, HostBinding, HostListener, NgZone } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { auditTime } from 'rxjs' import { TabContextMenuItemProvider } from '../api/tabContextMenuProvider' import { BaseTabComponent } from './baseTab.component' import { RenameTabModalComponent } from './renameTabModal.component' @@ -47,7 +48,9 @@ export class TabHeaderComponent extends BaseComponent { } ngOnInit () { - this.subscribeUntilDestroyed(this.tab.progress$, progress => { + this.subscribeUntilDestroyed(this.tab.progress$.pipe( + auditTime(300), + ), progress => { this.zone.run(() => { this.progress = progress }) diff --git a/tabby-electron/src/index.ts b/tabby-electron/src/index.ts index fc0d0a2c..3d0b6b81 100644 --- a/tabby-electron/src/index.ts +++ b/tabby-electron/src/index.ts @@ -2,6 +2,7 @@ import { NgModule } from '@angular/core' import { PlatformService, LogService, UpdaterService, DockingService, HostAppService, ThemesService, Platform, AppService, ConfigService, WIN_BUILD_FLUENT_BG_SUPPORTED, isWindowsBuild, HostWindowService, HotkeyProvider, ConfigProvider, FileProvider } from 'tabby-core' import { TerminalColorSchemeProvider } from 'tabby-terminal' import { SFTPContextMenuItemProvider } from 'tabby-ssh' +import { auditTime } from 'rxjs' import { HyperColorSchemes } from './colorSchemes' import { ElectronPlatformService } from './services/platform.service' @@ -68,7 +69,7 @@ export default class ElectronModule { let lastProgress: number|null = null app.tabOpened$.subscribe(tab => { - tab.progress$.subscribe(progress => { + tab.progress$.pipe(auditTime(250)).subscribe(progress => { if (lastProgress === progress) { return }