[telepathy-mission-control/telepathy-mission-control-5.2] McdAccount: turn the lowmem check for requests into an overridable virtual method

Simon McVittie simon.mcvittie at collabora.co.uk
Fri Aug 21 03:02:43 PDT 2009


---
 src/mcd-account-priv.h     |    5 ++++-
 src/mcd-account-requests.c |   34 ++++++++++++++++++++++++++++++++--
 src/mcd-account.c          |    1 +
 src/mcd-account.h          |    6 +++++-
 4 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/src/mcd-account-priv.h b/src/mcd-account-priv.h
index 3374046..bd4fa0e 100644
--- a/src/mcd-account-priv.h
+++ b/src/mcd-account-priv.h
@@ -165,5 +165,8 @@ void account_stats_iface_init (McSvcAccountInterfaceStatsClass *iface,
                                gpointer iface_data);
 void account_stats_instance_init (TpSvcDBusProperties *self);
 
-#endif /* __MCD_ACCOUNT_PRIV_H__ */
+G_GNUC_INTERNAL gboolean _mcd_account_check_request_real (McdAccount *account,
+                                                          GHashTable *request,
+                                                          GError **error);
 
+#endif /* __MCD_ACCOUNT_PRIV_H__ */
diff --git a/src/mcd-account-requests.c b/src/mcd-account-requests.c
index fda4ab5..ba4dc34 100644
--- a/src/mcd-account-requests.c
+++ b/src/mcd-account-requests.c
@@ -171,9 +171,8 @@ _mcd_account_create_request (McdAccount *account, GHashTable *properties,
         mcd_account_get_account_manager (account));
     DBusGConnection *dgc = tp_proxy_get_dbus_connection (dbus_daemon);
 
-    if (mcd_master_has_low_memory (mcd_master_get_default ()))
+    if (!mcd_account_check_request (account, properties, error))
     {
-        g_set_error (error, MC_ERROR, MC_LOWMEM_ERROR, "Insufficient memory");
         return NULL;
     }
 
@@ -320,3 +319,34 @@ account_channelrequests_iface_init (McSvcAccountInterfaceChannelRequestsClass *i
 #undef IMPLEMENT
 }
 
+gboolean
+mcd_account_check_request (McdAccount *account, GHashTable *request,
+                           GError **error)
+{
+    gboolean (*impl) (McdAccount *account, GHashTable *request,
+                      GError **error);
+
+    g_return_val_if_fail (MCD_IS_ACCOUNT (account), FALSE);
+    g_return_val_if_fail (request != NULL, FALSE);
+
+    impl = MCD_ACCOUNT_GET_CLASS (account)->check_request;
+
+    if (impl == NULL)
+        return TRUE;
+
+    return impl (account, request, error);
+}
+
+/* Default implementation of check_request */
+gboolean
+_mcd_account_check_request_real (McdAccount *account, GHashTable *request,
+                                 GError **error)
+{
+    if (mcd_master_has_low_memory (mcd_master_get_default ()))
+    {
+        g_set_error (error, MC_ERROR, MC_LOWMEM_ERROR, "Insufficient memory");
+        return FALSE;
+    }
+
+    return TRUE;
+}
diff --git a/src/mcd-account.c b/src/mcd-account.c
index 07d5eca..39ecac6 100644
--- a/src/mcd-account.c
+++ b/src/mcd-account.c
@@ -2125,6 +2125,7 @@ mcd_account_class_init (McdAccountClass * klass)
     klass->set_parameter = set_parameter;
     klass->delete = _mcd_account_delete;
     klass->load = _mcd_account_load_real;
+    klass->check_request = _mcd_account_check_request_real;
 
     g_object_class_install_property
         (object_class, PROP_DBUS_DAEMON,
diff --git a/src/mcd-account.h b/src/mcd-account.h
index de8008a..0b3befc 100644
--- a/src/mcd-account.h
+++ b/src/mcd-account.h
@@ -62,7 +62,8 @@ struct _McdAccountClass
     gboolean (*delete) (McdAccount *account, GError **error);
     void (*load) (McdAccount *account, McdAccountLoadCb callback,
                   gpointer user_data);
-    void (*_mc_reserved5) (void);
+    gboolean (*check_request) (McdAccount *account, GHashTable *request,
+                               GError **error);
     void (*_mc_reserved6) (void);
     void (*_mc_reserved7) (void);
 };
@@ -116,4 +117,7 @@ TpConnectionStatusReason mcd_account_get_connection_status_reason (McdAccount *a
 
 McdConnection *mcd_account_get_connection (McdAccount *account);
 
+gboolean mcd_account_check_request (McdAccount *account, GHashTable *request,
+                                    GError **error);
+
 #endif
-- 
1.5.6.5



More information about the telepathy-commits mailing list