Skip to content

Commit a7f7607

Browse files
committed
Handle new, native data and errors from dbus
1 parent e066d88 commit a7f7607

File tree

1 file changed

+10
-18
lines changed

1 file changed

+10
-18
lines changed

src/state/bootkit_provider.tsx

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,6 @@ import cockpit from 'cockpit';
55
const DBUS_NAME = "org.opensuse.bootkit";
66
const DBUS_PATH = "/org/opensuse/bootkit";
77

8-
type BootKitErr = {
9-
ok?: null,
10-
err: string,
11-
};
12-
13-
type BootKitOk<T> = {
14-
ok: T,
15-
err?: null,
16-
};
17-
18-
type BootKitData<T> = BootKitOk<T> | BootKitErr;
19-
208
export interface BootkitState {
219
loading: boolean;
2210
saving: boolean;
@@ -111,7 +99,7 @@ const BootKitContext = createContext<BootKitContextType>({
11199
});
112100
export const useBootKitContext = () => useContext(BootKitContext);
113101

114-
type JsonPromise<T> = string[] | BootKitData<T>
102+
type JsonPromise<T> = string[] | T
115103
function parseBootkitJson<T>(data: JsonPromise<T>): Exclude<JsonPromise<T>, string[]> {
116104
return JSON.parse((data as string[])[0]);
117105
}
@@ -124,11 +112,15 @@ function bootKitCall<T>(callback: (...arg: BKArg[]) => Promise<JsonPromise<T>>,
124112
return async (...arg: BKArg[]) => {
125113
try {
126114
const data = await callback(...arg);
127-
const parsed = parseBootkitJson(data);
128-
if (parsed.ok && setData) {
129-
setData(parsed.ok);
130-
} else if (parsed.err) {
131-
setError(parsed.err);
115+
let parsed: T | string = "";
116+
try {
117+
parsed = parseBootkitJson(data);
118+
} catch {
119+
// if the value is not valid json, we can assume it's just a string
120+
parsed = (data as string[])[0] as string;
121+
}
122+
if (setData) {
123+
setData(parsed as T);
132124
}
133125
} catch (err) {
134126
console.error(err);

0 commit comments

Comments
 (0)