diff options
author | Ray Strode <rstrode@redhat.com> | 2021-01-24 12:41:20 -0500 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2021-04-13 10:21:25 -0400 |
commit | 0e8ebc32ede113e81c8b98fbc5c133fc5cf2aaa2 (patch) | |
tree | 6ec623d2032200f192114e1b779ee12f0e5d3a17 | |
parent | 00eaf6c79be5abf1e8016e48998c9aafbc38e114 (diff) | |
download | gnome-settings-daemon-rhel/account-and-subman-plugins.tar.gz |
subman: Clean up notification behaviorrhel/account-and-subman-plugins
Notifications were only displayed for some status transitions.
This commit introduces some booleans based on the old and new
statuses to make the code clearer and to make it easier to hit
all the cases.
-rw-r--r-- | plugins/subman/gsd-subman-common.h | 1 | ||||
-rw-r--r-- | plugins/subman/gsd-subscription-manager.c | 141 |
2 files changed, 120 insertions, 22 deletions
diff --git a/plugins/subman/gsd-subman-common.h b/plugins/subman/gsd-subman-common.h index 88226564..9397dbe4 100644 --- a/plugins/subman/gsd-subman-common.h +++ b/plugins/subman/gsd-subman-common.h @@ -25,6 +25,7 @@ G_BEGIN_DECLS typedef enum { + GSD_SUBMAN_SUBSCRIPTION_STATUS_NOT_READ = -1, GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN, GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID, GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID, diff --git a/plugins/subman/gsd-subscription-manager.c b/plugins/subman/gsd-subscription-manager.c index 6d80bfa9..aaccbbc6 100644 --- a/plugins/subman/gsd-subscription-manager.c +++ b/plugins/subman/gsd-subscription-manager.c @@ -270,6 +270,7 @@ _client_subscription_status_update (GsdSubscriptionManager *manager, GError **er /* save old value */ priv->subscription_status_last = priv->subscription_status; + if (!_client_installed_products_update (manager, error)) goto out; @@ -512,55 +513,149 @@ static void _client_maybe__show_notification (GsdSubscriptionManager *manager) { GsdSubscriptionManagerPrivate *priv = manager->priv; + gboolean was_read, was_registered, had_subscriptions, needed_subscriptions; + gboolean is_read, is_registered, has_subscriptions, needs_subscriptions; + + switch (priv->subscription_status_last) { + case GSD_SUBMAN_SUBSCRIPTION_STATUS_NOT_READ: + was_read = FALSE; + was_registered = FALSE; + needed_subscriptions = TRUE; + had_subscriptions = FALSE; + break; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN: + was_read = TRUE; + was_registered = FALSE; + needed_subscriptions = TRUE; + had_subscriptions = FALSE; + break; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID: + was_read = TRUE; + was_registered = TRUE; + needed_subscriptions = TRUE; + had_subscriptions = TRUE; + break; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID: + was_read = TRUE; + was_registered = TRUE; + needed_subscriptions = TRUE; + had_subscriptions = FALSE; + break; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED: + was_read = TRUE; + was_registered = TRUE; + needed_subscriptions = FALSE; + had_subscriptions = FALSE; + break; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID: + was_read = TRUE; + was_registered = TRUE; + needed_subscriptions = TRUE; + had_subscriptions = FALSE; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_NO_INSTALLED_PRODUCTS: + was_read = TRUE; + was_registered = FALSE; + needed_subscriptions = FALSE; + had_subscriptions = FALSE; + break; + } + + switch (priv->subscription_status) { + case GSD_SUBMAN_SUBSCRIPTION_STATUS_NOT_READ: + is_read = FALSE; + is_registered = FALSE; + needs_subscriptions = TRUE; + has_subscriptions = FALSE; + break; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN: + is_read = TRUE; + is_registered = FALSE; + needs_subscriptions = TRUE; + has_subscriptions = FALSE; + break; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID: + is_read = TRUE; + is_registered = TRUE; + needs_subscriptions = TRUE; + has_subscriptions = TRUE; + break; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID: + case GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID: + is_read = TRUE; + is_registered = TRUE; + needs_subscriptions = TRUE; + has_subscriptions = FALSE; + break; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED: + is_read = TRUE; + is_registered = TRUE; + needs_subscriptions = FALSE; + has_subscriptions = FALSE; + break; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_NO_INSTALLED_PRODUCTS: + is_read = TRUE; + is_registered = FALSE; + needs_subscriptions = FALSE; + has_subscriptions = FALSE; + break; + } /* startup */ - if (priv->subscription_status_last == GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN && - priv->subscription_status == GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN) { + if (!was_read && is_read && priv->subscription_status == GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN) { _show_notification (manager, _NOTIFY_REGISTRATION_REQUIRED); return; } /* something changed */ - if (priv->subscription_status_last != priv->subscription_status) { + if (was_read && is_read && priv->subscription_status_last != priv->subscription_status) { g_debug ("transisition from subscription status '%s' to '%s'", gsd_subman_subscription_status_to_string (priv->subscription_status_last), gsd_subman_subscription_status_to_string (priv->subscription_status)); - /* needs registration */ - if (priv->subscription_status_last == GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID && - priv->subscription_status == GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID) { - _show_notification (manager, _NOTIFY_REGISTRATION_REQUIRED); + /* needs subscription */ + if (is_registered && needs_subscriptions && !has_subscriptions) { + _show_notification (manager, _NOTIFY_EXPIRED); return; } /* was unregistered */ - if (priv->subscription_status_last == GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID && - priv->subscription_status == GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN) { + if (was_registered && !is_registered) { _show_notification (manager, _NOTIFY_REGISTRATION_REQUIRED); return; } - /* registered */ - if (priv->subscription_status_last == GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN && - priv->subscription_status == GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID && - g_timer_elapsed (priv->timer_last_notified, NULL) > 60) { - _show_notification (manager, _NOTIFY_REGISTERED); - return; + /* just registered */ + if (!was_registered && is_registered) { + if (!needs_subscriptions || has_subscriptions) { + _show_notification (manager, _NOTIFY_REGISTERED); + return; + } + } + + /* subscriptions changed */ + if (was_registered && is_registered) { + /* subscribed */ + if (!had_subscriptions && + needs_subscriptions && has_subscriptions) { + _show_notification (manager, _NOTIFY_REGISTERED); + return; + } + + /* simple content access enabled */ + if (needed_subscriptions && !had_subscriptions && !needs_subscriptions) { + _show_notification (manager, _NOTIFY_REGISTERED); + return; + } } } /* nag again */ - if (priv->subscription_status == GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN && + if (!is_registered && g_timer_elapsed (priv->timer_last_notified, NULL) > 60 * 60 * 24) { _show_notification (manager, _NOTIFY_REGISTRATION_REQUIRED); return; } - if (priv->subscription_status == GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID && - g_timer_elapsed (priv->timer_last_notified, NULL) > 60 * 60 * 24) { - _show_notification (manager, _NOTIFY_EXPIRED); - return; - } - if (priv->subscription_status == GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID && + if (is_registered && !has_subscriptions && needs_subscriptions && g_timer_elapsed (priv->timer_last_notified, NULL) > 60 * 60 * 24) { _show_notification (manager, _NOTIFY_EXPIRED); return; @@ -941,6 +1036,8 @@ gsd_subscription_manager_init (GsdSubscriptionManager *manager) priv->installed_products = g_ptr_array_new_with_free_func ((GDestroyNotify) product_data_free); priv->timer_last_notified = g_timer_new (); + priv->subscription_status = GSD_SUBMAN_SUBSCRIPTION_STATUS_NOT_READ; + priv->subscription_status_last = GSD_SUBMAN_SUBSCRIPTION_STATUS_NOT_READ; /* expired */ priv->notification_expired = |