diff options
-rw-r--r-- | extensions/Logger.xml | 13 | ||||
-rw-r--r-- | telepathy-logger/dbus-service.c | 45 |
2 files changed, 58 insertions, 0 deletions
diff --git a/extensions/Logger.xml b/extensions/Logger.xml index c05d726..b6de7dc 100644 --- a/extensions/Logger.xml +++ b/extensions/Logger.xml @@ -160,6 +160,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</ </tp:docstring> </method> + <method name="ClearAccount" + tp:name-for-bindings="Clear_Account"> + <arg direction="in" name="Account" type="o" tp:type="Account"> + <tp:docstring> + The object path for the TpAccount in which logs will be cleared. + </tp:docstring> + </arg> + + <tp:docstring> + Clear all logs stored for specified account. + </tp:docstring> + </method> + <signal name="FavouriteContactsChanged" tp:name-for-bindings="Favourite_Contacts_Changed"> <tp:docstring> diff --git a/telepathy-logger/dbus-service.c b/telepathy-logger/dbus-service.c index dd40667..3b95950 100644 --- a/telepathy-logger/dbus-service.c +++ b/telepathy-logger/dbus-service.c @@ -940,6 +940,50 @@ tpl_dbus_service_clear (TplSvcLogger *logger, static void +tpl_dbus_service_clear_account (TplSvcLogger *logger, + const gchar *account_path, + DBusGMethodInvocation *context) +{ + TplDBusService *self = TPL_DBUS_SERVICE (logger); + TpDBusDaemon *bus; + TpAccount *account; + GError *error = NULL; + + g_return_if_fail (TPL_IS_DBUS_SERVICE (self)); + g_return_if_fail (context != NULL); + + bus = tp_dbus_daemon_dup (&error); + if (bus == NULL) + { + DEBUG ("Unable to acquire the bus daemon: %s", error->message); + dbus_g_method_return_error (context, error); + goto out; + } + + account = tp_account_new (bus, account_path, &error); + if (account == NULL) + { + DEBUG ("Unable to acquire the account for %s: %s", account_path, + error->message); + dbus_g_method_return_error (context, error); + goto out; + } + + /* We want to clear synchronously to avoid concurent write */ + _tpl_log_manager_clear_account (self->priv->manager, account); + g_object_unref (account); + + tpl_svc_logger_return_from_clear_account (context); + +out: + if (bus != NULL) + g_object_unref (bus); + + g_clear_error (&error); +} + + +static void tpl_logger_iface_init (gpointer iface, gpointer iface_data) { @@ -951,5 +995,6 @@ tpl_logger_iface_init (gpointer iface, IMPLEMENT (add_favourite_contact); IMPLEMENT (remove_favourite_contact); IMPLEMENT (clear); + IMPLEMENT (clear_account); #undef IMPLEMENT } |