Mercurial > pidgin
view src/protocols/msn/msnobject.c @ 8866:c2dff943e240
[gaim-migrate @ 9634]
(14:10:22) Faceprint: the timestamp plugin will now mislead users
(14:10:54) Me: which way does ichat behave?
(14:10:58) Me: i think the new way
(14:11:05) Me: but its been some time since i've seen it
(14:11:09) Faceprint: i don't know or care, the new behavior will confuse
the hell out of people
(14:11:22) Faceprint: lets say we have a conversation
(14:11:25) Faceprint: 2:00 gets printed by the plugin
(14:11:36) Faceprint: then we say nothing for 3 hours
(14:11:42) Faceprint: and then one of us says something
(14:12:04) Faceprint: that will be printed, and then as many as 5 minutes
later, the plugin will print 5:05
(14:12:23) Me: yes yes yes, i see both sides of this one. i tend to think
the new behavior is better, but i'll revert it
(14:12:36) Faceprint: since "normal" timestamps are turned off, it appears
as though what was just said was said around 2
(14:12:43) Faceprint: no, don't revert, fix
(14:12:53) Faceprint: preferably, make the patch writer fix
(14:12:57) Me: *nods*
(14:13:06) Me: which requires reverting since otherwise he won't be
motivated
(14:13:13) Faceprint: if something is said and we've gone more than 5 min
w/o printing a timestamp, print a timestamp before writing to the conv
committer: Tailor Script <tailor@pidgin.im>
| author | Luke Schierer <lschiere@pidgin.im> |
|---|---|
| date | Mon, 03 May 2004 18:13:39 +0000 |
| parents | 06f57183e29f |
| children | f32ee2e97b37 |
line wrap: on
line source
/** * @file msnobject.c MSNObject API * * gaim * * Copyright (C) 2003-2004 Christian Hammond <chipx86@gnupdate.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "msnobject.h" #define GET_STRING_TAG(field, id) \ if ((tag = strstr(str, id "=\"")) != NULL) \ { \ tag += strlen(id "=\""); \ c = strchr(tag, '"'); \ if (c != NULL) \ obj->field = g_strndup(tag, c - tag); \ } #define GET_INT_TAG(field, id) \ if ((tag = strstr(str, id "=\"")) != NULL) \ { \ char buf[16]; \ tag += strlen(id "=\""); \ c = strchr(tag, '"'); \ if (c != NULL) \ { \ strncpy(buf, tag, c - tag); \ obj->field = atoi(buf); \ } \ } MsnObject * msn_object_new(void) { MsnObject *obj; obj = g_new0(MsnObject, 1); msn_object_set_type(obj, MSN_OBJECT_UNKNOWN); msn_object_set_friendly(obj, "AAA="); return obj; } MsnObject * msn_object_new_from_string(const char *str) { MsnObject *obj; char *tag, *c; g_return_val_if_fail(str != NULL, NULL); g_return_val_if_fail(!strncmp(str, "<msnobj ", 8), NULL); obj = msn_object_new(); GET_STRING_TAG(creator, "Creator"); GET_INT_TAG(size, "Size"); GET_INT_TAG(type, "Type"); GET_STRING_TAG(location, "Location"); GET_STRING_TAG(friendly, "Friendly"); GET_STRING_TAG(sha1d, "SHA1D"); GET_STRING_TAG(sha1c, "SHA1C"); return obj; } void msn_object_destroy(MsnObject *obj) { g_return_if_fail(obj != NULL); if (obj->creator != NULL) g_free(obj->creator); if (obj->location != NULL) g_free(obj->location); if (obj->friendly != NULL) g_free(obj->friendly); if (obj->sha1d != NULL) g_free(obj->sha1d); if (obj->sha1c != NULL) g_free(obj->sha1c); g_free(obj); } char * msn_object_to_string(const MsnObject *obj) { char *str; g_return_val_if_fail(obj != NULL, NULL); str = g_strdup_printf("<msnobj Creator=\"%s\" Size=\"%d\" Type=\"%d\" " "Location=\"%s\" Friendly=\"%s\" SHA1D=\"%s\" " "SHA1C=\"%s\"/>", msn_object_get_creator(obj), msn_object_get_size(obj), msn_object_get_type(obj), msn_object_get_location(obj), msn_object_get_friendly(obj), msn_object_get_sha1d(obj), msn_object_get_sha1c(obj)); return str; } void msn_object_set_creator(MsnObject *obj, const char *creator) { g_return_if_fail(obj != NULL); if (obj->creator != NULL) g_free(obj->creator); obj->creator = (creator == NULL ? NULL : g_strdup(creator)); } void msn_object_set_size(MsnObject *obj, int size) { g_return_if_fail(obj != NULL); obj->size = size; } void msn_object_set_type(MsnObject *obj, MsnObjectType type) { g_return_if_fail(obj != NULL); obj->type = type; } void msn_object_set_location(MsnObject *obj, const char *location) { g_return_if_fail(obj != NULL); if (obj->location != NULL) g_free(obj->location); obj->location = (location == NULL ? NULL : g_strdup(location)); } void msn_object_set_friendly(MsnObject *obj, const char *friendly) { g_return_if_fail(obj != NULL); if (obj->friendly != NULL) g_free(obj->friendly); obj->friendly = (friendly == NULL ? NULL : g_strdup(friendly)); } void msn_object_set_sha1d(MsnObject *obj, const char *sha1d) { g_return_if_fail(obj != NULL); if (obj->sha1d != NULL) g_free(obj->sha1d); obj->sha1d = (sha1d == NULL ? NULL : g_strdup(sha1d)); } void msn_object_set_sha1c(MsnObject *obj, const char *sha1c) { g_return_if_fail(obj != NULL); if (obj->sha1c != NULL) g_free(obj->sha1c); obj->sha1c = (sha1c == NULL ? NULL : g_strdup(sha1c)); } const char * msn_object_get_creator(const MsnObject *obj) { g_return_val_if_fail(obj != NULL, NULL); return obj->creator; } int msn_object_get_size(const MsnObject *obj) { g_return_val_if_fail(obj != NULL, 0); return obj->size; } MsnObjectType msn_object_get_type(const MsnObject *obj) { g_return_val_if_fail(obj != NULL, MSN_OBJECT_UNKNOWN); return obj->type; } const char * msn_object_get_location(const MsnObject *obj) { g_return_val_if_fail(obj != NULL, NULL); return obj->location; } const char * msn_object_get_friendly(const MsnObject *obj) { g_return_val_if_fail(obj != NULL, NULL); return obj->friendly; } const char * msn_object_get_sha1d(const MsnObject *obj) { g_return_val_if_fail(obj != NULL, NULL); return obj->sha1d; } const char * msn_object_get_sha1c(const MsnObject *obj) { g_return_val_if_fail(obj != NULL, NULL); return obj->sha1c; }
