From 939ad844e8ce6d5a7f9dab66df0ca6a71e7464f9 Mon Sep 17 00:00:00 2001 From: Aaron Greenspan Date: Thu, 14 Jan 2021 14:55:08 -0700 Subject: [PATCH] ui: completes welcome ack trigger --- ui/src/app/models/server-model.ts | 4 ++-- ui/src/app/services/api/api-types.ts | 1 + ui/src/app/services/api/api.service.ts | 1 + ui/src/app/services/api/live-api.service.ts | 4 ++++ ui/src/app/services/api/mock-api.service.ts | 11 ++++++++++- ui/src/app/services/sync.notifier.ts | 14 +++++++++++--- 6 files changed, 29 insertions(+), 6 deletions(-) diff --git a/ui/src/app/models/server-model.ts b/ui/src/app/models/server-model.ts index 9bf12fa70..072b23d1e 100644 --- a/ui/src/app/models/server-model.ts +++ b/ui/src/app/models/server-model.ts @@ -105,7 +105,7 @@ export class ServerModel { wifi: { ssids: [], current: undefined }, ssh: [], notifications: [], - welcomeSeen: true, + welcomeAck: true, }) } } @@ -123,7 +123,7 @@ export interface S9Server { wifi: { ssids: string[], current: string } ssh: SSHFingerprint[] notifications: S9Notification[] - welcomeSeen: boolean + welcomeAck: boolean } export interface S9Notification { diff --git a/ui/src/app/services/api/api-types.ts b/ui/src/app/services/api/api-types.ts index cf75e4dd0..bc46c0ba8 100644 --- a/ui/src/app/services/api/api-types.ts +++ b/ui/src/app/services/api/api-types.ts @@ -17,6 +17,7 @@ export interface ApiServer { } ssh: SSHFingerprint[] serverId: string + welcomeAck: boolean } /** APPS **/ diff --git a/ui/src/app/services/api/api.service.ts b/ui/src/app/services/api/api.service.ts index cc73fa08c..0629fd5f5 100644 --- a/ui/src/app/services/api/api.service.ts +++ b/ui/src/app/services/api/api.service.ts @@ -29,6 +29,7 @@ export abstract class ApiService { abstract getNotifications (page: number, perPage: number): Promise abstract deleteNotification (id: string): Promise abstract updateAgent (thing: any): Promise + abstract acknowledgeOSWelcome (): Promise abstract getAvailableApps (): Promise abstract getAvailableApp (appId: string): Promise abstract getAvailableAppVersionSpecificInfo (appId: string, versionSpec: string): Promise diff --git a/ui/src/app/services/api/live-api.service.ts b/ui/src/app/services/api/live-api.service.ts index 236934814..e06e66911 100644 --- a/ui/src/app/services/api/live-api.service.ts +++ b/ui/src/app/services/api/live-api.service.ts @@ -37,6 +37,10 @@ export class LiveApiService extends ApiService { return this.authRequest({ method: Method.GET, url: '/', readTimeout: timeout }) } + async acknowledgeOSWelcome (): Promise { + return this.authRequest({ method: Method.POST, url: '/welcome' }) + } + async getVersionLatest (): Promise { return this.authRequest({ method: Method.GET, url: '/versionLatest' }, { version: '' }) } diff --git a/ui/src/app/services/api/mock-api.service.ts b/ui/src/app/services/api/mock-api.service.ts index fbd070445..550899841 100644 --- a/ui/src/app/services/api/mock-api.service.ts +++ b/ui/src/app/services/api/mock-api.service.ts @@ -11,6 +11,7 @@ import { mockApiAppAvailableFull, mockApiAppAvailableVersionInfo, mockApiAppInst //@TODO consider moving to test folders. @Injectable() export class MockApiService extends ApiService { + welcomeAck = false constructor ( private readonly appModel: AppModel, private readonly serverModel: ServerModel, @@ -32,7 +33,8 @@ export class MockApiService extends ApiService { } async getServer (): Promise { - return mockGetServer() + const res = await mockGetServer() + return { ...res, welcomeAck: this.welcomeAck } } async ejectExternalDisk (): Promise { @@ -115,6 +117,12 @@ export class MockApiService extends ApiService { return mockUninstallApp() } + async acknowledgeOSWelcome () { + await pauseFor(2000) + this.welcomeAck = true + return { } + } + async startApp (appId: string): Promise { console.log('start app mock') await mockStartApp() @@ -396,6 +404,7 @@ const mockApiServer: () => ReqRes.GetServerRes = () => ({ versionInstalled: '0.2.8', status: ServerStatus.RUNNING, alternativeRegistryUrl: 'beta-registry.start9labs.com', + welcomeAck: true, specs: { 'Tor Address': 'nfsnjkcnaskjnlkasnfahj7dh23fdnieqwjdnhjewbfijendiueqwbd.onion', 'CPU': 'Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz', diff --git a/ui/src/app/services/sync.notifier.ts b/ui/src/app/services/sync.notifier.ts index 06a0902aa..2fd72b257 100644 --- a/ui/src/app/services/sync.notifier.ts +++ b/ui/src/app/services/sync.notifier.ts @@ -3,6 +3,7 @@ import { ConfigService } from 'src/app/services/config.service' import { ToastController, NavController, ModalController } from '@ionic/angular' import { ServerModel, S9Server } from '../models/server-model' import { OSWelcomePage } from '../modals/os-welcome/os-welcome.page' +import { ApiService } from './api/api.service' @Injectable({ providedIn: 'root', @@ -14,6 +15,7 @@ export class SyncNotifier { private readonly modalCtrl: ModalController, private readonly navCtrl: NavController, private readonly serverModel: ServerModel, + private readonly apiService: ApiService, ) { } async handleSpecial (server: Readonly): Promise { @@ -57,18 +59,24 @@ export class SyncNotifier { this.serverModel.update(updates) } - private async handleOSWelcome(server: Readonly) { - if (server.welcomeSeen || server.versionInstalled !== this.config.version) return + osWelcomeOpen = false + private async handleOSWelcome (server: Readonly) { + if (server.welcomeAck || server.versionInstalled !== this.config.version || this.osWelcomeOpen) return const modal = await this.modalCtrl.create({ backdropDismiss: false, component: OSWelcomePage, presentingElement: await this.modalCtrl.getTop(), componentProps: { - version: server.versionInstalled + version: server.versionInstalled, }, }) + this.osWelcomeOpen = true + modal.onWillDismiss().then(() => { + this.osWelcomeOpen = false + return this.apiService.acknowledgeOSWelcome() + }) await modal.present() } }