|
|
|
@ -13,9 +13,11 @@ export class PlanService {
|
|
|
|
|
|
|
|
|
|
private _currentPlanSubject: Subject<Plan> = new ReplaySubject<Plan>(1);
|
|
|
|
|
private _basePlanSubject: Subject<Plan> = new ReplaySubject<Plan>(1);
|
|
|
|
|
private _storedPlansSubject: Subject<PlanMetadata[]> = new ReplaySubject<PlanMetadata[]>(1);
|
|
|
|
|
|
|
|
|
|
constructor(private dialog: MatDialog) {
|
|
|
|
|
this.loadBasePlan();
|
|
|
|
|
this.loadStoredPlans();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public getBasePlan(): Observable<Plan> {
|
|
|
|
@ -30,15 +32,19 @@ export class PlanService {
|
|
|
|
|
this._currentPlanSubject.next(plan);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public enumerateStoredPlans(): Observable<PlanMetadata[]> {
|
|
|
|
|
return from(invoke<PlanMetadata[]>('enumerate_stored_plans'));
|
|
|
|
|
public getStoredPlans(): Observable<PlanMetadata[]> {
|
|
|
|
|
return this._storedPlansSubject.asObservable();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public loadPlanFromPath(path: string, save_local: boolean = true): Observable<Plan> {
|
|
|
|
|
return from(invoke<PlanInterface>('load_plan_at_path', { path, saveLocal: save_local })).pipe(map(plan => { return new Plan(plan) }));
|
|
|
|
|
return from(invoke<PlanInterface>('load_plan_at_path', { path, saveLocal: save_local })).pipe(map(plan => {
|
|
|
|
|
return new Plan(plan)
|
|
|
|
|
})).pipe(tap(() => {
|
|
|
|
|
this.loadStoredPlans();
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public loadFromUrl(url?: string, name?: string): Observable<Plan> {
|
|
|
|
|
public loadFromUrl(url?: string, name?: string, save_local: boolean = false): Observable<Plan> {
|
|
|
|
|
if (!url || !name) {
|
|
|
|
|
const dialogRef = this.dialog.open(UrlDialog, {
|
|
|
|
|
data: {
|
|
|
|
@ -49,14 +55,14 @@ export class PlanService {
|
|
|
|
|
|
|
|
|
|
return dialogRef.afterClosed().pipe(switchMap(data => {
|
|
|
|
|
if (data.url) {
|
|
|
|
|
return this._loadFromUrl(data.url, data.name);
|
|
|
|
|
return this._loadFromUrl(data.url, data.name, save_local);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new Observable<Plan>((s) => s.complete());
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
return this._loadFromUrl(url, name);
|
|
|
|
|
return this._loadFromUrl(url, name, save_local);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -69,10 +75,10 @@ export class PlanService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public savePlanAtStore(name: string, plan: Plan) {
|
|
|
|
|
return from(invoke<string>('save_plan_at_store', { name, plan: plan.toInterface() }));
|
|
|
|
|
return from(invoke<string>('save_plan_at_store', { name, plan: plan.toInterface() })).pipe(tap(() => this.loadStoredPlans()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private _loadFromUrl(url: string, name: string): Observable<Plan> {
|
|
|
|
|
private _loadFromUrl(url: string, name: string, save_local: boolean): Observable<Plan> {
|
|
|
|
|
//Tauri fetch
|
|
|
|
|
return from(fetch(
|
|
|
|
|
url,
|
|
|
|
@ -84,6 +90,10 @@ export class PlanService {
|
|
|
|
|
})).pipe(tap(plan => {
|
|
|
|
|
plan.update_url = url;
|
|
|
|
|
plan.name = name;
|
|
|
|
|
|
|
|
|
|
if (save_local) {
|
|
|
|
|
this.savePlanAtStore(name, plan).subscribe();
|
|
|
|
|
}
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -93,4 +103,10 @@ export class PlanService {
|
|
|
|
|
this._basePlanSubject?.next(new Plan(plan));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private loadStoredPlans() {
|
|
|
|
|
from(invoke<PlanMetadata[]>('enumerate_stored_plans')).subscribe(plans => {
|
|
|
|
|
this._storedPlansSubject.next(plans);
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|