Add regular polling for checks
Also poll when the document becomes visible.
Change-Id: Ifbcefff82fe1d3fb16ce7e22975ac6f085ca3757
diff --git a/polygerrit-ui/app/services/checks/checks-service.ts b/polygerrit-ui/app/services/checks/checks-service.ts
index 3ce714a..fd1f810 100644
--- a/polygerrit-ui/app/services/checks/checks-service.ts
+++ b/polygerrit-ui/app/services/checks/checks-service.ts
@@ -16,6 +16,7 @@
*/
import {
+ filter,
switchMap,
takeWhile,
throttleTime,
@@ -44,6 +45,7 @@
Observable,
of,
Subject,
+ timer,
} from 'rxjs';
import {PatchSetNumber} from '../../types/common';
@@ -54,6 +56,8 @@
private checkToPluginMap = new Map<string, string>();
+ private readonly documentVisibilityChange$ = new BehaviorSubject(undefined);
+
constructor() {
checkToPluginMap$.subscribe(map => {
this.checkToPluginMap = map;
@@ -61,6 +65,9 @@
latestPatchNum$.subscribe(num => {
updateStateSetPatchset(num);
});
+ document.addEventListener('visibilitychange', () => {
+ this.documentVisibilityChange$.next(undefined);
+ });
}
setPatchset(num: PatchSetNumber) {
@@ -89,17 +96,25 @@
this.providers[pluginName] = provider;
this.reloadSubjects[pluginName] = new BehaviorSubject<void>(undefined);
updateStateSetProvider(pluginName, config);
- // Both, changed numbers and and announceUpdate request should trigger.
+ const pollIntervalMs = (config?.fetchPollingIntervalSeconds ?? 60) * 1000;
+ // Various events should trigger fetching checks from the provider:
+ // 1. Change number and patchset number changes.
+ // 2. Specific reload requests.
+ // 3. Regular polling starting with an initial fetch right now.
+ // 4. A hidden Gerrit tab becoming visible.
combineLatest([
changeNum$,
checksPatchsetNumber$,
this.reloadSubjects[pluginName].pipe(throttleTime(1000)),
+ timer(0, pollIntervalMs),
+ this.documentVisibilityChange$,
])
.pipe(
takeWhile(_ => !!this.providers[pluginName]),
+ filter(_ => document.visibilityState !== 'hidden'),
withLatestFrom(change$),
switchMap(
- ([[changeNum, patchNum, _], change]): Observable<FetchResponse> => {
+ ([[changeNum, patchNum], change]): Observable<FetchResponse> => {
if (
!change ||
!changeNum ||
@@ -128,6 +143,5 @@
response.actions
);
});
- this.reload(pluginName);
}
}