* Copyright (C) 2023 Red Hat, Inc.
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
import { _callClient } from "./helpers.js";
import {
runStorageTask,
StorageClient,
} from "./storage.js";
const INTERFACE_NAME_VIEWER = "org.fedoraproject.Anaconda.Modules.Storage.DeviceTree.Viewer";
const INTERFACE_NAME_HANDLER = "org.fedoraproject.Anaconda.Modules.Storage.DeviceTree.Handler";
const INTERFACE_NAME_RESIZABLE = "org.fedoraproject.Anaconda.Modules.Storage.DeviceTree.Resizable";
const OBJECT_PATH = "/org/fedoraproject/Anaconda/Modules/Storage/DeviceTree";
export class DeviceTree {
constructor (deviceTree = OBJECT_PATH) {
this.deviceTree = deviceTree;
}
callViewer (...args) {
return _callClient(StorageClient, this.deviceTree, INTERFACE_NAME_VIEWER, ...args);
}
callResizable (...args) {
return _callClient(StorageClient, this.deviceTree, INTERFACE_NAME_RESIZABLE, ...args);
}
callHandler (...args) {
return _callClient(StorageClient, this.deviceTree, INTERFACE_NAME_HANDLER, ...args);
}
}
* @param {string} device A device ID
* @param {string} password A password
*
* @returns {Promise} Resolves true if success otherwise false
*/
export const unlockDevice = ({ device, passphrase }) => {
return new DeviceTree().callHandler("UnlockDevice", [device, passphrase]);
};
* @param {string} disk A device name
*
* @returns {Promise} Resolves an object with the device data
*/
export const getDeviceData = ({ disk }) => {
return new DeviceTree().callViewer("GetDeviceData", [disk]);
};
* @returns {Promise} Resolves a list with the existing GNU/Linux installations
*/
export const getExistingSystems = () => {
return new DeviceTree().callViewer("GetExistingSystems", []);
};
* @param {Array[string]} diskNames A list of disk names
*
* @returns {Promise} Resolves the total free space on the given disks
*/
export const getDiskFreeSpace = ({ diskNames }) => {
return new DeviceTree().callViewer("GetDiskFreeSpace", [diskNames]);
};
* @param {string} disk Name A disk name
*
* @returns {Promise} Resolves the device format data
*/
export const getFormatData = ({ diskName }) => {
return new DeviceTree().callViewer("GetFormatData", [diskName]);
};
* @param {Array[string]} mountPoints A list of mount points
*
* @returns {Promise} Resolves total file system free space for system on given mount points
*/
export const getFreeSpaceForSystem = ({ mountPoints }) => {
return new DeviceTree().callViewer("GetFreeSpaceForSystem", [mountPoints]);
};
* @param {int} requiredSpace A required space in bytes
*
* @returns {Promise} Resolves the total free space on the given disks
*/
export const getRequiredDeviceSize = ({ requiredSpace }) => {
return new DeviceTree().callViewer("GetRequiredDeviceSize", [requiredSpace]);
};
* @param {Array[string]} diskNames A list of disk names
*
* @returns {Promise} List of mount point constraints for the platform
*/
export const getMountPointConstraints = ({ diskNames }) => {
return new DeviceTree().callViewer("GetMountPointConstraints", [diskNames]);
};
* @returns {Promise} Data static data about a format type
*/
export const getFormatTypeData = ({ formatType }) => {
return new DeviceTree().callViewer("GetFormatTypeData", [formatType]);
};
* @param {Array[string]} diskNames A list of disk names
*
* @returns {Promise} Resolves the total space on the given disks
*/
export const getDiskTotalSpace = ({ diskNames }) => {
return new DeviceTree().callViewer("GetDiskTotalSpace", [diskNames]);
};
* @returns {Promise} Resolves all devices in a device tree
*/
export const getDevices = () => {
return new DeviceTree().callViewer("GetDevices", []);
};
* @param {string[]} diskIds device IDs to find ancestors for
* @returns {Promise} Resolves ancestor device IDs (excludes the devices themselves)
*/
export const getAncestors = ({ diskIds }) => {
return new DeviceTree().callViewer("GetAncestors", [diskIds]);
};
* @returns {Promise} Resolves all actions in a device tree
*/
export const getActions = () => {
return new DeviceTree().callViewer("GetActions", []);
};
* @returns {Promise} Resolves all mount points in a device tree
*/
export const getMountPoints = () => {
return new DeviceTree().callViewer("GetMountPoints", []);
};
export const findExistingSystems = async ({ onFail, onSuccess }) => {
const tasks = await new StorageClient().client.call(
OBJECT_PATH,
INTERFACE_NAME_HANDLER,
"FindExistingSystemsWithTask", []
);
return runStorageTask({
onFail,
onSuccess,
task: tasks[0],
});
};