Fixed some oddities and made sure recent plans are 'updated' appropriately.

main
isark 1 year ago
parent 7b1fbe01df
commit 9b22ad942a

@ -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);
})
}
}

@ -52,13 +52,14 @@ export class PlanDisplayComponent implements AfterViewInit, OnInit {
})
});
this.planService.enumerateStoredPlans().subscribe(plans => {
this.planService.getStoredPlans().subscribe(plans => {
this.previousPlans = plans;
})
this.planService.getCurrentPlan().subscribe(plan => {
this.currentPlan = plan;
//Close settings anytime we get a new current plan.
this.settingsOpen = false;
setTimeout(() => this.setIndex(plan.current), 0);
})
@ -256,7 +257,6 @@ export class PlanDisplayComponent implements AfterViewInit, OnInit {
this.planService.loadPlanFromPath(file as string).subscribe(plan => {
if (plan) {
this.planService.setCurrentPlan(plan);
this.settingsOpen = false;
}
});
}
@ -302,10 +302,8 @@ export class PlanDisplayComponent implements AfterViewInit, OnInit {
loadFromUrl() {
this.planService.loadFromUrl().subscribe(plan => {
console.log("plan", plan);
if (plan) {
this.planService.savePlanAtStore(plan.name!, plan).subscribe((path) => {
console.log("path", path);
if(path) {
plan.setPath(path);
}

Loading…
Cancel
Save