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 _currentPlanSubject: Subject<Plan> = new ReplaySubject<Plan>(1);
private _basePlanSubject: 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) { constructor(private dialog: MatDialog) {
this.loadBasePlan(); this.loadBasePlan();
this.loadStoredPlans();
} }
public getBasePlan(): Observable<Plan> { public getBasePlan(): Observable<Plan> {
@ -30,15 +32,19 @@ export class PlanService {
this._currentPlanSubject.next(plan); this._currentPlanSubject.next(plan);
} }
public enumerateStoredPlans(): Observable<PlanMetadata[]> { public getStoredPlans(): Observable<PlanMetadata[]> {
return from(invoke<PlanMetadata[]>('enumerate_stored_plans')); return this._storedPlansSubject.asObservable();
} }
public loadPlanFromPath(path: string, save_local: boolean = true): Observable<Plan> { 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) { if (!url || !name) {
const dialogRef = this.dialog.open(UrlDialog, { const dialogRef = this.dialog.open(UrlDialog, {
data: { data: {
@ -49,14 +55,14 @@ export class PlanService {
return dialogRef.afterClosed().pipe(switchMap(data => { return dialogRef.afterClosed().pipe(switchMap(data => {
if (data.url) { 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()); return new Observable<Plan>((s) => s.complete());
})); }));
} else { } 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) { 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 //Tauri fetch
return from(fetch( return from(fetch(
url, url,
@ -84,6 +90,10 @@ export class PlanService {
})).pipe(tap(plan => { })).pipe(tap(plan => {
plan.update_url = url; plan.update_url = url;
plan.name = name; plan.name = name;
if (save_local) {
this.savePlanAtStore(name, plan).subscribe();
}
})); }));
} }
@ -93,4 +103,10 @@ export class PlanService {
this._basePlanSubject?.next(new Plan(plan)); 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.getStoredPlans().subscribe(plans => {
this.planService.enumerateStoredPlans().subscribe(plans => {
this.previousPlans = plans; this.previousPlans = plans;
}) })
this.planService.getCurrentPlan().subscribe(plan => { this.planService.getCurrentPlan().subscribe(plan => {
this.currentPlan = plan; this.currentPlan = plan;
//Close settings anytime we get a new current plan.
this.settingsOpen = false;
setTimeout(() => this.setIndex(plan.current), 0); setTimeout(() => this.setIndex(plan.current), 0);
}) })
@ -256,7 +257,6 @@ export class PlanDisplayComponent implements AfterViewInit, OnInit {
this.planService.loadPlanFromPath(file as string).subscribe(plan => { this.planService.loadPlanFromPath(file as string).subscribe(plan => {
if (plan) { if (plan) {
this.planService.setCurrentPlan(plan); this.planService.setCurrentPlan(plan);
this.settingsOpen = false;
} }
}); });
} }
@ -302,10 +302,8 @@ export class PlanDisplayComponent implements AfterViewInit, OnInit {
loadFromUrl() { loadFromUrl() {
this.planService.loadFromUrl().subscribe(plan => { this.planService.loadFromUrl().subscribe(plan => {
console.log("plan", plan);
if (plan) { if (plan) {
this.planService.savePlanAtStore(plan.name!, plan).subscribe((path) => { this.planService.savePlanAtStore(plan.name!, plan).subscribe((path) => {
console.log("path", path);
if(path) { if(path) {
plan.setPath(path); plan.setPath(path);
} }

Loading…
Cancel
Save