Skip to content

Commit

Permalink
webui: don't repeat code in the src/apis/
Browse files Browse the repository at this point in the history
* Get interface and object paths from variables
* Use helper functions for calling dbus methods
  • Loading branch information
KKoukiou committed Oct 26, 2023
1 parent da1dc9b commit fd50fe7
Show file tree
Hide file tree
Showing 16 changed files with 185 additions and 305 deletions.
9 changes: 4 additions & 5 deletions ui/webui/src/actions/storage-actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,8 @@ export const getDevicesAction = () => {
return async (dispatch) => {
try {
const devices = await getDevices();
const devicesData = await Promise.all(devices[0].map(async (device) => {
let devData = await getDeviceData({ disk: device });
devData = devData[0];
const devicesData = await Promise.all(devices.map(async (device) => {
const devData = await getDeviceData({ disk: device });

const free = await getDiskFreeSpace({ diskNames: [device] });
// extend it with variants to keep the format consistent
Expand Down Expand Up @@ -81,7 +80,7 @@ export const getDiskSelectionAction = () => {
diskSelection: {
ignoredDisks: diskSelection[0].IgnoredDisks.v,
selectedDisks: diskSelection[0].SelectedDisks.v,
usableDisks: usableDisks[0],
usableDisks,
}
},
});
Expand All @@ -102,7 +101,7 @@ export const getPartitioningDataAction = ({ requests, partitioning }) => {
if (props.method === "MANUAL") {
const reqs = await gatherRequests({ partitioning });

props.requests = convertRequests(reqs[0]);
props.requests = convertRequests(reqs);
}
} else {
props.requests = convertRequests(requests);
Expand Down
21 changes: 9 additions & 12 deletions ui/webui/src/apis/boss.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@

import cockpit from "cockpit";

const OBJECT_PATH = "/org/fedoraproject/Anaconda/Boss";
const INTERFACE_NAME = "org.fedoraproject.Anaconda.Boss";
const callClient = (...args) => {
return new BossClient().client.call(OBJECT_PATH, INTERFACE_NAME, ...args).then(res => res?.[0]);
};

/**
* @param {string} address Anaconda bus address
*
Expand All @@ -33,7 +39,7 @@ export class BossClient {
BossClient.instance = this;

this.client = cockpit.dbus(
"org.fedoraproject.Anaconda.Boss",
INTERFACE_NAME,
{ superuser: "try", bus: "none", address }
);
this.address = address;
Expand Down Expand Up @@ -63,21 +69,12 @@ export const getSteps = ({ task }) => {
* @returns {Promise} Resolves a list of tasks
*/
export const installWithTasks = () => {
return new BossClient().client.call(
"/org/fedoraproject/Anaconda/Boss",
"org.fedoraproject.Anaconda.Boss",
"InstallWithTasks", []
)
.then(ret => ret[0]);
return callClient("InstallWithTasks", []);
};

/**
* @param {string} locale Locale id
*/
export const setLocale = ({ locale }) => {
return new BossClient().client.call(
"/org/fedoraproject/Anaconda/Boss",
"org.fedoraproject.Anaconda.Boss",
"SetLocale", [locale]
);
return callClient("SetLocale", [locale]);
};
88 changes: 25 additions & 63 deletions ui/webui/src/apis/localization.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,22 @@ import cockpit from "cockpit";
import { getLanguageAction, getLanguagesAction } from "../actions/localization-actions.js";
import { debug } from "../helpers/log.js";

const OBJECT_PATH = "/org/fedoraproject/Anaconda/Modules/Localization";
const INTERFACE_NAME = "org.fedoraproject.Anaconda.Modules.Localization";
const callClient = (...args) => {
return new LocalizationClient().client.call(OBJECT_PATH, INTERFACE_NAME, ...args).then(res => res[0]);
};
const setProperty = (...args) => {
return new LocalizationClient().client.call(
OBJECT_PATH, "org.freedesktop.DBus.Properties", "Set", [INTERFACE_NAME, ...args]
);
};
const getProperty = (...args) => {
return new LocalizationClient().client.call(
OBJECT_PATH, "org.freedesktop.DBus.Properties", "Get", [INTERFACE_NAME, ...args]
).then(res => res[0].v);
};

export class LocalizationClient {
constructor (address) {
if (LocalizationClient.instance && (!address || LocalizationClient.instance.address === address)) {
Expand All @@ -31,7 +47,7 @@ export class LocalizationClient {
LocalizationClient.instance = this;

this.client = cockpit.dbus(
"org.fedoraproject.Anaconda.Modules.Localization",
INTERFACE_NAME,
{ superuser: "try", bus: "none", address }
);
this.address = address;
Expand All @@ -46,29 +62,14 @@ export class LocalizationClient {
* @returns {Promise} Resolves a list of language ids
*/
export const getLanguages = () => {
return (
new LocalizationClient().client.call(
"/org/fedoraproject/Anaconda/Modules/Localization",
"org.fedoraproject.Anaconda.Modules.Localization",
"GetLanguages", []
)
.then(res => res[0])
);
return callClient("GetLanguages", []);
};

/**
* @returns {Promise} The language the system will use
*/
export const getLanguage = () => {
return (
new LocalizationClient().client.call(
"/org/fedoraproject/Anaconda/Modules/Localization",
"org.freedesktop.DBus.Properties",
"Get",
["org.fedoraproject.Anaconda.Modules.Localization", "Language"]
)
.then(res => res[0].v)
);
return getProperty("Language");
};

/**
Expand All @@ -77,14 +78,7 @@ export const getLanguage = () => {
* @returns {Promise} Resolves a language data object
*/
export const getLanguageData = ({ lang }) => {
return (
new LocalizationClient().client.call(
"/org/fedoraproject/Anaconda/Modules/Localization",
"org.fedoraproject.Anaconda.Modules.Localization",
"GetLanguageData", [lang]
)
.then(res => res[0])
);
return callClient("GetLanguageData", [lang]);
};

/**
Expand All @@ -93,28 +87,14 @@ export const getLanguageData = ({ lang }) => {
* @returns {Promise} Resolves a list of locales ids
*/
export const getLocales = ({ lang }) => {
return (
new LocalizationClient().client.call(
"/org/fedoraproject/Anaconda/Modules/Localization",
"org.fedoraproject.Anaconda.Modules.Localization",
"GetLocales", [lang]
)
.then(res => res[0])
);
return callClient("GetLocales", [lang]);
};

/**
* @returns {Promise} Resolves a list of common locales id's.
*/
export const getCommonLocales = () => {
return (
new LocalizationClient().client.call(
"/org/fedoraproject/Anaconda/Modules/Localization",
"org.fedoraproject.Anaconda.Modules.Localization",
"GetCommonLocales"
)
.then(res => res[0])
);
return callClient("GetCommonLocales");
};

/**
Expand All @@ -123,32 +103,14 @@ export const getCommonLocales = () => {
* @returns {Promise} Resolves a locale data object
*/
export const getLocaleData = ({ locale }) => {
return (
new LocalizationClient().client.call(
"/org/fedoraproject/Anaconda/Modules/Localization",
"org.fedoraproject.Anaconda.Modules.Localization",
"GetLocaleData", [locale]
)
.then(res => res[0])
);
return callClient("GetLocaleData", [locale]);
};

/**
* @param {string} lang Language id
*/
export const setLanguage = ({ lang }) => {
return (
new LocalizationClient().client.call(
"/org/fedoraproject/Anaconda/Modules/Localization",
"org.freedesktop.DBus.Properties",
"Set",
[
"org.fedoraproject.Anaconda.Modules.Localization",
"Language",
cockpit.variant("s", lang)
]
)
);
return setProperty("Language", cockpit.variant("s", lang));
};

export const startEventMonitorLocalization = ({ dispatch }) => {
Expand All @@ -157,7 +119,7 @@ export const startEventMonitorLocalization = ({ dispatch }) => {
(path, iface, signal, args) => {
switch (signal) {
case "PropertiesChanged":
if (args[0] === "org.fedoraproject.Anaconda.Modules.Localization" && Object.hasOwn(args[1], "Language")) {
if (args[0] === INTERFACE_NAME && Object.hasOwn(args[1], "Language")) {
dispatch(getLanguageAction());
} else {
debug(`Unhandled signal on ${path}: ${iface}.${signal}`, JSON.stringify(args));
Expand Down
22 changes: 11 additions & 11 deletions ui/webui/src/apis/network.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ import cockpit from "cockpit";
import { getConnectedAction } from "../actions/network-actions.js";
import { debug } from "../helpers/log.js";

const OBJECT_PATH = "/org/fedoraproject/Anaconda/Modules/Network";
const INTERFACE_NAME = "org.fedoraproject.Anaconda.Modules.Network";
const getProperty = (...args) => {
return new NetworkClient().client.call(
OBJECT_PATH, "org.freedesktop.DBus.Properties", "Get", [INTERFACE_NAME, ...args]
).then(res => res[0].v);
};

export class NetworkClient {
constructor (address) {
if (NetworkClient.instance && (!address || NetworkClient.instance.address === address)) {
Expand All @@ -31,7 +39,7 @@ export class NetworkClient {
NetworkClient.instance = this;

this.client = cockpit.dbus(
"org.fedoraproject.Anaconda.Modules.Network",
INTERFACE_NAME,
{ superuser: "try", bus: "none", address }
);
this.address = address;
Expand All @@ -46,15 +54,7 @@ export class NetworkClient {
* @returns {Promise} The bool state of the network connection
*/
export const getConnected = () => {
return (
new NetworkClient().client.call(
"/org/fedoraproject/Anaconda/Modules/Network",
"org.freedesktop.DBus.Properties",
"Get",
["org.fedoraproject.Anaconda.Modules.Network", "Connected"]
)
.then(res => res[0].v)
);
return getProperty("Connected");
};

export const startEventMonitorNetwork = ({ dispatch }) => {
Expand All @@ -63,7 +63,7 @@ export const startEventMonitorNetwork = ({ dispatch }) => {
(path, iface, signal, args) => {
switch (signal) {
case "PropertiesChanged":
if (args[0] === "org.fedoraproject.Anaconda.Modules.Network" && Object.hasOwn(args[1], "Connected")) {
if (args[0] === INTERFACE_NAME && Object.hasOwn(args[1], "Connected")) {
dispatch(getConnectedAction());
} else {
debug(`Unhandled signal on ${path}: ${iface}.${signal}`, JSON.stringify(args));
Expand Down
15 changes: 8 additions & 7 deletions ui/webui/src/apis/payloads.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@
*/
import cockpit from "cockpit";

const OBJECT_PATH = "/org/fedoraproject/Anaconda/Modules/Payloads";
const INTERFACE_NAME = "org.fedoraproject.Anaconda.Modules.Payloads";
const callClient = (...args) => {
return new PayloadsClient().client.call(OBJECT_PATH, INTERFACE_NAME, ...args).then(res => res[0]);
};

export class PayloadsClient {
constructor (address) {
if (PayloadsClient.instance && (!address || PayloadsClient.instance.address === address)) {
Expand All @@ -27,7 +33,7 @@ export class PayloadsClient {
PayloadsClient.instance = this;

this.client = cockpit.dbus(
"org.fedoraproject.Anaconda.Modules.Payloads",
INTERFACE_NAME,
{ superuser: "try", bus: "none", address }
);
this.address = address;
Expand All @@ -45,10 +51,5 @@ export class PayloadsClient {
* @returns {Promise} Resolves the total space required by the payload
*/
export const getRequiredSpace = () => {
return new PayloadsClient().client.call(
"/org/fedoraproject/Anaconda/Modules/Payloads",
"org.fedoraproject.Anaconda.Modules.Payloads",
"CalculateRequiredSpace", []
)
.then(res => res[0]);
return callClient("CalculateRequiredSpace", []);
};
36 changes: 11 additions & 25 deletions ui/webui/src/apis/runtime.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ import cockpit from "cockpit";
import { getPasswordPoliciesAction } from "../actions/runtime-actions.js";
import { debug } from "../helpers/log.js";

const OBJECT_PATH = "/org/fedoraproject/Anaconda/Modules/Runtime/UserInterface";
const INTERFACE_NAME = "org.fedoraproject.Anaconda.Modules.Runtime.UserInterface";
const getProperty = (...args) => {
return new RuntimeClient().client.call(
OBJECT_PATH, "org.freedesktop.DBus.Properties", "Get", [INTERFACE_NAME, ...args]
);
};

export class RuntimeClient {
constructor (address) {
if (RuntimeClient.instance && (!address || RuntimeClient.instance.address === address)) {
Expand Down Expand Up @@ -49,37 +57,15 @@ export class RuntimeClient {
* @returns {Promise} Reports if the given OS release is considered final
*/
export const getIsFinal = () => {
return (
new RuntimeClient().client.call(
"/org/fedoraproject/Anaconda/Modules/Runtime/UserInterface",
"org.freedesktop.DBus.Properties",
"Get",
[
"org.fedoraproject.Anaconda.Modules.Runtime.UserInterface",
"IsFinal",
]
)
.then(res => res[0].v)
);
return getProperty("IsFinal").then(res => res[0].v);
};

/**
*
* @returns {Promise} Returns the password policies
*/
export const getPasswordPolicies = () => {
return (
new RuntimeClient().client.call(
"/org/fedoraproject/Anaconda/Modules/Runtime/UserInterface",
"org.freedesktop.DBus.Properties",
"Get",
[
"org.fedoraproject.Anaconda.Modules.Runtime.UserInterface",
"PasswordPolicies",
]
)
.then(res => res[0].v)
);
return getProperty("PasswordPolicies").then(res => res[0].v);
};

export const startEventMonitorRuntime = ({ dispatch }) => {
Expand All @@ -88,7 +74,7 @@ export const startEventMonitorRuntime = ({ dispatch }) => {
(path, iface, signal, args) => {
switch (signal) {
case "PropertiesChanged":
if (args[0] === "org.fedoraproject.Anaconda.Modules.Runtime.UserInterface" && Object.hasOwn(args[1], "PasswordPolicies")) {
if (args[0] === INTERFACE_NAME && Object.hasOwn(args[1], "PasswordPolicies")) {
dispatch(getPasswordPoliciesAction());
} else {
debug(`Unhandled signal on ${path}: ${iface}.${signal}`, JSON.stringify(args));
Expand Down
Loading

0 comments on commit fd50fe7

Please sign in to comment.