Mercurial > pidgin.yaz
view libpurple/protocols/oscar/oscar_data.c @ 29818:2c95b7c57ebb
Fix up the X-Status code in many ways:
* Clean up the descriptions to be consistently of the form, "I am _____."
* Properly mark the descriptions for translation.
* Utilize the files from small smiley theme as much as possible. Through
a Makefile rule, they will be copied from emotes/small/16/ to
emblems/16 at build time and then installed as usual. This is slightly
hackish, but ensures that our icons are consistent and saves manual
copying work and duplication of source files in the repository.
+ As part of this, mobile.png was moved to emotes/small/16, as it is
needed in both places.
* Call these things "Custom Status Icon"s (adding "Status") in the UI.
* Add icqmood0 = shopping, based on testing with ICQ6. Thanks John!!!
* Change the xstatus_crap icon to xstatus_typing to match ICQ 6. The other
typing icon was left alone, except that the name was set to NULL so we
wouldn't get duplicates in the list.
* Change the xstatus_iron (Pro7 TV icon) to xstatus_suit, using the 'person
wearing a suit' icon from N3fr0n to match ICQ6. I named this icon,
somewhat arbitrarily, "At the office".
* The PDA icon is now the same as the hiptop, but hopefully that won't cause
any confusion. Also, the custom icon is now higher priority than the
hiptop icon.
* The music icon is the ("tune") emblem, not the emoticon. This seems more
consistent, given that we're talking about buddy list emblems.
* The "Googling" icon has been renamed to "Searching the web" to avoid the
trademark.
* The "zzz" icon is now an icon for smoking, which seems to fit with the
official client's icon as posted in #4508. Other clients may show a
marijuana leaf. Oh well.
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sun, 16 Nov 2008 08:39:34 +0000 |
parents | a270bd4b5298 |
children | 986edbefc516 |
line wrap: on
line source
/* * Purple's oscar protocol plugin * This file is the legal property of its developers. * Please see the AUTHORS file distributed alongside this file. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ #include "oscar.h" typedef struct _SnacHandler SnacHandler; struct _SnacHandler { guint16 family; guint16 subtype; aim_rxcallback_t handler; guint16 flags; }; /** * Allocates a new OscarData and initializes it with default values. */ OscarData * oscar_data_new(void) { OscarData *od; od = g_new0(OscarData, 1); aim_initsnachash(od); od->snacid_next = 0x00000001; od->buddyinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); od->handlerlist = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_free); /* * Register all the modules for this session... */ aim__registermodule(od, misc_modfirst); /* load the catch-all first */ aim__registermodule(od, service_modfirst); aim__registermodule(od, locate_modfirst); aim__registermodule(od, buddylist_modfirst); aim__registermodule(od, msg_modfirst); /* aim__registermodule(od, adverts_modfirst); */ /* aim__registermodule(od, invite_modfirst); */ aim__registermodule(od, admin_modfirst); aim__registermodule(od, popups_modfirst); aim__registermodule(od, bos_modfirst); aim__registermodule(od, search_modfirst); aim__registermodule(od, stats_modfirst); /* aim__registermodule(od, translate_modfirst); */ aim__registermodule(od, chatnav_modfirst); aim__registermodule(od, chat_modfirst); aim__registermodule(od, odir_modfirst); aim__registermodule(od, bart_modfirst); /* missing 0x11 - 0x12 */ aim__registermodule(od, ssi_modfirst); /* missing 0x14 */ aim__registermodule(od, icq_modfirst); /* missing 0x16 */ aim__registermodule(od, auth_modfirst); aim__registermodule(od, email_modfirst); return od; } /** * Logoff and deallocate a session. * * @param od Session to kill */ void oscar_data_destroy(OscarData *od) { aim_cleansnacs(od, -1); while (od->requesticon) { g_free(od->requesticon->data); od->requesticon = g_slist_delete_link(od->requesticon, od->requesticon); } while (od->statusnotes_queue) { g_free(od->statusnotes_queue->data); od->statusnotes_queue = g_slist_delete_link(od->statusnotes_queue, od->statusnotes_queue); } if (od->statusnotes_queue_timer > 0) purple_timeout_remove(od->statusnotes_queue_timer); g_free(od->email); g_free(od->newp); g_free(od->oldp); if (od->getblisttimer > 0) purple_timeout_remove(od->getblisttimer); while (od->oscar_connections != NULL) flap_connection_destroy(od->oscar_connections->data, OSCAR_DISCONNECT_DONE, NULL); while (od->peer_connections != NULL) peer_connection_destroy(od->peer_connections->data, OSCAR_DISCONNECT_LOCAL_CLOSED, NULL); aim__shutdownmodules(od); g_hash_table_destroy(od->buddyinfo); g_hash_table_destroy(od->handlerlist); g_free(od); } void oscar_data_addhandler(OscarData *od, guint16 family, guint16 subtype, aim_rxcallback_t newhandler, guint16 flags) { SnacHandler *snac_handler; purple_debug_misc("oscar", "Adding handler for %04x/%04x\n", family, subtype); snac_handler = g_new0(SnacHandler, 1); snac_handler->family = family; snac_handler->subtype = subtype; snac_handler->flags = flags; snac_handler->handler = newhandler; g_hash_table_insert(od->handlerlist, GUINT_TO_POINTER((family << 16) + subtype), snac_handler); } aim_rxcallback_t aim_callhandler(OscarData *od, guint16 family, guint16 subtype) { SnacHandler *snac_handler; snac_handler = g_hash_table_lookup(od->handlerlist, GUINT_TO_POINTER((family << 16) + subtype)); return snac_handler ? snac_handler->handler : NULL; }