This commit is contained in:
Aaron Greenspan
2021-01-19 16:07:21 -07:00
committed by Aiden McClelland
parent b72252b437
commit 66ddf752ac
2 changed files with 16 additions and 12 deletions

View File

@@ -1,9 +1,9 @@
import { Injectable } from '@angular/core' import { Injectable } from '@angular/core'
import { NavController } from '@ionic/angular' import { NavController } from '@ionic/angular'
import { BehaviorSubject, combineLatest, forkJoin, interval, NextObserver, Observable, Observer, of } from 'rxjs' import { BehaviorSubject, forkJoin, Observable, of } from 'rxjs'
import { catchError, concatMap, distinctUntilChanged, filter, map, take, tap } from 'rxjs/operators' import { catchError, concatMap, distinctUntilChanged, filter, map, take, tap } from 'rxjs/operators'
import { ServerModel, ServerStatus } from '../models/server-model' import { ServerModel, ServerStatus } from '../models/server-model'
import { exists } from '../util/misc.util' import { traceWheel } from '../util/misc.util'
import { ApiService } from './api/api.service' import { ApiService } from './api/api.service'
import { Emver } from './emver.service' import { Emver } from './emver.service'
@@ -23,17 +23,19 @@ export class OsUpdateService {
private readonly serverModel: ServerModel, private readonly serverModel: ServerModel,
private readonly apiService: ApiService, private readonly apiService: ApiService,
private readonly navCtrl: NavController, private readonly navCtrl: NavController,
) { ) { }
}
// emits everytime autoCheckUpdates becomes (or is) true // emits everytime autoCheckUpdates becomes (or is) true
autoCheck$ (): Observable<string> { autoCheck$ (): Observable<string> {
return this.serverModel.watch().autoCheckUpdates.pipe( return this.serverModel.watch().autoCheckUpdates.pipe(
traceWheel('auto check updates 1'),
distinctUntilChanged(), distinctUntilChanged(),
filter(check => check), filter(check => check),
traceWheel('auto check updates 2'),
concatMap(() => this.apiService.getVersionLatest()), concatMap(() => this.apiService.getVersionLatest()),
traceWheel('getVersionLatest'),
map(({ canUpdate, versionLatest }) => canUpdate ? versionLatest : undefined), map(({ canUpdate, versionLatest }) => canUpdate ? versionLatest : undefined),
tap(vl => this.$updateAvailable$.next(vl)), tap(this.$updateAvailable$),
) )
} }
@@ -49,7 +51,7 @@ export class OsUpdateService {
return of(undefined) return of(undefined)
}), }),
// cache the result for components to learn update available without having to have called this method // cache the result for components to learn update available without having to have called this method
tap(vl => this.$updateAvailable$.next(vl)), tap(this.$updateAvailable$),
).toPromise() ).toPromise()
} }

View File

@@ -4,7 +4,7 @@ import { combineLatest, EMPTY, iif, Observable, of } from 'rxjs'
import { concatMap, filter, take } from 'rxjs/operators' import { concatMap, filter, take } from 'rxjs/operators'
import { OSWelcomePage } from '../modals/os-welcome/os-welcome.page' import { OSWelcomePage } from '../modals/os-welcome/os-welcome.page'
import { ServerModel } from '../models/server-model' import { ServerModel } from '../models/server-model'
import { exists } from '../util/misc.util' import { exists, traceWheel } from '../util/misc.util'
import { ApiService } from './api/api.service' import { ApiService } from './api/api.service'
import { ConfigService } from './config.service' import { ConfigService } from './config.service'
import { LoaderService } from './loader.service' import { LoaderService } from './loader.service'
@@ -25,8 +25,8 @@ export class GlobalAlertsNotifier {
} }
init () { init () {
of({ }).pipe( console.log('init')
concatMap(() => this.osWelcome$()), this.osWelcome$().pipe(
concatMap(() => this.autoUpdateCheck$()), concatMap(() => this.autoUpdateCheck$()),
).subscribe() ).subscribe()
} }
@@ -35,10 +35,11 @@ export class GlobalAlertsNotifier {
const { welcomeAck, versionInstalled } = this.server.watch() const { welcomeAck, versionInstalled } = this.server.watch()
return combineLatest([ welcomeAck, versionInstalled ]).pipe( return combineLatest([ welcomeAck, versionInstalled ]).pipe(
filter( ([wa, vi]) => vi && !wa), filter( ([_, vi]) => !!vi),
traceWheel('osWelcome'),
take(1), // we will check and show welcome message at most once per app instance take(1), // we will check and show welcome message at most once per app instance
concatMap(([_, vi]) => iif( concatMap(([wa, vi]) => iif(
() => vi === this.config.version, () => !wa && vi === this.config.version,
this.presentOsWelcome(vi), this.presentOsWelcome(vi),
EMPTY, EMPTY,
)), )),
@@ -48,6 +49,7 @@ export class GlobalAlertsNotifier {
private autoUpdateCheck$ (): Observable<void> { private autoUpdateCheck$ (): Observable<void> {
// this emits iff autoCheck is on and update available // this emits iff autoCheck is on and update available
return this.osUpdateService.autoCheck$().pipe( return this.osUpdateService.autoCheck$().pipe(
traceWheel('autoUpdateCheck'),
filter(exists), filter(exists),
concatMap(async vl => { concatMap(async vl => {
const { update } = await this.presentAlertNewOS(vl) const { update } = await this.presentAlertNewOS(vl)