summaryrefslogtreecommitdiffstats
path: root/webapp/src/app/services/xdsserver.service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/src/app/services/xdsserver.service.ts')
-rw-r--r--webapp/src/app/services/xdsserver.service.ts68
1 files changed, 52 insertions, 16 deletions
diff --git a/webapp/src/app/services/xdsserver.service.ts b/webapp/src/app/services/xdsserver.service.ts
index 4d20fa4..b69a196 100644
--- a/webapp/src/app/services/xdsserver.service.ts
+++ b/webapp/src/app/services/xdsserver.service.ts
@@ -20,7 +20,8 @@ import 'rxjs/add/operator/mergeMap';
export interface IXDSConfigProject {
id: string;
path: string;
- hostSyncThingID: string;
+ clientSyncThingID: string;
+ type: number;
label?: string;
defaultSdkID?: string;
}
@@ -31,15 +32,29 @@ interface IXDSBuilderConfig {
syncThingID: string;
}
-interface IXDSFolderConfig {
+export interface IXDSFolderConfig {
id: string;
label: string;
path: string;
type: number;
- syncThingID: string;
- builderSThgID?: string;
status?: string;
+ isInSync?: boolean;
defaultSdkID: string;
+
+ // FIXME better with union but tech pb with go code
+ //data?: IXDSPathMapConfig|IXDSCloudSyncConfig;
+ dataPathMap?: IXDSPathMapConfig;
+ dataCloudSync?: IXDSCloudSyncConfig;
+}
+
+export interface IXDSPathMapConfig {
+ // TODO
+ serverPath: string;
+}
+
+export interface IXDSCloudSyncConfig {
+ syncThingID: string;
+ builderSThgID?: string;
}
interface IXDSConfig {
@@ -92,8 +107,10 @@ export class XDSServerService {
public CmdOutput$ = <Subject<ICmdOutput>>new Subject();
public CmdExit$ = <Subject<ICmdExit>>new Subject();
+ public FolderStateChange$ = <Subject<IXDSFolderConfig>>new Subject();
public Status$: Observable<IServerStatus>;
+
private baseUrl: string;
private wsUrl: string;
private _status = { WS_connected: false };
@@ -113,6 +130,7 @@ export class XDSServerService {
} else {
this.wsUrl = 'ws://' + re[1];
this._handleIoSocket();
+ this._RegisterEvents();
}
}
@@ -158,6 +176,22 @@ export class XDSServerService {
this.CmdExit$.next(Object.assign({}, <ICmdExit>data));
});
+ this.socket.on('event:FolderStateChanged', ev => {
+ if (ev && ev.folder) {
+ this.FolderStateChange$.next(Object.assign({}, ev.folder));
+ }
+ });
+ }
+
+ private _RegisterEvents() {
+ let ev = "FolderStateChanged";
+ this._post('/events/register', { "name": ev })
+ .subscribe(
+ res => { },
+ error => {
+ this.alert.error("ERROR while registering events " + ev + ": ", error);
+ }
+ );
}
getSdks(): Observable<ISdk[]> {
@@ -172,22 +206,18 @@ export class XDSServerService {
return this._get('/folders');
}
- addProject(cfg: IXDSConfigProject): Observable<IXDSFolderConfig> {
- let folder: IXDSFolderConfig = {
- id: cfg.id || null,
- label: cfg.label || "",
- path: cfg.path,
- type: FOLDER_TYPE_CLOUDSYNC,
- syncThingID: cfg.hostSyncThingID,
- defaultSdkID: cfg.defaultSdkID || "",
- };
- return this._post('/folder', folder);
+ addProject(cfg: IXDSFolderConfig): Observable<IXDSFolderConfig> {
+ return this._post('/folder', cfg);
}
deleteProject(id: string): Observable<IXDSFolderConfig> {
return this._delete('/folder/' + id);
}
+ syncProject(id: string): Observable<string> {
+ return this._post('/folder/sync/' + id, {});
+ }
+
exec(prjID: string, dir: string, cmd: string, sdkid?: string, args?: string[], env?: string[]): Observable<any> {
return this._post('/exec',
{
@@ -244,7 +274,13 @@ export class XDSServerService {
private _decodeError(err: any) {
let e: string;
- if (typeof err === "object") {
+ if (err instanceof Response) {
+ const body = err.json() || 'Server error';
+ e = body.error || JSON.stringify(body);
+ if (!e || e === "") {
+ e = `${err.status} - ${err.statusText || 'Unknown error'}`;
+ }
+ } else if (typeof err === "object") {
if (err.statusText) {
e = err.statusText;
} else if (err.error) {
@@ -253,7 +289,7 @@ export class XDSServerService {
e = JSON.stringify(err);
}
} else {
- e = err.json().error || 'Server error';
+ e = err.message ? err.message : err.toString();
}
return Observable.throw(e);
}