cb52ce3a046d98ccedbf9b84daec6db2e090b8c5
[src/xds/xds-agent.git] / webapp / src / app / @core-xds / services / build-settings.service.ts
1 import { Injectable } from '@angular/core';
2 import { CookieService } from 'ngx-cookie';
3 import { Observable } from 'rxjs/Observable';
4 import { BehaviorSubject } from 'rxjs/BehaviorSubject';
5
6 export interface IBuildSettings {
7   subpath: string;
8   cmdClean: string;
9   cmdPrebuild: string;
10   cmdBuild: string;
11   cmdPopulate: string;
12   cmdArgs: string[];
13   envVars: string[];
14 }
15
16 @Injectable()
17 export class BuildSettingsService {
18   public settings$: Observable<IBuildSettings>;
19
20   private settingsSubject: BehaviorSubject<IBuildSettings>;
21   private settingsStore: IBuildSettings;
22
23   constructor(
24     private cookie: CookieService,
25   ) {
26     this._load();
27   }
28
29   // Load build settings from cookie
30   private _load() {
31     // Try to retrieve previous config from cookie
32     const cookConf = this.cookie.getObject('xds-build-settings');
33     if (cookConf != null) {
34       this.settingsStore = <IBuildSettings>cookConf;
35     } else {
36       // Set default config
37       this.settingsStore = {
38         subpath: '',
39         cmdClean: 'rm -rf build && echo Done',
40         cmdPrebuild: 'mkdir -p build && cd build && cmake ..',
41         cmdBuild: 'cd build && make',
42         cmdPopulate: 'cd build && make remote-target-populate',
43         cmdArgs: [],
44         envVars: [],
45       };
46     }
47   }
48
49   // Save config into cookie
50   private _save() {
51     // Notify subscribers
52     this.settingsSubject.next(Object.assign({}, this.settingsStore));
53
54     const cfg = Object.assign({}, this.settingsStore);
55     this.cookie.putObject('xds-build-settings', cfg);
56   }
57
58   // Get whole config values
59   get(): IBuildSettings {
60     return this.settingsStore;
61   }
62
63   // Get whole config values
64   set(bs: IBuildSettings) {
65     this.settingsStore = bs;
66     this._save();
67   }
68
69   get subpath(): string {
70     return this.settingsStore.subpath;
71   }
72
73   set subpath(p: string) {
74     this.settingsStore.subpath = p;
75     this._save();
76   }
77
78 }