daemon: Get and store env override configurations in the deamon

This commit is contained in:
Kate Hsuan 2024-08-15 14:13:38 +08:00
parent b604a297be
commit 4e8e8b43f8
4 changed files with 60 additions and 13 deletions

View file

@ -69,6 +69,9 @@ struct UpDaemonPrivate
guint low_time;
guint critical_time;
guint action_time;
/* environment variable override */
const char *state_dir_override;
};
static void up_daemon_finalize (GObject *object);
@ -975,6 +978,23 @@ up_daemon_get_debug (UpDaemon *daemon)
return daemon->priv->debug;
}
/**
* up_deamon_get_state_dir_env_override:
*
* Get UPOWER_STATE_DIR environment variable.
**/
const gchar *
up_deamon_get_state_dir_env_override (UpDaemon *daemon)
{
return daemon->priv->state_dir_override;
}
static void
up_daemon_get_env_override (UpDaemon *self)
{
self->priv->state_dir_override = g_getenv ("UPOWER_STATE_DIR");
}
/**
* up_daemon_device_added_cb:
**/
@ -1112,6 +1132,8 @@ up_daemon_init (UpDaemon *daemon)
load_time_policy (daemon, FALSE);
policy_config_validate (daemon);
up_daemon_get_env_override (daemon);
daemon->priv->backend = up_backend_new ();
g_signal_connect (daemon->priv->backend, "device-added",
G_CALLBACK (up_daemon_device_added_cb), daemon);

View file

@ -408,6 +408,26 @@ up_device_battery_set_charge_thresholds(UpDeviceBattery *self, gdouble start, gd
return klass->set_battery_charge_thresholds(&self->parent_instance, start, end, error);
}
static const gchar *
up_device_battery_get_state_dir (UpDeviceBattery *self)
{
UpDevice *device = UP_DEVICE (self);
const gchar *state_dir_override = NULL;
UpDeviceBatteryPrivate *priv = up_device_battery_get_instance_private (self);
if (priv->state_dir != NULL)
return priv->state_dir;
state_dir_override = up_device_get_state_dir_override (device);
if (state_dir_override != NULL)
priv->state_dir = state_dir_override;
else
priv->state_dir = STATE_DIR;
return priv->state_dir;
}
static gboolean
up_device_battery_get_battery_charge_threshold_config(UpDeviceBattery *self)
{
@ -415,10 +435,11 @@ up_device_battery_get_battery_charge_threshold_config(UpDeviceBattery *self)
g_autofree gchar *data = NULL;
g_autoptr(GError) error = NULL;
g_autofree gchar *state_filename = NULL;
UpDeviceBatteryPrivate *priv = up_device_battery_get_instance_private (self);
const char *state_dir = NULL;
state_filename = g_strdup_printf("charging-threshold-status");
filename = g_build_filename (priv->state_dir, state_filename, NULL);
state_dir = up_device_battery_get_state_dir (self);
filename = g_build_filename (state_dir, state_filename, NULL);
if (g_file_get_contents (filename, &data, NULL, &error) == FALSE) {
g_debug ("failed to read battery charge threshold: %s", error->message);
return FALSE;
@ -594,10 +615,10 @@ static gboolean
up_device_battery_charge_threshold_state_write(UpDeviceBattery *self, gboolean enabled, const gchar *state_file) {
g_autofree gchar *filename = NULL;
GError *error = NULL;
const gchar *state_dir;
UpDeviceBatteryPrivate *priv = up_device_battery_get_instance_private (self);
filename = g_build_filename (priv->state_dir, state_file, NULL);
state_dir = up_device_battery_get_state_dir (self);
filename = g_build_filename (state_dir, state_file, NULL);
if (!g_file_set_contents (filename, enabled ? "1": "0" , -1, &error)) {
g_error ("failed to save battery charge threshold: %s", error->message);
return FALSE;
@ -684,8 +705,6 @@ up_device_battery_set_charge_threshold (UpExportedDevice *skeleton,
static void
up_device_battery_init (UpDeviceBattery *self)
{
UpDeviceBatteryPrivate *priv = up_device_battery_get_instance_private (self);
g_object_set (self,
"type", UP_DEVICE_KIND_BATTERY,
"power-supply", TRUE,
@ -694,12 +713,6 @@ up_device_battery_init (UpDeviceBattery *self)
g_signal_connect (self, "handle-enable-charge-threshold",
G_CALLBACK (up_device_battery_set_charge_threshold), self);
if (g_getenv ("UPOWER_STATE_DIR")) {
priv->state_dir = g_getenv ("UPOWER_STATE_DIR");
} else {
priv->state_dir = STATE_DIR;
}
}
static void

View file

@ -751,6 +751,17 @@ up_device_get_native (UpDevice *device)
return priv->native;
}
const gchar *
up_device_get_state_dir_override (UpDevice *device)
{
UpDevicePrivate *priv = up_device_get_instance_private (device);
if (priv->daemon == NULL)
return NULL;
return up_deamon_get_state_dir_env_override (priv->daemon);
}
static void
up_device_init (UpDevice *device)
{

View file

@ -67,6 +67,7 @@ gboolean up_device_get_on_battery (UpDevice *device,
gboolean *on_battery);
gboolean up_device_get_online (UpDevice *device,
gboolean *online);
const gchar *up_device_get_state_dir_override (UpDevice *device);
gboolean up_device_polkit_is_allowed (UpDevice *device,
GDBusMethodInvocation *invocation);
void up_device_sibling_discovered (UpDevice *device,