# HG changeset patch # User Mikael Berthe # Date 1345916146 -7200 # Node ID d759a8b8dbbed1e092125a2232aaa336c4ec24ec # Parent e4458bccf48634fcb7413a4793b06c61f2899ebb [killpresence] /killpresence: Allow '.' as a shortcut for cuurent JID diff -r e4458bccf486 -r d759a8b8dbbe killpresence/killpresence.c --- a/killpresence/killpresence.c Mon Jul 09 21:33:34 2012 +0200 +++ b/killpresence/killpresence.c Sat Aug 25 19:35:46 2012 +0200 @@ -3,9 +3,15 @@ * * /killpresence fulljid * Ignore current presence for the provided JID + * Useful for kicking ghosts from the roster... + * Shortcuts can be used for the full jid. Example: + * /killpresence ./resource + * Also, resource '*' stands for all resources. + * * /killchatstates fulljid * Reset chat states for the provided JID * + * * Copyright (C) 2010 Mikael Berthe * * This module is free software; you can redistribute it and/or modify @@ -38,7 +44,7 @@ module_info_t info_killpresence = { .branch = MCABBER_BRANCH, .api = MCABBER_API_VERSION, - .version = "0.02", + .version = "0.03", .description = "Ignore an item's current presence(s)\n" " Provides the following commands:\n" " /killpresence $fulljid\n" @@ -56,6 +62,7 @@ static void do_killpresence(char *args) { char *jid_utf8, *res; + const char *targetjid = NULL; if (!args || !*args) { scr_log_print(LPRINT_NORMAL, "I need a full JID."); @@ -69,23 +76,33 @@ res = strchr(jid_utf8, JID_RESOURCE_SEPARATOR); if (res) { *res++ = '\0'; - } else { + if (!strcmp(jid_utf8, ".")) { + if (current_buddy) + targetjid = CURRENT_JID; + } else { + targetjid = jid_utf8; + } + } + + if (!targetjid) { scr_log_print(LPRINT_NORMAL, "I need a /full/ JID."); + g_free(jid_utf8); return; } + if (!strcmp(res, "*")) { // Kill all resources! - GSList *sl_user = roster_find(jid_utf8, jidsearch, ROSTER_TYPE_USER); + GSList *sl_user = roster_find(targetjid, jidsearch, ROSTER_TYPE_USER); if (sl_user) { scr_log_print(LPRINT_NORMAL, - "Killing all resources from <%s> now!", jid_utf8); + "Killing all resources from <%s> now!", targetjid); buddy_del_all_resources(sl_user->data); } else { - scr_log_print(LPRINT_NORMAL, "Cannot find <%s>...", jid_utf8); + scr_log_print(LPRINT_NORMAL, "Cannot find <%s>...", targetjid); } } else { - roster_setstatus(jid_utf8, res, 0, + roster_setstatus(targetjid, res, 0, offline, "Killed by killpresence.", 0L, role_none, affil_none, NULL); }