You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(106) |
Oct
(334) |
Nov
(246) |
Dec
(145) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(42) |
Feb
(53) |
Mar
(232) |
Apr
(109) |
May
(137) |
Jun
(63) |
Jul
(26) |
Aug
(263) |
Sep
(193) |
Oct
(507) |
Nov
(440) |
Dec
(241) |
2003 |
Jan
(567) |
Feb
(195) |
Mar
(504) |
Apr
(481) |
May
(524) |
Jun
(522) |
Jul
(594) |
Aug
(502) |
Sep
(643) |
Oct
(508) |
Nov
(430) |
Dec
(377) |
2004 |
Jan
(361) |
Feb
(251) |
Mar
(219) |
Apr
(499) |
May
(461) |
Jun
(419) |
Jul
(314) |
Aug
(519) |
Sep
(416) |
Oct
(247) |
Nov
(305) |
Dec
(382) |
2005 |
Jan
(267) |
Feb
(282) |
Mar
(327) |
Apr
(338) |
May
(189) |
Jun
(400) |
Jul
(462) |
Aug
(530) |
Sep
(316) |
Oct
(523) |
Nov
(481) |
Dec
(650) |
2006 |
Jan
(536) |
Feb
(361) |
Mar
(287) |
Apr
(146) |
May
(101) |
Jun
(169) |
Jul
(221) |
Aug
(498) |
Sep
(300) |
Oct
(236) |
Nov
(209) |
Dec
(205) |
2007 |
Jan
(30) |
Feb
(23) |
Mar
(26) |
Apr
(15) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <dat...@us...> - 2006-08-11 01:14:12
|
Revision: 16695 Author: datallah Date: 2006-08-10 18:14:07 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16695&view=rev Log Message: ----------- CID 261 (DEADCODE) Modified Paths: -------------- trunk/src/gtkblist.c Modified: trunk/src/gtkblist.c =================================================================== --- trunk/src/gtkblist.c 2006-08-11 01:10:18 UTC (rev 16694) +++ trunk/src/gtkblist.c 2006-08-11 01:14:07 UTC (rev 16695) @@ -3002,10 +3002,8 @@ else if (!selected && !text) { text = g_strdup_printf("%s\n" - "<span color='%s' size='smaller'>%s%s%s</span>", + "<span color='%s' size='smaller'>%s</span>", esc, dim_grey(), - idletime != NULL ? idletime : "", - (idletime != NULL && statustext != NULL) ? " - " : "", statustext != NULL ? statustext : ""); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-08-11 01:10:22
|
Revision: 16694 Author: datallah Date: 2006-08-10 18:10:18 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16694&view=rev Log Message: ----------- Fix CID 217 (Dead Code) I'm pretty wary of the DEADCODE CIDs, but this one seems pretty obvious. Modified Paths: -------------- trunk/src/protocols/oscar/family_oservice.c Modified: trunk/src/protocols/oscar/family_oservice.c =================================================================== --- trunk/src/protocols/oscar/family_oservice.c 2006-08-11 00:55:18 UTC (rev 16693) +++ trunk/src/protocols/oscar/family_oservice.c 2006-08-11 01:10:18 UTC (rev 16694) @@ -1028,13 +1028,6 @@ byte_stream_put32(&frame->data, 0xa46d3b39); #endif - } else if ((offset == 0x00001000) && (len == 0x00000000)) { - - byte_stream_put32(&frame->data, 0xd41d8cd9); - byte_stream_put32(&frame->data, 0x8f00b204); - byte_stream_put32(&frame->data, 0xe9800998); - byte_stream_put32(&frame->data, 0xecf8427e); - } else gaim_debug_warning("oscar", "sendmemblock: unknown hash request\n"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-08-11 00:55:24
|
Revision: 16693 Author: datallah Date: 2006-08-10 17:55:18 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16693&view=rev Log Message: ----------- Fix CID 111 (which never would actually happen, but this is cleaner and clearer) Modified Paths: -------------- trunk/src/protocols/msn/nexus.c Modified: trunk/src/protocols/msn/nexus.c =================================================================== --- trunk/src/protocols/msn/nexus.c 2006-08-11 00:21:26 UTC (rev 16692) +++ trunk/src/protocols/msn/nexus.c 2006-08-11 00:55:18 UTC (rev 16693) @@ -422,8 +422,8 @@ if ((da_login = strstr(base, "DALogin=")) != NULL) { - if ((da_login = strchr(da_login, '=')) != NULL) - da_login++; + /* skip over "DALogin=" */ + da_login += 8; if ((c = strchr(da_login, ',')) != NULL) *c = '\0'; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-08-11 00:21:29
|
Revision: 16692 Author: datallah Date: 2006-08-10 17:21:26 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16692&view=rev Log Message: ----------- Fix CID 127, 128 Modified Paths: -------------- trunk/src/protocols/yahoo/yahoo.c Modified: trunk/src/protocols/yahoo/yahoo.c =================================================================== --- trunk/src/protocols/yahoo/yahoo.c 2006-08-10 23:58:24 UTC (rev 16691) +++ trunk/src/protocols/yahoo/yahoo.c 2006-08-11 00:21:26 UTC (rev 16692) @@ -350,7 +350,7 @@ break; yahoo_friend_set_buddy_icon_need_request(f, FALSE); - if (cksum != gaim_blist_node_get_int((GaimBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY)) + if (b && cksum != gaim_blist_node_get_int((GaimBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY)) yahoo_send_picture_request(gc, name); break; @@ -3396,7 +3396,7 @@ if (foo) group = foo->name; if (!group) { - g = gaim_buddy_get_group(gaim_find_buddy(gc->account, buddy->name)); + g = gaim_buddy_get_group(buddy); if (g) group = g->name; else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-08-10 23:58:27
|
Revision: 16691 Author: datallah Date: 2006-08-10 16:58:24 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16691&view=rev Log Message: ----------- Fix CID 220 and plug some more leaks. Modified Paths: -------------- trunk/src/protocols/simple/simple.c Modified: trunk/src/protocols/simple/simple.c =================================================================== --- trunk/src/protocols/simple/simple.c 2006-08-10 23:42:17 UTC (rev 16690) +++ trunk/src/protocols/simple/simple.c 2006-08-10 23:58:24 UTC (rev 16691) @@ -967,6 +967,7 @@ if(!state) { gaim_debug_info("simple", "process_incoming_message: no state found\n"); + xmlnode_free(isc); return; } @@ -1035,7 +1036,7 @@ gchar *fromhdr; gchar *tmp2; xmlnode *pidf; - xmlnode *basicstatus; + xmlnode *basicstatus = NULL, *tuple, *status; gboolean isonline = FALSE; fromhdr = sipmsg_find_header(msg, "From"); @@ -1049,10 +1050,13 @@ return; } - basicstatus = xmlnode_get_child(xmlnode_get_child(xmlnode_get_child(pidf, "tuple"), "status"), "basic"); + if ((tuple = xmlnode_get_child(pidf, "tuple"))) + if ((status = xmlnode_get_child(tuple, "status"))) + basicstatus = xmlnode_get_child(status, "basic"); if(!basicstatus) { gaim_debug_info("simple", "process_incoming_notify: no basic found\n"); + xmlnode_free(pidf); return; } @@ -1060,6 +1064,7 @@ if(!tmp2) { gaim_debug_info("simple", "process_incoming_notify: no basic data found\n"); + xmlnode_free(pidf); return; } @@ -1211,15 +1216,15 @@ } if(acceptheader) { gchar *tmp = acceptheader; - int foundpidf = 0; - int foundxpidf = 0; + gboolean foundpidf = FALSE; + gboolean foundxpidf = FALSE; while(tmp && tmp < acceptheader + strlen(acceptheader)) { gchar *tmp2 = strchr(tmp, ','); if(tmp2) *tmp2 = '\0'; if(!strcmp("application/pidf+xml", tmp)) - foundpidf = 1; + foundpidf = TRUE; if(!strcmp("application/xpidf+xml", tmp)) - foundxpidf = 1; + foundxpidf = TRUE; if(tmp2) { *tmp2 = ','; tmp = tmp2; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-08-10 23:42:25
|
Revision: 16690 Author: datallah Date: 2006-08-10 16:42:17 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16690&view=rev Log Message: ----------- Fix CID 221 I also fixed an imperial ton of leaks. It was quite amazing, actually. There is also some other cleanup stuff in here too. Modified Paths: -------------- trunk/src/protocols/simple/simple.c trunk/src/protocols/simple/simple.h trunk/src/protocols/simple/sipmsg.c trunk/src/protocols/simple/sipmsg.h Modified: trunk/src/protocols/simple/simple.c =================================================================== --- trunk/src/protocols/simple/simple.c 2006-08-10 21:22:55 UTC (rev 16689) +++ trunk/src/protocols/simple/simple.c 2006-08-10 23:42:17 UTC (rev 16690) @@ -130,7 +130,8 @@ return NULL; } -static struct simple_watcher *watcher_find(struct simple_account_data *sip, gchar *name) { +static struct simple_watcher *watcher_find(struct simple_account_data *sip, + const gchar *name) { struct simple_watcher *watcher; GSList *entry = sip->watcher; while(entry) { @@ -141,7 +142,9 @@ return NULL; } -static struct simple_watcher *watcher_create(struct simple_account_data *sip, gchar *name, gchar *callid, gchar *ourtag, gchar *theirtag, int needsxpidf) { +static struct simple_watcher *watcher_create(struct simple_account_data *sip, + const gchar *name, const gchar *callid, const gchar *ourtag, + const gchar *theirtag, gboolean needsxpidf) { struct simple_watcher *watcher = g_new0(struct simple_watcher, 1); watcher->name = g_strdup(name); watcher->dialog.callid = g_strdup(callid); @@ -152,7 +155,7 @@ return watcher; } -static void watcher_remove(struct simple_account_data *sip, gchar *name) { +static void watcher_remove(struct simple_account_data *sip, const gchar *name) { struct simple_watcher *watcher = watcher_find(sip, name); sip->watcher = g_slist_remove(sip->watcher, watcher); g_free(watcher->name); @@ -299,8 +302,9 @@ return ret; } -static char *parse_attribute(const char *attrname, char *source) { - char *tmp, *tmp2, *retval = NULL; +static char *parse_attribute(const char *attrname, const char *source) { + const char *tmp, *tmp2; + char *retval = NULL; int len = strlen(attrname); if(!strncmp(source, attrname, len)) { @@ -524,7 +528,8 @@ g_string_free(outstr, TRUE); } -static void send_sip_response(GaimConnection *gc, struct sipmsg *msg, int code, char *text, char *body) { +static void send_sip_response(GaimConnection *gc, struct sipmsg *msg, int code, + const char *text, const char *body) { GSList *tmp = msg->headers; gchar *name; gchar *value; @@ -560,7 +565,7 @@ g_free(trans); } -static void transactions_add_buf(struct simple_account_data *sip, gchar *buf, void *callback) { +static void transactions_add_buf(struct simple_account_data *sip, const gchar *buf, void *callback) { struct transaction *trans = g_new0(struct transaction, 1); trans->time = time(NULL); trans->msg = sipmsg_parse_msg(buf); @@ -593,6 +598,7 @@ char *auth = ""; const char *addh = ""; gchar *branch = genbranch(); + gchar *tag = NULL; char *buf; if(!strcmp(method, "REGISTER")) { @@ -618,6 +624,9 @@ gaim_debug(GAIM_DEBUG_MISC, "simple", "header %s", auth); } + if (!dialog) + tag = gentag(); + buf = g_strdup_printf("%s %s SIP/2.0\r\n" "Via: SIP/2.0/%s %s:%d;branch=%s\r\n" /* Don't know what epid is, but LCS wants it */ @@ -637,7 +646,7 @@ branch, sip->username, sip->servername, - dialog ? dialog->ourtag : gentag(), + dialog ? dialog->ourtag : tag, to, dialog ? ";tag=" : "", dialog ? dialog->theirtag : "", @@ -648,6 +657,9 @@ addh, strlen(body), body); + + g_free(tag); + g_free(auth); g_free(branch); g_free(callid); @@ -691,30 +703,30 @@ do_register_exp(sip, sip->registerexpire); } -static gchar *parse_from(gchar *hdr) { - gchar *from = hdr; - gchar *tmp; +static gchar *parse_from(const gchar *hdr) { + gchar *from; + const gchar *tmp, *tmp2 = hdr; - if(!from) return NULL; - gaim_debug_info("simple", "parsing address out of %s\n", from); - tmp = strchr(from, '<'); + if(!hdr) return NULL; + gaim_debug_info("simple", "parsing address out of %s\n", hdr); + tmp = strchr(hdr, '<'); /* i hate the different SIP UA behaviours... */ if(tmp) { /* sip address in <...> */ - from = tmp+1; - tmp = strchr(from, '>'); + tmp2 = tmp + 1; + tmp = strchr(tmp2, '>'); if(tmp) { - from = g_strndup(from, tmp-from); + from = g_strndup(tmp2, tmp - tmp2); } else { gaim_debug_info("simple", "found < without > in From\n"); return NULL; } } else { - tmp = strchr(from, ';'); + tmp = strchr(tmp2, ';'); if(tmp) { - from = g_strndup(from, tmp-from); + from = g_strndup(tmp2, tmp - tmp2); } else { - from = g_strdup(from); + from = g_strdup(tmp2); } } gaim_debug_info("simple", "got %s\n", from); @@ -722,12 +734,14 @@ } static gboolean process_subscribe_response(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc) { - gchar *to = parse_from(sipmsg_find_header(tc->msg, "To")); /* cant be NULL since it is our own msg */ + gchar *to; if(msg->response == 200 || msg->response == 202) { return TRUE; } + to = parse_from(sipmsg_find_header(tc->msg, "To")); /* cant be NULL since it is our own msg */ + /* we can not subscribe -> user is offline (TODO unknown status?) */ gaim_prpl_got_user_status(sip->account, to, "offline", NULL); @@ -740,7 +754,7 @@ gchar *to; gchar *tmp; - if(strstr(buddy->name,"sip:")) + if(strstr(buddy->name, "sip:")) to = g_strdup(buddy->name); else to = g_strdup_printf("sip:%s", buddy->name); @@ -768,43 +782,50 @@ xmlnode *item, *group, *isc; const char *name_group; GaimBuddy *b; - GaimGroup *g; + GaimGroup *g = NULL; struct simple_buddy *bs; int len = msg->bodylen; tmp = sipmsg_find_header(msg, "Event"); - if(tmp && !strncmp(tmp,"vnd-microsoft-roaming-contacts",30)){ + if(tmp && !strncmp(tmp, "vnd-microsoft-roaming-contacts", 30)){ - gaim_debug_info("simple","simple_add_lcs_contacts->%s-%d\n",msg->body, len); + gaim_debug_info("simple", "simple_add_lcs_contacts->%s-%d\n", msg->body, len); /*Convert the contact from XML to Gaim Buddies*/ - isc = xmlnode_from_str(msg->body, len); + isc = xmlnode_from_str(msg->body, len); /* ToDo. Find for all groups */ - group = xmlnode_get_child(isc, "group"); - name_group = xmlnode_get_attrib(group, "name"); - gaim_debug_info("simple","name_group->%s\n",name_group); - g = gaim_find_group(name_group); - if(!g) { + if ((group = xmlnode_get_child(isc, "group"))) { + name_group = xmlnode_get_attrib(group, "name"); + gaim_debug_info("simple", "name_group->%s\n", name_group); + g = gaim_find_group(name_group); + if(!g) + g = gaim_group_new(name_group); + } + + if (!g) { g = gaim_find_group("Buddies"); - if(!g){ + if(!g) g = gaim_group_new("Buddies"); - } - }else{ - g = gaim_group_new(name_group); } for(item = xmlnode_get_child(isc, "contact"); item; item = xmlnode_get_next_twin(item)) { const char *uri, *name, *groups; + char *buddy_name; uri = xmlnode_get_attrib(item, "uri"); name = xmlnode_get_attrib(item, "name"); groups = xmlnode_get_attrib(item, "groups"); - gaim_debug_info("simple","URI->%s\n",uri); - b = gaim_find_buddy(sip->account, g_strdup_printf("sip:%s",uri)); + gaim_debug_info("simple", "URI->%s\n", uri); + + buddy_name = g_strdup_printf("sip:%s", uri); + + b = gaim_find_buddy(sip->account, buddy_name); if(!b){ - b = gaim_buddy_new(sip->account, g_strdup_printf("sip:%s",uri), uri); + b = gaim_buddy_new(sip->account, buddy_name, uri); } + g_free(buddy_name); + gaim_blist_add_buddy(b, NULL, g, NULL); gaim_blist_alias_buddy(b, uri); bs = g_new0(struct simple_buddy, 1); @@ -821,14 +842,14 @@ gchar *to; gchar *tmp; to = g_strdup_printf("sip:%s@%s", sip->username, sip->servername); - + tmp = get_contact(sip); - + contact = g_strdup_printf("%sContact: %s\r\n", contact, tmp); g_free(tmp); - - send_sip_request(sip->gc, "SUBSCRIBE",to, to, contact, "", NULL, simple_add_lcs_contacts); + send_sip_request(sip->gc, "SUBSCRIBE", to, to, contact, "", NULL, simple_add_lcs_contacts); + g_free(to); g_free(contact); } @@ -953,6 +974,8 @@ if(statedata) { if(strstr(statedata, "active")) serv_got_typing(sip->gc, from, 0, GAIM_TYPING); else serv_got_typing_stopped(sip->gc, from); + + g_free(statedata); } xmlnode_free(isc); send_sip_response(sip->gc, msg, 200, "OK", NULL); @@ -984,7 +1007,7 @@ subscribe_timeout(sip); tmp = sipmsg_find_header(msg, "Allow-Events"); - if(tmp && strstr(tmp,"vnd-microsoft-provisioning")){ + if(tmp && strstr(tmp, "vnd-microsoft-provisioning")){ simple_subscribe_buddylist(sip); } @@ -1044,6 +1067,8 @@ isonline = TRUE; } + g_free(tmp2); + if(isonline) gaim_prpl_got_user_status(sip->account, from, "available", NULL); else gaim_prpl_got_user_status(sip->account, from, "offline", NULL); @@ -1084,16 +1109,13 @@ return 1; } -static gchar *find_tag(gchar *hdr) { - gchar *tmp = strstr(hdr, ";tag="); - gchar *tmp2; +static gchar *find_tag(const gchar *hdr) { + const gchar *tmp = strstr(hdr, ";tag="), *tmp2; + if(!tmp) return NULL; tmp += 5; if((tmp2 = strchr(tmp, ';'))) { - tmp2[0] = '\0'; - tmp = g_strdup(tmp); - tmp2[0] = ';'; - return tmp; + return g_strndup(tmp, tmp2 - tmp); } return g_strdup(tmp); } @@ -1162,12 +1184,14 @@ "Content-Type: application/pidf+xml\r\n", doc, NULL, process_publish_response); sip->republish = time(NULL) + 500; + g_free(uri); g_free(doc); } static void process_incoming_subscribe(struct simple_account_data *sip, struct sipmsg *msg) { - gchar *from = parse_from(sipmsg_find_header(msg, "From")); - gchar *theirtag = find_tag(sipmsg_find_header(msg, "From")); + const char *from_hdr = sipmsg_find_header(msg, "From"); + gchar *from = parse_from(from_hdr); + gchar *theirtag = find_tag(from_hdr); gchar *ourtag = find_tag(sipmsg_find_header(msg, "To")); gboolean tagadded = FALSE; gchar *callid = sipmsg_find_header(msg, "Call-ID"); @@ -1180,7 +1204,7 @@ } if(!watcher) { /* new subscription */ gchar *acceptheader = sipmsg_find_header(msg, "Accept"); - int needsxpidf = 0; + gboolean needsxpidf = FALSE; if(!gaim_privacy_check(sip->account, from)) { send_sip_response(sip->gc, msg, 202, "Ok", NULL); goto privend; @@ -1192,9 +1216,9 @@ while(tmp && tmp < acceptheader + strlen(acceptheader)) { gchar *tmp2 = strchr(tmp, ','); if(tmp2) *tmp2 = '\0'; - if(!strcmp("application/pidf+xml",tmp)) + if(!strcmp("application/pidf+xml", tmp)) foundpidf = 1; - if(!strcmp("application/xpidf+xml",tmp)) + if(!strcmp("application/xpidf+xml", tmp)) foundxpidf = 1; if(tmp2) { *tmp2 = ','; @@ -1203,7 +1227,7 @@ } else tmp = 0; } - if(!foundpidf && foundxpidf) needsxpidf = 1; + if(!foundpidf && foundxpidf) needsxpidf = TRUE; g_free(acceptheader); } watcher = watcher_create(sip, from, callid, ourtag, theirtag, needsxpidf); @@ -1212,6 +1236,7 @@ gchar *to = g_strdup_printf("%s;tag=%s", sipmsg_find_header(msg, "To"), ourtag); sipmsg_remove_header(msg, "To"); sipmsg_add_header(msg, "To", to); + g_free(to); } if(expire) watcher->expire = time(NULL) + strtol(expire, NULL, 10); @@ -1221,7 +1246,7 @@ tmp = get_contact(sip); sipmsg_add_header(msg, "Contact", tmp); g_free(tmp); - gaim_debug_info("simple","got subscribe: name %s ourtag %s theirtag %s callid %s\n", watcher->name, watcher->dialog.ourtag, watcher->dialog.theirtag, watcher->dialog.callid); + gaim_debug_info("simple", "got subscribe: name %s ourtag %s theirtag %s callid %s\n", watcher->name, watcher->dialog.ourtag, watcher->dialog.theirtag, watcher->dialog.callid); send_sip_response(sip->gc, msg, 200, "Ok", NULL); send_notify(sip, watcher); privend: @@ -1274,7 +1299,7 @@ gaim_debug_info("simple", "got trying response\n"); } else { sip->proxy.retries = 0; - if(!strcmp(trans->msg->method,"REGISTER")) { + if(!strcmp(trans->msg->method, "REGISTER")) { if(msg->response == 401) sip->registrar.retries++; else sip->registrar.retries = 0; } else { @@ -1327,7 +1352,7 @@ cur++; } if(cur != conn->inbuf) { - memmove(conn->inbuf, cur, conn->inbufused-(cur-conn->inbuf)); + memmove(conn->inbuf, cur, conn->inbufused - (cur - conn->inbuf)); conn->inbufused = strlen(conn->inbuf); } @@ -1340,7 +1365,7 @@ msg = sipmsg_parse_header(conn->inbuf); cur[0] = '\r'; cur += 2; - restlen = conn->inbufused - (cur-conn->inbuf); + restlen = conn->inbufused - (cur - conn->inbuf); if(restlen >= msg->bodylen) { dummy = g_malloc(msg->bodylen + 1); memcpy(dummy, cur, msg->bodylen); Modified: trunk/src/protocols/simple/simple.h =================================================================== --- trunk/src/protocols/simple/simple.h 2006-08-10 21:22:55 UTC (rev 16689) +++ trunk/src/protocols/simple/simple.h 2006-08-10 23:42:17 UTC (rev 16690) @@ -44,7 +44,7 @@ gchar *name; time_t expire; struct sip_dialog dialog; - int needsxpidf; + gboolean needsxpidf; }; struct simple_buddy { Modified: trunk/src/protocols/simple/sipmsg.c =================================================================== --- trunk/src/protocols/simple/sipmsg.c 2006-08-10 21:22:55 UTC (rev 16689) +++ trunk/src/protocols/simple/sipmsg.c 2006-08-10 23:42:17 UTC (rev 16690) @@ -35,18 +35,23 @@ #include "simple.h" #include "sipmsg.h" -struct sipmsg *sipmsg_parse_msg(gchar *msg) { - char *tmp = strstr(msg, "\r\n\r\n"); +struct sipmsg *sipmsg_parse_msg(const gchar *msg) { + const char *tmp = strstr(msg, "\r\n\r\n"); + char *line; struct sipmsg *smsg; + if(!tmp) return NULL; - tmp[0]=0; - smsg = sipmsg_parse_header(msg); - tmp[0]='\r'; - smsg->body = g_strdup(tmp+4); + + line = g_strndup(msg, tmp - msg); + + smsg = sipmsg_parse_header(line); + smsg->body = g_strdup(tmp + 4); + + g_free(line); return smsg; } -struct sipmsg *sipmsg_parse_header(gchar *header) { +struct sipmsg *sipmsg_parse_header(const gchar *header) { struct sipmsg *msg = g_new0(struct sipmsg,1); gchar **lines = g_strsplit(header,"\r\n",0); gchar **parts; @@ -110,7 +115,7 @@ return msg; } -void sipmsg_print(struct sipmsg *msg) { +void sipmsg_print(const struct sipmsg *msg) { GSList *cur; struct siphdrelement *elem; gaim_debug(GAIM_DEBUG_MISC, "simple", "SIP MSG\n"); @@ -124,7 +129,7 @@ } } -char *sipmsg_to_string(struct sipmsg *msg) { +char *sipmsg_to_string(const struct sipmsg *msg) { GSList *cur; GString *outstr = g_string_new(""); struct siphdrelement *elem; @@ -148,7 +153,7 @@ return g_string_free(outstr, FALSE); } -void sipmsg_add_header(struct sipmsg *msg, gchar *name, gchar *value) { +void sipmsg_add_header(struct sipmsg *msg, const gchar *name, const gchar *value) { struct siphdrelement *element = g_new0(struct siphdrelement,1); element->name = g_strdup(name); element->value = g_strdup(value); @@ -170,13 +175,16 @@ g_free(msg); } -void sipmsg_remove_header(struct sipmsg *msg, gchar *name) { +void sipmsg_remove_header(struct sipmsg *msg, const gchar *name) { struct siphdrelement *elem; GSList *tmp = msg->headers; while(tmp) { elem = tmp->data; if(strcmp(elem->name, name)==0) { msg->headers = g_slist_remove(msg->headers, elem); + g_free(elem->name); + g_free(elem->value); + g_free(elem); return; } tmp = g_slist_next(tmp); @@ -184,7 +192,7 @@ return; } -gchar *sipmsg_find_header(struct sipmsg *msg, gchar *name) { +gchar *sipmsg_find_header(struct sipmsg *msg, const gchar *name) { GSList *tmp; struct siphdrelement *elem; tmp = msg->headers; Modified: trunk/src/protocols/simple/sipmsg.h =================================================================== --- trunk/src/protocols/simple/sipmsg.h 2006-08-10 21:22:55 UTC (rev 16689) +++ trunk/src/protocols/simple/sipmsg.h 2006-08-10 23:42:17 UTC (rev 16690) @@ -39,12 +39,12 @@ gchar *value; }; -struct sipmsg *sipmsg_parse_msg(gchar *msg); -struct sipmsg *sipmsg_parse_header(gchar *header); -void sipmsg_add_header(struct sipmsg *msg, gchar *name, gchar *value); +struct sipmsg *sipmsg_parse_msg(const gchar *msg); +struct sipmsg *sipmsg_parse_header(const gchar *header); +void sipmsg_add_header(struct sipmsg *msg, const gchar *name, const gchar *value); void sipmsg_free(struct sipmsg *msg); -gchar *sipmsg_find_header(struct sipmsg *msg, gchar *name); -void sipmsg_remove_header(struct sipmsg *msg, gchar *name); -void sipmsg_print(struct sipmsg *msg); -char *sipmsg_to_string(struct sipmsg *msg); +gchar *sipmsg_find_header(struct sipmsg *msg, const gchar *name); +void sipmsg_remove_header(struct sipmsg *msg, const gchar *name); +void sipmsg_print(const struct sipmsg *msg); +char *sipmsg_to_string(const struct sipmsg *msg); #endif /* _GAIM_SIMPLE_H */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-08-10 21:23:00
|
Revision: 16689 Author: datallah Date: 2006-08-10 14:22:55 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16689&view=rev Log Message: ----------- Plug a leak that I didn't notice while making the other fixes. Modified Paths: -------------- trunk/src/protocols/jabber/buddy.c Modified: trunk/src/protocols/jabber/buddy.c =================================================================== --- trunk/src/protocols/jabber/buddy.c 2006-08-10 21:08:00 UTC (rev 16688) +++ trunk/src/protocols/jabber/buddy.c 2006-08-10 21:22:55 UTC (rev 16689) @@ -533,7 +533,7 @@ GaimRequestField *field; const struct vcard_template *vc_tp; const char *user_info; - char *cdata; + char *cdata = NULL; xmlnode *x_vc_data = NULL; fields = gaim_request_fields_new(); @@ -564,10 +564,7 @@ } if(data_node) cdata = xmlnode_get_data(data_node); - else - cdata = NULL; - } else - cdata = NULL; + } if(strcmp(vc_tp->tag, "DESC") == 0) { field = gaim_request_field_string_new(vc_tp->tag, @@ -579,6 +576,9 @@ FALSE); } + g_free(cdata); + cdata = NULL; + gaim_request_field_group_add_field(group, field); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dat...@us...> - 2006-08-10 21:08:04
|
Revision: 16688 Author: datallah Date: 2006-08-10 14:08:00 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16688&view=rev Log Message: ----------- Fix for CID 110 (which also will fix some asserts that happen when you edit your Jabber User Info for the first time) Fix for CID 251 (Null check after deref) Fixes for CID 252, 253. (UNUSED_VALUE) I also changed the jabber_buddy_find() call in jabber_vcard_parse not to create the JabberBuddy if it doesn't exist - there should be a specific jabber buddy attached to the JabberBuddyInfo and if isn't present any more, we shouldn't create a new one. Modified Paths: -------------- trunk/src/protocols/jabber/buddy.c Modified: trunk/src/protocols/jabber/buddy.c =================================================================== --- trunk/src/protocols/jabber/buddy.c 2006-08-10 18:18:17 UTC (rev 16687) +++ trunk/src/protocols/jabber/buddy.c 2006-08-10 21:08:00 UTC (rev 16688) @@ -532,7 +532,7 @@ GaimRequestFieldGroup *group; GaimRequestField *field; const struct vcard_template *vc_tp; - char *user_info; + const char *user_info; char *cdata; xmlnode *x_vc_data = NULL; @@ -543,10 +543,8 @@ /* * Get existing, XML-formatted, user info */ - if((user_info = g_strdup(gaim_account_get_user_info(gc->account))) != NULL) + if((user_info = gaim_account_get_user_info(gc->account)) != NULL) x_vc_data = xmlnode_from_str(user_info, -1); - else - user_info = g_strdup(""); /* * Set up GSLists for edit with labels from "template," data from user info @@ -555,16 +553,20 @@ xmlnode *data_node; if((vc_tp->label)[0] == '\0') continue; - if(vc_tp->ptag == NULL) { - data_node = xmlnode_get_child(x_vc_data, vc_tp->tag); - } else { - gchar *tag = g_strdup_printf("%s/%s", vc_tp->ptag, vc_tp->tag); - data_node = xmlnode_get_child(x_vc_data, tag); - g_free(tag); - } - if(data_node) - cdata = xmlnode_get_data(data_node); - else + + if (x_vc_data != NULL) { + if(vc_tp->ptag == NULL) { + data_node = xmlnode_get_child(x_vc_data, vc_tp->tag); + } else { + gchar *tag = g_strdup_printf("%s/%s", vc_tp->ptag, vc_tp->tag); + data_node = xmlnode_get_child(x_vc_data, tag); + g_free(tag); + } + if(data_node) + cdata = xmlnode_get_data(data_node); + else + cdata = NULL; + } else cdata = NULL; if(strcmp(vc_tp->tag, "DESC") == 0) { @@ -583,8 +585,6 @@ if(x_vc_data != NULL) xmlnode_free(x_vc_data); - g_free(user_info); - gaim_request_fields(gc, _("Edit Jabber vCard"), _("Edit Jabber vCard"), _("All items below are optional. Enter only the " @@ -724,8 +724,7 @@ static void jabber_vcard_parse(JabberStream *js, xmlnode *packet, gpointer data) { - const char *type, *id, *from; - JabberBuddy *jb; + const char *id, *from; GString *info_text; char *bare_jid; char *text; @@ -734,18 +733,17 @@ JabberBuddyInfo *jbi = data; from = xmlnode_get_attrib(packet, "from"); - type = xmlnode_get_attrib(packet, "type"); id = xmlnode_get_attrib(packet, "id"); - jabber_buddy_info_remove_id(jbi, id); - if(!jbi) return; + jabber_buddy_info_remove_id(jbi, id); + if(!from) return; - if(!(jb = jabber_buddy_find(js, from, TRUE))) + if(!jabber_buddy_find(js, from, FALSE)) return; /* XXX: handle the error case */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-10 18:18:23
|
Revision: 16687 Author: sadrul Date: 2006-08-10 11:18:17 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16687&view=rev Log Message: ----------- I think this is better. Modified Paths: -------------- trunk/src/request.c trunk/src/request.h Modified: trunk/src/request.c =================================================================== --- trunk/src/request.c 2006-08-10 15:44:43 UTC (rev 16686) +++ trunk/src/request.c 2006-08-10 18:18:17 UTC (rev 16687) @@ -865,9 +865,9 @@ } void -gaim_request_field_list_set_selected(GaimRequestField *field, GList *items) +gaim_request_field_list_set_selected(GaimRequestField *field, const GList *items) { - GList *l; + const GList *l; g_return_if_fail(field != NULL); g_return_if_fail(items != NULL); @@ -876,7 +876,7 @@ gaim_request_field_list_clear_selected(field); if (!gaim_request_field_list_get_multi_select(field) && - g_list_length(items) > 1) + g_list_length((GList*)items) > 1) { gaim_debug_warning("request", "More than one item added to non-multi-select " @@ -885,10 +885,10 @@ return; } - field->u.list.selected = items; - - for (l = field->u.list.selected; l != NULL; l = l->next) + for (l = items; l != NULL; l = l->next) { + field->u.list.selected = g_list_append(field->u.list.selected, + g_strdup(l->data)); g_hash_table_insert(field->u.list.selected_table, g_strdup((char *)l->data), NULL); } Modified: trunk/src/request.h =================================================================== --- trunk/src/request.h 2006-08-10 15:44:43 UTC (rev 16686) +++ trunk/src/request.h 2006-08-10 18:18:17 UTC (rev 16687) @@ -909,7 +909,7 @@ * @param items The list of selected items. */ void gaim_request_field_list_set_selected(GaimRequestField *field, - GList *items); + const GList *items); /** * Returns whether or not a particular item is selected in a list field. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-10 15:44:56
|
Revision: 16686 Author: sadrul Date: 2006-08-10 08:44:43 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16686&view=rev Log Message: ----------- Add preference to show idletime in the 'tooltip' for the buddylist. Modified Paths: -------------- trunk/console/gntblist.c trunk/console/gntprefs.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-08-10 15:43:55 UTC (rev 16685) +++ trunk/console/gntblist.c 2006-08-10 15:44:43 UTC (rev 16686) @@ -813,6 +813,18 @@ g_free(br); } + if (gaim_prefs_get_bool("/gaim/gnt/blist/idletime")) + { + GaimPresence *pre = gaim_buddy_get_presence(buddy); + if (gaim_presence_is_idle(pre)) + { + time_t idle = gaim_presence_get_idle_time(pre); + char *st = gaim_str_seconds_to_string(time(NULL) - idle); + g_string_append_printf(str, _("\nIdle: %s"), st); + g_free(st); + } + } + title = g_strdup(gaim_buddy_get_name(buddy)); } else if (GAIM_BLIST_NODE_IS_GROUP(node)) Modified: trunk/console/gntprefs.c =================================================================== --- trunk/console/gntprefs.c 2006-08-10 15:43:55 UTC (rev 16685) +++ trunk/console/gntprefs.c 2006-08-10 15:44:43 UTC (rev 16686) @@ -14,9 +14,12 @@ gaim_prefs_add_none("/gaim/gnt/plugins"); gaim_prefs_add_string_list("/gaim/gnt/plugins/loaded", NULL); + gaim_prefs_add_none("/gaim/gnt/blist"); + gaim_prefs_add_bool("/gaim/gnt/blist/idletime", TRUE); + gaim_prefs_add_none("/gaim/gnt/conversations"); gaim_prefs_add_bool("/gaim/gnt/conversations/timestamps", TRUE); - gaim_prefs_add_bool("/gaim/gnt/conversations/notify_typing", FALSE); + gaim_prefs_add_bool("/gaim/gnt/conversations/notify_typing", FALSE); /* XXX: Not functional yet */ } typedef struct @@ -93,6 +96,12 @@ return field; } +static Prefs blist[] = +{ + {GAIM_PREF_BOOLEAN, "/gaim/gnt/blist/idletime", _("Show Idle Time"), NULL}, + {GAIM_PREF_NONE, NULL, NULL, NULL} +}; + static Prefs convs[] = { {GAIM_PREF_BOOLEAN, "/gaim/gnt/conversations/timestamps", _("Show Timestamps"), NULL}, @@ -163,31 +172,32 @@ } } -void gg_prefs_show_all() +static void +add_pref_group(GaimRequestFields *fields, const char *title, Prefs *prefs) { - GaimRequestFields *fields; GaimRequestField *field; GaimRequestFieldGroup *group; int i; - fields = gaim_request_fields_new(); - - group = gaim_request_field_group_new(_("Conversations")); + group = gaim_request_field_group_new(title); gaim_request_fields_add_group(fields, group); - for (i = 0; convs[i].pref; i++) + for (i = 0; prefs[i].pref; i++) { - field = get_pref_field(convs + i); + field = get_pref_field(prefs + i); gaim_request_field_group_add_field(group, field); } +} - group = gaim_request_field_group_new(_("Logging")); - gaim_request_fields_add_group(fields, group); - for (i = 0; logging[i].pref; i++) - { - field = get_pref_field(logging + i); - gaim_request_field_group_add_field(group, field); - } +void gg_prefs_show_all() +{ + GaimRequestFields *fields; + fields = gaim_request_fields_new(); + + add_pref_group(fields, _("Buddy List"), blist); + add_pref_group(fields, _("Conversations"), convs); + add_pref_group(fields, _("Logging"), logging); + gaim_request_fields(NULL, _("Preferences"), NULL, NULL, fields, _("Save"), G_CALLBACK(save_cb), _("Cancel"), NULL, NULL); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-10 15:44:10
|
Revision: 16685 Author: mayuan2006 Date: 2006-08-10 08:43:55 -0700 (Thu, 10 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16685&view=rev Log Message: ----------- add delte group SOAP operation code ok committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/contact.h branches/soc-2006-msnp13/src/protocols/msn/msn.c branches/soc-2006-msnp13/src/protocols/msn/notification.c branches/soc-2006-msnp13/src/protocols/msn/userlist.c Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-10 04:38:13 UTC (rev 16684) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-10 15:43:55 UTC (rev 16685) @@ -495,27 +495,59 @@ msn_soap_post(contact->soapconn,MSN_GLEAMS_TEMPLATE,msn_address_written_cb); } +/*************************************************************** + * Group Operation + ***************************************************************/ +static void +msn_group_read_cb(gpointer data, gint source, GaimInputCondition cond) +{ + gaim_debug_info("MaYuan","Group read \n"); +} + +static void +msn_group_written_cb(gpointer data, gint source, GaimInputCondition cond) +{ + MsnSoapConn * soapconn = data; + + gaim_debug_info("MaYuan","finish Group written\n"); + soapconn->read_cb = msn_group_read_cb; + msn_soap_read_cb(data,source,cond); +} + /*add group*/ -void msn_add_group(MsnContact *contact,const char* group_name) +void msn_add_group(MsnSession *session,const char* group_name) { + char *body = NULL; + MsnContact *contact ; + + g_return_if_fail(session != NULL); + contact = session->contact; gaim_debug_info("MaYuan","msn add group...\n"); + body = g_strdup_printf(MSN_GROUP_ADD_TEMPLATE,group_name); /*build SOAP and POST it*/ contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); contact->soapconn->soap_action = g_strdup(MSN_GROUP_ADD_SOAP_ACTION); - msn_soap_post(contact->soapconn,MSN_GROUP_ADD_TEMPLATE,msn_address_written_cb); + msn_soap_post(contact->soapconn,body,msn_group_written_cb); + g_free(body); } /*delete a group*/ -void msn_del_group(MsnContact *contact,const char *guid) +void msn_del_group(MsnSession *session,const char *guid) { + MsnContact *contact; + char *body = NULL; + + g_return_if_fail(session != NULL); + contact = session->contact; gaim_debug_info("MaYuan","msn del group...\n"); + body = g_strdup_printf(MSN_GROUP_DEL_TEMPLATE,guid); /*build SOAP and POST it*/ contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); contact->soapconn->soap_action = g_strdup(MSN_GROUP_DEL_SOAP_ACTION); - msn_soap_post(contact->soapconn,MSN_GROUP_DEL_TEMPLATE,msn_address_written_cb); - + msn_soap_post(contact->soapconn,body,msn_group_written_cb); + g_free(body); } void Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.h 2006-08-10 04:38:13 UTC (rev 16684) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.h 2006-08-10 15:43:55 UTC (rev 16685) @@ -158,7 +158,9 @@ MsnSoapConn *soapconn; }; -/*function prototype*/ +/************************************************ + * function prototype + ************************************************/ MsnContact * msn_contact_new(MsnSession *session); void msn_contact_destroy(MsnContact *contact); @@ -166,5 +168,8 @@ void msn_get_contact_list(MsnContact * contact); void msn_get_address_book(MsnContact *contact); +/*group operation*/ +void msn_add_group(MsnSession *session,const char* group_name); +void msn_del_group(MsnSession *session,const char *guid); #endif/* _MSN_CMDPROC_H_*/ Modified: branches/soc-2006-msnp13/src/protocols/msn/msn.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-10 04:38:13 UTC (rev 16684) +++ branches/soc-2006-msnp13/src/protocols/msn/msn.c 2006-08-10 15:43:55 UTC (rev 16685) @@ -1268,6 +1268,7 @@ cmdproc = session->notification->cmdproc; enc_new_group_name = gaim_url_encode(group->name); + gaim_debug_info("MaYuan","rename group:old{%s},new{%s}",old_name,enc_new_group_name); old_gid = msn_userlist_find_group_id(session->userlist, old_name); if (old_gid != NULL){ Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-10 04:38:13 UTC (rev 16684) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-10 15:43:55 UTC (rev 16685) @@ -301,7 +301,7 @@ g_snprintf(proto_str, sizeof(proto_str), "MSNP%d", session->protocol_ver); for (i = 1; i < cmd->param_count -1; i++){ - gaim_debug_info("MaYuan","%s\,proto_str:%s\n",cmd->params[i],proto_str); + gaim_debug_info("MaYuan","%s,proto_str:%s\n",cmd->params[i],proto_str); if (strcmp(cmd->params[i], proto_str) >= 0) { protocol_supported = TRUE; break; @@ -531,11 +531,14 @@ MsnTransaction *trans; char * payload; + gaim_debug_info("MaYuan","Process ADL\n"); +#if 0 trans = msn_transaction_new(cmdproc, "RML",""); msn_transaction_set_payload(trans, payload, strlen(payload)); msn_cmdproc_send_trans(cmdproc, trans); +#endif } static void @@ -1414,6 +1417,8 @@ } g_strfreev(elems); +/* test code for add group*/ +// msn_add_group(session,"hello"); } static void @@ -1591,7 +1596,7 @@ msn_table_add_cmd(cbs_table, NULL, "NOT", not_cmd); msn_table_add_cmd(cbs_table, NULL, "CHL", chl_cmd); - msn_table_add_cmd(cbs_table, NULL, "REM", rem_cmd); + msn_table_add_cmd(cbs_table, NULL, "RML", rml_cmd); msn_table_add_cmd(cbs_table, NULL, "ADL", adl_cmd); msn_table_add_cmd(cbs_table, NULL, "QRY", NULL); Modified: branches/soc-2006-msnp13/src/protocols/msn/userlist.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-08-10 04:38:13 UTC (rev 16684) +++ branches/soc-2006-msnp13/src/protocols/msn/userlist.c 2006-08-10 15:43:55 UTC (rev 16685) @@ -187,7 +187,6 @@ const char *old_group_name, const char *new_group_name) { MsnCmdProc *cmdproc; -// MsnTransaction *trans; MsnMoveBuddy *data; cmdproc = userlist->session->notification->cmdproc; @@ -199,6 +198,7 @@ data->old_group_name = g_strdup(old_group_name); /*TODO:add new group via SOAP action*/ + } /************************************************************************** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <may...@us...> - 2006-08-10 04:38:25
|
Revision: 16684 Author: mayuan2006 Date: 2006-08-09 21:38:13 -0700 (Wed, 09 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16684&view=rev Log Message: ----------- change the code of SOAP Action,Now using a stupid way to do the soap, wish to implement it in a clean way! borrow a strptime to parse the timestamp received from MSN Server. committed by MaYuan<may...@gm...> Modified Paths: -------------- branches/soc-2006-msnp13/src/protocols/msn/contact.c branches/soc-2006-msnp13/src/protocols/msn/contact.h branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h branches/soc-2006-msnp13/src/protocols/msn/notification.c Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-09 18:19:12 UTC (rev 16683) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.c 2006-08-10 04:38:13 UTC (rev 16684) @@ -417,48 +417,71 @@ /*add a Contact */ void -msn_add_contact(MsnContact *contact) +msn_add_contact(MsnContact *contact,const char *passport) { + char *body = NULL; + char *contact_xml = NULL; + gaim_debug_info("MaYuan","msn add a contact...\n"); + contact_xml = g_strdup_printf(MSN_CONTACT_XML,passport); + body = g_strdup_printf(MSN_ADD_CONTACT_TEMPLATE,contact_xml); + g_free(contact_xml); /*build SOAP and POST it*/ contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); contact->soapconn->soap_action = g_strdup(MSN_CONTACT_ADD_SOAP_ACTION); - msn_soap_post(contact->soapconn,MSN_GET_ADDRESS_TEMPLATE,msn_address_written_cb); + msn_soap_post(contact->soapconn,body,msn_address_written_cb); + g_free(body); } /*delete a Contact*/ void -msn_delete_contact(MsnContact *contact) +msn_delete_contact(MsnContact *contact,const char *passport_id) { + char *body = NULL; + char *contact_xml = NULL ; + gaim_debug_info("MaYuan","msn delete a contact...\n"); + contact_xml = g_strdup_printf(MSN_CONTACTS_DEL_XML,passport_id); + body = g_strdup_printf(MSN_DEL_CONTACT_TEMPLATE,contact_xml); + g_free(contact_xml); /*build SOAP and POST it*/ contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); - contact->soapconn->soap_action = g_strdup(MSN_GET_GLEAMS_SOAP_ACTION); - msn_soap_post(contact->soapconn,MSN_GLEAMS_TEMPLATE,msn_address_written_cb); + contact->soapconn->soap_action = g_strdup(MSN_CONTACT_DEL_SOAP_ACTION); + msn_soap_post(contact->soapconn,body,msn_address_written_cb); + g_free(body); } /*block a Contact*/ void -msn_block_contact(MsnContact *contact) -{ +msn_block_contact(MsnContact *contact,const char* membership_id) +{ + char *body = NULL; + gaim_debug_info("MaYuan","msn block a contact...\n"); + body = g_strdup_printf(MSN_CONTACT_DELECT_FROM_ALLOW_TEMPLATE,membership_id); /*build SOAP and POST it*/ - contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); - contact->soapconn->soap_action = g_strdup(MSN_GET_GLEAMS_SOAP_ACTION); - msn_soap_post(contact->soapconn,MSN_GLEAMS_TEMPLATE,msn_address_written_cb); + contact->soapconn->login_path = g_strdup(MSN_SHARE_POST_URL); + contact->soapconn->soap_action = g_strdup(MSN_CONTACT_BLOCK_SOAP_ACTION); + msn_soap_post(contact->soapconn,body,msn_address_written_cb); + g_free(body); } /*unblock a contact*/ void -msn_unblock_contact(MsnContact *contact) -{ +msn_unblock_contact(MsnContact *contact,const char* passport) +{ + char *body = NULL; + gaim_debug_info("MaYuan","msn unblock a contact...\n"); + + body = g_strdup_printf(MSN_UNBLOCK_CONTACT_TEMPLATE,passport); /*build SOAP and POST it*/ - contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); - contact->soapconn->soap_action = g_strdup(MSN_GET_GLEAMS_SOAP_ACTION); - msn_soap_post(contact->soapconn,MSN_GLEAMS_TEMPLATE,msn_address_written_cb); + contact->soapconn->login_path = g_strdup(MSN_SHARE_POST_URL); + contact->soapconn->soap_action = g_strdup(MSN_CONTACT_UNBLOCK_SOAP_ACTION); + msn_soap_post(contact->soapconn,body,msn_address_written_cb); + g_free(body); } /*get the gleams info*/ @@ -472,7 +495,8 @@ msn_soap_post(contact->soapconn,MSN_GLEAMS_TEMPLATE,msn_address_written_cb); } -void msn_add_group(MsnContact *contact) +/*add group*/ +void msn_add_group(MsnContact *contact,const char* group_name) { gaim_debug_info("MaYuan","msn add group...\n"); @@ -480,10 +504,10 @@ contact->soapconn->login_path = g_strdup(MSN_ADDRESS_BOOK_POST_URL); contact->soapconn->soap_action = g_strdup(MSN_GROUP_ADD_SOAP_ACTION); msn_soap_post(contact->soapconn,MSN_GROUP_ADD_TEMPLATE,msn_address_written_cb); - } -void msn_del_group(MsnContact *contact) +/*delete a group*/ +void msn_del_group(MsnContact *contact,const char *guid) { gaim_debug_info("MaYuan","msn del group...\n"); Modified: branches/soc-2006-msnp13/src/protocols/msn/contact.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/contact.h 2006-08-09 18:19:12 UTC (rev 16683) +++ branches/soc-2006-msnp13/src/protocols/msn/contact.h 2006-08-10 04:38:13 UTC (rev 16684) @@ -118,7 +118,7 @@ /*delete contact from contact list soap request template*/ #define MSN_CONTACT_DEL_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABContactDelete" -#define MSN_CONTACTS_DEL "<Contact><contactId>5e8a2e64-c271-443f-ac86-2429f3ffd18a</contactId></Contact>" +#define MSN_CONTACTS_DEL_XML "<Contact><contactId>%s</contactId></Contact>" #define MSN_DEL_CONTACT_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"><soap:Header><ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ApplicationId>09607671-1C32-421F-A6A6-CBFAA51AB5F4</ApplicationId><IsMigration>false</IsMigration><PartnerScenario>Timer</PartnerScenario></ABApplicationHeader><ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ManagedGroupRequest>false</ManagedGroupRequest></ABAuthHeader></soap:Header><soap:Body><ABContactDelete xmlns=\"http://www.msn.com/webservices/AddressBook\"><abId>00000000-0000-0000-0000-000000000000</abId><contacts>%s</contacts></ABContactDelete></soap:Body></soap:Envelope>" #define MSN_MEMBER_TEMPLATE "<Member xsi:type=\"PassportMember\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Type>Passport</Type><State>Accepted</State><PassportName>%s</PassportName></Member>" @@ -126,12 +126,15 @@ /******************************************************* * Contact Block/Unblock SOAP Action *******************************************************/ -/*block means add contact to block list*/ +/*block means delete from allow list and add contact to block list*/ #define MSN_SHARE_POST_URL "/abservice/SharingService.asmx" #define MSN_CONTACT_BLOCK_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/AddMember" -#define MSN_BLOCK_CONTACT_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"><soap:Header><ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ApplicationId>09607671-1C32-421F-A6A6-CBFAA51AB5F4</ApplicationId><IsMigration>false</IsMigration><PartnerScenario>BlockUnblock</PartnerScenario></ABApplicationHeader><ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ManagedGroupRequest>false</ManagedGroupRequest></ABAuthHeader></soap:Header><soap:Body><AddMember xmlns=\"http://www.msn.com/webservices/AddressBook\"><serviceHandle><Id>0</Id><Type>Messenger</Type><ForeignId></ForeignId></serviceHandle><memberships><Membership><MemberRole>Block</MemberRole><Members>%s</Members></Membership></memberships></AddMember></soap:Body></soap:Envelope>" +/*first delete contact from allow list*/ +#define MSN_CONTACT_DELECT_FROM_ALLOW_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"><soap:Header><ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ApplicationId>09607671-1C32-421F-A6A6-CBFAA51AB5F4</ApplicationId><IsMigration>false</IsMigration><PartnerScenario>BlockUnblock</PartnerScenario></ABApplicationHeader><ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ManagedGroupRequest>false</ManagedGroupRequest></ABAuthHeader></soap:Header><soap:Body><DeleteMember xmlns=\"http://www.msn.com/webservices/AddressBook\"><serviceHandle><Id>0</Id><Type>Messenger</Type><ForeignId></ForeignId></serviceHandle><memberships><Membership><MemberRole>Allow</MemberRole><Members><Member xsi:type=\"PassportMember\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Type>Passport</Type><MembershipId>%s</MembershipId><State>Accepted</State></Member></Members></Membership></memberships></DeleteMember></soap:Body></soap:Envelope>" -/*unblock means delete contact to block list*/ +#define MSN_CONTACT_ADD_TO_BLOCK_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"><soap:Header><ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ApplicationId>09607671-1C32-421F-A6A6-CBFAA51AB5F4</ApplicationId><IsMigration>false</IsMigration><PartnerScenario>BlockUnblock</PartnerScenario></ABApplicationHeader><ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ManagedGroupRequest>false</ManagedGroupRequest></ABAuthHeader></soap:Header><soap:Body><AddMember xmlns=\"http://www.msn.com/webservices/AddressBook\"><serviceHandle><Id>0</Id><Type>Messenger</Type><ForeignId></ForeignId></serviceHandle><memberships><Membership><MemberRole>Block</MemberRole><Members>%s</Members></Membership></memberships></AddMember></soap:Body></soap:Envelope>" + +/*unblock means delete contact from block list*/ #define MSN_CONTACT_UNBLOCK_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/DeleteMember" #define MSN_UNBLOCK_CONTACT_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"><soap:Header><ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ApplicationId>09607671-1C32-421F-A6A6-CBFAA51AB5F4</ApplicationId><IsMigration>false</IsMigration><PartnerScenario>BlockUnblock</PartnerScenario></ABApplicationHeader><ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\"><ManagedGroupRequest>false</ManagedGroupRequest></ABAuthHeader></soap:Header><soap:Body><DeleteMember xmlns=\"http://www.msn.com/webservices/AddressBook\"><serviceHandle><Id>0</Id><Type>Messenger</Type><ForeignId></ForeignId></serviceHandle><memberships><Membership><MemberRole>Block</MemberRole><Members>%s</Members></Membership></memberships></DeleteMember></soap:Body></soap:Envelope>" Modified: branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c 2006-08-09 18:19:12 UTC (rev 16683) +++ branches/soc-2006-msnp13/src/protocols/msn/msn-utils.c 2006-08-10 04:38:13 UTC (rev 16684) @@ -23,6 +23,7 @@ */ #include "msn.h" #include "msn-utils.h" +#include "time.h" //#include <openssl/md5.h> void @@ -362,7 +363,34 @@ *ret_host = host; *ret_port = port; } +/*************************************************************************** + * MSN Time Related Funciton + ***************************************************************************/ +#if 0 +int +msn_convert_iso8601(const char *timestr,struct tm tm_time) +{ + char temp[64]; + struct tm ctime; + time_t ts; + gaim_debug_info("MaYuan","convert string is{%s}\n",timestr); + tzset(); + /*copy string first*/ + memset(temp, 0, sizeof(temp)); + strncpy(temp, timestr, strlen(timestr)); + + /*convert via strptime()*/ + memset(&ctime, 0, sizeof(struct tm)); + strptime(temp, "%d %b %Y %T %Z", &ctime); + ts = mktime(&ctime) - timezone; + localtime_r(&ts, tm_time); +} +#endif + +/*************************************************************************** + * MSN Challenge Computing Function + ***************************************************************************/ /*check the edian of system*/ int isBigEndian(void) @@ -482,3 +510,976 @@ // gaim_debug_info("MaYuan","chl output{%s}\n",output); } +#if (!defined(_XOPEN_SOURCE))||defined(_WIN32) + +#ifndef __P +# if defined (__GNUC__) || (defined (__STDC__) && __STDC__) +# define __P(args) args +# else +# define __P(args) () +# endif /* GCC. */ +#endif /* Not __P. */ + +#if ! HAVE_LOCALTIME_R && ! defined localtime_r +# ifdef _LIBC +# define localtime_r __localtime_r +# else +/* Approximate localtime_r as best we can in its absence. */ +# define localtime_r my_localtime_r +static struct tm *localtime_r __P ((const time_t *, struct tm *)); +static struct tm * +localtime_r (t, tp) + const time_t *t; + struct tm *tp; +{ + struct tm *l = localtime (t); + if (! l) + return 0; + *tp = *l; + return tp; +} +# endif /* ! _LIBC */ +#endif /* ! HAVE_LOCALTIME_R && ! defined (localtime_r) */ + + +#define match_char(ch1, ch2) if (ch1 != ch2) return NULL + +#if defined __GNUC__ && __GNUC__ >= 2 +# define match_string(cs1, s2) \ + ({ size_t len = strlen (cs1); \ + int result = strncasecmp ((cs1), (s2), len) == 0; \ + if (result) (s2) += len; \ + result; }) +#else +/* Oh come on. Get a reasonable compiler. */ +# define match_string(cs1, s2) \ + (strncasecmp ((cs1), (s2), strlen (cs1)) ? 0 : ((s2) += strlen (cs1), 1)) +#endif + +/* We intentionally do not use isdigit() for testing because this will + lead to problems with the wide character version. */ +#define get_number(from, to, n) \ + do { \ + int __n = n; \ + val = 0; \ + while (*rp == ' ') \ + ++rp; \ + if ((*rp < '0') || (*rp > '9')) \ + return NULL; \ + do { \ + val *= 10; \ + val += *rp++ - '0'; \ + } while ((--__n > 0) && (val * 10 <= to) && (*rp >= '0') && (*rp <= '9')); \ + if ((val < from) || (val > to)) \ + return NULL; \ + } while (0) + +#ifdef _NL_CURRENT +# define get_alt_number(from, to, n) \ + ({ \ + __label__ do_normal; \ + if (*decided != raw) \ + { \ + const char *alts = _NL_CURRENT (LC_TIME, ALT_DIGITS); \ + int __n = n; \ + int any = 0; \ + while (*rp == ' ') \ + ++rp; \ + val = 0; \ + do { \ + val *= 10; \ + while (*alts != '\0') \ + { \ + size_t len = strlen (alts); \ + if (strncasecmp (alts, rp, len) == 0) \ + break; \ + alts += len + 1; \ + ++val; \ + } \ + if (*alts == '\0') \ + { \ + if (*decided == not && ! any) \ + goto do_normal; \ + /* If we haven't read anything it's an error. */ \ + if (! any) \ + return NULL; \ + /* Correct the premature multiplication. */ \ + val /= 10; \ + break; \ + } \ + else \ + *decided = loc; \ + } while (--__n > 0 && val * 10 <= to); \ + if (val < from || val > to) \ + return NULL; \ + } \ + else \ + { \ + do_normal: \ + get_number (from, to, n); \ + } \ + 0; \ + }) +#else +# define get_alt_number(from, to, n) \ + /* We don't have the alternate representation. */ \ + get_number(from, to, n) +#endif + +#define recursive(new_fmt) \ + (*(new_fmt) != '\0' \ + && (rp = strptime_internal (rp, (new_fmt), tm, decided, era_cnt)) != NULL) + + +#ifdef _LIBC +/* This is defined in locale/C-time.c in the GNU libc. */ +extern const struct locale_data _nl_C_LC_TIME; +extern const unsigned short int __mon_yday[2][13]; + +# define weekday_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (DAY_1)].string) +# define ab_weekday_name \ + (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABDAY_1)].string) +# define month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (MON_1)].string) +# define ab_month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABMON_1)].string) +# define HERE_D_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_T_FMT)].string) +# define HERE_D_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_FMT)].string) +# define HERE_AM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (AM_STR)].string) +# define HERE_PM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (PM_STR)].string) +# define HERE_T_FMT_AMPM \ + (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT_AMPM)].string) +# define HERE_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT)].string) + +# define strncasecmp(s1, s2, n) __strncasecmp (s1, s2, n) +#else +static char const weekday_name[][10] = + { + "Sunday", "Monday", "Tuesday", "Wednesday", + "Thursday", "Friday", "Saturday" + }; +static char const ab_weekday_name[][4] = + { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + }; +static char const month_name[][10] = + { + "January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December" + }; +static char const ab_month_name[][4] = + { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + }; +# define HERE_D_T_FMT "%a %b %e %H:%M:%S %Y" +# define HERE_D_FMT "%m/%d/%y" +# define HERE_AM_STR "AM" +# define HERE_PM_STR "PM" +# define HERE_T_FMT_AMPM "%I:%M:%S %p" +# define HERE_T_FMT "%H:%M:%S" + +const unsigned short int __mon_yday[2][13] = + { + /* Normal years. */ + { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, + /* Leap years. */ + { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } + }; +#endif + +/* Status of lookup: do we use the locale data or the raw data? */ +enum locale_status { not, loc, raw }; + + +#ifndef __isleap +/* Nonzero if YEAR is a leap year (every 4 years, + except every 100th isn't, and every 400th is). */ +# define __isleap(year) \ + ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) +#endif + +/* Compute the day of the week. */ +static void +day_of_the_week (struct tm *tm) +{ + /* We know that January 1st 1970 was a Thursday (= 4). Compute the + the difference between this data in the one on TM and so determine + the weekday. */ + int corr_year = 1900 + tm->tm_year - (tm->tm_mon < 2); + int wday = (-473 + + (365 * (tm->tm_year - 70)) + + (corr_year / 4) + - ((corr_year / 4) / 25) + ((corr_year / 4) % 25 < 0) + + (((corr_year / 4) / 25) / 4) + + __mon_yday[0][tm->tm_mon] + + tm->tm_mday - 1); + tm->tm_wday = ((wday % 7) + 7) % 7; +} + +/* Compute the day of the year. */ +static void +day_of_the_year (struct tm *tm) +{ + tm->tm_yday = (__mon_yday[__isleap (1900 + tm->tm_year)][tm->tm_mon] + + (tm->tm_mday - 1)); +} + +static char * +#ifdef _LIBC +internal_function +#endif +strptime_internal __P ((const char *rp, const char *fmt, struct tm *tm, + enum locale_status *decided, int era_cnt)); + +static char * +#ifdef _LIBC +internal_function +#endif +strptime_internal (rp, fmt, tm, decided, era_cnt) + const char *rp; + const char *fmt; + struct tm *tm; + enum locale_status *decided; + int era_cnt; +{ + const char *rp_backup; + int cnt; + size_t val; + int have_I, is_pm; + int century, want_century; + int want_era; + int have_wday, want_xday; + int have_yday; + int have_mon, have_mday; +#ifdef _NL_CURRENT + size_t num_eras; +#endif + struct era_entry *era; + + have_I = is_pm = 0; + century = -1; + want_century = 0; + want_era = 0; + era = NULL; + + have_wday = want_xday = have_yday = have_mon = have_mday = 0; + + while (*fmt != '\0') + { + /* A white space in the format string matches 0 more or white + space in the input string. */ + if (isspace (*fmt)) + { + while (isspace (*rp)) + ++rp; + ++fmt; + continue; + } + + /* Any character but `%' must be matched by the same character + in the iput string. */ + if (*fmt != '%') + { + match_char (*fmt++, *rp++); + continue; + } + + ++fmt; +#ifndef _NL_CURRENT + /* We need this for handling the `E' modifier. */ + start_over: +#endif + + /* Make back up of current processing pointer. */ + rp_backup = rp; + + switch (*fmt++) + { + case '%': + /* Match the `%' character itself. */ + match_char ('%', *rp++); + break; + case 'a': + case 'A': + /* Match day of week. */ + for (cnt = 0; cnt < 7; ++cnt) + { +#ifdef _NL_CURRENT + if (*decided !=raw) + { + if (match_string (_NL_CURRENT (LC_TIME, DAY_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, DAY_1 + cnt), + weekday_name[cnt])) + *decided = loc; + break; + } + if (match_string (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), + ab_weekday_name[cnt])) + *decided = loc; + break; + } + } +#endif + if (*decided != loc + && (match_string (weekday_name[cnt], rp) + || match_string (ab_weekday_name[cnt], rp))) + { + *decided = raw; + break; + } + } + if (cnt == 7) + /* Does not match a weekday name. */ + return NULL; + tm->tm_wday = cnt; + have_wday = 1; + break; + case 'b': + case 'B': + case 'h': + /* Match month name. */ + for (cnt = 0; cnt < 12; ++cnt) + { +#ifdef _NL_CURRENT + if (*decided !=raw) + { + if (match_string (_NL_CURRENT (LC_TIME, MON_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, MON_1 + cnt), + month_name[cnt])) + *decided = loc; + break; + } + if (match_string (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), + ab_month_name[cnt])) + *decided = loc; + break; + } + } +#endif + if (match_string (month_name[cnt], rp) + || match_string (ab_month_name[cnt], rp)) + { + *decided = raw; + break; + } + } + if (cnt == 12) + /* Does not match a month name. */ + return NULL; + tm->tm_mon = cnt; + want_xday = 1; + break; + case 'c': + /* Match locale's date and time format. */ +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, D_T_FMT))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (*decided == not && + strcmp (_NL_CURRENT (LC_TIME, D_T_FMT), HERE_D_T_FMT)) + *decided = loc; + want_xday = 1; + break; + } + *decided = raw; + } +#endif + if (!recursive (HERE_D_T_FMT)) + return NULL; + want_xday = 1; + break; + case 'C': + /* Match century number. */ +#ifdef _NL_CURRENT + match_century: +#endif + get_number (0, 99, 2); + century = val; + want_xday = 1; + break; + case 'd': + case 'e': + /* Match day of month. */ + get_number (1, 31, 2); + tm->tm_mday = val; + have_mday = 1; + want_xday = 1; + break; + case 'F': + if (!recursive ("%Y-%m-%d")) + return NULL; + want_xday = 1; + break; + case 'x': +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, D_FMT))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, D_FMT), HERE_D_FMT)) + *decided = loc; + want_xday = 1; + break; + } + *decided = raw; + } +#endif + /* Fall through. */ + case 'D': + /* Match standard day format. */ + if (!recursive (HERE_D_FMT)) + return NULL; + want_xday = 1; + break; + case 'k': + case 'H': + /* Match hour in 24-hour clock. */ + get_number (0, 23, 2); + tm->tm_hour = val; + have_I = 0; + break; + case 'I': + /* Match hour in 12-hour clock. */ + get_number (1, 12, 2); + tm->tm_hour = val % 12; + have_I = 1; + break; + case 'j': + /* Match day number of year. */ + get_number (1, 366, 3); + tm->tm_yday = val - 1; + have_yday = 1; + break; + case 'm': + /* Match number of month. */ + get_number (1, 12, 2); + tm->tm_mon = val - 1; + have_mon = 1; + want_xday = 1; + break; + case 'M': + /* Match minute. */ + get_number (0, 59, 2); + tm->tm_min = val; + break; + case 'n': + case 't': + /* Match any white space. */ + while (isspace (*rp)) + ++rp; + break; + case 'p': + /* Match locale's equivalent of AM/PM. */ +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (match_string (_NL_CURRENT (LC_TIME, AM_STR), rp)) + { + if (strcmp (_NL_CURRENT (LC_TIME, AM_STR), HERE_AM_STR)) + *decided = loc; + break; + } + if (match_string (_NL_CURRENT (LC_TIME, PM_STR), rp)) + { + if (strcmp (_NL_CURRENT (LC_TIME, PM_STR), HERE_PM_STR)) + *decided = loc; + is_pm = 1; + break; + } + *decided = raw; + } +#endif + if (!match_string (HERE_AM_STR, rp)) + if (match_string (HERE_PM_STR, rp)) + is_pm = 1; + else + return NULL; + break; + case 'r': +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, T_FMT_AMPM))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (*decided == not && + strcmp (_NL_CURRENT (LC_TIME, T_FMT_AMPM), + HERE_T_FMT_AMPM)) + *decided = loc; + break; + } + *decided = raw; + } +#endif + if (!recursive (HERE_T_FMT_AMPM)) + return NULL; + break; + case 'R': + if (!recursive ("%H:%M")) + return NULL; + break; + case 's': + { + /* The number of seconds may be very high so we cannot use + the `get_number' macro. Instead read the number + character for character and construct the result while + doing this. */ + time_t secs = 0; + if (*rp < '0' || *rp > '9') + /* We need at least one digit. */ + return NULL; + + do + { + secs *= 10; + secs += *rp++ - '0'; + } + while (*rp >= '0' && *rp <= '9'); + + if (localtime_r (&secs, tm) == NULL) + /* Error in function. */ + return NULL; + } + break; + case 'S': + get_number (0, 61, 2); + tm->tm_sec = val; + break; + case 'X': +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, T_FMT))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (_NL_CURRENT (LC_TIME, T_FMT), HERE_T_FMT)) + *decided = loc; + break; + } + *decided = raw; + } +#endif + /* Fall through. */ + case 'T': + if (!recursive (HERE_T_FMT)) + return NULL; + break; + case 'u': + get_number (1, 7, 1); + tm->tm_wday = val % 7; + have_wday = 1; + break; + case 'g': + get_number (0, 99, 2); + /* XXX This cannot determine any field in TM. */ + break; + case 'G': + if (*rp < '0' || *rp > '9') + return NULL; + /* XXX Ignore the number since we would need some more + information to compute a real date. */ + do + ++rp; + while (*rp >= '0' && *rp <= '9'); + break; + case 'U': + case 'V': + case 'W': + get_number (0, 53, 2); + /* XXX This cannot determine any field in TM without some + information. */ + break; + case 'w': + /* Match number of weekday. */ + get_number (0, 6, 1); + tm->tm_wday = val; + have_wday = 1; + break; + case 'y': +#ifdef _NL_CURRENT + match_year_in_century: +#endif + /* Match year within century. */ + get_number (0, 99, 2); + /* The "Year 2000: The Millennium Rollover" paper suggests that + values in the range 69-99 refer to the twentieth century. */ + tm->tm_year = val >= 69 ? val : val + 100; + /* Indicate that we want to use the century, if specified. */ + want_century = 1; + want_xday = 1; + break; + case 'Y': + /* Match year including century number. */ + get_number (0, 9999, 4); + tm->tm_year = val - 1900; + want_century = 0; + want_xday = 1; + break; + case 'Z': + /* XXX How to handle this? */ + break; + case 'E': +#ifdef _NL_CURRENT + switch (*fmt++) + { + case 'c': + /* Match locale's alternate date and time format. */ + if (*decided != raw) + { + const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_T_FMT); + + if (*fmt == '\0') + fmt = _NL_CURRENT (LC_TIME, D_T_FMT); + + if (!recursive (fmt)) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (fmt, HERE_D_T_FMT)) + *decided = loc; + want_xday = 1; + break; + } + *decided = raw; + } + /* The C locale has no era information, so use the + normal representation. */ + if (!recursive (HERE_D_T_FMT)) + return NULL; + want_xday = 1; + break; + case 'C': + if (*decided != raw) + { + if (era_cnt >= 0) + { + era = _nl_select_era_entry (era_cnt); + if (match_string (era->era_name, rp)) + { + *decided = loc; + break; + } + else + return NULL; + } + else + { + num_eras = _NL_CURRENT_WORD (LC_TIME, + _NL_TIME_ERA_NUM_ENTRIES); + for (era_cnt = 0; era_cnt < (int) num_eras; + ++era_cnt, rp = rp_backup) + { + era = _nl_select_era_entry (era_cnt); + if (match_string (era->era_name, rp)) + { + *decided = loc; + break; + } + } + if (era_cnt == (int) num_eras) + { + era_cnt = -1; + if (*decided == loc) + return NULL; + } + else + break; + } + + *decided = raw; + } + /* The C locale has no era information, so use the + normal representation. */ + goto match_century; + case 'y': + if (*decided == raw) + goto match_year_in_century; + + get_number(0, 9999, 4); + tm->tm_year = val; + want_era = 1; + want_xday = 1; + break; + case 'Y': + if (*decided != raw) + { + num_eras = _NL_CURRENT_WORD (LC_TIME, + _NL_TIME_ERA_NUM_ENTRIES); + for (era_cnt = 0; era_cnt < (int) num_eras; + ++era_cnt, rp = rp_backup) + { + era = _nl_select_era_entry (era_cnt); + if (recursive (era->era_format)) + break; + } + if (era_cnt == (int) num_eras) + { + era_cnt = -1; + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + *decided = loc; + era_cnt = -1; + break; + } + + *decided = raw; + } + get_number (0, 9999, 4); + tm->tm_year = val - 1900; + want_century = 0; + want_xday = 1; + break; + case 'x': + if (*decided != raw) + { + const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_FMT); + + if (*fmt == '\0') + fmt = _NL_CURRENT (LC_TIME, D_FMT); + + if (!recursive (fmt)) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (fmt, HERE_D_FMT)) + *decided = loc; + break; + } + *decided = raw; + } + if (!recursive (HERE_D_FMT)) + return NULL; + break; + case 'X': + if (*decided != raw) + { + const char *fmt = _NL_CURRENT (LC_TIME, ERA_T_FMT); + + if (*fmt == '\0') + fmt = _NL_CURRENT (LC_TIME, T_FMT); + + if (!recursive (fmt)) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (fmt, HERE_T_FMT)) + *decided = loc; + break; + } + *decided = raw; + } + if (!recursive (HERE_T_FMT)) + return NULL; + break; + default: + return NULL; + } + break; +#else + /* We have no information about the era format. Just use + the normal format. */ + if (*fmt != 'c' && *fmt != 'C' && *fmt != 'y' && *fmt != 'Y' + && *fmt != 'x' && *fmt != 'X') + /* This is an illegal format. */ + return NULL; + + goto start_over; +#endif + case 'O': + switch (*fmt++) + { + case 'd': + case 'e': + /* Match day of month using alternate numeric symbols. */ + get_alt_number (1, 31, 2); + tm->tm_mday = val; + have_mday = 1; + want_xday = 1; + break; + case 'H': + /* Match hour in 24-hour clock using alternate numeric + symbols. */ + get_alt_number (0, 23, 2); + tm->tm_hour = val; + have_I = 0; + break; + case 'I': + /* Match hour in 12-hour clock using alternate numeric + symbols. */ + get_alt_number (1, 12, 2); + tm->tm_hour = val - 1; + have_I = 1; + break; + case 'm': + /* Match month using alternate numeric symbols. */ + get_alt_number (1, 12, 2); + tm->tm_mon = val - 1; + have_mon = 1; + want_xday = 1; + break; + case 'M': + /* Match minutes using alternate numeric symbols. */ + get_alt_number (0, 59, 2); + tm->tm_min = val; + break; + case 'S': + /* Match seconds using alternate numeric symbols. */ + get_alt_number (0, 61, 2); + tm->tm_sec = val; + break; + case 'U': + case 'V': + case 'W': + get_alt_number (0, 53, 2); + /* XXX This cannot determine any field in TM without + further information. */ + break; + case 'w': + /* Match number of weekday using alternate numeric symbols. */ + get_alt_number (0, 6, 1); + tm->tm_wday = val; + have_wday = 1; + break; + case 'y': + /* Match year within century using alternate numeric symbols. */ + get_alt_number (0, 99, 2); + tm->tm_year = val >= 69 ? val : val + 100; + want_xday = 1; + break; + default: + return NULL; + } + break; + default: + return NULL; + } + } + + if (have_I && is_pm) + tm->tm_hour += 12; + + if (century != -1) + { + if (want_century) + tm->tm_year = tm->tm_year % 100 + (century - 19) * 100; + else + /* Only the century, but not the year. Strange, but so be it. */ + tm->tm_year = (century - 19) * 100; + } + +#ifdef _NL_CURRENT + if (era_cnt != -1) + { + era = _nl_select_era_entry(era_cnt); + if (want_era) + tm->tm_year = (era->start_date[0] + + ((tm->tm_year - era->offset) + * era->absolute_direction)); + else + /* Era start year assumed. */ + tm->tm_year = era->start_date[0]; + } + else +#endif + if (want_era) + return NULL; + + if (want_xday && !have_wday) + { + if ( !(have_mon && have_mday) && have_yday) + { + /* We don't have tm_mon and/or tm_mday, compute them. */ + int t_mon = 0; + while (__mon_yday[__isleap(1900 + tm->tm_year)][t_mon] <= tm->tm_yday) + t_mon++; + if (!have_mon) + tm->tm_mon = t_mon - 1; + if (!have_mday) + tm->tm_mday = + (tm->tm_yday + - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1); + } + day_of_the_week (tm); + } + if (want_xday && !have_yday) + day_of_the_year (tm); + + return (char *) rp; +} + + +char * +msn_strptime (buf, format, tm) + const char *buf; + const char *format; + struct tm *tm; +{ + enum locale_status decided; + +#ifdef _NL_CURRENT + decided = not; +#else + decided = raw; +#endif + return strptime_internal (buf, format, tm, &decided, -1); +} +#else +#define msn_strptime strptime +#endif Modified: branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h 2006-08-09 18:19:12 UTC (rev 16683) +++ branches/soc-2006-msnp13/src/protocols/msn/msn-utils.h 2006-08-10 04:38:13 UTC (rev 16684) @@ -50,6 +50,7 @@ void msn_handle_chl(char *input, char *output); int isBigEndian(void); unsigned int swapInt(unsigned int dw); +char * msn_strptime (const char *buf,const char *format,struct tm *tm); #endif /* _MSN_UTILS_H_ */ Modified: branches/soc-2006-msnp13/src/protocols/msn/notification.c =================================================================== --- branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-09 18:19:12 UTC (rev 16683) +++ branches/soc-2006-msnp13/src/protocols/msn/notification.c 2006-08-10 04:38:13 UTC (rev 16684) @@ -1368,6 +1368,24 @@ // gaim_debug_info("MaYuan","mdata...{%s} \n",msg->body); +// /*time debug*/ + { + const char *timestr; + time_t t; + struct tm *tm; + char datestr[]="2006-07-15T07:21:26+0700"; + GDate *date; + time(&t); + tm = gmtime(&t); + timestr = gaim_utf8_strftime("%a, %d %b %Y %T %Z", tm); +// strftime(datestr,strlen(datestr),"%a",tm); + date = g_date_new(); + g_date_set_parse(date,datestr); + gaim_debug_info("MaYuan","date is NULL?date valid%d\n",g_date_valid(date)); + g_date_free(date); + gaim_debug_info("MaYuan","utf8 time:{%s}\n",timestr); + } + /*new a oim session*/ session = cmdproc->session; session->oim = msn_oim_new(session); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-09 18:19:22
|
Revision: 16683 Author: sadrul Date: 2006-08-09 11:19:12 -0700 (Wed, 09 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16683&view=rev Log Message: ----------- Minor adjustments. Modified Paths: -------------- trunk/console/gntblist.c trunk/console/gntrequest.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-08-09 18:00:38 UTC (rev 16682) +++ trunk/console/gntblist.c 2006-08-09 18:19:12 UTC (rev 16683) @@ -101,7 +101,6 @@ gnt_tree_remove(GNT_TREE(ggblist->tree), node); node->ui_data = NULL; - /* XXX: Depending on the node, we may want to remove the group/contact node if necessary */ if (GAIM_BLIST_NODE_IS_BUDDY(node)) { GaimGroup *group = gaim_buddy_get_group((GaimBuddy*)node); @@ -648,17 +647,33 @@ } } -/* XXX: This still doesn't do anything, because request doesn't have a ui yet */ static void gg_blist_remove_node_cb(GaimBlistNode *node, GaimBlistNode *null) { + char *primary, *sec = NULL; + const char *name; + + if (GAIM_BLIST_NODE_IS_BUDDY(node)) + name = gaim_buddy_get_name((GaimBuddy*)node); + else if (GAIM_BLIST_NODE_IS_CHAT(node)) + name = gaim_chat_get_name((GaimChat*)node); + else if (GAIM_BLIST_NODE_IS_GROUP(node)) + { + name = ((GaimGroup*)node)->name; + sec = _("Removing this group will also remove all the buddies in the group"); + } + else + return; + + primary = g_strdup_printf(_("Are you sure you want to remove %s?"), name); + /* XXX: anything to do with the returned ui-handle? */ gaim_request_action(node, _("Confirm Remove"), - _("Are you sure you want to remove ..."), NULL, /* XXX: tidy up */ + primary, sec, 1, node, 2, _("Remove"), gg_blist_remove_node, - _("No"), NULL); - + _("Cancel"), NULL); + g_free(primary); } static void Modified: trunk/console/gntrequest.c =================================================================== --- trunk/console/gntrequest.c 2006-08-09 18:00:38 UTC (rev 16682) +++ trunk/console/gntrequest.c 2006-08-09 18:19:12 UTC (rev 16683) @@ -182,7 +182,7 @@ window = setup_request_window(title, primary, secondary, GAIM_REQUEST_ACTION); - box = gnt_hbox_new(TRUE); + box = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(window), box); for (i = 0; i < actioncount; i++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-09 18:00:42
|
Revision: 16682 Author: sadrul Date: 2006-08-09 11:00:38 -0700 (Wed, 09 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16682&view=rev Log Message: ----------- Removing buddies/groups now works. Modified Paths: -------------- trunk/console/gntblist.c trunk/console/gntrequest.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-08-09 17:22:55 UTC (rev 16681) +++ trunk/console/gntblist.c 2006-08-09 18:00:38 UTC (rev 16682) @@ -590,24 +590,73 @@ g_free(prompt); } -/* XXX: This still doesn't do anything, because request doesn't have a ui yet */ +/* Xeroxed from gtkdialogs.c:gaim_gtkdialogs_remove_group_cb*/ static void -gg_blist_remove_node_cb(GaimBlistNode *node, GaimBlistNode *null) +remove_group(GaimGroup *group) { - void (*callback)(gpointer); + GaimBlistNode *cnode, *bnode; + cnode = ((GaimBlistNode*)group)->child; + + while (cnode) { + if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) { + bnode = cnode->child; + cnode = cnode->next; + while (bnode) { + GaimBuddy *buddy; + if (GAIM_BLIST_NODE_IS_BUDDY(bnode)) { + buddy = (GaimBuddy*)bnode; + bnode = bnode->next; + if (gaim_account_is_connected(buddy->account)) { + gaim_account_remove_buddy(buddy->account, buddy, group); + gaim_blist_remove_buddy(buddy); + } + } else { + bnode = bnode->next; + } + } + } else if (GAIM_BLIST_NODE_IS_CHAT(cnode)) { + GaimChat *chat = (GaimChat *)cnode; + cnode = cnode->next; + if (gaim_account_is_connected(chat->account)) + gaim_blist_remove_chat(chat); + } else { + cnode = cnode->next; + } + } + + gaim_blist_remove_group(group); +} + +static void +gg_blist_remove_node(GaimBlistNode *node) +{ if (GAIM_BLIST_NODE_IS_BUDDY(node)) - callback = (void(*)(gpointer))gaim_blist_remove_buddy; + { + GaimBuddy *buddy = (GaimBuddy*)node; + GaimGroup *group = gaim_buddy_get_group(buddy); + gaim_account_remove_buddy(gaim_buddy_get_account(buddy), buddy, group); + gaim_blist_remove_buddy(buddy); + } else if (GAIM_BLIST_NODE_IS_CHAT(node)) - callback = (void(*)(gpointer))gaim_blist_remove_chat; + { + gaim_blist_remove_chat((GaimChat*)node); + } else if (GAIM_BLIST_NODE_IS_GROUP(node)) - callback = (void(*)(gpointer))gaim_blist_remove_group; + { + remove_group((GaimGroup*)node); + } +} +/* XXX: This still doesn't do anything, because request doesn't have a ui yet */ +static void +gg_blist_remove_node_cb(GaimBlistNode *node, GaimBlistNode *null) +{ /* XXX: anything to do with the returned ui-handle? */ gaim_request_action(node, _("Confirm Remove"), _("Are you sure you want to remove ..."), NULL, /* XXX: tidy up */ 1, node, 2, - _("Remove"), callback, + _("Remove"), gg_blist_remove_node, _("No"), NULL); } Modified: trunk/console/gntrequest.c =================================================================== --- trunk/console/gntrequest.c 2006-08-09 17:22:55 UTC (rev 16681) +++ trunk/console/gntrequest.c 2006-08-09 18:00:38 UTC (rev 16682) @@ -234,7 +234,8 @@ else if (type == GAIM_REQUEST_FIELD_STRING) { GntWidget *entry = field->ui_data; - gaim_request_field_string_set_value(field, gnt_entry_get_text(GNT_ENTRY(entry))); + const char *text = gnt_entry_get_text(GNT_ENTRY(entry)); + gaim_request_field_string_set_value(field, (text && *text) ? text : NULL); } else if (type == GAIM_REQUEST_FIELD_INTEGER) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-09 17:23:03
|
Revision: 16681 Author: sadrul Date: 2006-08-09 10:22:55 -0700 (Wed, 09 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16681&view=rev Log Message: ----------- You can now add buddies or groups in the buddylist from the context-menu for a group. Adding chats is not yet possible. Modified Paths: -------------- trunk/console/gntblist.c trunk/console/gntrequest.c trunk/console/libgnt/gntcombobox.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-08-09 15:33:53 UTC (rev 16680) +++ trunk/console/gntblist.c 2006-08-09 17:22:55 UTC (rev 16681) @@ -1,5 +1,6 @@ #include <account.h> #include <blist.h> +#include <notify.h> #include <request.h> #include <savedstatuses.h> #include <server.h> @@ -141,6 +142,103 @@ { } +static void +add_buddy_cb(void *data, GaimRequestFields *allfields) +{ + const char *username = gaim_request_fields_get_string(allfields, "screenname"); + const char *alias = gaim_request_fields_get_string(allfields, "alias"); + const char *group = gaim_request_fields_get_string(allfields, "group"); + GaimAccount *account = gaim_request_fields_get_account(allfields, "account"); + const char *error = NULL; + GaimGroup *grp; + GaimBuddy *buddy; + + if (!username) + error = _("You must provide a screename for the buddy."); + else if (!group) + error = _("You must provide a group."); + else if (!account) + error = _("You must select an account."); + + if (error) + { + gaim_notify_error(NULL, _("Error"), _("Error adding buddy"), error); + return; + } + + grp = gaim_find_group(group); + if (!grp) + { + grp = gaim_group_new(group); + gaim_blist_add_group(grp, NULL); + } + + buddy = gaim_buddy_new(account, username, alias); + gaim_blist_add_buddy(buddy, NULL, grp, NULL); + gaim_account_add_buddy(account, buddy); +} + +static void +gg_request_add_buddy(GaimAccount *account, const char *username, const char *grp, const char *alias) +{ + GaimRequestFields *fields = gaim_request_fields_new(); + GaimRequestFieldGroup *group = gaim_request_field_group_new(NULL); + GaimRequestField *field; + + gaim_request_fields_add_group(fields, group); + + field = gaim_request_field_string_new("screenname", _("Screen Name"), username, FALSE); + gaim_request_field_group_add_field(group, field); + + field = gaim_request_field_string_new("alias", _("Alias"), alias, FALSE); + gaim_request_field_group_add_field(group, field); + + field = gaim_request_field_string_new("group", _("Group"), grp, FALSE); + gaim_request_field_group_add_field(group, field); + + field = gaim_request_field_account_new("account", _("Account"), NULL); + gaim_request_field_account_set_show_all(field, FALSE); + if (account) + gaim_request_field_account_set_value(field, account); + gaim_request_field_group_add_field(group, field); + + gaim_request_fields(NULL, _("Add Buddy"), NULL, _("Please enter buddy information."), + fields, _("Add"), G_CALLBACK(add_buddy_cb), _("Cancel"), NULL, NULL); +} + +static void +add_group_cb(gpointer null, const char *group) +{ + GaimGroup *grp; + + if (!group || !*group) + { + gaim_notify_error(NULL, _("Error"), _("Error adding group"), + _("You must give a name for the group to add.")); + return; + } + + grp = gaim_find_group(group); + if (!grp) + { + grp = gaim_group_new(group); + gaim_blist_add_group(grp, NULL); + } + else + { + gaim_notify_error(NULL, _("Error"), _("Error adding group"), + _("A group with the name already exists.")); + } +} + +static void +gg_request_add_group() +{ + gaim_request_input(NULL, _("Add Group"), NULL, _("Enter the name of the group"), + NULL, FALSE, FALSE, NULL, + _("Add"), G_CALLBACK(add_group_cb), _("Cancel"), NULL, NULL); +} + static GaimBlistUiOps blist_ui_ops = { new_list, @@ -150,9 +248,9 @@ node_remove, NULL, NULL, + .request_add_buddy = gg_request_add_buddy, NULL, - NULL, - NULL + .request_add_group = gg_request_add_group }; static gpointer @@ -360,8 +458,24 @@ } static void +gg_add_buddy(GaimGroup *grp, GaimBlistNode *node) +{ + gaim_blist_request_add_buddy(NULL, NULL, grp->name, NULL); +} + +static void +gg_add_group(GaimGroup *grp, GaimBlistNode *node) +{ + gaim_blist_request_add_group(); +} + +static void create_group_menu(GntTree *tree, GaimGroup *group) { + add_custom_action(tree, _("Add Buddy"), + GAIM_CALLBACK(gg_add_buddy), group); + add_custom_action(tree, _("Add Group"), + GAIM_CALLBACK(gg_add_group), group); } static void @@ -555,6 +669,7 @@ GAIM_CALLBACK(gg_blist_remove_node_cb), node); window = gnt_vbox_new(FALSE); + GNT_WIDGET_SET_FLAGS(window, GNT_WIDGET_TRANSIENT); gnt_box_set_toplevel(GNT_BOX(window), TRUE); gnt_box_set_title(GNT_BOX(window), title); Modified: trunk/console/gntrequest.c =================================================================== --- trunk/console/gntrequest.c 2006-08-09 15:33:53 UTC (rev 16680) +++ trunk/console/gntrequest.c 2006-08-09 17:22:55 UTC (rev 16681) @@ -278,6 +278,9 @@ } else if (type == GAIM_REQUEST_FIELD_ACCOUNT) { + GntWidget *combo = field->ui_data; + GaimAccount *acc = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); + gaim_request_field_account_set_value(field, acc); } } } @@ -293,13 +296,13 @@ static void * gg_request_fields(const char *title, const char *primary, - const char *secondary, GaimRequestFields *fields, + const char *secondary, GaimRequestFields *allfields, const char *ok, GCallback ok_cb, const char *cancel, GCallback cancel_cb, void *userdata) { GntWidget *window, *box; - GList *list; + GList *grlist; window = setup_request_window(title, primary, secondary, GAIM_REQUEST_FIELDS); @@ -309,27 +312,28 @@ box = gnt_vbox_new(FALSE); gnt_box_set_pad(GNT_BOX(box), 0); gnt_box_set_fill(GNT_BOX(box), TRUE); - for (list = gaim_request_fields_get_groups(fields); list; list = list->next) + for (grlist = gaim_request_fields_get_groups(allfields); grlist; grlist = grlist->next) { - GaimRequestFieldGroup *group = list->data; + GaimRequestFieldGroup *group = grlist->data; GList *fields = gaim_request_field_group_get_fields(group); GntWidget *hbox; - - gnt_box_add_widget(GNT_BOX(box), - gnt_label_new_with_format(gaim_request_field_group_get_title(group), - GNT_TEXT_FLAG_BOLD)); + const char *title = gaim_request_field_group_get_title(group); + if (title) + gnt_box_add_widget(GNT_BOX(box), + gnt_label_new_with_format(title, GNT_TEXT_FLAG_BOLD)); + for (; fields ; fields = fields->next) { + /* XXX: Break each of the fields into a separate function? */ GaimRequestField *field = fields->data; GaimRequestFieldType type = gaim_request_field_get_type(field); const char *label = gaim_request_field_get_label(field); - hbox = gnt_hbox_new(FALSE); - gnt_box_set_pad(GNT_BOX(hbox), 0); + hbox = gnt_hbox_new(TRUE); /* hrm */ gnt_box_add_widget(GNT_BOX(box), hbox); - if (type != GAIM_REQUEST_FIELD_BOOLEAN) + if (type != GAIM_REQUEST_FIELD_BOOLEAN && label) { GntWidget *l = gnt_label_new(label); gnt_widget_set_size(l, 0, 1); @@ -417,12 +421,44 @@ } } } -#if 0 else if (type == GAIM_REQUEST_FIELD_ACCOUNT) { - /* XXX: remember to set the field->ui_data */ + gboolean all; + GaimAccount *def; + GList *list; + GntWidget *combo = gnt_combo_box_new(); + gnt_box_set_alignment(GNT_BOX(hbox), GNT_ALIGN_MID); + gnt_box_add_widget(GNT_BOX(hbox), combo); + field->ui_data = combo; + + all = gaim_request_field_account_get_show_all(field); + def = gaim_request_field_account_get_default_value(field); + + if (all) + list = gaim_accounts_get_all(); + else + list = gaim_connections_get_all(); + + for (; list; list = list->next) + { + GaimAccount *account; + char *text; + + if (all) + account = list->data; + else + account = gaim_connection_get_account(list->data); + + text = g_strdup_printf("%s (%s)", + gaim_account_get_username(account), + gaim_account_get_protocol_name(account)); + gnt_combo_box_add_data(GNT_COMBO_BOX(combo), account, text); + g_free(text); + if (account == def) + gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), account); + } + gnt_widget_set_size(combo, 20, 3); /* ew */ } -#endif else { gnt_box_add_widget(GNT_BOX(hbox), @@ -430,12 +466,12 @@ GNT_TEXT_FLAG_BOLD)); } } - if (list->next) + if (grlist->next) gnt_box_add_widget(GNT_BOX(box), gnt_hline_new()); } gnt_box_add_widget(GNT_BOX(window), box); - box = setup_button_box(userdata, request_fields_cb, fields, + box = setup_button_box(userdata, request_fields_cb, allfields, ok, ok_cb, cancel, cancel_cb, NULL); gnt_box_add_widget(GNT_BOX(window), box); Modified: trunk/console/libgnt/gntcombobox.c =================================================================== --- trunk/console/libgnt/gntcombobox.c 2006-08-09 15:33:53 UTC (rev 16680) +++ trunk/console/libgnt/gntcombobox.c 2006-08-09 17:22:55 UTC (rev 16681) @@ -74,8 +74,13 @@ static void gnt_combo_box_size_request(GntWidget *widget) { - widget->priv.height = 3; /* For now, a combobox will have border */ - widget->priv.width = 15; + if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_MAPPED)) + { + GntWidget *dd = GNT_COMBO_BOX(widget)->dropdown; + gnt_widget_size_request(dd); + widget->priv.height = 3; /* For now, a combobox will have border */ + widget->priv.width = MIN(10, dd->priv.width); + } } static void This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lsc...@us...> - 2006-08-09 15:34:16
|
Revision: 16680 Author: lschiere Date: 2006-08-09 08:33:53 -0700 (Wed, 09 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16680&view=rev Log Message: ----------- With much help from datallah, I present to you the translation updates earlier committed to trunk, with the same caveat about the confusion in gu.po Modified Paths: -------------- branches/v2_0_0/configure.ac branches/v2_0_0/po/ChangeLog branches/v2_0_0/po/de.po branches/v2_0_0/po/fi.po branches/v2_0_0/po/gl.po branches/v2_0_0/po/gu.po branches/v2_0_0/po/it.po branches/v2_0_0/po/sl.po branches/v2_0_0/po/zh_TW.po branches/v2_0_0/src/gtkdialogs.c Added Paths: ----------- branches/v2_0_0/po/ne.po Modified: branches/v2_0_0/configure.ac =================================================================== --- branches/v2_0_0/configure.ac 2006-08-09 14:47:37 UTC (rev 16679) +++ branches/v2_0_0/configure.ac 2006-08-09 15:33:53 UTC (rev 16680) @@ -46,7 +46,7 @@ ;; esac -ALL_LINGUAS="am az bg bn bs ca ca@valencia cs da de el en_AU en_CA en_GB es et eu fa fi fr gl gu he hi hu it ja ka ko ku lt mk my_MM nb nl nn pa pl pt_BR pt ro ru sk sl sq sr sr@Latn sv ta te th tr uk vi xh zh_CN zh_TW" +ALL_LINGUAS="am az bg bn bs ca ca@valencia cs da de el en_AU en_CA en_GB es et eu fa fi fr gl gu he hi hu it ja ka ko ku lt mk my_MM nb ne nl nn pa pl pt_BR pt ro ru sk sl sq sr sr@Latn sv ta te th tr uk vi xh zh_CN zh_TW" AM_GLIB_GNU_GETTEXT dnl we don't use autobreak on cygwin!! Modified: branches/v2_0_0/po/ChangeLog =================================================================== --- branches/v2_0_0/po/ChangeLog 2006-08-09 14:47:37 UTC (rev 16679) +++ branches/v2_0_0/po/ChangeLog 2006-08-09 15:33:53 UTC (rev 16680) @@ -23,13 +23,16 @@ * German translation updated (Bjoern Voigt) * German win32 translation updated (Bjoern Voigt) * Greek translation added (Bouklis Panos) + * Gujarati translation updated (Ankit Patel) * Hebrew translation updated (Shalom Craimer) * Hungarian translation updated (Gabor Kelemen) + * Italian translation updated (Claudio Satriano) * Japanese translation updated (Takeshi Aihana) * Kurdish translation added (Erdal Ronahi and Amed Ç. Jiyan) * Kurdish win32 installer translation added (Erdal Ronahi) * Lithuanian translation updated (Andrius Štikonas, Laurynas Biveinis) * Lithuanian win32 translation added (Laurynas Biveinis) + * Nepali translation added (Shyam Krishna Bal) * Persian translation added (Elnaz Sarbar, Meelad Zakaria) * Polish translation updated (Emil Nowak) * Portuguese translation updated (Duarte Henriques) Modified: branches/v2_0_0/po/de.po =================================================================== --- branches/v2_0_0/po/de.po 2006-08-09 14:47:37 UTC (rev 16679) +++ branches/v2_0_0/po/de.po 2006-08-09 15:33:53 UTC (rev 16680) @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: Gaim\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-04-29 23:34+0200\n" -"PO-Revision-Date: 2006-04-29 23:33+0200\n" +"POT-Creation-Date: 2006-06-20 10:30+0200\n" +"PO-Revision-Date: 2006-06-20 10:38+0200\n" "Last-Translator: Björn Voigt <bj...@cs...>\n" "Language-Team: de <de...@li...>\n" "MIME-Version: 1.0\n" @@ -196,7 +196,7 @@ msgid "Right-click for more unread messages...\n" msgstr "Rechtsklicken für weitere ungelesene Nachrichten...\n" -#: ../plugins/docklet/docklet.c:157 ../src/gtkblist.c:3230 +#: ../plugins/docklet/docklet.c:157 ../src/gtkblist.c:3246 #, c-format msgid "%d unread message from %s\n" msgid_plural "%d unread messages from %s\n" @@ -208,10 +208,10 @@ msgstr "Ändere Status" #: ../plugins/docklet/docklet.c:435 ../src/gtkstatusbox.c:673 -#: ../src/protocols/gg/gg.c:996 ../src/protocols/jabber/buddy.c:1104 +#: ../src/protocols/gg/gg.c:996 ../src/protocols/jabber/buddy.c:1363 #: ../src/protocols/msn/state.c:29 ../src/protocols/msn/state.c:30 #: ../src/protocols/msn/state.c:37 ../src/protocols/msn/state.c:38 -#: ../src/protocols/novell/novell.c:2845 ../src/protocols/yahoo/yahoo.c:2733 +#: ../src/protocols/novell/novell.c:2843 ../src/protocols/yahoo/yahoo.c:2731 #: ../src/status.c:155 msgid "Available" msgstr "Verfügbar" @@ -222,25 +222,25 @@ #: ../plugins/docklet/docklet.c:439 ../src/gtkprefs.c:1774 #: ../src/gtkstatusbox.c:674 ../src/protocols/gg/gg.c:999 #: ../src/protocols/irc/irc.c:520 ../src/protocols/irc/msgs.c:223 -#: ../src/protocols/jabber/buddy.c:1108 ../src/protocols/novell/novell.c:2848 -#: ../src/protocols/oscar/oscar.c:719 ../src/protocols/oscar/oscar.c:4391 -#: ../src/protocols/oscar/oscar.c:5434 ../src/protocols/silc/buddy.c:1469 -#: ../src/protocols/yahoo/yahoo.c:3187 ../src/protocols/yahoo/yahoo.c:3260 +#: ../src/protocols/jabber/buddy.c:1367 ../src/protocols/novell/novell.c:2846 +#: ../src/protocols/oscar/oscar.c:719 ../src/protocols/oscar/oscar.c:4397 +#: ../src/protocols/oscar/oscar.c:5440 ../src/protocols/silc/buddy.c:1469 +#: ../src/protocols/yahoo/yahoo.c:3185 ../src/protocols/yahoo/yahoo.c:3258 #: ../src/status.c:158 msgid "Away" msgstr "Abwesend" #: ../plugins/docklet/docklet.c:443 ../src/gtkstatusbox.c:675 -#: ../src/protocols/oscar/oscar.c:723 ../src/protocols/yahoo/yahoo.c:2727 +#: ../src/protocols/oscar/oscar.c:723 ../src/protocols/yahoo/yahoo.c:2725 #: ../src/status.c:157 msgid "Invisible" msgstr "Unsichtbar" -#: ../plugins/docklet/docklet.c:447 ../src/gtkblist.c:2960 +#: ../plugins/docklet/docklet.c:447 ../src/gtkblist.c:2976 #: ../src/gtkstatusbox.c:676 ../src/protocols/gg/gg.c:993 -#: ../src/protocols/jabber/buddy.c:1102 ../src/protocols/novell/novell.c:2857 -#: ../src/protocols/oscar/oscar.c:785 ../src/protocols/oscar/oscar.c:5406 -#: ../src/protocols/yahoo/yahoo.c:2731 ../src/status.c:154 +#: ../src/protocols/jabber/buddy.c:1361 ../src/protocols/novell/novell.c:2855 +#: ../src/protocols/oscar/oscar.c:785 ../src/protocols/oscar/oscar.c:5412 +#: ../src/protocols/yahoo/yahoo.c:2729 ../src/status.c:154 msgid "Offline" msgstr "Offline" @@ -256,7 +256,7 @@ msgid "Show Buddy List" msgstr "Buddy-Liste anzeigen" -#: ../plugins/docklet/docklet.c:489 ../src/gtkconv.c:5626 +#: ../plugins/docklet/docklet.c:489 ../src/gtkconv.c:5675 msgid "Unread Messages" msgstr "Ungelesene Nachrichten" @@ -296,7 +296,7 @@ msgstr "_Sofortnachrichten:" #: ../plugins/docklet/docklet.c:684 ../plugins/docklet/docklet.c:692 -#: ../plugins/win32/winprefs/winprefs.c:424 ../src/gtkprefs.c:823 +#: ../plugins/win32/winprefs/winprefs.c:462 ../src/gtkprefs.c:823 #: ../src/gtkprefs.c:1764 ../src/gtkprefs.c:1778 msgid "Never" msgstr "Niemals" @@ -307,7 +307,7 @@ #: ../plugins/docklet/docklet.c:686 ../plugins/docklet/docklet.c:694 #: ../plugins/timestamp_format.c:39 ../plugins/timestamp_format.c:48 -#: ../plugins/win32/winprefs/winprefs.c:425 ../src/gtkprefs.c:825 +#: ../plugins/win32/winprefs/winprefs.c:463 ../src/gtkprefs.c:825 msgid "Always" msgstr "Immer" @@ -617,7 +617,7 @@ #. Business #: ../plugins/gevolution/add_buddy_dialog.c:131 #: ../plugins/gevolution/assoc-buddy.c:119 ../src/gtkplugin.c:587 -#: ../src/gtkroomlist.c:604 ../src/protocols/jabber/jabber.c:755 +#: ../src/gtkroomlist.c:604 ../src/protocols/jabber/jabber.c:759 #: ../src/protocols/msn/msn.c:1532 ../src/protocols/msn/msn.c:1585 #: ../src/protocols/msn/msn.c:1606 msgid "Name" @@ -627,10 +627,10 @@ msgid "Instant Messaging" msgstr "Sofortnachrichten" -#: ../plugins/gevolution/add_buddy_dialog.c:442 ../src/gtkblist.c:4526 +#: ../plugins/gevolution/add_buddy_dialog.c:442 ../src/gtkblist.c:4532 #: ../src/protocols/silc/buddy.c:736 ../src/protocols/silc/buddy.c:1030 #: ../src/protocols/silc/buddy.c:1075 ../src/protocols/silc/buddy.c:1174 -#: ../src/protocols/yahoo/yahoo.c:2976 +#: ../src/protocols/yahoo/yahoo.c:2974 msgid "Add Buddy" msgstr "Buddy hinzufügen" @@ -644,14 +644,14 @@ #. "Search" #: ../plugins/gevolution/add_buddy_dialog.c:468 #: ../plugins/gevolution/assoc-buddy.c:353 -#: ../src/protocols/jabber/buddy.c:1460 ../src/protocols/oscar/oscar.c:6014 -#: ../src/protocols/sametime/sametime.c:5531 +#: ../src/protocols/jabber/buddy.c:1720 ../src/protocols/oscar/oscar.c:6020 +#: ../src/protocols/sametime/sametime.c:5529 msgid "Search" msgstr "Suchen" #: ../plugins/gevolution/add_buddy_dialog.c:549 -#: ../plugins/gevolution/new_person_dialog.c:307 ../src/gtkblist.c:4610 -#: ../src/gtkblist.c:4974 +#: ../plugins/gevolution/new_person_dialog.c:307 ../src/gtkblist.c:4616 +#: ../src/gtkblist.c:4980 msgid "Group:" msgstr "Gruppe:" @@ -687,13 +687,13 @@ msgstr "_Assoziiere den Buddy" #: ../plugins/gevolution/eds-utils.c:73 ../plugins/gevolution/eds-utils.c:86 -#: ../src/protocols/jabber/jabber.c:1122 +#: ../src/protocols/jabber/jabber.c:1125 msgid "None" msgstr "Kein" #: ../plugins/gevolution/gevo-util.c:64 ../plugins/gevolution/gevolution.c:96 #: ../src/blist.c:516 ../src/blist.c:1278 ../src/blist.c:1505 -#: ../src/gtkblist.c:4419 ../src/protocols/jabber/roster.c:65 +#: ../src/gtkblist.c:4425 ../src/protocols/jabber/roster.c:66 msgid "Buddies" msgstr "Buddys" @@ -730,8 +730,8 @@ "Wählen Sie alle Konten, zu denen Buddys automatisch hinzugefügt werden " "sollen." -#: ../plugins/gevolution/gevolution.c:450 ../plugins/idle.c:150 -#: ../plugins/idle.c:186 ../src/gtknotify.c:399 ../src/gtkpounce.c:1262 +#: ../plugins/gevolution/gevolution.c:450 ../plugins/idle.c:153 +#: ../plugins/idle.c:189 ../src/gtknotify.c:399 ../src/gtkpounce.c:1255 msgid "Account" msgstr "Konto" @@ -768,7 +768,7 @@ msgstr "Kontotyp:" #: ../plugins/gevolution/new_person_dialog.c:295 ../src/gtkaccount.c:784 -#: ../src/gtkblist.c:4572 +#: ../src/gtkblist.c:4578 msgid "Screen name:" msgstr "Benutzername:" @@ -870,50 +870,50 @@ msgid "Iconifies the buddy list and your conversations when you go away." msgstr "Minimiert die Buddy-Liste und die Gesprächsfenster, wenn Sie weggehen." -#: ../plugins/idle.c:155 ../plugins/idle.c:213 +#: ../plugins/idle.c:158 ../plugins/idle.c:216 msgid "Minutes" msgstr "Minuten" #. This is a cultural reference. Dy'er Mak'er is a song by Led Zeppelin. #. If that doesn't translate well into your language, drop the 's before translating. -#: ../plugins/idle.c:162 ../plugins/idle.c:195 ../plugins/idle.c:220 -#: ../plugins/idle.c:312 +#: ../plugins/idle.c:165 ../plugins/idle.c:198 ../plugins/idle.c:223 +#: ../plugins/idle.c:315 msgid "I'dle Mak'er" msgstr "Untätigkeitsmarker" -#: ../plugins/idle.c:163 ../plugins/idle.c:252 +#: ../plugins/idle.c:166 ../plugins/idle.c:255 msgid "Set Account Idle Time" msgstr "Setze Konto-Untätigkeitszeit" -#: ../plugins/idle.c:166 ../plugins/idle.c:224 +#: ../plugins/idle.c:169 ../plugins/idle.c:227 msgid "_Set" msgstr "_Setzen" -#: ../plugins/idle.c:167 ../plugins/idle.c:200 ../plugins/idle.c:225 +#: ../plugins/idle.c:170 ../plugins/idle.c:203 ../plugins/idle.c:228 msgid "_Cancel" msgstr "A_bbrechen" -#: ../plugins/idle.c:180 +#: ../plugins/idle.c:183 msgid "None of your accounts are idle." msgstr "Keine ihrer Konten sind untätig." -#: ../plugins/idle.c:196 ../plugins/idle.c:256 +#: ../plugins/idle.c:199 ../plugins/idle.c:259 msgid "Unset Account Idle Time" msgstr "Untätigkeitszeit zurücksetzen" -#: ../plugins/idle.c:199 +#: ../plugins/idle.c:202 msgid "_Unset" msgstr "Zurücksetze_n" -#: ../plugins/idle.c:221 ../plugins/idle.c:260 +#: ../plugins/idle.c:224 ../plugins/idle.c:263 msgid "Set Idle Time for All Accounts" msgstr "Untätigkeitszeit für alle Konten setzen" -#: ../plugins/idle.c:265 +#: ../plugins/idle.c:268 msgid "Unset Idle Time for All Idled Accounts" msgstr "Untätigkeitszeit für alle untätige Konten zurücksetzen" -#: ../plugins/idle.c:314 ../plugins/idle.c:315 +#: ../plugins/idle.c:317 ../plugins/idle.c:318 msgid "Allows you to hand-configure how long you've been idle" msgstr "" "Erlaubt Ihnen manuell zu konfigurieren, wie lange Sie untätig sein wollen" @@ -1661,7 +1661,7 @@ #. *< dependencies #. *< priority #. *< id -#: ../plugins/timestamp.c:254 +#: ../plugins/timestamp.c:256 msgid "Timestamp" msgstr "Zeitstempel" @@ -1669,7 +1669,7 @@ #. *< version #. * summary #. * description -#: ../plugins/timestamp.c:257 ../plugins/timestamp.c:259 +#: ../plugins/timestamp.c:259 ../plugins/timestamp.c:261 msgid "Adds iChat-style timestamps to conversations every N minutes." msgstr "Fügt iChat-ähnliche Zeitstempel alle N Minuten in die Gespräche ein." @@ -1798,57 +1798,57 @@ "\n" "* Hinweis: Dieses Plugin verlangt Win2000 oder höher." -#: ../plugins/win32/winprefs/winprefs.c:397 +#: ../plugins/win32/winprefs/winprefs.c:434 msgid "GTK+ Runtime Version" msgstr "GTK+ Runtime Version" #. Autostart -#: ../plugins/win32/winprefs/winprefs.c:405 +#: ../plugins/win32/winprefs/winprefs.c:442 msgid "Startup" msgstr "Start" -#: ../plugins/win32/winprefs/winprefs.c:406 +#: ../plugins/win32/winprefs/winprefs.c:443 msgid "_Start Gaim on Windows startup" msgstr "_Starte Gaim beim Windows-Start" #. Buddy List -#: ../plugins/win32/winprefs/winprefs.c:417 ../src/gtkblist.c:3663 +#: ../plugins/win32/winprefs/winprefs.c:455 ../src/gtkblist.c:3672 msgid "Buddy List" msgstr "Buddy-Liste" -#: ../plugins/win32/winprefs/winprefs.c:418 +#: ../plugins/win32/winprefs/winprefs.c:456 msgid "_Dockable Buddy List" msgstr "An_dockbare Buddy-Liste" #. Blist On Top -#: ../plugins/win32/winprefs/winprefs.c:422 +#: ../plugins/win32/winprefs/winprefs.c:460 msgid "_Keep Buddy List window on top:" msgstr "_Buddy-Listen-Fenster bleibt im Vordergrund:" #. XXX: Did this ever work? -#: ../plugins/win32/winprefs/winprefs.c:427 +#: ../plugins/win32/winprefs/winprefs.c:465 msgid "Only when docked" msgstr "Nur wenn angedockt" #. Conversations -#: ../plugins/win32/winprefs/winprefs.c:431 ../src/gtkprefs.c:819 +#: ../plugins/win32/winprefs/winprefs.c:469 ../src/gtkprefs.c:819 #: ../src/gtkprefs.c:1879 msgid "Conversations" msgstr "Unterhaltungen" -#: ../plugins/win32/winprefs/winprefs.c:432 +#: ../plugins/win32/winprefs/winprefs.c:470 msgid "_Flash window when messages are received" msgstr "_Fenster blinkt, wenn Nachrichten empfangen werden" -#: ../plugins/win32/winprefs/winprefs.c:456 +#: ../plugins/win32/winprefs/winprefs.c:494 msgid "WinGaim Options" msgstr "WinGaim Optionen" -#: ../plugins/win32/winprefs/winprefs.c:458 +#: ../plugins/win32/winprefs/winprefs.c:496 msgid "Options specific to Windows Gaim." msgstr "Windows-Gaim-spezifische Optionen." -#: ../plugins/win32/winprefs/winprefs.c:459 +#: ../plugins/win32/winprefs/winprefs.c:497 msgid "" "Provides options specific to Windows Gaim, such as buddy list docking and " "conversation flashing." @@ -1860,139 +1860,138 @@ msgid "accounts" msgstr "Konten" -#: ../src/account.c:923 +#: ../src/account.c:918 msgid "Password is required to sign on." msgstr "Passwort wird für die Anmeldung benötigt." -#: ../src/account.c:948 +#: ../src/account.c:943 #, c-format msgid "Enter password for %s (%s)" msgstr "Geben Sie das Passwort für %s (%s) ein" -#: ../src/account.c:955 +#: ../src/account.c:950 msgid "Enter Password" msgstr "Geben Sie ein Passwort ein" -#: ../src/account.c:960 +#: ../src/account.c:955 msgid "Save password" msgstr "Passwort speichern" #. * #. * A wrapper for gaim_request_action() that uses @c OK and @c Cancel buttons. #. -#: ../src/account.c:968 ../src/account.c:1139 ../src/gtkblist.c:3546 -#: ../src/gtkdialogs.c:602 ../src/gtkdialogs.c:739 ../src/gtkdialogs.c:803 +#: ../src/account.c:963 ../src/account.c:1134 ../src/gtkblist.c:3556 +#: ../src/gtkdialogs.c:613 ../src/gtkdialogs.c:750 ../src/gtkdialogs.c:824 #: ../src/gtkrequest.c:269 ../src/protocols/gg/gg.c:497 #: ../src/protocols/gg/gg.c:655 ../src/protocols/gg/gg.c:791 -#: ../src/protocols/jabber/jabber.c:1319 ../src/protocols/jabber/xdata.c:337 +#: ../src/protocols/jabber/jabber.c:1322 ../src/protocols/jabber/xdata.c:337 #: ../src/protocols/msn/msn.c:250 ../src/protocols/msn/msn.c:265 #: ../src/protocols/msn/msn.c:280 ../src/protocols/msn/msn.c:295 #: ../src/protocols/oscar/oscar.c:1408 ../src/protocols/oscar/oscar.c:2167 -#: ../src/protocols/oscar/oscar.c:2260 ../src/protocols/oscar/oscar.c:5684 -#: ../src/protocols/oscar/oscar.c:5864 ../src/protocols/oscar/oscar.c:5889 -#: ../src/protocols/oscar/oscar.c:5945 ../src/protocols/silc/buddy.c:466 +#: ../src/protocols/oscar/oscar.c:2260 ../src/protocols/oscar/oscar.c:5690 +#: ../src/protocols/oscar/oscar.c:5870 ../src/protocols/oscar/oscar.c:5895 +#: ../src/protocols/oscar/oscar.c:5951 ../src/protocols/silc/buddy.c:466 #: ../src/protocols/silc/buddy.c:1182 ../src/protocols/silc/chat.c:424 #: ../src/protocols/silc/chat.c:462 ../src/protocols/silc/chat.c:725 #: ../src/protocols/silc/ops.c:1297 ../src/protocols/silc/ops.c:1910 -#: ../src/protocols/silc/silc.c:753 ../src/protocols/yahoo/yahoo.c:3061 -#: ../src/protocols/yahoo/yahoo.c:3070 ../src/request.h:1344 +#: ../src/protocols/silc/silc.c:753 ../src/protocols/yahoo/yahoo.c:3059 +#: ../src/protocols/yahoo/yahoo.c:3068 ../src/request.h:1344 msgid "OK" msgstr "OK" -#: ../src/account.c:969 ../src/account.c:1140 ../src/account.c:1177 -#: ../src/gtkaccount.c:2182 ../src/gtkaccount.c:2649 ../src/gtkblist.c:5015 -#: ../src/gtkdialogs.c:603 ../src/gtkdialogs.c:740 ../src/gtkdialogs.c:804 -#: ../src/gtkdialogs.c:823 ../src/gtkdialogs.c:845 ../src/gtkdialogs.c:865 -#: ../src/gtkdialogs.c:909 ../src/gtkdialogs.c:964 ../src/gtkdialogs.c:1001 -#: ../src/gtkdialogs.c:1026 ../src/gtkimhtmltoolbar.c:419 -#: ../src/gtkplugin.c:296 ../src/gtkpounce.c:1095 ../src/gtkprivacy.c:568 +#: ../src/account.c:964 ../src/account.c:1135 ../src/account.c:1172 +#: ../src/gtkaccount.c:2182 ../src/gtkaccount.c:2649 ../src/gtkblist.c:5021 +#: ../src/gtkdialogs.c:614 ../src/gtkdialogs.c:751 ../src/gtkdialogs.c:825 +#: ../src/gtkdialogs.c:844 ../src/gtkdialogs.c:866 ../src/gtkdialogs.c:886 +#: ../src/gtkdialogs.c:930 ../src/gtkdialogs.c:985 ../src/gtkdialogs.c:1022 +#: ../src/gtkdialogs.c:1047 ../src/gtkimhtmltoolbar.c:419 +#: ../src/gtkplugin.c:296 ../src/gtkpounce.c:1088 ../src/gtkprivacy.c:568 #: ../src/gtkprivacy.c:581 ../src/gtkprivacy.c:606 ../src/gtkprivacy.c:617 #: ../src/gtkrequest.c:270 ../src/gtksavedstatuses.c:296 #: ../src/protocols/gg/gg.c:498 ../src/protocols/gg/gg.c:656 #: ../src/protocols/gg/gg.c:792 ../src/protocols/gg/gg.c:871 -#: ../src/protocols/jabber/buddy.c:576 ../src/protocols/jabber/buddy.c:1461 -#: ../src/protocols/jabber/buddy.c:1495 ../src/protocols/jabber/chat.c:780 -#: ../src/protocols/jabber/jabber.c:824 ../src/protocols/jabber/jabber.c:1320 +#: ../src/protocols/jabber/buddy.c:594 ../src/protocols/jabber/buddy.c:1721 +#: ../src/protocols/jabber/buddy.c:1755 ../src/protocols/jabber/chat.c:778 +#: ../src/protocols/jabber/jabber.c:828 ../src/protocols/jabber/jabber.c:1323 #: ../src/protocols/jabber/xdata.c:338 ../src/protocols/msn/msn.c:251 #: ../src/protocols/msn/msn.c:266 ../src/protocols/msn/msn.c:281 #: ../src/protocols/msn/msn.c:296 ../src/protocols/msn/msn.c:313 #: ../src/protocols/oscar/oscar.c:1409 ../src/protocols/oscar/oscar.c:2168 #: ../src/protocols/oscar/oscar.c:2209 ../src/protocols/oscar/oscar.c:2261 -#: ../src/protocols/oscar/oscar.c:5685 ../src/protocols/oscar/oscar.c:5737 -#: ../src/protocols/oscar/oscar.c:5865 ../src/protocols/oscar/oscar.c:5890 -#: ../src/protocols/oscar/oscar.c:5946 ../src/protocols/oscar/oscar.c:6015 -#: ../src/protocols/oscar/peer.c:942 ../src/protocols/sametime/sametime.c:3375 -#: ../src/protocols/sametime/sametime.c:3460 -#: ../src/protocols/sametime/sametime.c:3630 -#: ../src/protocols/sametime/sametime.c:5319 -#: ../src/protocols/sametime/sametime.c:5408 -#: ../src/protocols/sametime/sametime.c:5532 ../src/protocols/silc/buddy.c:467 +#: ../src/protocols/oscar/oscar.c:5691 ../src/protocols/oscar/oscar.c:5743 +#: ../src/protocols/oscar/oscar.c:5871 ../src/protocols/oscar/oscar.c:5896 +#: ../src/protocols/oscar/oscar.c:5952 ../src/protocols/oscar/oscar.c:6021 +#: ../src/protocols/oscar/peer.c:942 ../src/protocols/sametime/sametime.c:3368 +#: ../src/protocols/sametime/sametime.c:3453 +#: ../src/protocols/sametime/sametime.c:3623 +#: ../src/protocols/sametime/sametime.c:5317 +#: ../src/protocols/sametime/sametime.c:5406 +#: ../src/protocols/sametime/sametime.c:5530 ../src/protocols/silc/buddy.c:467 #: ../src/protocols/silc/buddy.c:1078 ../src/protocols/silc/buddy.c:1183 #: ../src/protocols/silc/chat.c:597 ../src/protocols/silc/chat.c:726 #: ../src/protocols/silc/ops.c:1911 ../src/protocols/silc/silc.c:754 -#: ../src/protocols/silc/silc.c:959 ../src/protocols/yahoo/yahoo.c:3062 -#: ../src/protocols/yahoo/yahoo.c:3071 ../src/request.h:1344 +#: ../src/protocols/silc/silc.c:959 ../src/protocols/yahoo/yahoo.c:3060 +#: ../src/protocols/yahoo/yahoo.c:3069 ../src/request.h:1344 #: ../src/request.h:1354 msgid "Cancel" msgstr "Abbrechen" -#: ../src/account.c:994 ../src/connection.c:96 +#: ../src/account.c:989 ../src/connection.c:96 #, c-format msgid "Missing protocol plugin for %s" msgstr "Fehlendes Protokoll-Plugin für %s" -#: ../src/account.c:996 ../src/connection.c:99 ../src/gtkblist.c:3538 -#: ../src/gtkblist.c:3544 +#: ../src/account.c:991 ../src/connection.c:99 ../src/gtkblist.c:3554 msgid "Connection Error" msgstr "Verbindungsfehler" -#: ../src/account.c:1076 ../src/protocols/gg/gg.c:696 -#: ../src/protocols/jabber/jabber.c:1272 +#: ../src/account.c:1071 ../src/protocols/gg/gg.c:696 +#: ../src/protocols/jabber/jabber.c:1275 msgid "New passwords do not match." msgstr "Die neuen Passwörter stimmen nicht überein." -#: ../src/account.c:1085 +#: ../src/account.c:1080 msgid "Fill out all fields completely." msgstr "Bitte füllen Sie alle Felder aus." -#: ../src/account.c:1108 +#: ../src/account.c:1103 msgid "Original password" msgstr "Aktuelles Passwort" -#: ../src/account.c:1115 +#: ../src/account.c:1110 msgid "New password" msgstr "Neues Passwort" -#: ../src/account.c:1122 +#: ../src/account.c:1117 msgid "New password (again)" msgstr "Neues Passwort (nochmal)" -#: ../src/account.c:1128 +#: ../src/account.c:1123 #, c-format msgid "Change password for %s" msgstr "Ändern des Passworts für %s" -#: ../src/account.c:1136 +#: ../src/account.c:1131 msgid "Please enter your current password and your new password." msgstr "Bitte geben Sie Ihr aktuelles und Ihr neues Passwort ein." -#: ../src/account.c:1169 +#: ../src/account.c:1164 #, c-format msgid "Change user information for %s" msgstr "Ändere die Benutzerinformation für %s" -#: ../src/account.c:1172 ../src/protocols/toc/toc.c:1684 +#: ../src/account.c:1167 ../src/protocols/toc/toc.c:1684 msgid "Set User Info" msgstr "Benutzer-Info setzen" -#: ../src/account.c:1176 ../src/gtkdebug.c:684 ../src/gtkrequest.c:276 -#: ../src/protocols/jabber/buddy.c:575 +#: ../src/account.c:1171 ../src/gtkdebug.c:684 ../src/gtkrequest.c:276 +#: ../src/protocols/jabber/buddy.c:593 msgid "Save" msgstr "Speichern" -#: ../src/account.c:1679 ../src/gtkft.c:159 ../src/protocols/gg/gg.c:1002 -#: ../src/protocols/jabber/buddy.c:633 ../src/protocols/jabber/buddy.c:1098 -#: ../src/protocols/jabber/buddy.c:1115 ../src/protocols/novell/novell.c:2860 +#: ../src/account.c:1681 ../src/gtkft.c:159 ../src/protocols/gg/gg.c:1002 +#: ../src/protocols/jabber/buddy.c:636 ../src/protocols/jabber/buddy.c:1357 +#: ../src/protocols/jabber/buddy.c:1374 ../src/protocols/novell/novell.c:2858 msgid "Unknown" msgstr "Unbekannt" @@ -2040,49 +2039,49 @@ msgid "+++ %s signed off" msgstr "+++ %s hat sich abgemeldet" -#: ../src/conversation.c:161 +#: ../src/conversation.c:168 msgid "Unable to send message: The message is too large." msgstr "Nachricht kann nicht gesendet werden: Sie ist zu groß." -#: ../src/conversation.c:164 ../src/conversation.c:177 +#: ../src/conversation.c:171 ../src/conversation.c:184 #, c-format msgid "Unable to send message to %s." msgstr "Kann die Nachricht an %s nicht senden." -#: ../src/conversation.c:165 +#: ../src/conversation.c:172 msgid "The message is too large." msgstr "Die Nachricht ist zu lang." -#: ../src/conversation.c:174 +#: ../src/conversation.c:181 msgid "Unable to send message." msgstr "Nachricht kann nicht gesendet werden." -#: ../src/conversation.c:1515 +#: ../src/conversation.c:1510 #, c-format msgid "%s entered the room." msgstr "%s hat den Raum betreten." -#: ../src/conversation.c:1518 +#: ../src/conversation.c:1513 #, c-format msgid "%s [<I>%s</I>] entered the room." msgstr "%s [<I>%s</I>] hat den Raum betreten." -#: ../src/conversation.c:1625 +#: ../src/conversation.c:1620 #, c-format msgid "You are now known as %s" msgstr "Sie heißen jetzt %s" -#: ../src/conversation.c:1645 +#: ../src/conversation.c:1640 #, c-format msgid "%s is now known as %s" msgstr "%s heißt jetzt %s" -#: ../src/conversation.c:1718 +#: ../src/conversation.c:1713 #, c-format msgid "%s left the room." msgstr "%s hat den Raum verlassen." -#: ../src/conversation.c:1721 +#: ../src/conversation.c:1716 #, c-format msgid "%s left the room (%s)." msgstr "%s hat den Raum verlassen (%s)." @@ -2091,7 +2090,7 @@ msgid "No name" msgstr "Kein Name" -#: ../src/ft.c:189 ../src/protocols/msn/msn.c:412 +#: ../src/ft.c:189 ../src/protocols/msn/msn.c:410 #, c-format msgid "" "Error reading %s: \n" @@ -2158,60 +2157,60 @@ "Remote-Computer: %s\n" "Remote-Port: %d" -#: ../src/ft.c:391 +#: ../src/ft.c:392 #, c-format msgid "%s is offering to send file %s" msgstr "%s bietet an, die Datei %s zu senden" -#: ../src/ft.c:443 +#: ../src/ft.c:444 #, c-format msgid "%s is not a valid filename.\n" msgstr "%s ist kein gültiger Dateiname.\n" -#: ../src/ft.c:464 +#: ../src/ft.c:465 #, c-format msgid "Offering to send %s to %s" msgstr "Angebot zum Senden von %s an %s" -#: ../src/ft.c:476 +#: ../src/ft.c:477 #, c-format msgid "Starting transfer of %s from %s" msgstr "Starte die Dateiübertragung von %s von %s" -#: ../src/ft.c:630 +#: ../src/ft.c:631 #, c-format msgid "Transfer of file %s complete" msgstr "Übertragung der Datei %s ist komplett" -#: ../src/ft.c:633 +#: ../src/ft.c:634 msgid "File transfer complete" msgstr "Dateiübertragung ist komplett" -#: ../src/ft.c:1028 +#: ../src/ft.c:1031 #, c-format msgid "You canceled the transfer of %s" msgstr "Sie haben die Dateiübertragung von %s abgebrochen" -#: ../src/ft.c:1033 +#: ../src/ft.c:1036 msgid "File transfer cancelled" msgstr "Dateiübertragung wurde abgebrochen" -#: ../src/ft.c:1091 +#: ../src/ft.c:1094 #, c-format msgid "%s canceled the transfer of %s" msgstr "%s hat die Übertragung von %s abgebrochen" -#: ../src/ft.c:1096 +#: ../src/ft.c:1099 #, c-format msgid "%s canceled the file transfer" msgstr "%s hat die Datenübertragung abgebrochen" -#: ../src/ft.c:1153 +#: ../src/ft.c:1156 #, c-format msgid "File transfer to %s failed." msgstr "Dateiübertragung an %s wurde abgebrochen." -#: ../src/ft.c:1155 +#: ../src/ft.c:1158 #, c-format msgid "File transfer from %s failed." msgstr "Dateiübertragung von %s wurde abgebrochen." @@ -2240,7 +2239,7 @@ msgid "Password:" msgstr "Passwort:" -#: ../src/gtkaccount.c:863 ../src/gtkblist.c:4593 ../src/gtkblist.c:4959 +#: ../src/gtkaccount.c:863 ../src/gtkblist.c:4599 ../src/gtkblist.c:4965 msgid "Alias:" msgstr "Alias:" @@ -2333,7 +2332,7 @@ msgid "Add Account" msgstr "Konto hinzufügen" -#: ../src/gtkaccount.c:1749 ../src/gtkblist.c:3547 +#: ../src/gtkaccount.c:1749 ../src/gtkblist.c:3557 msgid "Modify Account" msgstr "Konto bearbeiten" @@ -2346,7 +2345,7 @@ msgstr "_Erweitert" #. Register button -#: ../src/gtkaccount.c:1797 ../src/protocols/jabber/jabber.c:823 +#: ../src/gtkaccount.c:1797 ../src/protocols/jabber/jabber.c:827 msgid "Register" msgstr "Anmelden" @@ -2355,12 +2354,12 @@ msgid "Are you sure you want to delete %s?" msgstr "Wollen Sie %s wirklich löschen?" -#: ../src/gtkaccount.c:2181 ../src/gtkpounce.c:1094 ../src/gtkrequest.c:273 +#: ../src/gtkaccount.c:2181 ../src/gtkpounce.c:1087 ../src/gtkrequest.c:273 #: ../src/gtksavedstatuses.c:295 msgid "Delete" msgstr "Löschen" -#: ../src/gtkaccount.c:2239 ../src/gtksavedstatuses.c:889 +#: ../src/gtkaccount.c:2239 ../src/gtksavedstatuses.c:893 #: ../src/protocols/oscar/oscar.c:2823 msgid "Screen Name" msgstr "Benutzername" @@ -2378,18 +2377,18 @@ msgid "Add buddy to your list?" msgstr "Benutzer zu Ihrer Buddy-Liste hinzufügen?" -#: ../src/gtkaccount.c:2648 ../src/gtkblist.c:5014 ../src/gtkconv.c:1623 +#: ../src/gtkaccount.c:2648 ../src/gtkblist.c:5020 ../src/gtkconv.c:1621 #: ../src/gtkrequest.c:274 ../src/protocols/gg/gg.c:870 #: ../src/protocols/oscar/oscar.c:2453 -#: ../src/protocols/sametime/sametime.c:5407 ../src/protocols/silc/chat.c:596 +#: ../src/protocols/sametime/sametime.c:5405 ../src/protocols/silc/chat.c:596 msgid "Add" msgstr "Hinzufügen" -#: ../src/gtkblist.c:664 +#: ../src/gtkblist.c:673 msgid "Join a Chat" msgstr "Chat betreten" -#: ../src/gtkblist.c:685 +#: ../src/gtkblist.c:694 msgid "" "Please enter the appropriate information about the chat you would like to " "join.\n" @@ -2397,87 +2396,87 @@ "Bitte geben Sie geeignete Informationen über den Chat ein, den Sie betreten " "wollen.\n" -#: ../src/gtkblist.c:696 ../src/gtkpounce.c:527 ../src/gtkroomlist.c:377 +#: ../src/gtkblist.c:705 ../src/gtkpounce.c:523 ../src/gtkroomlist.c:377 msgid "_Account:" msgstr "_Konto:" -#: ../src/gtkblist.c:940 +#: ../src/gtkblist.c:949 msgid "Get _Info" msgstr "_Info abrufen" -#: ../src/gtkblist.c:943 ../src/gtkstock.c:141 +#: ../src/gtkblist.c:952 ../src/gtkstock.c:141 msgid "I_M" msgstr "I_M" -#: ../src/gtkblist.c:949 +#: ../src/gtkblist.c:958 msgid "_Send File" msgstr "Datei ver_senden" -#: ../src/gtkblist.c:956 +#: ../src/gtkblist.c:965 msgid "Add Buddy _Pounce" msgstr "B_uddy-Alarm hinzufügen" -#: ../src/gtkblist.c:960 ../src/gtkblist.c:964 ../src/gtkblist.c:1063 -#: ../src/gtkblist.c:1086 +#: ../src/gtkblist.c:969 ../src/gtkblist.c:973 ../src/gtkblist.c:1072 +#: ../src/gtkblist.c:1095 msgid "View _Log" msgstr "Mi_tschnitt anzeigen" -#: ../src/gtkblist.c:975 +#: ../src/gtkblist.c:984 msgid "Alias..." msgstr "Alias..." -#: ../src/gtkblist.c:978 ../src/gtkconv.c:1620 ../src/gtkrequest.c:275 +#: ../src/gtkblist.c:987 ../src/gtkconv.c:1618 ../src/gtkrequest.c:275 msgid "Remove" msgstr "Entfernen" -#: ../src/gtkblist.c:984 ../src/gtkblist.c:1071 ../src/gtkblist.c:1092 +#: ../src/gtkblist.c:993 ../src/gtkblist.c:1080 ../src/gtkblist.c:1101 msgid "_Alias..." msgstr "_Alias..." -#: ../src/gtkblist.c:986 ../src/gtkblist.c:1073 ../src/gtkblist.c:1094 +#: ../src/gtkblist.c:995 ../src/gtkblist.c:1082 ../src/gtkblist.c:1103 msgid "_Remove" msgstr "_Entfernen" -#: ../src/gtkblist.c:1034 +#: ../src/gtkblist.c:1043 msgid "Add a _Buddy" msgstr "Buddy _hinzufügen" -#: ../src/gtkblist.c:1036 +#: ../src/gtkblist.c:1045 msgid "Add a C_hat" msgstr "C_hat hinzufügen" -#: ../src/gtkblist.c:1039 +#: ../src/gtkblist.c:1048 msgid "_Delete Group" msgstr "Gruppe _löschen" -#: ../src/gtkblist.c:1041 +#: ../src/gtkblist.c:1050 msgid "_Rename" msgstr "_Umbenennen" #. join button -#: ../src/gtkblist.c:1059 ../src/gtkroomlist.c:285 ../src/gtkroomlist.c:441 +#: ../src/gtkblist.c:1068 ../src/gtkroomlist.c:285 ../src/gtkroomlist.c:441 #: ../src/gtkstock.c:139 msgid "_Join" msgstr "_Betreten" -#: ../src/gtkblist.c:1061 +#: ../src/gtkblist.c:1070 msgid "Auto-Join" msgstr "Automatisch beitreten" -#: ../src/gtkblist.c:1099 ../src/gtkblist.c:1122 +#: ../src/gtkblist.c:1108 ../src/gtkblist.c:1131 msgid "_Collapse" msgstr "_Zusammenklappen" -#: ../src/gtkblist.c:1127 +#: ../src/gtkblist.c:1136 msgid "_Expand" msgstr "A_usklappen" -#: ../src/gtkblist.c:1373 ../src/gtkblist.c:1385 ../src/gtkblist.c:3808 -#: ../src/gtkblist.c:3818 +#: ../src/gtkblist.c:1382 ../src/gtkblist.c:1394 ../src/gtkblist.c:3817 +#: ../src/gtkblist.c:3827 msgid "/Tools/Mute Sounds" msgstr "/Werkzeuge/Stummschalten" -#: ../src/gtkblist.c:1845 ../src/gtkconv.c:4195 ../src/gtkpounce.c:426 +#: ../src/gtkblist.c:1859 ../src/gtkconv.c:4235 ../src/gtkpounce.c:422 msgid "" "You are not currently signed on with an account that can add that buddy." msgstr "" @@ -2485,126 +2484,126 @@ "kann, um diesen Buddy hinzuzufügen." #. Buddies menu -#: ../src/gtkblist.c:2419 +#: ../src/gtkblist.c:2433 msgid "/_Buddies" msgstr "/_Buddys" -#: ../src/gtkblist.c:2420 +#: ../src/gtkblist.c:2434 msgid "/Buddies/New Instant _Message..." msgstr "/Buddys/_Neue Sofortnachricht..." -#: ../src/gtkblist.c:2421 +#: ../src/gtkblist.c:2435 msgid "/Buddies/Join a _Chat..." msgstr "/Buddys/Einen _Chat betreten..." -#: ../src/gtkblist.c:2422 +#: ../src/gtkblist.c:2436 msgid "/Buddies/Get User _Info..." msgstr "/Buddys/B_enutzer-Info abrufen..." -#: ../src/gtkblist.c:2423 +#: ../src/gtkblist.c:2437 msgid "/Buddies/View User _Log..." msgstr "/Buddys/Benutzer-_Mitschnitt ansehen..." -#: ../src/gtkblist.c:2425 +#: ../src/gtkblist.c:2439 msgid "/Buddies/Show _Offline Buddies" msgstr "/Buddys/Zeige _offline Buddys" -#: ../src/gtkblist.c:2426 +#: ../src/gtkblist.c:2440 msgid "/Buddies/Show _Empty Groups" msgstr "/Buddys/Zeige _leere Gruppen" -#: ../src/gtkblist.c:2427 +#: ../src/gtkblist.c:2441 msgid "/Buddies/Show Buddy _Details" msgstr "/Buddys/Zeige Buddy-_Details" -#: ../src/gtkblist.c:2428 +#: ../src/gtkblist.c:2442 msgid "/Buddies/Show Idle _Times" msgstr "/Buddys/Zeige Untätigkeitszei_ten" -#: ../src/gtkblist.c:2429 +#: ../src/gtkblist.c:2443 msgid "/Buddies/_Sort Buddies" msgstr "/Buddys/Buddys _sortieren" -#: ../src/gtkblist.c:2431 +#: ../src/gtkblist.c:2445 msgid "/Buddies/_Add Buddy..." msgstr "/Buddys/B_uddy hinzufügen..." -#: ../src/gtkblist.c:2432 +#: ../src/gtkblist.c:2446 msgid "/Buddies/Add C_hat..." msgstr "/Buddys/C_hat hinzufügen..." -#: ../src/gtkblist.c:2433 +#: ../src/gtkblist.c:2447 msgid "/Buddies/Add _Group..." msgstr "/Buddys/_Gruppe hinzufügen..." -#: ../src/gtkblist.c:2435 +#: ../src/gtkblist.c:2449 msgid "/Buddies/_Quit" msgstr "/Buddys/_Beenden" #. Accounts menu -#: ../src/gtkblist.c:2438 +#: ../src/gtkblist.c:2452 msgid "/_Accounts" msgstr "/_Konten" -#: ../src/gtkblist.c:2439 ../src/gtkblist.c:5591 +#: ../src/gtkblist.c:2453 ../src/gtkblist.c:5597 msgid "/Accounts/Add\\/Edit" msgstr "/Konten/Hinzufügen\\/Ändern" #. Tools -#: ../src/gtkblist.c:2442 +#: ../src/gtkblist.c:2456 msgid "/_Tools" msgstr "/_Werkzeuge" -#: ../src/gtkblist.c:2443 +#: ../src/gtkblist.c:2457 msgid "/Tools/Buddy _Pounces" msgstr "/Werkzeuge/Buddy-_Alarm" -#: ../src/gtkblist.c:2444 +#: ../src/gtkblist.c:2458 msgid "/Tools/Plu_gins" msgstr "/Werkzeuge/Plu_gins" -#: ../src/gtkblist.c:2445 +#: ../src/gtkblist.c:2459 msgid "/Tools/Pr_eferences" msgstr "/Werkzeuge/_Einstellungen" -#: ../src/gtkblist.c:2446 +#: ../src/gtkblist.c:2460 msgid "/Tools/Pr_ivacy" msgstr "/Werkzeuge/Pri_vatsphäre" -#: ../src/gtkblist.c:2448 +#: ../src/gtkblist.c:2462 msgid "/Tools/_File Transfers" msgstr "/Werkzeuge/_Dateiübertragungen" -#: ../src/gtkblist.c:2449 +#: ../src/gtkblist.c:2463 msgid "/Tools/R_oom List" msgstr "/Werkzeuge/_Raumliste" -#: ../src/gtkblist.c:2450 +#: ../src/gtkblist.c:2464 msgid "/Tools/System _Log" msgstr "/Werkzeuge/_System-Mitschnitt" -#: ../src/gtkblist.c:2452 +#: ../src/gtkblist.c:2466 msgid "/Tools/Mute _Sounds" msgstr "/Werkzeuge/_Stummschalten" #. Help -#: ../src/gtkblist.c:2455 +#: ../src/gtkblist.c:2469 msgid "/_Help" msgstr "/_Hilfe" -#: ../src/gtkblist.c:2456 +#: ../src/gtkblist.c:2470 msgid "/Help/Online _Help" msgstr "/Hilfe/Online-_Hilfe" -#: ../src/gtkblist.c:2457 +#: ../src/gtkblist.c:2471 msgid "/Help/_Debug Window" msgstr "/Hilfe/_Debug-Fenster" -#: ../src/gtkblist.c:2458 +#: ../src/gtkblist.c:2472 msgid "/Help/_About" msgstr "/Hilfe/I_nfo" -#: ../src/gtkblist.c:2490 ../src/gtkblist.c:2559 +#: ../src/gtkblist.c:2504 ../src/gtkblist.c:2573 #, c-format msgid "" "\n" @@ -2613,7 +2612,7 @@ "\n" "<b>Konto:</b> %s" -#: ../src/gtkblist.c:2571 +#: ../src/gtkblist.c:2585 #, c-format msgid "" "\n" @@ -2622,7 +2621,7 @@ "\n" "<b>Buddy-Alias:</b> %s" -#: ../src/gtkblist.c:2583 +#: ../src/gtkblist.c:2597 #, c-format msgid "" "\n" @@ -2631,7 +2630,7 @@ "\n" "<b>Spitzname:</b> %s" -#: ../src/gtkblist.c:2592 +#: ../src/gtkblist.c:2606 #, c-format msgid "" "\n" @@ -2640,7 +2639,7 @@ "\n" "<b>Angemeldet:</b> %s" -#: ../src/gtkblist.c:2603 +#: ../src/gtkblist.c:2617 #, c-format msgid "" "\n" @@ -2649,7 +2648,7 @@ "\n" "<b>Untätig:</b> %s" -#: ../src/gtkblist.c:2638 +#: ../src/gtkblist.c:2652 #, c-format msgid "" "\n" @@ -2658,7 +2657,7 @@ "\n" "<b>Zuletzt gesehen:</b> vor %s" -#: ../src/gtkblist.c:2647 +#: ../src/gtkblist.c:2661 msgid "" "\n" "<b>Status:</b> Offline" @@ -2666,7 +2665,7 @@ "\n" "<b>Status:</b> Offline" -#: ../src/gtkblist.c:2658 +#: ../src/gtkblist.c:2672 msgid "" "\n" "<b>Description:</b> Spooky" @@ -2674,7 +2673,7 @@ "\n" "<b>Beschreibung:</b> Spooky" -#: ../src/gtkblist.c:2660 +#: ../src/gtkblist.c:2674 msgid "" "\n" "<b>Status:</b> Awesome" @@ -2682,7 +2681,7 @@ "\n" "<b>Status:</b> großartig" -#: ../src/gtkblist.c:2662 +#: ../src/gtkblist.c:2676 msgid "" "\n" "<b>Status:</b> Rockin'" @@ -2690,119 +2689,120 @@ "\n" "<b>Status:</b> Rockin'" -#: ../src/gtkblist.c:2951 +#: ../src/gtkblist.c:2967 #, c-format msgid "Idle %dh %02dm" msgstr "Untätig %dh %02dm" -#: ../src/gtkblist.c:2953 +#: ../src/gtkblist.c:2969 #, c-format msgid "Idle %dm" msgstr "Untätig %dm" #. Idle stuff -#: ../src/gtkblist.c:2956 ../src/gtkprefs.c:1760 -#: ../src/protocols/bonjour/bonjour.c:333 ../src/protocols/msn/msn.c:552 -#: ../src/protocols/msn/state.c:32 ../src/protocols/novell/novell.c:2854 -#: ../src/protocols/oscar/oscar.c:2844 ../src/protocols/yahoo/yahoo.c:2729 +#: ../src/gtkblist.c:2972 ../src/gtkprefs.c:1760 +#: ../src/protocols/bonjour/bonjour.c:333 ../src/protocols/jabber/buddy.c:641 +#: ../src/protocols/jabber/buddy.c:672 ../src/protocols/msn/msn.c:550 +#: ../src/protocols/msn/state.c:32 ../src/protocols/novell/novell.c:2852 +#: ../src/protocols/oscar/oscar.c:2844 ../src/protocols/yahoo/yahoo.c:2727 #: ../src/protocols/yahoo/yahoo_profile.c:691 msgid "Idle" msgstr "Untätig" -#: ../src/gtkblist.c:3088 +#: ../src/gtkblist.c:3104 msgid "/Buddies/New Instant Message..." msgstr "/Buddys/_Neue Sofortnachricht..." -#: ../src/gtkblist.c:3089 ../src/gtkblist.c:3122 +#: ../src/gtkblist.c:3105 ../src/gtkblist.c:3138 msgid "/Buddies/Join a Chat..." msgstr "/Buddys/Chat betreten..." -#: ../src/gtkblist.c:3090 +#: ../src/gtkblist.c:3106 msgid "/Buddies/Get User Info..." msgstr "/Buddys/B_enutzer-Info abrufen..." -#: ../src/gtkblist.c:3091 +#: ../src/gtkblist.c:3107 msgid "/Buddies/Add Buddy..." msgstr "/Buddys/B_uddy hinzufügen..." -#: ../src/gtkblist.c:3092 ../src/gtkblist.c:3125 +#: ../src/gtkblist.c:3108 ../src/gtkblist.c:3141 msgid "/Buddies/Add Chat..." msgstr "/Buddys/C_hat hinzufügen..." -#: ../src/gtkblist.c:3093 +#: ../src/gtkblist.c:3109 msgid "/Buddies/Add Group..." msgstr "/Buddys/Gruppe hinzufügen..." -#: ../src/gtkblist.c:3128 +#: ../src/gtkblist.c:3144 msgid "/Tools/Buddy Pounces" msgstr "/Werkzeuge/Buddy-Alarm" -#: ../src/gtkblist.c:3131 +#: ../src/gtkblist.c:3147 msgid "/Tools/Privacy" msgstr "/Werkzeuge/Privatsphäre" -#: ../src/gtkblist.c:3134 +#: ../src/gtkblist.c:3150 msgid "/Tools/Room List" msgstr "/Werkzeuge/Raumliste" -#: ../src/gtkblist.c:3328 +#: ../src/gtkblist.c:3344 msgid "Manually" msgstr "Manuell" -#: ../src/gtkblist.c:3330 +#: ../src/gtkblist.c:3346 msgid "Alphabetically" msgstr "Alphabetisch" -#: ../src/gtkblist.c:3331 +#: ../src/gtkblist.c:3347 msgid "By status" msgstr "Nach Status" -#: ../src/gtkblist.c:3332 +#: ../src/gtkblist.c:3348 msgid "By log size" msgstr "Nach Größe der Logs" -#: ../src/gtkblist.c:3532 ../src/gtkconn.c:196 +#: ../src/gtkblist.c:3549 ../src/gtkconn.c:184 #, c-format msgid "%s disconnected" msgstr "%s abgemeldet" -#: ../src/gtkblist.c:3548 ../src/protocols/sametime/sametime.c:3629 +#: ../src/gtkblist.c:3558 ../src/protocols/sametime/sametime.c:3622 msgid "Connect" msgstr "Verbinden" -#: ../src/gtkblist.c:3548 +#: ../src/gtkblist.c:3558 msgid "Re-enable Account" msgstr "Konten reaktivieren" -#: ../src/gtkblist.c:3570 +#: ../src/gtkblist.c:3579 #, c-format msgid "<span color=\"red\">%s disconnected: %s</span>" msgstr "<span color=\"red\">%s abgemeldet: %s</span>" -#: ../src/gtkblist.c:3697 +#: ../src/gtkblist.c:3706 msgid "/Accounts" msgstr "/Konten" #. set the Show Offline Buddies option. must be done #. * after the treeview or faceprint gets mad. -Robot101 #. -#: ../src/gtkblist.c:3802 +#: ../src/gtkblist.c:3811 msgid "/Buddies/Show Offline Buddies" msgstr "/Buddys/Zeige Offline Buddys" -#: ../src/gtkblist.c:3805 +#: ../src/gtkblist.c:3814 msgid "/Buddies/Show Empty Groups" msgstr "/Buddys/Zeige leere Gruppen" -#: ../src/gtkblist.c:3811 +#: ../src/gtkblist.c:3820 msgid "/Buddies/Show Buddy Details" msgstr "/Buddys/Zeige Buddy-Details" -#: ../src/gtkblist.c:3814 +#: ../src/gtkblist.c:3823 msgid "/Buddies/Show Idle Times" msgstr "/Buddys/Zeige Untätigkeitszeiten" -#: ../src/gtkblist.c:4550 +#: ../src/gtkblist.c:4556 msgid "" "Please enter the screen name of the person you would like to add to your " "buddy list. You may optionally enter an alias, or nickname, for the buddy. " @@ -2814,25 +2814,25 @@ "immer es möglich ist.\n" #. Set up stuff for the account box -#: ../src/gtkblist.c:4620 ../src/gtkblist.c:4939 +#: ../src/gtkblist.c:4626 ../src/gtkblist.c:4945 msgid "Account:" msgstr "Konto:" -#: ../src/gtkblist.c:4872 +#: ../src/gtkblist.c:4878 msgid "This protocol does not support chat rooms." msgstr "Dieses Protokoll unterstützt keine Chaträume." -#: ../src/gtkblist.c:4888 +#: ../src/gtkblist.c:4894 msgid "" "You are not currently signed on with any protocols that have the ability to " "chat." msgstr "Sie sind derzeit mit keinem Chat-fähigen Protokoll angemeldet." -#: ../src/gtkblist.c:4905 +#: ../src/gtkblist.c:4911 msgid "Add Chat" msgstr "Chat hinzufügen" -#: ../src/gtkblist.c:4929 +#: ../src/gtkblist.c:4935 msgid "" "Please enter an alias, and the appropriate information about the chat you " "would like to add to your buddy list.\n" @@ -2840,40 +2840,40 @@ "Bitte geben Sie einen Alias und geeignete Informationen über den Chat ein, " "den Sie in Ihre Buddy-Liste aufnehmen wollen.\n" -#: ../src/gtkblist.c:5011 ../src/protocols/sametime/sametime.c:5318 -#: ../src/protocols/sametime/sametime.c:5405 +#: ../src/gtkblist.c:5017 ../src/protocols/sametime/sametime.c:5316 +#: ../src/protocols/sametime/sametime.c:5403 msgid "Add Group" msgstr "Gruppe hinzufügen" -#: ../src/gtkblist.c:5012 +#: ../src/gtkblist.c:5018 msgid "Please enter the name of the group to be added." msgstr "Bitte geben Sie den Namen der Gruppe ein, die hinzugefügt werden soll." -#: ../src/gtkblist.c:5631 +#: ../src/gtkblist.c:5637 msgid "_Edit Account" msgstr "Konto _bearbeiten" -#: ../src/gtkblist.c:5664 ../src/gtkblist.c:5670 +#: ../src/gtkblist.c:5670 ../src/gtkblist.c:5676 ../src/gtkconv.c:2747 msgid "No actions available" msgstr "Keine Aktionen verfügbar" -#: ../src/gtkblist.c:5678 +#: ../src/gtkblist.c:5684 msgid "_Disable" msgstr "_Deaktivieren" -#: ../src/gtkblist.c:5690 +#: ../src/gtkblist.c:5696 msgid "Enable Account" msgstr "Konten aktivieren" -#: ../src/gtkblist.c:5743 +#: ../src/gtkblist.c:5749 msgid "/Tools" msgstr "/Werkzeuge" -#: ../src/gtkblist.c:5829 +#: ../src/gtkblist.c:5835 msgid "/Buddies/Sort Buddies" msgstr "/Buddys/Buddys _sortieren" -#: ../src/gtkconn.c:197 +#: ../src/gtkconn.c:185 #, c-format msgid "" "%s was disconnected due to an error: %s\n" @@ -2901,48 +2901,48 @@ "zu erhalten.\n" "Die folgenden Kommandos sind in diesem Kontext verfügbar:\n" -#: ../src/gtkconv.c:482 +#: ../src/gtkconv.c:478 msgid "No such command." msgstr "Es gibt kein solches Kommando." -#: ../src/gtkconv.c:489 +#: ../src/gtkconv.c:485 msgid "Syntax Error: You typed the wrong number of arguments to that command." msgstr "" "Syntaxfehler: Sie übergaben dem Kommando eine falsche Anzahl von Argumenten." -#: ../src/gtkconv.c:494 +#: ../src/gtkconv.c:490 msgid "Your command failed for an unknown reason." msgstr "Ihre Kommando scheiterte aus einem unbekannten Grund." -#: ../src/gtkconv.c:501 +#: ../src/gtkconv.c:497 msgid "That command only works in chats, not IMs." msgstr "Dieses Kommando funktioniert nur in Chats, nicht bei IMs." -#: ../src/gtkconv.c:504 +#: ../src/gtkconv.c:500 msgid "That command only works in IMs, not chats." msgstr "Dieses Kommando funktioniert nur bei IMs, nicht bei Chats." -#: ../src/gtkconv.c:508 +#: ../src/gtkconv.c:504 msgid "That command doesn't work on this protocol." msgstr "Dieses Kommando funktioniert nicht in diesem Protokoll." -#: ../src/gtkconv.c:742 ../src/gtkconv.c:768 +#: ../src/gtkconv.c:739 ../src/gtkconv.c:765 msgid "That buddy is not on the same protocol as this chat." msgstr "Der Buddy hat nicht das gleiche Protokoll wie dieser Chat." -#: ../src/gtkconv.c:762 +#: ../src/gtkconv.c:759 msgid "" "You are not currently signed on with an account that can invite that buddy." msgstr "" "Sie sind im Moment nicht mit einem Konto angemeldet, welches benutzt werden " "kann, um diesen Buddy einzuladen." -#: ../src/gtkconv.c:815 +#: ../src/gtkconv.c:812 msgid "Invite Buddy Into Chat Room" msgstr "Buddy in einen Chatraum einladen" #. Put our happy label in it. -#: ../src/gtkconv.c:845 +#: ../src/gtkconv.c:842 msgid "" "Please enter the name of the user you wish to invite, along with an optional " "invite message." @@ -2950,318 +2950,330 @@ "Bitte geben Sie den Benutzernamen der Person ein, die Sie einladen möchten " "zusammen mit einer optionalen Einladungsnachricht." -#: ../src/gtkconv.c:866 +#: ../src/gtkconv.c:863 msgid "_Buddy:" msgstr "_Buddy:" -#: ../src/gtkconv.c:886 ../src/gtksavedstatuses.c:1107 -#: ../src/gtksavedstatuses.c:1443 +#: ../src/gtkconv.c:883 ../src/gtksavedstatuses.c:1111 +#: ../src/gtksavedstatuses.c:1447 msgid "_Message:" msgstr "_Nachricht:" -#: ../src/gtkconv.c:943 ../src/gtkconv.c:2378 ../src/gtkdebug.c:217 +#: ../src/gtkconv.c:940 ../src/gtkconv.c:2364 ../src/gtkdebug.c:217 #: ../src/gtkft.c:490 msgid "Unable to open file." msgstr "Konnte die Datei nicht öffnen." -#: ../src/gtkconv.c:949 +#: ../src/gtkconv.c:946 #, c-format msgid "<h1>Conversation with %s</h1>\n" msgstr "<h1>Unterhaltung mit %s</h1>\n" -#: ../src/gtkconv.c:973 +#: ../src/gtkconv.c:970 msgid "Save Conversation" msgstr "Unterhaltung speichern" -#: ../src/gtkconv.c:1094 ../src/gtkdebug.c:165 ../src/gtkdebug.c:678 +#: ../src/gtkconv.c:1091 ../src/gtkdebug.c:165 ../src/gtkdebug.c:678 msgid "Find" msgstr "Suchen" -#: ../src/gtkconv.c:1120 ../src/gtkdebug.c:193 +#: ../src/gtkconv.c:1117 ../src/gtkdebug.c:193 msgid "_Search for:" msgstr "_Suche nach:" -#: ../src/gtkconv.c:1291 +#: ../src/gtkconv.c:1288 msgid "Logging started. Future messages in this conversation will be logged." msgstr "" "Mitschnitt gestartet. Zukünftige Nachrichten dieser Unterhaltung werden " "mitgeschnitten." -#: ../src/gtkconv.c:1299 +#: ../src/gtkconv.c:1296 msgid "" "Logging stopped. Future messages in this conversation will not be logged." msgstr "" "Mitschnitt angehalten. Zukünftige Nachrichten dieser Unterhaltung werden " "nicht mitgeschnitten." -#: ../src/gtkconv.c:1560 +#: ../src/gtkconv.c:1558 msgid "IM" msgstr "Nachricht" -#: ../src/gtkconv.c:1571 ../src/protocols/oscar/oscar.c:640 +#: ../src/gtkconv.c:1569 ../src/protocols/oscar/oscar.c:640 msgid "Send File" msgstr "Datei versenden" -#: ../src/gtkconv.c:1586 +#: ../src/gtkconv.c:1584 msgid "Un-Ignore" msgstr "Nicht Ignorieren" -#: ../src/gtkconv.c:1589 +#: ../src/gtkconv.c:1587 msgid "Ignore" msgstr "Ignorieren" -#: ../src/gtkconv.c:1599 +#: ../src/gtkconv.c:1597 msgid "Info" msgstr "Info" -#: ../src/gtkconv.c:1609 +#: ../src/gtkconv.c:1607 msgid "Get Away Message" msgstr "Neue Abwesenheitsnachricht abholen" -#: ../src/gtkconv.c:1632 +#: ../src/gtkconv.c:1630 msgid "Last said" msgstr "Zuletzt gesagt" -#: ../src/gtkconv.c:2386 +#: ../src/gtkconv.c:2372 msgid "Unable to save icon file to disk." msgstr "Kann Icon-Datei nicht auf die Festplatte speichern." -#: ../src/gtkconv.c:2410 +#: ../src/gtkconv.c:2396 msgid "Save Icon" msgstr "Icon speichern" -#: ../src/gtkconv.c:2459 +#: ../src/gtkconv.c:2445 msgid "Animate" msgstr "Animieren" -#: ../src/gtkconv.c:2464 +#: ../src/gtkconv.c:2450 msgid "Hide Icon" msgstr "Icon verbergen" -#: ../src/gtkconv.c:2470 +#: ../src/gtkconv.c:2456 msgid "Save Icon As..." msgstr "Icon speichern unter..." #. Conversation menu -#: ../src/gtkconv.c:2611 +#: ../src/gtkconv.c:2596 msgid "/_Conversation" msgstr "/_Unterhaltung" -#: ../src/gtkconv.c:2613 +#: ../src/gtkconv.c:2598 msgid "/Conversation/New Instant _Message..." msgstr "/Unterhaltung/_Neue Sofortnachricht..." -#: ../src/gtkconv.c:2618 +#: ../src/gtkconv.c:2603 msgid "/Conversation/_Find..." msgstr "/Unterhaltung/_Finden..." -#: ../src/gtkconv.c:2620 +#: ../src/gtkconv.c:2605 msgid "/Conversation/View _Log" msgstr "/Unterhaltung/Betrachte _Mitschnitt" -#: ../src/gtkconv.c:2621 +#: ../src/gtkconv.c:2606 msgid "/Conversation/_Save As..." msgstr "/Unterhaltung/_Speichern als..." -#: ../src/gtkconv.c:2623 +#: ../src/gtkconv.c:2608 msgid "/Conversation/Clea_r Scrollback" msgstr "/Unterhaltung/_Leeren" -#: ../src/gtkconv.c:2627 +#: ../src/gtkconv.c:2612 msgid "/Conversation/Se_nd File..." msgstr "/Unterhaltung/Datei _senden..." -#: ../src/gtkconv.c:2628 +#: ../src/gtkconv.c:2613 msgid "/Conversation/Add Buddy _Pounce..." msgstr "/Unterhaltung/Buddy-Alar_m hinzufügen..." -#: ../src/gtkconv.c:2630 +#: ../src/gtkconv.c:2615 msgid "/Conversation/_Get Info" msgstr "/Unterhaltung/B_enutzer-Info abrufen" -#: ../src/gtkconv.c:2632 +#: ../src/gtkconv.c:2617 msgid "/Conversation/In_vite..." msgstr "/Unterhaltung/_Einladen..." -#: ../src/gtkconv.c:2637 +#: ../src/gtkconv.c:2619 +msgid "/Conversation/M_ore" +msgstr "/Unterhaltung/M_ehr" + +#: ../src/gtkconv.c:2623 msgid "/Conversation/Al_ias..." msgstr "/Unterhaltung/Al_ias..." -#: ../src/gtkconv.c:2639 +#: ../src/gtkconv.c:2625 msgid "/Conversation/_Block..." msgstr "/Unterhaltung/_Blockieren..." -#: ../src/gtkconv.c:2641 +#: ../src/gtkconv.c:2627 msgid "/Conversation/_Add..." msgstr "/Unterhaltung/_Hinzufügen..." -#: ../src/gtkconv.c:2643 +#: ../src/gtkconv.c:2629 msgid "/Conversation/_Remove..." msgstr "/Unterhaltung/_Entfernen..." -#: ../src/gtkconv.c:2648 +#: ../src/gtkconv.c:2634 msgid "/Conversation/Insert Lin_k..." msgstr "/Unterhaltung/Füge Lin_k ein..." -#: ../src/gtkconv.c:2650 +#: ../src/gtkconv.c:2636 msgid "/Conversation/Insert Imag_e..." msgstr "/Unterhaltung/Füge Bil_d ein ..." -#: ../src/gtkconv.c:2655 +#: ../src/gtkconv.c:2641 msgid "/Conversation/_Close" msgstr "/Unterhaltung/S_chließen" #. Options -#: ../src/gtkconv.c:2659 +#: ../src/gtkconv.c:2645 msgid "/_Options" msgstr "/_Optionen" -#: ../src/gtkconv.c:2660 +#: ../src/gtkconv.c:2646 msgid "/Options/Enable _Logging" msgstr "/Optionen/Schalte _Mitschnitt ein" -#: ../src/gtkconv.c:2661 +#: ../src/gtkconv.c:2647 msgid "/Options/Enable _Sounds" msgstr "/Optionen/Schalte _Klänge ein" -#: ../src/gtkconv.c:2662 +#: ../src/gtkconv.c:2648 msgid "/Options/Show Buddy _Icon" msgstr "/Optionen/Buddy-_Icon anzeigen" -#: ../src/gtkconv.c:2664 +#: ../src/gtkconv.c:2650 msgid "/Options/Show Formatting _Toolbars" msgstr "/Optionen/Zeige _Werkzeugleisten für Formatierung" -#: ../src/gtkconv.c:2665 +#: ../src/gtkconv.c:2651 msgid "/Options/Show Ti_mestamps" msgstr "/Optionen/Zeige Zeitste_mpel" -#: ../src/gtkconv.c:2757 +#: ../src/gtkconv.c:2726 +msgid "/Conversation/More" +msgstr "/Unterhaltung/Mehr" + +#: ../src/gtkconv.c:2764 ../src/gtkconv.c:2791 +msgid "/Conversation" +msgstr "/Unterhaltung" + +#: ../src/gtkconv.c:2801 msgid "/Conversation/View Log" msgstr "/Unterhaltung/Betrachte Mitschnitt" -#: ../src/gtkconv.c:2763 +#: ../src/gtkconv.c:2807 msgid "/Conversation/Send File..." msgstr "/Unterhaltung/Datei senden ..." -#: ../src/gtkconv.c:2767 +#: ../src/gtkconv.c:2811 msgid "/Conversation/Add Buddy Pounce..." msgstr "/Unterhaltung/Buddy-Alarm hinzufügen..." -#: ../src/gtkconv.c:2773 +#: ../src/gtkconv.c:2817 msgid "/Conversation/Get Info" msgstr "/Unterhaltung/Info abrufen" -#: ../src/gtkconv.c:2777 +#: ../src/gtkconv.c:2821 msgid "/Conversation/Invite..." msgstr "/Unterhaltung/Einladen ..." -#: ../src/gtkconv.c:2783 +#: ../src/gtkconv.c:2827 msgid "/Conversation/Alias..." msgstr "/Unterhaltung/Alias..." -#: ../src/gtkconv.c:2787 +#: ../src/gtkconv.c:2831 msgid "/Conversation/Block..." msgstr "/Unterhaltung/Blockieren..." -#: ../src/gtkconv.c:2791 +#: ../src/gtkconv.c:2835 msgid "/Conversation/Add..." msgstr "/Unterhaltung/Hinzufügen..." -#: ../src/gtkconv.c:2795 +#: ../src/gtkconv.c:2839 msgid "/Conversation/Remove..." msgstr "/Unterhaltung/Entfernen..." -#: ../src/gtkconv.c:2801 +#: ../src/gtkconv.c:2845 msgid "/Conversation/Insert Link..." msgstr "/Unterhaltung/Füge Link ein..." -#: ../src/gtkconv.c:2805 +#: ../src/gtkconv.c:2849 msgid "/Conversation/Insert Image..." msgstr "/Unterhaltung/Füge Bild ein ..." -#: ../src/gtkconv.c:2811 +#: ../src/gtkconv.c:2855 msgid "/Options/Enable Logging" msgstr "/Optionen/Schalte Mitschnitt ein" -#: ../src/gtkconv.c:2814 +#: ../src/gtkconv.c:2858 msgid "/Options/Enable Sounds" msgstr "/Optionen/Schalte Klänge ein" -#: ../src/gtkconv.c:2827 +#: ../src/gtkconv.c:2871 msgid "/Options/Show Formatting Toolbars" msgstr "/Optionen/Zeige Werkzeugleisten für Formatierung" -#: ../src/gtkconv.c:2830 +#: ../src/gtkconv.c:2874 msgid "/Options/Show Timestamps" msgstr "/Optionen/Zeige Zeitstempel" -#: ../src/gtkconv.c:2833 +#: ../src/gtkconv.c:2877 msgid "/Options/Show Buddy Icon" msgstr "/Optionen/Zeige Buddy-Icon" -#: ../src/gtkconv.c:2913 +#: ../src/gtkconv.c:2953 msgid "User is typing..." msgstr "Benutzer tippt gerade..." -#: ../src/gtkconv.c:2916 +#: ../src/gtkconv.c:2956 msgid "User has typed something and stopped" msgstr "Benutzer hat etwas getippt und wartet nun" #. Build the Send To menu -#: ../src/gtkconv.c:3099 +#: ../src/gtkconv.c:3139 msgid "_Send To" msgstr "_Senden an" -#: ../src/gtkconv.c:3751 +#: ../src/gtkconv.c:3791 msgid "_Send" msgstr "Ab_schicken" -#: ../src/gtkconv.c:3806 ../src/protocols/sametime/sametime.c:3571 +#: ../src/gtkconv.c:3846 ../src/protocols/sametime/sametime.c:3564 msgid "Topic:" msgstr "Thema:" #. Setup the label telling how many people are in the room. -#: ../src/gtkconv.c:3858 +#: ../src/gtkconv.c:3898 msgid "0 people in room" msgstr "0 Personen im Raum" -#: ../src/gtkconv.c:3937 +#: ../src/gtkconv.c:3977 msgid "IM the user" msgstr "Benutzer eine IM schicken" -#: ../src/gtkconv.c:3950 +#: ../src/gtkconv.c:3990 msgid "Ignore the user" msgstr "Benutzer ignorieren" -#: ../src/gtkconv.c:3962 +#: ../src/gtkconv.c:4002 msgid "Get the user's information" msgstr "Information zum Benutzer abrufen" -#: ../src/gtkconv.c:4944 ../src/gtkconv.c:5053 +#: ../src/gtkconv.c:4993 ../src/gtkconv.c:5102 #, c-format msgid "%d person in room" msgid_plural "%d people in room" msgstr[0] "%d Person im Raum" msgstr[1] "%d Personen im Raum" -#: ../src/gtkconv.c:5610 ../src/gtkstatusbox.c:366 +#: ../src/gtkconv.c:5659 ../src/gtkstatusbox.c:366 msgid "Typing" msgstr "Tippt gerade" -#: ../src/gtkconv.c:5616 +#: ../src/gtkconv.c:5665 msgid "Stopped Typing" msgstr "Tippen gestoppt" -#: ../src/gtkconv.c:5621 +#: ../src/gtkconv.c:5670 msgid "Nick Said" msgstr "Spitzname gesagt" -#: ../src/gtkconv.c:5631 +#: ../src/gtkconv.c:5680 msgid "New Event" msgstr "Neue Ereignisse" -#: ../src/gtkconv.c:6521 +#: ../src/gtkconv.c:6570 msgid "" "say <message>: Send a message normally as if you weren't using a " "command." @@ -3269,13 +3281,13 @@ "say <Nachricht>: Sendet eine Nachricht genau so, als wenn Sie die " "Nachricht ohne ein Kommando absenden." -#: ../src/gtkconv.c:6524 +#: ../src/gtkconv.c:6573 msgid "me <action>: Send an IRC style action to a buddy or chat." msgstr "" "me <Aktion>: Sende eine IRC-ähnliche Aktion an einen Buddy oder einen " "Chat." -#: ../src/gtkconv.c:6527 +#: ../src/gtkconv.c:6576 msgid "" "debug <option>: Send various debug information to the current " "conversation." @@ -3283,60 +3295,60 @@ "debug <Option>: Verschiedene Debugging-Informationen zur aktuellen " "Unterhaltung senden." -#: ../src/gtkconv.c:6530 +#: ../src/gtkconv.c:6579 msgid "clear: Clears the conversation scrollback." msgstr "clear: Leert das Gesprächsfenster." -#: ../src/gtkconv.c:6533 +#: ../src/gtkconv.c:6582 msgid "help <command>: Help on a specific command." msgstr "help <Kommando>: Hilfe zu einem bestimmten Kommando." -#: ../src/gtkconv.c:6692 +#: ../src/gtkconv.c:6741 msgid "Confirm close" msgstr "Schließen bestätigen" -#: ../src/gtkconv.c:6724 +#: ../src/gtkconv.c:6773 msgid "You have unread messages. Are you sure you want to close the window?" msgstr "" "Sie haben ungelesene Nachrichten. Wollen Sie das Fenster wirklich schließen?" -#: ../src/gtkconv.c:7246 +#: ../src/gtkconv.c:7295 msgid "Close other tabs" msgstr "Andere Reiter schließen" -#: ../src/gtkconv.c:7252 +#: ../src/gtkconv.c:7301 msgid "Close all tabs" msgstr "Alle Reiter schließen" -#: ../src/gtkconv.c:7260 +#: ../src/gtkconv.c:7309 msgid "Detach this tab" msgstr "Diesen Reiter ablösen" -#: ../src/gtkconv.c:7266 +#: ../src/gtkconv.c:7315 msgid "Close this tab" msgstr "Diesen Reiter schließen" -#: ../src/gtkconv.c:7526 +#: ../src/gtkconv.c:7575 msgid "Close conversation" msgstr "Unterhaltung schließen" -#: ../src/gtkconv.c:7990 +#: ../src/gtkconv.c:8039 msgid "Last created window" msgstr "Letztes erstelltes Fenster" -#: ../src/gtkconv.c:7992 +#: ../src/gtkconv.c:8041 msgid "Separate IM and Chat windows" msgstr "Getrennte IM- und Chat-Fenster" -#: ../src/gtkconv.c:7994 ../src/gtkprefs.c:1258 +#: ../src/gtkconv.c:8043 ../src/gtkprefs.c:1258 msgid "New window" msgstr "Neues Fenster" -#: ../src/gtkconv.c:7996 +#: ../src/gtkconv.c:8045 msgid "By group" msgstr "Nach Gruppe" -#: ../src/gtkconv.c:7998 +#: ../src/gtkconv.c:8047 msgid "By account" msgstr "Nach Konto" @@ -3421,7 +3433,7 @@ msgid "original author" msgstr "Originalautor" -#: ../src/gtkdialogs.c:110 ../src/gtkdialogs.c:111 ../src/gtkdialogs.c:169 +#: ../src/gtkdialogs.c:110 ../src/gtkdialogs.c:111 ../src/gtkdialogs.c:174 msgid "Bulgarian" msgstr "Bulgarisch" @@ -3433,186 +3445,194 @@ msgid "Bosnian" msgstr "Bosnisch" -#: ../src/gtkdialogs.c:115 ../src/gtkdialogs.c:170 ../src/gtkdialogs.c:171 +#: ../src/gtkdialogs.c:115 ../src/gtkdialogs.c:175 ../src/gtkdialogs.c:176 msgid "Catalan" msgstr "Katalanisch" -#: ../src/gtkdialogs.c:116 -msgid "Valencian" -msgstr "Valencianisch" +#: ../src/gtkdialogs.c:116 ../src/gtkdialogs.c:117 +msgid "Valencian-Catalan" +msgstr "Valencianisch-Katalanisch" -#: ../src/gtkdialogs.c:117 ../src/gtkdialogs.c:172 +#: ../src/gtkdialogs.c:118 ../src/gtkdialogs.c:177 msgid "Czech" msgstr "Tschechisch" -#: ../src/gtkdialogs.c:118 +#: ../src/gtkdialogs.c:119 msgid "Danish" msgstr "Dänisch" -#: ../src/gtkdialogs.c:119 ../src/gtkdialogs.c:120 ../src/gtkdialogs.c:173 +#: ../src/gtkdialogs.c:120 ../src/gtkdialogs.c:121 ../src/gtkdialogs.c:178 msgid "German" msgstr "Deutsch" -#: ../src/gtkdialogs.c:121 ../src/gtkdialogs.c:122 +#: ../src/gtkdialogs.c:122 ../src/gtkdialogs.c:123 msgid "Greek" msgstr "Griechisch" -#: ../src/gtkdialogs.c:123 +#: ../src/gtkdialogs.c:124 msgid "Australian English" msgstr "Australisches Englisch" -#: ../src/gtkdialogs.c:124 +#: ../src/gtkdialogs.c:125 msgid "Canadian English" msgstr "Kanadisches Englisch" -#: ../src/gtkdialogs.c:125 +#: ../src/gtkdialogs.c:126 msgid "British English" msgstr "Britisches Englisch" -#: ../src/gtkdialogs.c:126 ../src/gtkdialogs.c:174 ../src/gtkdialogs.c:175 -#: ../src/gtkdialogs.c:176 ../src/gtkdialogs.c:177 +#: ../src/gtkdialogs.c:127 ../src/gtkdialogs.c:179 ../src/gtkdialogs.c:180 +#: ../src/gtkdialogs.c:181 ../src/gtkdialogs.c:182 msgid "Spanish" msgstr "Spanisch" -#: ../src/gtkdialogs.c:127 ../src/gt... [truncated message content] |
From: <lsc...@us...> - 2006-08-09 14:48:07
|
Revision: 16679 Author: lschiere Date: 2006-08-09 07:47:37 -0700 (Wed, 09 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16679&view=rev Log Message: ----------- some translation updates. I have questions about gu.po, if someone sees that answered, we might need to revert that part of the change. It is all very confusing. The same person submitted the original gu.po and this update, but he called it gu_IN this time?\226?\128?\166 Modified Paths: -------------- trunk/configure.ac trunk/po/ChangeLog trunk/po/de.po trunk/po/fi.po trunk/po/gl.po trunk/po/gu.po trunk/po/it.po trunk/po/sl.po trunk/po/zh_TW.po trunk/src/gtkdialogs.c Added Paths: ----------- trunk/po/ne.po Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-08-09 06:23:18 UTC (rev 16678) +++ trunk/configure.ac 2006-08-09 14:47:37 UTC (rev 16679) @@ -46,7 +46,7 @@ ;; esac -ALL_LINGUAS="am az bg bn bs ca ca@valencia cs da de el en_AU en_CA en_GB es et eu fa fi fr gl gu he hi hu it ja ka ko ku lt mk my_MM nb nl nn pa pl pt_BR pt ro ru sk sl sq sr sr@Latn sv ta te th tr uk vi xh zh_CN zh_TW" +ALL_LINGUAS="am az bg bn bs ca ca@valencia cs da de el en_AU en_CA en_GB es et eu fa fi fr gl gu he hi hu it ja ka ko ku lt mk my_MM nb ne nl nn pa pl pt_BR pt ro ru sk sl sq sr sr@Latn sv ta te th tr uk vi xh zh_CN zh_TW" AM_GLIB_GNU_GETTEXT dnl we don't use autobreak on cygwin!! Modified: trunk/po/ChangeLog =================================================================== --- trunk/po/ChangeLog 2006-08-09 06:23:18 UTC (rev 16678) +++ trunk/po/ChangeLog 2006-08-09 14:47:37 UTC (rev 16679) @@ -23,13 +23,16 @@ * German translation updated (Bjoern Voigt) * German win32 translation updated (Bjoern Voigt) * Greek translation added (Bouklis Panos) + * Gujarati translation updated (Ankit Patel) * Hebrew translation updated (Shalom Craimer) * Hungarian translation updated (Gabor Kelemen) + * Italian translation updated (Claudio Satriano) * Japanese translation updated (Takeshi Aihana) * Kurdish translation added (Erdal Ronahi and Amed Ç. Jiyan) * Kurdish win32 installer translation added (Erdal Ronahi) * Lithuanian translation updated (Andrius Štikonas, Laurynas Biveinis) * Lithuanian win32 translation added (Laurynas Biveinis) + * Nepali translation added (Shyam Krishna Bal) * Persian translation added (Elnaz Sarbar, Meelad Zakaria) * Polish translation updated (Emil Nowak) * Portuguese translation updated (Duarte Henriques) Modified: trunk/po/de.po =================================================================== --- trunk/po/de.po 2006-08-09 06:23:18 UTC (rev 16678) +++ trunk/po/de.po 2006-08-09 14:47:37 UTC (rev 16679) @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: Gaim\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-04-29 23:34+0200\n" -"PO-Revision-Date: 2006-04-29 23:33+0200\n" +"POT-Creation-Date: 2006-06-20 10:30+0200\n" +"PO-Revision-Date: 2006-06-20 10:38+0200\n" "Last-Translator: Björn Voigt <bj...@cs...>\n" "Language-Team: de <de...@li...>\n" "MIME-Version: 1.0\n" @@ -196,7 +196,7 @@ msgid "Right-click for more unread messages...\n" msgstr "Rechtsklicken für weitere ungelesene Nachrichten...\n" -#: ../plugins/docklet/docklet.c:157 ../src/gtkblist.c:3230 +#: ../plugins/docklet/docklet.c:157 ../src/gtkblist.c:3246 #, c-format msgid "%d unread message from %s\n" msgid_plural "%d unread messages from %s\n" @@ -208,10 +208,10 @@ msgstr "Ändere Status" #: ../plugins/docklet/docklet.c:435 ../src/gtkstatusbox.c:673 -#: ../src/protocols/gg/gg.c:996 ../src/protocols/jabber/buddy.c:1104 +#: ../src/protocols/gg/gg.c:996 ../src/protocols/jabber/buddy.c:1363 #: ../src/protocols/msn/state.c:29 ../src/protocols/msn/state.c:30 #: ../src/protocols/msn/state.c:37 ../src/protocols/msn/state.c:38 -#: ../src/protocols/novell/novell.c:2845 ../src/protocols/yahoo/yahoo.c:2733 +#: ../src/protocols/novell/novell.c:2843 ../src/protocols/yahoo/yahoo.c:2731 #: ../src/status.c:155 msgid "Available" msgstr "Verfügbar" @@ -222,25 +222,25 @@ #: ../plugins/docklet/docklet.c:439 ../src/gtkprefs.c:1774 #: ../src/gtkstatusbox.c:674 ../src/protocols/gg/gg.c:999 #: ../src/protocols/irc/irc.c:520 ../src/protocols/irc/msgs.c:223 -#: ../src/protocols/jabber/buddy.c:1108 ../src/protocols/novell/novell.c:2848 -#: ../src/protocols/oscar/oscar.c:719 ../src/protocols/oscar/oscar.c:4391 -#: ../src/protocols/oscar/oscar.c:5434 ../src/protocols/silc/buddy.c:1469 -#: ../src/protocols/yahoo/yahoo.c:3187 ../src/protocols/yahoo/yahoo.c:3260 +#: ../src/protocols/jabber/buddy.c:1367 ../src/protocols/novell/novell.c:2846 +#: ../src/protocols/oscar/oscar.c:719 ../src/protocols/oscar/oscar.c:4397 +#: ../src/protocols/oscar/oscar.c:5440 ../src/protocols/silc/buddy.c:1469 +#: ../src/protocols/yahoo/yahoo.c:3185 ../src/protocols/yahoo/yahoo.c:3258 #: ../src/status.c:158 msgid "Away" msgstr "Abwesend" #: ../plugins/docklet/docklet.c:443 ../src/gtkstatusbox.c:675 -#: ../src/protocols/oscar/oscar.c:723 ../src/protocols/yahoo/yahoo.c:2727 +#: ../src/protocols/oscar/oscar.c:723 ../src/protocols/yahoo/yahoo.c:2725 #: ../src/status.c:157 msgid "Invisible" msgstr "Unsichtbar" -#: ../plugins/docklet/docklet.c:447 ../src/gtkblist.c:2960 +#: ../plugins/docklet/docklet.c:447 ../src/gtkblist.c:2976 #: ../src/gtkstatusbox.c:676 ../src/protocols/gg/gg.c:993 -#: ../src/protocols/jabber/buddy.c:1102 ../src/protocols/novell/novell.c:2857 -#: ../src/protocols/oscar/oscar.c:785 ../src/protocols/oscar/oscar.c:5406 -#: ../src/protocols/yahoo/yahoo.c:2731 ../src/status.c:154 +#: ../src/protocols/jabber/buddy.c:1361 ../src/protocols/novell/novell.c:2855 +#: ../src/protocols/oscar/oscar.c:785 ../src/protocols/oscar/oscar.c:5412 +#: ../src/protocols/yahoo/yahoo.c:2729 ../src/status.c:154 msgid "Offline" msgstr "Offline" @@ -256,7 +256,7 @@ msgid "Show Buddy List" msgstr "Buddy-Liste anzeigen" -#: ../plugins/docklet/docklet.c:489 ../src/gtkconv.c:5626 +#: ../plugins/docklet/docklet.c:489 ../src/gtkconv.c:5675 msgid "Unread Messages" msgstr "Ungelesene Nachrichten" @@ -296,7 +296,7 @@ msgstr "_Sofortnachrichten:" #: ../plugins/docklet/docklet.c:684 ../plugins/docklet/docklet.c:692 -#: ../plugins/win32/winprefs/winprefs.c:424 ../src/gtkprefs.c:823 +#: ../plugins/win32/winprefs/winprefs.c:462 ../src/gtkprefs.c:823 #: ../src/gtkprefs.c:1764 ../src/gtkprefs.c:1778 msgid "Never" msgstr "Niemals" @@ -307,7 +307,7 @@ #: ../plugins/docklet/docklet.c:686 ../plugins/docklet/docklet.c:694 #: ../plugins/timestamp_format.c:39 ../plugins/timestamp_format.c:48 -#: ../plugins/win32/winprefs/winprefs.c:425 ../src/gtkprefs.c:825 +#: ../plugins/win32/winprefs/winprefs.c:463 ../src/gtkprefs.c:825 msgid "Always" msgstr "Immer" @@ -617,7 +617,7 @@ #. Business #: ../plugins/gevolution/add_buddy_dialog.c:131 #: ../plugins/gevolution/assoc-buddy.c:119 ../src/gtkplugin.c:587 -#: ../src/gtkroomlist.c:604 ../src/protocols/jabber/jabber.c:755 +#: ../src/gtkroomlist.c:604 ../src/protocols/jabber/jabber.c:759 #: ../src/protocols/msn/msn.c:1532 ../src/protocols/msn/msn.c:1585 #: ../src/protocols/msn/msn.c:1606 msgid "Name" @@ -627,10 +627,10 @@ msgid "Instant Messaging" msgstr "Sofortnachrichten" -#: ../plugins/gevolution/add_buddy_dialog.c:442 ../src/gtkblist.c:4526 +#: ../plugins/gevolution/add_buddy_dialog.c:442 ../src/gtkblist.c:4532 #: ../src/protocols/silc/buddy.c:736 ../src/protocols/silc/buddy.c:1030 #: ../src/protocols/silc/buddy.c:1075 ../src/protocols/silc/buddy.c:1174 -#: ../src/protocols/yahoo/yahoo.c:2976 +#: ../src/protocols/yahoo/yahoo.c:2974 msgid "Add Buddy" msgstr "Buddy hinzufügen" @@ -644,14 +644,14 @@ #. "Search" #: ../plugins/gevolution/add_buddy_dialog.c:468 #: ../plugins/gevolution/assoc-buddy.c:353 -#: ../src/protocols/jabber/buddy.c:1460 ../src/protocols/oscar/oscar.c:6014 -#: ../src/protocols/sametime/sametime.c:5531 +#: ../src/protocols/jabber/buddy.c:1720 ../src/protocols/oscar/oscar.c:6020 +#: ../src/protocols/sametime/sametime.c:5529 msgid "Search" msgstr "Suchen" #: ../plugins/gevolution/add_buddy_dialog.c:549 -#: ../plugins/gevolution/new_person_dialog.c:307 ../src/gtkblist.c:4610 -#: ../src/gtkblist.c:4974 +#: ../plugins/gevolution/new_person_dialog.c:307 ../src/gtkblist.c:4616 +#: ../src/gtkblist.c:4980 msgid "Group:" msgstr "Gruppe:" @@ -687,13 +687,13 @@ msgstr "_Assoziiere den Buddy" #: ../plugins/gevolution/eds-utils.c:73 ../plugins/gevolution/eds-utils.c:86 -#: ../src/protocols/jabber/jabber.c:1122 +#: ../src/protocols/jabber/jabber.c:1125 msgid "None" msgstr "Kein" #: ../plugins/gevolution/gevo-util.c:64 ../plugins/gevolution/gevolution.c:96 #: ../src/blist.c:516 ../src/blist.c:1278 ../src/blist.c:1505 -#: ../src/gtkblist.c:4419 ../src/protocols/jabber/roster.c:65 +#: ../src/gtkblist.c:4425 ../src/protocols/jabber/roster.c:66 msgid "Buddies" msgstr "Buddys" @@ -730,8 +730,8 @@ "Wählen Sie alle Konten, zu denen Buddys automatisch hinzugefügt werden " "sollen." -#: ../plugins/gevolution/gevolution.c:450 ../plugins/idle.c:150 -#: ../plugins/idle.c:186 ../src/gtknotify.c:399 ../src/gtkpounce.c:1262 +#: ../plugins/gevolution/gevolution.c:450 ../plugins/idle.c:153 +#: ../plugins/idle.c:189 ../src/gtknotify.c:399 ../src/gtkpounce.c:1255 msgid "Account" msgstr "Konto" @@ -768,7 +768,7 @@ msgstr "Kontotyp:" #: ../plugins/gevolution/new_person_dialog.c:295 ../src/gtkaccount.c:784 -#: ../src/gtkblist.c:4572 +#: ../src/gtkblist.c:4578 msgid "Screen name:" msgstr "Benutzername:" @@ -870,50 +870,50 @@ msgid "Iconifies the buddy list and your conversations when you go away." msgstr "Minimiert die Buddy-Liste und die Gesprächsfenster, wenn Sie weggehen." -#: ../plugins/idle.c:155 ../plugins/idle.c:213 +#: ../plugins/idle.c:158 ../plugins/idle.c:216 msgid "Minutes" msgstr "Minuten" #. This is a cultural reference. Dy'er Mak'er is a song by Led Zeppelin. #. If that doesn't translate well into your language, drop the 's before translating. -#: ../plugins/idle.c:162 ../plugins/idle.c:195 ../plugins/idle.c:220 -#: ../plugins/idle.c:312 +#: ../plugins/idle.c:165 ../plugins/idle.c:198 ../plugins/idle.c:223 +#: ../plugins/idle.c:315 msgid "I'dle Mak'er" msgstr "Untätigkeitsmarker" -#: ../plugins/idle.c:163 ../plugins/idle.c:252 +#: ../plugins/idle.c:166 ../plugins/idle.c:255 msgid "Set Account Idle Time" msgstr "Setze Konto-Untätigkeitszeit" -#: ../plugins/idle.c:166 ../plugins/idle.c:224 +#: ../plugins/idle.c:169 ../plugins/idle.c:227 msgid "_Set" msgstr "_Setzen" -#: ../plugins/idle.c:167 ../plugins/idle.c:200 ../plugins/idle.c:225 +#: ../plugins/idle.c:170 ../plugins/idle.c:203 ../plugins/idle.c:228 msgid "_Cancel" msgstr "A_bbrechen" -#: ../plugins/idle.c:180 +#: ../plugins/idle.c:183 msgid "None of your accounts are idle." msgstr "Keine ihrer Konten sind untätig." -#: ../plugins/idle.c:196 ../plugins/idle.c:256 +#: ../plugins/idle.c:199 ../plugins/idle.c:259 msgid "Unset Account Idle Time" msgstr "Untätigkeitszeit zurücksetzen" -#: ../plugins/idle.c:199 +#: ../plugins/idle.c:202 msgid "_Unset" msgstr "Zurücksetze_n" -#: ../plugins/idle.c:221 ../plugins/idle.c:260 +#: ../plugins/idle.c:224 ../plugins/idle.c:263 msgid "Set Idle Time for All Accounts" msgstr "Untätigkeitszeit für alle Konten setzen" -#: ../plugins/idle.c:265 +#: ../plugins/idle.c:268 msgid "Unset Idle Time for All Idled Accounts" msgstr "Untätigkeitszeit für alle untätige Konten zurücksetzen" -#: ../plugins/idle.c:314 ../plugins/idle.c:315 +#: ../plugins/idle.c:317 ../plugins/idle.c:318 msgid "Allows you to hand-configure how long you've been idle" msgstr "" "Erlaubt Ihnen manuell zu konfigurieren, wie lange Sie untätig sein wollen" @@ -1661,7 +1661,7 @@ #. *< dependencies #. *< priority #. *< id -#: ../plugins/timestamp.c:254 +#: ../plugins/timestamp.c:256 msgid "Timestamp" msgstr "Zeitstempel" @@ -1669,7 +1669,7 @@ #. *< version #. * summary #. * description -#: ../plugins/timestamp.c:257 ../plugins/timestamp.c:259 +#: ../plugins/timestamp.c:259 ../plugins/timestamp.c:261 msgid "Adds iChat-style timestamps to conversations every N minutes." msgstr "Fügt iChat-ähnliche Zeitstempel alle N Minuten in die Gespräche ein." @@ -1798,57 +1798,57 @@ "\n" "* Hinweis: Dieses Plugin verlangt Win2000 oder höher." -#: ../plugins/win32/winprefs/winprefs.c:397 +#: ../plugins/win32/winprefs/winprefs.c:434 msgid "GTK+ Runtime Version" msgstr "GTK+ Runtime Version" #. Autostart -#: ../plugins/win32/winprefs/winprefs.c:405 +#: ../plugins/win32/winprefs/winprefs.c:442 msgid "Startup" msgstr "Start" -#: ../plugins/win32/winprefs/winprefs.c:406 +#: ../plugins/win32/winprefs/winprefs.c:443 msgid "_Start Gaim on Windows startup" msgstr "_Starte Gaim beim Windows-Start" #. Buddy List -#: ../plugins/win32/winprefs/winprefs.c:417 ../src/gtkblist.c:3663 +#: ../plugins/win32/winprefs/winprefs.c:455 ../src/gtkblist.c:3672 msgid "Buddy List" msgstr "Buddy-Liste" -#: ../plugins/win32/winprefs/winprefs.c:418 +#: ../plugins/win32/winprefs/winprefs.c:456 msgid "_Dockable Buddy List" msgstr "An_dockbare Buddy-Liste" #. Blist On Top -#: ../plugins/win32/winprefs/winprefs.c:422 +#: ../plugins/win32/winprefs/winprefs.c:460 msgid "_Keep Buddy List window on top:" msgstr "_Buddy-Listen-Fenster bleibt im Vordergrund:" #. XXX: Did this ever work? -#: ../plugins/win32/winprefs/winprefs.c:427 +#: ../plugins/win32/winprefs/winprefs.c:465 msgid "Only when docked" msgstr "Nur wenn angedockt" #. Conversations -#: ../plugins/win32/winprefs/winprefs.c:431 ../src/gtkprefs.c:819 +#: ../plugins/win32/winprefs/winprefs.c:469 ../src/gtkprefs.c:819 #: ../src/gtkprefs.c:1879 msgid "Conversations" msgstr "Unterhaltungen" -#: ../plugins/win32/winprefs/winprefs.c:432 +#: ../plugins/win32/winprefs/winprefs.c:470 msgid "_Flash window when messages are received" msgstr "_Fenster blinkt, wenn Nachrichten empfangen werden" -#: ../plugins/win32/winprefs/winprefs.c:456 +#: ../plugins/win32/winprefs/winprefs.c:494 msgid "WinGaim Options" msgstr "WinGaim Optionen" -#: ../plugins/win32/winprefs/winprefs.c:458 +#: ../plugins/win32/winprefs/winprefs.c:496 msgid "Options specific to Windows Gaim." msgstr "Windows-Gaim-spezifische Optionen." -#: ../plugins/win32/winprefs/winprefs.c:459 +#: ../plugins/win32/winprefs/winprefs.c:497 msgid "" "Provides options specific to Windows Gaim, such as buddy list docking and " "conversation flashing." @@ -1860,139 +1860,138 @@ msgid "accounts" msgstr "Konten" -#: ../src/account.c:923 +#: ../src/account.c:918 msgid "Password is required to sign on." msgstr "Passwort wird für die Anmeldung benötigt." -#: ../src/account.c:948 +#: ../src/account.c:943 #, c-format msgid "Enter password for %s (%s)" msgstr "Geben Sie das Passwort für %s (%s) ein" -#: ../src/account.c:955 +#: ../src/account.c:950 msgid "Enter Password" msgstr "Geben Sie ein Passwort ein" -#: ../src/account.c:960 +#: ../src/account.c:955 msgid "Save password" msgstr "Passwort speichern" #. * #. * A wrapper for gaim_request_action() that uses @c OK and @c Cancel buttons. #. -#: ../src/account.c:968 ../src/account.c:1139 ../src/gtkblist.c:3546 -#: ../src/gtkdialogs.c:602 ../src/gtkdialogs.c:739 ../src/gtkdialogs.c:803 +#: ../src/account.c:963 ../src/account.c:1134 ../src/gtkblist.c:3556 +#: ../src/gtkdialogs.c:613 ../src/gtkdialogs.c:750 ../src/gtkdialogs.c:824 #: ../src/gtkrequest.c:269 ../src/protocols/gg/gg.c:497 #: ../src/protocols/gg/gg.c:655 ../src/protocols/gg/gg.c:791 -#: ../src/protocols/jabber/jabber.c:1319 ../src/protocols/jabber/xdata.c:337 +#: ../src/protocols/jabber/jabber.c:1322 ../src/protocols/jabber/xdata.c:337 #: ../src/protocols/msn/msn.c:250 ../src/protocols/msn/msn.c:265 #: ../src/protocols/msn/msn.c:280 ../src/protocols/msn/msn.c:295 #: ../src/protocols/oscar/oscar.c:1408 ../src/protocols/oscar/oscar.c:2167 -#: ../src/protocols/oscar/oscar.c:2260 ../src/protocols/oscar/oscar.c:5684 -#: ../src/protocols/oscar/oscar.c:5864 ../src/protocols/oscar/oscar.c:5889 -#: ../src/protocols/oscar/oscar.c:5945 ../src/protocols/silc/buddy.c:466 +#: ../src/protocols/oscar/oscar.c:2260 ../src/protocols/oscar/oscar.c:5690 +#: ../src/protocols/oscar/oscar.c:5870 ../src/protocols/oscar/oscar.c:5895 +#: ../src/protocols/oscar/oscar.c:5951 ../src/protocols/silc/buddy.c:466 #: ../src/protocols/silc/buddy.c:1182 ../src/protocols/silc/chat.c:424 #: ../src/protocols/silc/chat.c:462 ../src/protocols/silc/chat.c:725 #: ../src/protocols/silc/ops.c:1297 ../src/protocols/silc/ops.c:1910 -#: ../src/protocols/silc/silc.c:753 ../src/protocols/yahoo/yahoo.c:3061 -#: ../src/protocols/yahoo/yahoo.c:3070 ../src/request.h:1344 +#: ../src/protocols/silc/silc.c:753 ../src/protocols/yahoo/yahoo.c:3059 +#: ../src/protocols/yahoo/yahoo.c:3068 ../src/request.h:1344 msgid "OK" msgstr "OK" -#: ../src/account.c:969 ../src/account.c:1140 ../src/account.c:1177 -#: ../src/gtkaccount.c:2182 ../src/gtkaccount.c:2649 ../src/gtkblist.c:5015 -#: ../src/gtkdialogs.c:603 ../src/gtkdialogs.c:740 ../src/gtkdialogs.c:804 -#: ../src/gtkdialogs.c:823 ../src/gtkdialogs.c:845 ../src/gtkdialogs.c:865 -#: ../src/gtkdialogs.c:909 ../src/gtkdialogs.c:964 ../src/gtkdialogs.c:1001 -#: ../src/gtkdialogs.c:1026 ../src/gtkimhtmltoolbar.c:419 -#: ../src/gtkplugin.c:296 ../src/gtkpounce.c:1095 ../src/gtkprivacy.c:568 +#: ../src/account.c:964 ../src/account.c:1135 ../src/account.c:1172 +#: ../src/gtkaccount.c:2182 ../src/gtkaccount.c:2649 ../src/gtkblist.c:5021 +#: ../src/gtkdialogs.c:614 ../src/gtkdialogs.c:751 ../src/gtkdialogs.c:825 +#: ../src/gtkdialogs.c:844 ../src/gtkdialogs.c:866 ../src/gtkdialogs.c:886 +#: ../src/gtkdialogs.c:930 ../src/gtkdialogs.c:985 ../src/gtkdialogs.c:1022 +#: ../src/gtkdialogs.c:1047 ../src/gtkimhtmltoolbar.c:419 +#: ../src/gtkplugin.c:296 ../src/gtkpounce.c:1088 ../src/gtkprivacy.c:568 #: ../src/gtkprivacy.c:581 ../src/gtkprivacy.c:606 ../src/gtkprivacy.c:617 #: ../src/gtkrequest.c:270 ../src/gtksavedstatuses.c:296 #: ../src/protocols/gg/gg.c:498 ../src/protocols/gg/gg.c:656 #: ../src/protocols/gg/gg.c:792 ../src/protocols/gg/gg.c:871 -#: ../src/protocols/jabber/buddy.c:576 ../src/protocols/jabber/buddy.c:1461 -#: ../src/protocols/jabber/buddy.c:1495 ../src/protocols/jabber/chat.c:780 -#: ../src/protocols/jabber/jabber.c:824 ../src/protocols/jabber/jabber.c:1320 +#: ../src/protocols/jabber/buddy.c:594 ../src/protocols/jabber/buddy.c:1721 +#: ../src/protocols/jabber/buddy.c:1755 ../src/protocols/jabber/chat.c:778 +#: ../src/protocols/jabber/jabber.c:828 ../src/protocols/jabber/jabber.c:1323 #: ../src/protocols/jabber/xdata.c:338 ../src/protocols/msn/msn.c:251 #: ../src/protocols/msn/msn.c:266 ../src/protocols/msn/msn.c:281 #: ../src/protocols/msn/msn.c:296 ../src/protocols/msn/msn.c:313 #: ../src/protocols/oscar/oscar.c:1409 ../src/protocols/oscar/oscar.c:2168 #: ../src/protocols/oscar/oscar.c:2209 ../src/protocols/oscar/oscar.c:2261 -#: ../src/protocols/oscar/oscar.c:5685 ../src/protocols/oscar/oscar.c:5737 -#: ../src/protocols/oscar/oscar.c:5865 ../src/protocols/oscar/oscar.c:5890 -#: ../src/protocols/oscar/oscar.c:5946 ../src/protocols/oscar/oscar.c:6015 -#: ../src/protocols/oscar/peer.c:942 ../src/protocols/sametime/sametime.c:3375 -#: ../src/protocols/sametime/sametime.c:3460 -#: ../src/protocols/sametime/sametime.c:3630 -#: ../src/protocols/sametime/sametime.c:5319 -#: ../src/protocols/sametime/sametime.c:5408 -#: ../src/protocols/sametime/sametime.c:5532 ../src/protocols/silc/buddy.c:467 +#: ../src/protocols/oscar/oscar.c:5691 ../src/protocols/oscar/oscar.c:5743 +#: ../src/protocols/oscar/oscar.c:5871 ../src/protocols/oscar/oscar.c:5896 +#: ../src/protocols/oscar/oscar.c:5952 ../src/protocols/oscar/oscar.c:6021 +#: ../src/protocols/oscar/peer.c:942 ../src/protocols/sametime/sametime.c:3368 +#: ../src/protocols/sametime/sametime.c:3453 +#: ../src/protocols/sametime/sametime.c:3623 +#: ../src/protocols/sametime/sametime.c:5317 +#: ../src/protocols/sametime/sametime.c:5406 +#: ../src/protocols/sametime/sametime.c:5530 ../src/protocols/silc/buddy.c:467 #: ../src/protocols/silc/buddy.c:1078 ../src/protocols/silc/buddy.c:1183 #: ../src/protocols/silc/chat.c:597 ../src/protocols/silc/chat.c:726 #: ../src/protocols/silc/ops.c:1911 ../src/protocols/silc/silc.c:754 -#: ../src/protocols/silc/silc.c:959 ../src/protocols/yahoo/yahoo.c:3062 -#: ../src/protocols/yahoo/yahoo.c:3071 ../src/request.h:1344 +#: ../src/protocols/silc/silc.c:959 ../src/protocols/yahoo/yahoo.c:3060 +#: ../src/protocols/yahoo/yahoo.c:3069 ../src/request.h:1344 #: ../src/request.h:1354 msgid "Cancel" msgstr "Abbrechen" -#: ../src/account.c:994 ../src/connection.c:96 +#: ../src/account.c:989 ../src/connection.c:96 #, c-format msgid "Missing protocol plugin for %s" msgstr "Fehlendes Protokoll-Plugin für %s" -#: ../src/account.c:996 ../src/connection.c:99 ../src/gtkblist.c:3538 -#: ../src/gtkblist.c:3544 +#: ../src/account.c:991 ../src/connection.c:99 ../src/gtkblist.c:3554 msgid "Connection Error" msgstr "Verbindungsfehler" -#: ../src/account.c:1076 ../src/protocols/gg/gg.c:696 -#: ../src/protocols/jabber/jabber.c:1272 +#: ../src/account.c:1071 ../src/protocols/gg/gg.c:696 +#: ../src/protocols/jabber/jabber.c:1275 msgid "New passwords do not match." msgstr "Die neuen Passwörter stimmen nicht überein." -#: ../src/account.c:1085 +#: ../src/account.c:1080 msgid "Fill out all fields completely." msgstr "Bitte füllen Sie alle Felder aus." -#: ../src/account.c:1108 +#: ../src/account.c:1103 msgid "Original password" msgstr "Aktuelles Passwort" -#: ../src/account.c:1115 +#: ../src/account.c:1110 msgid "New password" msgstr "Neues Passwort" -#: ../src/account.c:1122 +#: ../src/account.c:1117 msgid "New password (again)" msgstr "Neues Passwort (nochmal)" -#: ../src/account.c:1128 +#: ../src/account.c:1123 #, c-format msgid "Change password for %s" msgstr "Ändern des Passworts für %s" -#: ../src/account.c:1136 +#: ../src/account.c:1131 msgid "Please enter your current password and your new password." msgstr "Bitte geben Sie Ihr aktuelles und Ihr neues Passwort ein." -#: ../src/account.c:1169 +#: ../src/account.c:1164 #, c-format msgid "Change user information for %s" msgstr "Ändere die Benutzerinformation für %s" -#: ../src/account.c:1172 ../src/protocols/toc/toc.c:1684 +#: ../src/account.c:1167 ../src/protocols/toc/toc.c:1684 msgid "Set User Info" msgstr "Benutzer-Info setzen" -#: ../src/account.c:1176 ../src/gtkdebug.c:684 ../src/gtkrequest.c:276 -#: ../src/protocols/jabber/buddy.c:575 +#: ../src/account.c:1171 ../src/gtkdebug.c:684 ../src/gtkrequest.c:276 +#: ../src/protocols/jabber/buddy.c:593 msgid "Save" msgstr "Speichern" -#: ../src/account.c:1679 ../src/gtkft.c:159 ../src/protocols/gg/gg.c:1002 -#: ../src/protocols/jabber/buddy.c:633 ../src/protocols/jabber/buddy.c:1098 -#: ../src/protocols/jabber/buddy.c:1115 ../src/protocols/novell/novell.c:2860 +#: ../src/account.c:1681 ../src/gtkft.c:159 ../src/protocols/gg/gg.c:1002 +#: ../src/protocols/jabber/buddy.c:636 ../src/protocols/jabber/buddy.c:1357 +#: ../src/protocols/jabber/buddy.c:1374 ../src/protocols/novell/novell.c:2858 msgid "Unknown" msgstr "Unbekannt" @@ -2040,49 +2039,49 @@ msgid "+++ %s signed off" msgstr "+++ %s hat sich abgemeldet" -#: ../src/conversation.c:161 +#: ../src/conversation.c:168 msgid "Unable to send message: The message is too large." msgstr "Nachricht kann nicht gesendet werden: Sie ist zu groß." -#: ../src/conversation.c:164 ../src/conversation.c:177 +#: ../src/conversation.c:171 ../src/conversation.c:184 #, c-format msgid "Unable to send message to %s." msgstr "Kann die Nachricht an %s nicht senden." -#: ../src/conversation.c:165 +#: ../src/conversation.c:172 msgid "The message is too large." msgstr "Die Nachricht ist zu lang." -#: ../src/conversation.c:174 +#: ../src/conversation.c:181 msgid "Unable to send message." msgstr "Nachricht kann nicht gesendet werden." -#: ../src/conversation.c:1515 +#: ../src/conversation.c:1510 #, c-format msgid "%s entered the room." msgstr "%s hat den Raum betreten." -#: ../src/conversation.c:1518 +#: ../src/conversation.c:1513 #, c-format msgid "%s [<I>%s</I>] entered the room." msgstr "%s [<I>%s</I>] hat den Raum betreten." -#: ../src/conversation.c:1625 +#: ../src/conversation.c:1620 #, c-format msgid "You are now known as %s" msgstr "Sie heißen jetzt %s" -#: ../src/conversation.c:1645 +#: ../src/conversation.c:1640 #, c-format msgid "%s is now known as %s" msgstr "%s heißt jetzt %s" -#: ../src/conversation.c:1718 +#: ../src/conversation.c:1713 #, c-format msgid "%s left the room." msgstr "%s hat den Raum verlassen." -#: ../src/conversation.c:1721 +#: ../src/conversation.c:1716 #, c-format msgid "%s left the room (%s)." msgstr "%s hat den Raum verlassen (%s)." @@ -2091,7 +2090,7 @@ msgid "No name" msgstr "Kein Name" -#: ../src/ft.c:189 ../src/protocols/msn/msn.c:412 +#: ../src/ft.c:189 ../src/protocols/msn/msn.c:410 #, c-format msgid "" "Error reading %s: \n" @@ -2158,60 +2157,60 @@ "Remote-Computer: %s\n" "Remote-Port: %d" -#: ../src/ft.c:391 +#: ../src/ft.c:392 #, c-format msgid "%s is offering to send file %s" msgstr "%s bietet an, die Datei %s zu senden" -#: ../src/ft.c:443 +#: ../src/ft.c:444 #, c-format msgid "%s is not a valid filename.\n" msgstr "%s ist kein gültiger Dateiname.\n" -#: ../src/ft.c:464 +#: ../src/ft.c:465 #, c-format msgid "Offering to send %s to %s" msgstr "Angebot zum Senden von %s an %s" -#: ../src/ft.c:476 +#: ../src/ft.c:477 #, c-format msgid "Starting transfer of %s from %s" msgstr "Starte die Dateiübertragung von %s von %s" -#: ../src/ft.c:630 +#: ../src/ft.c:631 #, c-format msgid "Transfer of file %s complete" msgstr "Übertragung der Datei %s ist komplett" -#: ../src/ft.c:633 +#: ../src/ft.c:634 msgid "File transfer complete" msgstr "Dateiübertragung ist komplett" -#: ../src/ft.c:1028 +#: ../src/ft.c:1031 #, c-format msgid "You canceled the transfer of %s" msgstr "Sie haben die Dateiübertragung von %s abgebrochen" -#: ../src/ft.c:1033 +#: ../src/ft.c:1036 msgid "File transfer cancelled" msgstr "Dateiübertragung wurde abgebrochen" -#: ../src/ft.c:1091 +#: ../src/ft.c:1094 #, c-format msgid "%s canceled the transfer of %s" msgstr "%s hat die Übertragung von %s abgebrochen" -#: ../src/ft.c:1096 +#: ../src/ft.c:1099 #, c-format msgid "%s canceled the file transfer" msgstr "%s hat die Datenübertragung abgebrochen" -#: ../src/ft.c:1153 +#: ../src/ft.c:1156 #, c-format msgid "File transfer to %s failed." msgstr "Dateiübertragung an %s wurde abgebrochen." -#: ../src/ft.c:1155 +#: ../src/ft.c:1158 #, c-format msgid "File transfer from %s failed." msgstr "Dateiübertragung von %s wurde abgebrochen." @@ -2240,7 +2239,7 @@ msgid "Password:" msgstr "Passwort:" -#: ../src/gtkaccount.c:863 ../src/gtkblist.c:4593 ../src/gtkblist.c:4959 +#: ../src/gtkaccount.c:863 ../src/gtkblist.c:4599 ../src/gtkblist.c:4965 msgid "Alias:" msgstr "Alias:" @@ -2333,7 +2332,7 @@ msgid "Add Account" msgstr "Konto hinzufügen" -#: ../src/gtkaccount.c:1749 ../src/gtkblist.c:3547 +#: ../src/gtkaccount.c:1749 ../src/gtkblist.c:3557 msgid "Modify Account" msgstr "Konto bearbeiten" @@ -2346,7 +2345,7 @@ msgstr "_Erweitert" #. Register button -#: ../src/gtkaccount.c:1797 ../src/protocols/jabber/jabber.c:823 +#: ../src/gtkaccount.c:1797 ../src/protocols/jabber/jabber.c:827 msgid "Register" msgstr "Anmelden" @@ -2355,12 +2354,12 @@ msgid "Are you sure you want to delete %s?" msgstr "Wollen Sie %s wirklich löschen?" -#: ../src/gtkaccount.c:2181 ../src/gtkpounce.c:1094 ../src/gtkrequest.c:273 +#: ../src/gtkaccount.c:2181 ../src/gtkpounce.c:1087 ../src/gtkrequest.c:273 #: ../src/gtksavedstatuses.c:295 msgid "Delete" msgstr "Löschen" -#: ../src/gtkaccount.c:2239 ../src/gtksavedstatuses.c:889 +#: ../src/gtkaccount.c:2239 ../src/gtksavedstatuses.c:893 #: ../src/protocols/oscar/oscar.c:2823 msgid "Screen Name" msgstr "Benutzername" @@ -2378,18 +2377,18 @@ msgid "Add buddy to your list?" msgstr "Benutzer zu Ihrer Buddy-Liste hinzufügen?" -#: ../src/gtkaccount.c:2648 ../src/gtkblist.c:5014 ../src/gtkconv.c:1623 +#: ../src/gtkaccount.c:2648 ../src/gtkblist.c:5020 ../src/gtkconv.c:1621 #: ../src/gtkrequest.c:274 ../src/protocols/gg/gg.c:870 #: ../src/protocols/oscar/oscar.c:2453 -#: ../src/protocols/sametime/sametime.c:5407 ../src/protocols/silc/chat.c:596 +#: ../src/protocols/sametime/sametime.c:5405 ../src/protocols/silc/chat.c:596 msgid "Add" msgstr "Hinzufügen" -#: ../src/gtkblist.c:664 +#: ../src/gtkblist.c:673 msgid "Join a Chat" msgstr "Chat betreten" -#: ../src/gtkblist.c:685 +#: ../src/gtkblist.c:694 msgid "" "Please enter the appropriate information about the chat you would like to " "join.\n" @@ -2397,87 +2396,87 @@ "Bitte geben Sie geeignete Informationen über den Chat ein, den Sie betreten " "wollen.\n" -#: ../src/gtkblist.c:696 ../src/gtkpounce.c:527 ../src/gtkroomlist.c:377 +#: ../src/gtkblist.c:705 ../src/gtkpounce.c:523 ../src/gtkroomlist.c:377 msgid "_Account:" msgstr "_Konto:" -#: ../src/gtkblist.c:940 +#: ../src/gtkblist.c:949 msgid "Get _Info" msgstr "_Info abrufen" -#: ../src/gtkblist.c:943 ../src/gtkstock.c:141 +#: ../src/gtkblist.c:952 ../src/gtkstock.c:141 msgid "I_M" msgstr "I_M" -#: ../src/gtkblist.c:949 +#: ../src/gtkblist.c:958 msgid "_Send File" msgstr "Datei ver_senden" -#: ../src/gtkblist.c:956 +#: ../src/gtkblist.c:965 msgid "Add Buddy _Pounce" msgstr "B_uddy-Alarm hinzufügen" -#: ../src/gtkblist.c:960 ../src/gtkblist.c:964 ../src/gtkblist.c:1063 -#: ../src/gtkblist.c:1086 +#: ../src/gtkblist.c:969 ../src/gtkblist.c:973 ../src/gtkblist.c:1072 +#: ../src/gtkblist.c:1095 msgid "View _Log" msgstr "Mi_tschnitt anzeigen" -#: ../src/gtkblist.c:975 +#: ../src/gtkblist.c:984 msgid "Alias..." msgstr "Alias..." -#: ../src/gtkblist.c:978 ../src/gtkconv.c:1620 ../src/gtkrequest.c:275 +#: ../src/gtkblist.c:987 ../src/gtkconv.c:1618 ../src/gtkrequest.c:275 msgid "Remove" msgstr "Entfernen" -#: ../src/gtkblist.c:984 ../src/gtkblist.c:1071 ../src/gtkblist.c:1092 +#: ../src/gtkblist.c:993 ../src/gtkblist.c:1080 ../src/gtkblist.c:1101 msgid "_Alias..." msgstr "_Alias..." -#: ../src/gtkblist.c:986 ../src/gtkblist.c:1073 ../src/gtkblist.c:1094 +#: ../src/gtkblist.c:995 ../src/gtkblist.c:1082 ../src/gtkblist.c:1103 msgid "_Remove" msgstr "_Entfernen" -#: ../src/gtkblist.c:1034 +#: ../src/gtkblist.c:1043 msgid "Add a _Buddy" msgstr "Buddy _hinzufügen" -#: ../src/gtkblist.c:1036 +#: ../src/gtkblist.c:1045 msgid "Add a C_hat" msgstr "C_hat hinzufügen" -#: ../src/gtkblist.c:1039 +#: ../src/gtkblist.c:1048 msgid "_Delete Group" msgstr "Gruppe _löschen" -#: ../src/gtkblist.c:1041 +#: ../src/gtkblist.c:1050 msgid "_Rename" msgstr "_Umbenennen" #. join button -#: ../src/gtkblist.c:1059 ../src/gtkroomlist.c:285 ../src/gtkroomlist.c:441 +#: ../src/gtkblist.c:1068 ../src/gtkroomlist.c:285 ../src/gtkroomlist.c:441 #: ../src/gtkstock.c:139 msgid "_Join" msgstr "_Betreten" -#: ../src/gtkblist.c:1061 +#: ../src/gtkblist.c:1070 msgid "Auto-Join" msgstr "Automatisch beitreten" -#: ../src/gtkblist.c:1099 ../src/gtkblist.c:1122 +#: ../src/gtkblist.c:1108 ../src/gtkblist.c:1131 msgid "_Collapse" msgstr "_Zusammenklappen" -#: ../src/gtkblist.c:1127 +#: ../src/gtkblist.c:1136 msgid "_Expand" msgstr "A_usklappen" -#: ../src/gtkblist.c:1373 ../src/gtkblist.c:1385 ../src/gtkblist.c:3808 -#: ../src/gtkblist.c:3818 +#: ../src/gtkblist.c:1382 ../src/gtkblist.c:1394 ../src/gtkblist.c:3817 +#: ../src/gtkblist.c:3827 msgid "/Tools/Mute Sounds" msgstr "/Werkzeuge/Stummschalten" -#: ../src/gtkblist.c:1845 ../src/gtkconv.c:4195 ../src/gtkpounce.c:426 +#: ../src/gtkblist.c:1859 ../src/gtkconv.c:4235 ../src/gtkpounce.c:422 msgid "" "You are not currently signed on with an account that can add that buddy." msgstr "" @@ -2485,126 +2484,126 @@ "kann, um diesen Buddy hinzuzufügen." #. Buddies menu -#: ../src/gtkblist.c:2419 +#: ../src/gtkblist.c:2433 msgid "/_Buddies" msgstr "/_Buddys" -#: ../src/gtkblist.c:2420 +#: ../src/gtkblist.c:2434 msgid "/Buddies/New Instant _Message..." msgstr "/Buddys/_Neue Sofortnachricht..." -#: ../src/gtkblist.c:2421 +#: ../src/gtkblist.c:2435 msgid "/Buddies/Join a _Chat..." msgstr "/Buddys/Einen _Chat betreten..." -#: ../src/gtkblist.c:2422 +#: ../src/gtkblist.c:2436 msgid "/Buddies/Get User _Info..." msgstr "/Buddys/B_enutzer-Info abrufen..." -#: ../src/gtkblist.c:2423 +#: ../src/gtkblist.c:2437 msgid "/Buddies/View User _Log..." msgstr "/Buddys/Benutzer-_Mitschnitt ansehen..." -#: ../src/gtkblist.c:2425 +#: ../src/gtkblist.c:2439 msgid "/Buddies/Show _Offline Buddies" msgstr "/Buddys/Zeige _offline Buddys" -#: ../src/gtkblist.c:2426 +#: ../src/gtkblist.c:2440 msgid "/Buddies/Show _Empty Groups" msgstr "/Buddys/Zeige _leere Gruppen" -#: ../src/gtkblist.c:2427 +#: ../src/gtkblist.c:2441 msgid "/Buddies/Show Buddy _Details" msgstr "/Buddys/Zeige Buddy-_Details" -#: ../src/gtkblist.c:2428 +#: ../src/gtkblist.c:2442 msgid "/Buddies/Show Idle _Times" msgstr "/Buddys/Zeige Untätigkeitszei_ten" -#: ../src/gtkblist.c:2429 +#: ../src/gtkblist.c:2443 msgid "/Buddies/_Sort Buddies" msgstr "/Buddys/Buddys _sortieren" -#: ../src/gtkblist.c:2431 +#: ../src/gtkblist.c:2445 msgid "/Buddies/_Add Buddy..." msgstr "/Buddys/B_uddy hinzufügen..." -#: ../src/gtkblist.c:2432 +#: ../src/gtkblist.c:2446 msgid "/Buddies/Add C_hat..." msgstr "/Buddys/C_hat hinzufügen..." -#: ../src/gtkblist.c:2433 +#: ../src/gtkblist.c:2447 msgid "/Buddies/Add _Group..." msgstr "/Buddys/_Gruppe hinzufügen..." -#: ../src/gtkblist.c:2435 +#: ../src/gtkblist.c:2449 msgid "/Buddies/_Quit" msgstr "/Buddys/_Beenden" #. Accounts menu -#: ../src/gtkblist.c:2438 +#: ../src/gtkblist.c:2452 msgid "/_Accounts" msgstr "/_Konten" -#: ../src/gtkblist.c:2439 ../src/gtkblist.c:5591 +#: ../src/gtkblist.c:2453 ../src/gtkblist.c:5597 msgid "/Accounts/Add\\/Edit" msgstr "/Konten/Hinzufügen\\/Ändern" #. Tools -#: ../src/gtkblist.c:2442 +#: ../src/gtkblist.c:2456 msgid "/_Tools" msgstr "/_Werkzeuge" -#: ../src/gtkblist.c:2443 +#: ../src/gtkblist.c:2457 msgid "/Tools/Buddy _Pounces" msgstr "/Werkzeuge/Buddy-_Alarm" -#: ../src/gtkblist.c:2444 +#: ../src/gtkblist.c:2458 msgid "/Tools/Plu_gins" msgstr "/Werkzeuge/Plu_gins" -#: ../src/gtkblist.c:2445 +#: ../src/gtkblist.c:2459 msgid "/Tools/Pr_eferences" msgstr "/Werkzeuge/_Einstellungen" -#: ../src/gtkblist.c:2446 +#: ../src/gtkblist.c:2460 msgid "/Tools/Pr_ivacy" msgstr "/Werkzeuge/Pri_vatsphäre" -#: ../src/gtkblist.c:2448 +#: ../src/gtkblist.c:2462 msgid "/Tools/_File Transfers" msgstr "/Werkzeuge/_Dateiübertragungen" -#: ../src/gtkblist.c:2449 +#: ../src/gtkblist.c:2463 msgid "/Tools/R_oom List" msgstr "/Werkzeuge/_Raumliste" -#: ../src/gtkblist.c:2450 +#: ../src/gtkblist.c:2464 msgid "/Tools/System _Log" msgstr "/Werkzeuge/_System-Mitschnitt" -#: ../src/gtkblist.c:2452 +#: ../src/gtkblist.c:2466 msgid "/Tools/Mute _Sounds" msgstr "/Werkzeuge/_Stummschalten" #. Help -#: ../src/gtkblist.c:2455 +#: ../src/gtkblist.c:2469 msgid "/_Help" msgstr "/_Hilfe" -#: ../src/gtkblist.c:2456 +#: ../src/gtkblist.c:2470 msgid "/Help/Online _Help" msgstr "/Hilfe/Online-_Hilfe" -#: ../src/gtkblist.c:2457 +#: ../src/gtkblist.c:2471 msgid "/Help/_Debug Window" msgstr "/Hilfe/_Debug-Fenster" -#: ../src/gtkblist.c:2458 +#: ../src/gtkblist.c:2472 msgid "/Help/_About" msgstr "/Hilfe/I_nfo" -#: ../src/gtkblist.c:2490 ../src/gtkblist.c:2559 +#: ../src/gtkblist.c:2504 ../src/gtkblist.c:2573 #, c-format msgid "" "\n" @@ -2613,7 +2612,7 @@ "\n" "<b>Konto:</b> %s" -#: ../src/gtkblist.c:2571 +#: ../src/gtkblist.c:2585 #, c-format msgid "" "\n" @@ -2622,7 +2621,7 @@ "\n" "<b>Buddy-Alias:</b> %s" -#: ../src/gtkblist.c:2583 +#: ../src/gtkblist.c:2597 #, c-format msgid "" "\n" @@ -2631,7 +2630,7 @@ "\n" "<b>Spitzname:</b> %s" -#: ../src/gtkblist.c:2592 +#: ../src/gtkblist.c:2606 #, c-format msgid "" "\n" @@ -2640,7 +2639,7 @@ "\n" "<b>Angemeldet:</b> %s" -#: ../src/gtkblist.c:2603 +#: ../src/gtkblist.c:2617 #, c-format msgid "" "\n" @@ -2649,7 +2648,7 @@ "\n" "<b>Untätig:</b> %s" -#: ../src/gtkblist.c:2638 +#: ../src/gtkblist.c:2652 #, c-format msgid "" "\n" @@ -2658,7 +2657,7 @@ "\n" "<b>Zuletzt gesehen:</b> vor %s" -#: ../src/gtkblist.c:2647 +#: ../src/gtkblist.c:2661 msgid "" "\n" "<b>Status:</b> Offline" @@ -2666,7 +2665,7 @@ "\n" "<b>Status:</b> Offline" -#: ../src/gtkblist.c:2658 +#: ../src/gtkblist.c:2672 msgid "" "\n" "<b>Description:</b> Spooky" @@ -2674,7 +2673,7 @@ "\n" "<b>Beschreibung:</b> Spooky" -#: ../src/gtkblist.c:2660 +#: ../src/gtkblist.c:2674 msgid "" "\n" "<b>Status:</b> Awesome" @@ -2682,7 +2681,7 @@ "\n" "<b>Status:</b> großartig" -#: ../src/gtkblist.c:2662 +#: ../src/gtkblist.c:2676 msgid "" "\n" "<b>Status:</b> Rockin'" @@ -2690,119 +2689,120 @@ "\n" "<b>Status:</b> Rockin'" -#: ../src/gtkblist.c:2951 +#: ../src/gtkblist.c:2967 #, c-format msgid "Idle %dh %02dm" msgstr "Untätig %dh %02dm" -#: ../src/gtkblist.c:2953 +#: ../src/gtkblist.c:2969 #, c-format msgid "Idle %dm" msgstr "Untätig %dm" #. Idle stuff -#: ../src/gtkblist.c:2956 ../src/gtkprefs.c:1760 -#: ../src/protocols/bonjour/bonjour.c:333 ../src/protocols/msn/msn.c:552 -#: ../src/protocols/msn/state.c:32 ../src/protocols/novell/novell.c:2854 -#: ../src/protocols/oscar/oscar.c:2844 ../src/protocols/yahoo/yahoo.c:2729 +#: ../src/gtkblist.c:2972 ../src/gtkprefs.c:1760 +#: ../src/protocols/bonjour/bonjour.c:333 ../src/protocols/jabber/buddy.c:641 +#: ../src/protocols/jabber/buddy.c:672 ../src/protocols/msn/msn.c:550 +#: ../src/protocols/msn/state.c:32 ../src/protocols/novell/novell.c:2852 +#: ../src/protocols/oscar/oscar.c:2844 ../src/protocols/yahoo/yahoo.c:2727 #: ../src/protocols/yahoo/yahoo_profile.c:691 msgid "Idle" msgstr "Untätig" -#: ../src/gtkblist.c:3088 +#: ../src/gtkblist.c:3104 msgid "/Buddies/New Instant Message..." msgstr "/Buddys/_Neue Sofortnachricht..." -#: ../src/gtkblist.c:3089 ../src/gtkblist.c:3122 +#: ../src/gtkblist.c:3105 ../src/gtkblist.c:3138 msgid "/Buddies/Join a Chat..." msgstr "/Buddys/Chat betreten..." -#: ../src/gtkblist.c:3090 +#: ../src/gtkblist.c:3106 msgid "/Buddies/Get User Info..." msgstr "/Buddys/B_enutzer-Info abrufen..." -#: ../src/gtkblist.c:3091 +#: ../src/gtkblist.c:3107 msgid "/Buddies/Add Buddy..." msgstr "/Buddys/B_uddy hinzufügen..." -#: ../src/gtkblist.c:3092 ../src/gtkblist.c:3125 +#: ../src/gtkblist.c:3108 ../src/gtkblist.c:3141 msgid "/Buddies/Add Chat..." msgstr "/Buddys/C_hat hinzufügen..." -#: ../src/gtkblist.c:3093 +#: ../src/gtkblist.c:3109 msgid "/Buddies/Add Group..." msgstr "/Buddys/Gruppe hinzufügen..." -#: ../src/gtkblist.c:3128 +#: ../src/gtkblist.c:3144 msgid "/Tools/Buddy Pounces" msgstr "/Werkzeuge/Buddy-Alarm" -#: ../src/gtkblist.c:3131 +#: ../src/gtkblist.c:3147 msgid "/Tools/Privacy" msgstr "/Werkzeuge/Privatsphäre" -#: ../src/gtkblist.c:3134 +#: ../src/gtkblist.c:3150 msgid "/Tools/Room List" msgstr "/Werkzeuge/Raumliste" -#: ../src/gtkblist.c:3328 +#: ../src/gtkblist.c:3344 msgid "Manually" msgstr "Manuell" -#: ../src/gtkblist.c:3330 +#: ../src/gtkblist.c:3346 msgid "Alphabetically" msgstr "Alphabetisch" -#: ../src/gtkblist.c:3331 +#: ../src/gtkblist.c:3347 msgid "By status" msgstr "Nach Status" -#: ../src/gtkblist.c:3332 +#: ../src/gtkblist.c:3348 msgid "By log size" msgstr "Nach Größe der Logs" -#: ../src/gtkblist.c:3532 ../src/gtkconn.c:196 +#: ../src/gtkblist.c:3549 ../src/gtkconn.c:184 #, c-format msgid "%s disconnected" msgstr "%s abgemeldet" -#: ../src/gtkblist.c:3548 ../src/protocols/sametime/sametime.c:3629 +#: ../src/gtkblist.c:3558 ../src/protocols/sametime/sametime.c:3622 msgid "Connect" msgstr "Verbinden" -#: ../src/gtkblist.c:3548 +#: ../src/gtkblist.c:3558 msgid "Re-enable Account" msgstr "Konten reaktivieren" -#: ../src/gtkblist.c:3570 +#: ../src/gtkblist.c:3579 #, c-format msgid "<span color=\"red\">%s disconnected: %s</span>" msgstr "<span color=\"red\">%s abgemeldet: %s</span>" -#: ../src/gtkblist.c:3697 +#: ../src/gtkblist.c:3706 msgid "/Accounts" msgstr "/Konten" #. set the Show Offline Buddies option. must be done #. * after the treeview or faceprint gets mad. -Robot101 #. -#: ../src/gtkblist.c:3802 +#: ../src/gtkblist.c:3811 msgid "/Buddies/Show Offline Buddies" msgstr "/Buddys/Zeige Offline Buddys" -#: ../src/gtkblist.c:3805 +#: ../src/gtkblist.c:3814 msgid "/Buddies/Show Empty Groups" msgstr "/Buddys/Zeige leere Gruppen" -#: ../src/gtkblist.c:3811 +#: ../src/gtkblist.c:3820 msgid "/Buddies/Show Buddy Details" msgstr "/Buddys/Zeige Buddy-Details" -#: ../src/gtkblist.c:3814 +#: ../src/gtkblist.c:3823 msgid "/Buddies/Show Idle Times" msgstr "/Buddys/Zeige Untätigkeitszeiten" -#: ../src/gtkblist.c:4550 +#: ../src/gtkblist.c:4556 msgid "" "Please enter the screen name of the person you would like to add to your " "buddy list. You may optionally enter an alias, or nickname, for the buddy. " @@ -2814,25 +2814,25 @@ "immer es möglich ist.\n" #. Set up stuff for the account box -#: ../src/gtkblist.c:4620 ../src/gtkblist.c:4939 +#: ../src/gtkblist.c:4626 ../src/gtkblist.c:4945 msgid "Account:" msgstr "Konto:" -#: ../src/gtkblist.c:4872 +#: ../src/gtkblist.c:4878 msgid "This protocol does not support chat rooms." msgstr "Dieses Protokoll unterstützt keine Chaträume." -#: ../src/gtkblist.c:4888 +#: ../src/gtkblist.c:4894 msgid "" "You are not currently signed on with any protocols that have the ability to " "chat." msgstr "Sie sind derzeit mit keinem Chat-fähigen Protokoll angemeldet." -#: ../src/gtkblist.c:4905 +#: ../src/gtkblist.c:4911 msgid "Add Chat" msgstr "Chat hinzufügen" -#: ../src/gtkblist.c:4929 +#: ../src/gtkblist.c:4935 msgid "" "Please enter an alias, and the appropriate information about the chat you " "would like to add to your buddy list.\n" @@ -2840,40 +2840,40 @@ "Bitte geben Sie einen Alias und geeignete Informationen über den Chat ein, " "den Sie in Ihre Buddy-Liste aufnehmen wollen.\n" -#: ../src/gtkblist.c:5011 ../src/protocols/sametime/sametime.c:5318 -#: ../src/protocols/sametime/sametime.c:5405 +#: ../src/gtkblist.c:5017 ../src/protocols/sametime/sametime.c:5316 +#: ../src/protocols/sametime/sametime.c:5403 msgid "Add Group" msgstr "Gruppe hinzufügen" -#: ../src/gtkblist.c:5012 +#: ../src/gtkblist.c:5018 msgid "Please enter the name of the group to be added." msgstr "Bitte geben Sie den Namen der Gruppe ein, die hinzugefügt werden soll." -#: ../src/gtkblist.c:5631 +#: ../src/gtkblist.c:5637 msgid "_Edit Account" msgstr "Konto _bearbeiten" -#: ../src/gtkblist.c:5664 ../src/gtkblist.c:5670 +#: ../src/gtkblist.c:5670 ../src/gtkblist.c:5676 ../src/gtkconv.c:2747 msgid "No actions available" msgstr "Keine Aktionen verfügbar" -#: ../src/gtkblist.c:5678 +#: ../src/gtkblist.c:5684 msgid "_Disable" msgstr "_Deaktivieren" -#: ../src/gtkblist.c:5690 +#: ../src/gtkblist.c:5696 msgid "Enable Account" msgstr "Konten aktivieren" -#: ../src/gtkblist.c:5743 +#: ../src/gtkblist.c:5749 msgid "/Tools" msgstr "/Werkzeuge" -#: ../src/gtkblist.c:5829 +#: ../src/gtkblist.c:5835 msgid "/Buddies/Sort Buddies" msgstr "/Buddys/Buddys _sortieren" -#: ../src/gtkconn.c:197 +#: ../src/gtkconn.c:185 #, c-format msgid "" "%s was disconnected due to an error: %s\n" @@ -2901,48 +2901,48 @@ "zu erhalten.\n" "Die folgenden Kommandos sind in diesem Kontext verfügbar:\n" -#: ../src/gtkconv.c:482 +#: ../src/gtkconv.c:478 msgid "No such command." msgstr "Es gibt kein solches Kommando." -#: ../src/gtkconv.c:489 +#: ../src/gtkconv.c:485 msgid "Syntax Error: You typed the wrong number of arguments to that command." msgstr "" "Syntaxfehler: Sie übergaben dem Kommando eine falsche Anzahl von Argumenten." -#: ../src/gtkconv.c:494 +#: ../src/gtkconv.c:490 msgid "Your command failed for an unknown reason." msgstr "Ihre Kommando scheiterte aus einem unbekannten Grund." -#: ../src/gtkconv.c:501 +#: ../src/gtkconv.c:497 msgid "That command only works in chats, not IMs." msgstr "Dieses Kommando funktioniert nur in Chats, nicht bei IMs." -#: ../src/gtkconv.c:504 +#: ../src/gtkconv.c:500 msgid "That command only works in IMs, not chats." msgstr "Dieses Kommando funktioniert nur bei IMs, nicht bei Chats." -#: ../src/gtkconv.c:508 +#: ../src/gtkconv.c:504 msgid "That command doesn't work on this protocol." msgstr "Dieses Kommando funktioniert nicht in diesem Protokoll." -#: ../src/gtkconv.c:742 ../src/gtkconv.c:768 +#: ../src/gtkconv.c:739 ../src/gtkconv.c:765 msgid "That buddy is not on the same protocol as this chat." msgstr "Der Buddy hat nicht das gleiche Protokoll wie dieser Chat." -#: ../src/gtkconv.c:762 +#: ../src/gtkconv.c:759 msgid "" "You are not currently signed on with an account that can invite that buddy." msgstr "" "Sie sind im Moment nicht mit einem Konto angemeldet, welches benutzt werden " "kann, um diesen Buddy einzuladen." -#: ../src/gtkconv.c:815 +#: ../src/gtkconv.c:812 msgid "Invite Buddy Into Chat Room" msgstr "Buddy in einen Chatraum einladen" #. Put our happy label in it. -#: ../src/gtkconv.c:845 +#: ../src/gtkconv.c:842 msgid "" "Please enter the name of the user you wish to invite, along with an optional " "invite message." @@ -2950,318 +2950,330 @@ "Bitte geben Sie den Benutzernamen der Person ein, die Sie einladen möchten " "zusammen mit einer optionalen Einladungsnachricht." -#: ../src/gtkconv.c:866 +#: ../src/gtkconv.c:863 msgid "_Buddy:" msgstr "_Buddy:" -#: ../src/gtkconv.c:886 ../src/gtksavedstatuses.c:1107 -#: ../src/gtksavedstatuses.c:1443 +#: ../src/gtkconv.c:883 ../src/gtksavedstatuses.c:1111 +#: ../src/gtksavedstatuses.c:1447 msgid "_Message:" msgstr "_Nachricht:" -#: ../src/gtkconv.c:943 ../src/gtkconv.c:2378 ../src/gtkdebug.c:217 +#: ../src/gtkconv.c:940 ../src/gtkconv.c:2364 ../src/gtkdebug.c:217 #: ../src/gtkft.c:490 msgid "Unable to open file." msgstr "Konnte die Datei nicht öffnen." -#: ../src/gtkconv.c:949 +#: ../src/gtkconv.c:946 #, c-format msgid "<h1>Conversation with %s</h1>\n" msgstr "<h1>Unterhaltung mit %s</h1>\n" -#: ../src/gtkconv.c:973 +#: ../src/gtkconv.c:970 msgid "Save Conversation" msgstr "Unterhaltung speichern" -#: ../src/gtkconv.c:1094 ../src/gtkdebug.c:165 ../src/gtkdebug.c:678 +#: ../src/gtkconv.c:1091 ../src/gtkdebug.c:165 ../src/gtkdebug.c:678 msgid "Find" msgstr "Suchen" -#: ../src/gtkconv.c:1120 ../src/gtkdebug.c:193 +#: ../src/gtkconv.c:1117 ../src/gtkdebug.c:193 msgid "_Search for:" msgstr "_Suche nach:" -#: ../src/gtkconv.c:1291 +#: ../src/gtkconv.c:1288 msgid "Logging started. Future messages in this conversation will be logged." msgstr "" "Mitschnitt gestartet. Zukünftige Nachrichten dieser Unterhaltung werden " "mitgeschnitten." -#: ../src/gtkconv.c:1299 +#: ../src/gtkconv.c:1296 msgid "" "Logging stopped. Future messages in this conversation will not be logged." msgstr "" "Mitschnitt angehalten. Zukünftige Nachrichten dieser Unterhaltung werden " "nicht mitgeschnitten." -#: ../src/gtkconv.c:1560 +#: ../src/gtkconv.c:1558 msgid "IM" msgstr "Nachricht" -#: ../src/gtkconv.c:1571 ../src/protocols/oscar/oscar.c:640 +#: ../src/gtkconv.c:1569 ../src/protocols/oscar/oscar.c:640 msgid "Send File" msgstr "Datei versenden" -#: ../src/gtkconv.c:1586 +#: ../src/gtkconv.c:1584 msgid "Un-Ignore" msgstr "Nicht Ignorieren" -#: ../src/gtkconv.c:1589 +#: ../src/gtkconv.c:1587 msgid "Ignore" msgstr "Ignorieren" -#: ../src/gtkconv.c:1599 +#: ../src/gtkconv.c:1597 msgid "Info" msgstr "Info" -#: ../src/gtkconv.c:1609 +#: ../src/gtkconv.c:1607 msgid "Get Away Message" msgstr "Neue Abwesenheitsnachricht abholen" -#: ../src/gtkconv.c:1632 +#: ../src/gtkconv.c:1630 msgid "Last said" msgstr "Zuletzt gesagt" -#: ../src/gtkconv.c:2386 +#: ../src/gtkconv.c:2372 msgid "Unable to save icon file to disk." msgstr "Kann Icon-Datei nicht auf die Festplatte speichern." -#: ../src/gtkconv.c:2410 +#: ../src/gtkconv.c:2396 msgid "Save Icon" msgstr "Icon speichern" -#: ../src/gtkconv.c:2459 +#: ../src/gtkconv.c:2445 msgid "Animate" msgstr "Animieren" -#: ../src/gtkconv.c:2464 +#: ../src/gtkconv.c:2450 msgid "Hide Icon" msgstr "Icon verbergen" -#: ../src/gtkconv.c:2470 +#: ../src/gtkconv.c:2456 msgid "Save Icon As..." msgstr "Icon speichern unter..." #. Conversation menu -#: ../src/gtkconv.c:2611 +#: ../src/gtkconv.c:2596 msgid "/_Conversation" msgstr "/_Unterhaltung" -#: ../src/gtkconv.c:2613 +#: ../src/gtkconv.c:2598 msgid "/Conversation/New Instant _Message..." msgstr "/Unterhaltung/_Neue Sofortnachricht..." -#: ../src/gtkconv.c:2618 +#: ../src/gtkconv.c:2603 msgid "/Conversation/_Find..." msgstr "/Unterhaltung/_Finden..." -#: ../src/gtkconv.c:2620 +#: ../src/gtkconv.c:2605 msgid "/Conversation/View _Log" msgstr "/Unterhaltung/Betrachte _Mitschnitt" -#: ../src/gtkconv.c:2621 +#: ../src/gtkconv.c:2606 msgid "/Conversation/_Save As..." msgstr "/Unterhaltung/_Speichern als..." -#: ../src/gtkconv.c:2623 +#: ../src/gtkconv.c:2608 msgid "/Conversation/Clea_r Scrollback" msgstr "/Unterhaltung/_Leeren" -#: ../src/gtkconv.c:2627 +#: ../src/gtkconv.c:2612 msgid "/Conversation/Se_nd File..." msgstr "/Unterhaltung/Datei _senden..." -#: ../src/gtkconv.c:2628 +#: ../src/gtkconv.c:2613 msgid "/Conversation/Add Buddy _Pounce..." msgstr "/Unterhaltung/Buddy-Alar_m hinzufügen..." -#: ../src/gtkconv.c:2630 +#: ../src/gtkconv.c:2615 msgid "/Conversation/_Get Info" msgstr "/Unterhaltung/B_enutzer-Info abrufen" -#: ../src/gtkconv.c:2632 +#: ../src/gtkconv.c:2617 msgid "/Conversation/In_vite..." msgstr "/Unterhaltung/_Einladen..." -#: ../src/gtkconv.c:2637 +#: ../src/gtkconv.c:2619 +msgid "/Conversation/M_ore" +msgstr "/Unterhaltung/M_ehr" + +#: ../src/gtkconv.c:2623 msgid "/Conversation/Al_ias..." msgstr "/Unterhaltung/Al_ias..." -#: ../src/gtkconv.c:2639 +#: ../src/gtkconv.c:2625 msgid "/Conversation/_Block..." msgstr "/Unterhaltung/_Blockieren..." -#: ../src/gtkconv.c:2641 +#: ../src/gtkconv.c:2627 msgid "/Conversation/_Add..." msgstr "/Unterhaltung/_Hinzufügen..." -#: ../src/gtkconv.c:2643 +#: ../src/gtkconv.c:2629 msgid "/Conversation/_Remove..." msgstr "/Unterhaltung/_Entfernen..." -#: ../src/gtkconv.c:2648 +#: ../src/gtkconv.c:2634 msgid "/Conversation/Insert Lin_k..." msgstr "/Unterhaltung/Füge Lin_k ein..." -#: ../src/gtkconv.c:2650 +#: ../src/gtkconv.c:2636 msgid "/Conversation/Insert Imag_e..." msgstr "/Unterhaltung/Füge Bil_d ein ..." -#: ../src/gtkconv.c:2655 +#: ../src/gtkconv.c:2641 msgid "/Conversation/_Close" msgstr "/Unterhaltung/S_chließen" #. Options -#: ../src/gtkconv.c:2659 +#: ../src/gtkconv.c:2645 msgid "/_Options" msgstr "/_Optionen" -#: ../src/gtkconv.c:2660 +#: ../src/gtkconv.c:2646 msgid "/Options/Enable _Logging" msgstr "/Optionen/Schalte _Mitschnitt ein" -#: ../src/gtkconv.c:2661 +#: ../src/gtkconv.c:2647 msgid "/Options/Enable _Sounds" msgstr "/Optionen/Schalte _Klänge ein" -#: ../src/gtkconv.c:2662 +#: ../src/gtkconv.c:2648 msgid "/Options/Show Buddy _Icon" msgstr "/Optionen/Buddy-_Icon anzeigen" -#: ../src/gtkconv.c:2664 +#: ../src/gtkconv.c:2650 msgid "/Options/Show Formatting _Toolbars" msgstr "/Optionen/Zeige _Werkzeugleisten für Formatierung" -#: ../src/gtkconv.c:2665 +#: ../src/gtkconv.c:2651 msgid "/Options/Show Ti_mestamps" msgstr "/Optionen/Zeige Zeitste_mpel" -#: ../src/gtkconv.c:2757 +#: ../src/gtkconv.c:2726 +msgid "/Conversation/More" +msgstr "/Unterhaltung/Mehr" + +#: ../src/gtkconv.c:2764 ../src/gtkconv.c:2791 +msgid "/Conversation" +msgstr "/Unterhaltung" + +#: ../src/gtkconv.c:2801 msgid "/Conversation/View Log" msgstr "/Unterhaltung/Betrachte Mitschnitt" -#: ../src/gtkconv.c:2763 +#: ../src/gtkconv.c:2807 msgid "/Conversation/Send File..." msgstr "/Unterhaltung/Datei senden ..." -#: ../src/gtkconv.c:2767 +#: ../src/gtkconv.c:2811 msgid "/Conversation/Add Buddy Pounce..." msgstr "/Unterhaltung/Buddy-Alarm hinzufügen..." -#: ../src/gtkconv.c:2773 +#: ../src/gtkconv.c:2817 msgid "/Conversation/Get Info" msgstr "/Unterhaltung/Info abrufen" -#: ../src/gtkconv.c:2777 +#: ../src/gtkconv.c:2821 msgid "/Conversation/Invite..." msgstr "/Unterhaltung/Einladen ..." -#: ../src/gtkconv.c:2783 +#: ../src/gtkconv.c:2827 msgid "/Conversation/Alias..." msgstr "/Unterhaltung/Alias..." -#: ../src/gtkconv.c:2787 +#: ../src/gtkconv.c:2831 msgid "/Conversation/Block..." msgstr "/Unterhaltung/Blockieren..." -#: ../src/gtkconv.c:2791 +#: ../src/gtkconv.c:2835 msgid "/Conversation/Add..." msgstr "/Unterhaltung/Hinzufügen..." -#: ../src/gtkconv.c:2795 +#: ../src/gtkconv.c:2839 msgid "/Conversation/Remove..." msgstr "/Unterhaltung/Entfernen..." -#: ../src/gtkconv.c:2801 +#: ../src/gtkconv.c:2845 msgid "/Conversation/Insert Link..." msgstr "/Unterhaltung/Füge Link ein..." -#: ../src/gtkconv.c:2805 +#: ../src/gtkconv.c:2849 msgid "/Conversation/Insert Image..." msgstr "/Unterhaltung/Füge Bild ein ..." -#: ../src/gtkconv.c:2811 +#: ../src/gtkconv.c:2855 msgid "/Options/Enable Logging" msgstr "/Optionen/Schalte Mitschnitt ein" -#: ../src/gtkconv.c:2814 +#: ../src/gtkconv.c:2858 msgid "/Options/Enable Sounds" msgstr "/Optionen/Schalte Klänge ein" -#: ../src/gtkconv.c:2827 +#: ../src/gtkconv.c:2871 msgid "/Options/Show Formatting Toolbars" msgstr "/Optionen/Zeige Werkzeugleisten für Formatierung" -#: ../src/gtkconv.c:2830 +#: ../src/gtkconv.c:2874 msgid "/Options/Show Timestamps" msgstr "/Optionen/Zeige Zeitstempel" -#: ../src/gtkconv.c:2833 +#: ../src/gtkconv.c:2877 msgid "/Options/Show Buddy Icon" msgstr "/Optionen/Zeige Buddy-Icon" -#: ../src/gtkconv.c:2913 +#: ../src/gtkconv.c:2953 msgid "User is typing..." msgstr "Benutzer tippt gerade..." -#: ../src/gtkconv.c:2916 +#: ../src/gtkconv.c:2956 msgid "User has typed something and stopped" msgstr "Benutzer hat etwas getippt und wartet nun" #. Build the Send To menu -#: ../src/gtkconv.c:3099 +#: ../src/gtkconv.c:3139 msgid "_Send To" msgstr "_Senden an" -#: ../src/gtkconv.c:3751 +#: ../src/gtkconv.c:3791 msgid "_Send" msgstr "Ab_schicken" -#: ../src/gtkconv.c:3806 ../src/protocols/sametime/sametime.c:3571 +#: ../src/gtkconv.c:3846 ../src/protocols/sametime/sametime.c:3564 msgid "Topic:" msgstr "Thema:" #. Setup the label telling how many people are in the room. -#: ../src/gtkconv.c:3858 +#: ../src/gtkconv.c:3898 msgid "0 people in room" msgstr "0 Personen im Raum" -#: ../src/gtkconv.c:3937 +#: ../src/gtkconv.c:3977 msgid "IM the user" msgstr "Benutzer eine IM schicken" -#: ../src/gtkconv.c:3950 +#: ../src/gtkconv.c:3990 msgid "Ignore the user" msgstr "Benutzer ignorieren" -#: ../src/gtkconv.c:3962 +#: ../src/gtkconv.c:4002 msgid "Get the user's information" msgstr "Information zum Benutzer abrufen" -#: ../src/gtkconv.c:4944 ../src/gtkconv.c:5053 +#: ../src/gtkconv.c:4993 ../src/gtkconv.c:5102 #, c-format msgid "%d person in room" msgid_plural "%d people in room" msgstr[0] "%d Person im Raum" msgstr[1] "%d Personen im Raum" -#: ../src/gtkconv.c:5610 ../src/gtkstatusbox.c:366 +#: ../src/gtkconv.c:5659 ../src/gtkstatusbox.c:366 msgid "Typing" msgstr "Tippt gerade" -#: ../src/gtkconv.c:5616 +#: ../src/gtkconv.c:5665 msgid "Stopped Typing" msgstr "Tippen gestoppt" -#: ../src/gtkconv.c:5621 +#: ../src/gtkconv.c:5670 msgid "Nick Said" msgstr "Spitzname gesagt" -#: ../src/gtkconv.c:5631 +#: ../src/gtkconv.c:5680 msgid "New Event" msgstr "Neue Ereignisse" -#: ../src/gtkconv.c:6521 +#: ../src/gtkconv.c:6570 msgid "" "say <message>: Send a message normally as if you weren't using a " "command." @@ -3269,13 +3281,13 @@ "say <Nachricht>: Sendet eine Nachricht genau so, als wenn Sie die " "Nachricht ohne ein Kommando absenden." -#: ../src/gtkconv.c:6524 +#: ../src/gtkconv.c:6573 msgid "me <action>: Send an IRC style action to a buddy or chat." msgstr "" "me <Aktion>: Sende eine IRC-ähnliche Aktion an einen Buddy oder einen " "Chat." -#: ../src/gtkconv.c:6527 +#: ../src/gtkconv.c:6576 msgid "" "debug <option>: Send various debug information to the current " "conversation." @@ -3283,60 +3295,60 @@ "debug <Option>: Verschiedene Debugging-Informationen zur aktuellen " "Unterhaltung senden." -#: ../src/gtkconv.c:6530 +#: ../src/gtkconv.c:6579 msgid "clear: Clears the conversation scrollback." msgstr "clear: Leert das Gesprächsfenster." -#: ../src/gtkconv.c:6533 +#: ../src/gtkconv.c:6582 msgid "help <command>: Help on a specific command." msgstr "help <Kommando>: Hilfe zu einem bestimmten Kommando." -#: ../src/gtkconv.c:6692 +#: ../src/gtkconv.c:6741 msgid "Confirm close" msgstr "Schließen bestätigen" -#: ../src/gtkconv.c:6724 +#: ../src/gtkconv.c:6773 msgid "You have unread messages. Are you sure you want to close the window?" msgstr "" "Sie haben ungelesene Nachrichten. Wollen Sie das Fenster wirklich schließen?" -#: ../src/gtkconv.c:7246 +#: ../src/gtkconv.c:7295 msgid "Close other tabs" msgstr "Andere Reiter schließen" -#: ../src/gtkconv.c:7252 +#: ../src/gtkconv.c:7301 msgid "Close all tabs" msgstr "Alle Reiter schließen" -#: ../src/gtkconv.c:7260 +#: ../src/gtkconv.c:7309 msgid "Detach this tab" msgstr "Diesen Reiter ablösen" -#: ../src/gtkconv.c:7266 +#: ../src/gtkconv.c:7315 msgid "Close this tab" msgstr "Diesen Reiter schließen" -#: ../src/gtkconv.c:7526 +#: ../src/gtkconv.c:7575 msgid "Close conversation" msgstr "Unterhaltung schließen" -#: ../src/gtkconv.c:7990 +#: ../src/gtkconv.c:8039 msgid "Last created window" msgstr "Letztes erstelltes Fenster" -#: ../src/gtkconv.c:7992 +#: ../src/gtkconv.c:8041 msgid "Separate IM and Chat windows" msgstr "Getrennte IM- und Chat-Fenster" -#: ../src/gtkconv.c:7994 ../src/gtkprefs.c:1258 +#: ../src/gtkconv.c:8043 ../src/gtkprefs.c:1258 msgid "New window" msgstr "Neues Fenster" -#: ../src/gtkconv.c:7996 +#: ../src/gtkconv.c:8045 msgid "By group" msgstr "Nach Gruppe" -#: ../src/gtkconv.c:7998 +#: ../src/gtkconv.c:8047 msgid "By account" msgstr "Nach Konto" @@ -3421,7 +3433,7 @@ msgid "original author" msgstr "Originalautor" -#: ../src/gtkdialogs.c:110 ../src/gtkdialogs.c:111 ../src/gtkdialogs.c:169 +#: ../src/gtkdialogs.c:110 ../src/gtkdialogs.c:111 ../src/gtkdialogs.c:174 msgid "Bulgarian" msgstr "Bulgarisch" @@ -3433,186 +3445,194 @@ msgid "Bosnian" msgstr "Bosnisch" -#: ../src/gtkdialogs.c:115 ../src/gtkdialogs.c:170 ../src/gtkdialogs.c:171 +#: ../src/gtkdialogs.c:115 ../src/gtkdialogs.c:175 ../src/gtkdialogs.c:176 msgid "Catalan" msgstr "Katalanisch" -#: ../src/gtkdialogs.c:116 -msgid "Valencian" -msgstr "Valencianisch" +#: ../src/gtkdialogs.c:116 ../src/gtkdialogs.c:117 +msgid "Valencian-Catalan" +msgstr "Valencianisch-Katalanisch" -#: ../src/gtkdialogs.c:117 ../src/gtkdialogs.c:172 +#: ../src/gtkdialogs.c:118 ../src/gtkdialogs.c:177 msgid "Czech" msgstr "Tschechisch" -#: ../src/gtkdialogs.c:118 +#: ../src/gtkdialogs.c:119 msgid "Danish" msgstr "Dänisch" -#: ../src/gtkdialogs.c:119 ../src/gtkdialogs.c:120 ../src/gtkdialogs.c:173 +#: ../src/gtkdialogs.c:120 ../src/gtkdialogs.c:121 ../src/gtkdialogs.c:178 msgid "German" msgstr "Deutsch" -#: ../src/gtkdialogs.c:121 ../src/gtkdialogs.c:122 +#: ../src/gtkdialogs.c:122 ../src/gtkdialogs.c:123 msgid "Greek" msgstr "Griechisch" -#: ../src/gtkdialogs.c:123 +#: ../src/gtkdialogs.c:124 msgid "Australian English" msgstr "Australisches Englisch" -#: ../src/gtkdialogs.c:124 +#: ../src/gtkdialogs.c:125 msgid "Canadian English" msgstr "Kanadisches Englisch" -#: ../src/gtkdialogs.c:125 +#: ../src/gtkdialogs.c:126 msgid "British English" msgstr "Britisches Englisch" -#: ../src/gtkdialogs.c:126 ../src/gtkdialogs.c:174 ../src/gtkdialogs.c:175 -#: ../src/gtkdialogs.c:176 ../src/gtkdialogs.c:177 +#: ../src/gtkdialogs.c:127 ../src/gtkdialogs.c:179 ../src/gtkdialogs.c:180 +#: ../src/gtkdialogs.c:181 ../src/gtkdialogs.c:182 msgid "Spanish" msgstr "Spanisch" -#: ../src/gtkdialogs.c:127 ../src/gtkdialogs.c:128 +#: ../src/gtkdialogs.c:128 ../src/gtkdialogs.c:129 +msgid ... [truncated message content] |
From: <sa...@us...> - 2006-08-09 06:23:48
|
Revision: 16678 Author: sadrul Date: 2006-08-08 23:23:18 -0700 (Tue, 08 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16678&view=rev Log Message: ----------- Show timestamps (or not) in conversations. Modified Paths: -------------- trunk/console/gntconv.c trunk/console/libgnt/gntutils.c Modified: trunk/console/gntconv.c =================================================================== --- trunk/console/gntconv.c 2006-08-09 04:49:19 UTC (rev 16677) +++ trunk/console/gntconv.c 2006-08-09 06:23:18 UTC (rev 16678) @@ -229,6 +229,9 @@ g_return_if_fail(ggconv != NULL); + if (gaim_prefs_get_bool("/gaim/gnt/conversations/timestamps")) + gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), + gaim_utf8_strftime("(%H:%M:%S) ", localtime(&mtime)), GNT_TEXT_FLAG_DIM); if (who && *who && (flags & (GAIM_MESSAGE_SEND | GAIM_MESSAGE_RECV))) { char * name = g_strdup_printf("%s: ", who); Modified: trunk/console/libgnt/gntutils.c =================================================================== --- trunk/console/libgnt/gntutils.c 2006-08-09 04:49:19 UTC (rev 16677) +++ trunk/console/libgnt/gntutils.c 2006-08-09 06:23:18 UTC (rev 16678) @@ -8,23 +8,26 @@ /* XXX: ew ... everyone look away */ last = s; - while (*s) + if (s) { - if (*s == '\n' || *s == '\r') + while (*s) { - count++; - len = g_utf8_pointer_to_offset(last, s); - if (max < len) - max = len; - last = s + 1; + if (*s == '\n' || *s == '\r') + { + count++; + len = g_utf8_pointer_to_offset(last, s); + if (max < len) + max = len; + last = s + 1; + } + s++; } - s++; + + len = g_utf8_pointer_to_offset(last, s); + if (max < len) + max = len; } - len = g_utf8_pointer_to_offset(last, s); - if (max < len) - max = len; - if (height) *height = count; if (width) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2006-08-09 04:52:51
|
Revision: 16677 Author: roast Date: 2006-08-08 21:49:19 -0700 (Tue, 08 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16677&view=rev Log Message: ----------- merged with svn trunk. 16597:16676. Modified Paths: -------------- branches/soc-2006-file-loggers/COPYRIGHT branches/soc-2006-file-loggers/ChangeLog branches/soc-2006-file-loggers/Makefile.mingw branches/soc-2006-file-loggers/configure.ac branches/soc-2006-file-loggers/console/Makefile branches/soc-2006-file-loggers/console/gntaccount.c branches/soc-2006-file-loggers/console/gntblist.c branches/soc-2006-file-loggers/console/gntblist.h branches/soc-2006-file-loggers/console/gntconv.c branches/soc-2006-file-loggers/console/gntdebug.c branches/soc-2006-file-loggers/console/gntdebug.h branches/soc-2006-file-loggers/console/gntgaim.c branches/soc-2006-file-loggers/console/gntprefs.c branches/soc-2006-file-loggers/console/gntprefs.h branches/soc-2006-file-loggers/console/gntrequest.c branches/soc-2006-file-loggers/console/gntui.c branches/soc-2006-file-loggers/console/libgnt/Makefile.am branches/soc-2006-file-loggers/console/libgnt/gntbox.c branches/soc-2006-file-loggers/console/libgnt/gntbox.h branches/soc-2006-file-loggers/console/libgnt/gntbutton.c branches/soc-2006-file-loggers/console/libgnt/gntcombobox.c branches/soc-2006-file-loggers/console/libgnt/gntentry.c branches/soc-2006-file-loggers/console/libgnt/gntlabel.c branches/soc-2006-file-loggers/console/libgnt/gntline.c branches/soc-2006-file-loggers/console/libgnt/gntmain.c branches/soc-2006-file-loggers/console/libgnt/gntstyle.c branches/soc-2006-file-loggers/console/libgnt/gntstyle.h branches/soc-2006-file-loggers/console/libgnt/gnttextview.c branches/soc-2006-file-loggers/console/libgnt/gnttextview.h branches/soc-2006-file-loggers/console/libgnt/gnttree.c branches/soc-2006-file-loggers/console/libgnt/gnttree.h branches/soc-2006-file-loggers/console/libgnt/gntwidget.c branches/soc-2006-file-loggers/console/libgnt/gntwidget.h branches/soc-2006-file-loggers/console/libgnt/test/combo.c branches/soc-2006-file-loggers/console/libgnt/test/multiwin.c branches/soc-2006-file-loggers/console/libgnt/test/tv.c branches/soc-2006-file-loggers/doc/Makefile.am branches/soc-2006-file-loggers/doc/gaim.1.in branches/soc-2006-file-loggers/doc/gaims_funniest_home_convos.txt branches/soc-2006-file-loggers/gaim.spec.in branches/soc-2006-file-loggers/pixmaps/status/default/Makefile.am branches/soc-2006-file-loggers/plugins/codeinline.c branches/soc-2006-file-loggers/plugins/contact_priority.c branches/soc-2006-file-loggers/plugins/dbus-example.c branches/soc-2006-file-loggers/plugins/history.c branches/soc-2006-file-loggers/plugins/log_reader.c branches/soc-2006-file-loggers/plugins/timestamp.c branches/soc-2006-file-loggers/po/POTFILES.in branches/soc-2006-file-loggers/src/account.c branches/soc-2006-file-loggers/src/accountopt.c branches/soc-2006-file-loggers/src/blist.c branches/soc-2006-file-loggers/src/buddyicon.c branches/soc-2006-file-loggers/src/cipher.c branches/soc-2006-file-loggers/src/cmds.c branches/soc-2006-file-loggers/src/connection.c branches/soc-2006-file-loggers/src/conversation.c branches/soc-2006-file-loggers/src/core.c branches/soc-2006-file-loggers/src/dbus-define-api.h branches/soc-2006-file-loggers/src/dbus-server.h branches/soc-2006-file-loggers/src/dbus-useful.c branches/soc-2006-file-loggers/src/dbus-useful.h branches/soc-2006-file-loggers/src/ft.c branches/soc-2006-file-loggers/src/gaim-client-example.c branches/soc-2006-file-loggers/src/gaim-client.c branches/soc-2006-file-loggers/src/gtkaccount.c branches/soc-2006-file-loggers/src/gtkblist.c branches/soc-2006-file-loggers/src/gtkconv.c branches/soc-2006-file-loggers/src/gtkdebug.c branches/soc-2006-file-loggers/src/gtkdialogs.c branches/soc-2006-file-loggers/src/gtkft.c branches/soc-2006-file-loggers/src/gtkimhtml.c branches/soc-2006-file-loggers/src/gtkimhtmltoolbar.c branches/soc-2006-file-loggers/src/gtklog.c branches/soc-2006-file-loggers/src/gtkpluginpref.c branches/soc-2006-file-loggers/src/gtkpounce.c branches/soc-2006-file-loggers/src/gtkprefs.c branches/soc-2006-file-loggers/src/gtkprivacy.c branches/soc-2006-file-loggers/src/gtkrequest.c branches/soc-2006-file-loggers/src/gtkroomlist.c branches/soc-2006-file-loggers/src/gtksound.c branches/soc-2006-file-loggers/src/gtkstatusbox.c branches/soc-2006-file-loggers/src/gtkthemes.c branches/soc-2006-file-loggers/src/gtkutils.c branches/soc-2006-file-loggers/src/imgstore.c branches/soc-2006-file-loggers/src/log.c branches/soc-2006-file-loggers/src/mime.c branches/soc-2006-file-loggers/src/mime.h branches/soc-2006-file-loggers/src/notify.c branches/soc-2006-file-loggers/src/plugin.c branches/soc-2006-file-loggers/src/pluginpref.c branches/soc-2006-file-loggers/src/pounce.c branches/soc-2006-file-loggers/src/prefs.c branches/soc-2006-file-loggers/src/protocols/Makefile.am branches/soc-2006-file-loggers/src/protocols/bonjour/jabber.c branches/soc-2006-file-loggers/src/protocols/jabber/jabber.c branches/soc-2006-file-loggers/src/protocols/msn/servconn.c branches/soc-2006-file-loggers/src/protocols/oscar/oft.c branches/soc-2006-file-loggers/src/protocols/oscar/oscar.c branches/soc-2006-file-loggers/src/protocols/qq/Makefile.am branches/soc-2006-file-loggers/src/protocols/qq/Makefile.mingw branches/soc-2006-file-loggers/src/protocols/qq/buddy_info.c branches/soc-2006-file-loggers/src/protocols/qq/buddy_info.h branches/soc-2006-file-loggers/src/protocols/qq/buddy_list.c branches/soc-2006-file-loggers/src/protocols/qq/buddy_list.h branches/soc-2006-file-loggers/src/protocols/qq/buddy_opt.c branches/soc-2006-file-loggers/src/protocols/qq/buddy_opt.h branches/soc-2006-file-loggers/src/protocols/qq/buddy_status.c branches/soc-2006-file-loggers/src/protocols/qq/buddy_status.h branches/soc-2006-file-loggers/src/protocols/qq/char_conv.c branches/soc-2006-file-loggers/src/protocols/qq/char_conv.h branches/soc-2006-file-loggers/src/protocols/qq/crypt.c branches/soc-2006-file-loggers/src/protocols/qq/crypt.h branches/soc-2006-file-loggers/src/protocols/qq/file_trans.c branches/soc-2006-file-loggers/src/protocols/qq/file_trans.h branches/soc-2006-file-loggers/src/protocols/qq/group.c branches/soc-2006-file-loggers/src/protocols/qq/group.h branches/soc-2006-file-loggers/src/protocols/qq/group_conv.c branches/soc-2006-file-loggers/src/protocols/qq/group_conv.h branches/soc-2006-file-loggers/src/protocols/qq/group_find.c branches/soc-2006-file-loggers/src/protocols/qq/group_find.h branches/soc-2006-file-loggers/src/protocols/qq/group_free.c branches/soc-2006-file-loggers/src/protocols/qq/group_free.h branches/soc-2006-file-loggers/src/protocols/qq/group_hash.c branches/soc-2006-file-loggers/src/protocols/qq/group_hash.h branches/soc-2006-file-loggers/src/protocols/qq/group_im.c branches/soc-2006-file-loggers/src/protocols/qq/group_im.h branches/soc-2006-file-loggers/src/protocols/qq/group_info.c branches/soc-2006-file-loggers/src/protocols/qq/group_info.h branches/soc-2006-file-loggers/src/protocols/qq/group_join.c branches/soc-2006-file-loggers/src/protocols/qq/group_join.h branches/soc-2006-file-loggers/src/protocols/qq/group_misc.c branches/soc-2006-file-loggers/src/protocols/qq/group_misc.h branches/soc-2006-file-loggers/src/protocols/qq/group_network.c branches/soc-2006-file-loggers/src/protocols/qq/group_network.h branches/soc-2006-file-loggers/src/protocols/qq/group_opt.c branches/soc-2006-file-loggers/src/protocols/qq/group_opt.h branches/soc-2006-file-loggers/src/protocols/qq/group_search.c branches/soc-2006-file-loggers/src/protocols/qq/group_search.h branches/soc-2006-file-loggers/src/protocols/qq/header_info.c branches/soc-2006-file-loggers/src/protocols/qq/header_info.h branches/soc-2006-file-loggers/src/protocols/qq/im.c branches/soc-2006-file-loggers/src/protocols/qq/im.h branches/soc-2006-file-loggers/src/protocols/qq/keep_alive.c branches/soc-2006-file-loggers/src/protocols/qq/keep_alive.h branches/soc-2006-file-loggers/src/protocols/qq/login_logout.c branches/soc-2006-file-loggers/src/protocols/qq/login_logout.h branches/soc-2006-file-loggers/src/protocols/qq/packet_parse.c branches/soc-2006-file-loggers/src/protocols/qq/packet_parse.h branches/soc-2006-file-loggers/src/protocols/qq/qq.c branches/soc-2006-file-loggers/src/protocols/qq/qq.h branches/soc-2006-file-loggers/src/protocols/qq/qq_proxy.c branches/soc-2006-file-loggers/src/protocols/qq/qq_proxy.h branches/soc-2006-file-loggers/src/protocols/qq/recv_core.c branches/soc-2006-file-loggers/src/protocols/qq/recv_core.h branches/soc-2006-file-loggers/src/protocols/qq/send_core.c branches/soc-2006-file-loggers/src/protocols/qq/send_core.h branches/soc-2006-file-loggers/src/protocols/qq/send_file.c branches/soc-2006-file-loggers/src/protocols/qq/send_file.h branches/soc-2006-file-loggers/src/protocols/qq/sendqueue.c branches/soc-2006-file-loggers/src/protocols/qq/sendqueue.h branches/soc-2006-file-loggers/src/protocols/qq/sys_msg.c branches/soc-2006-file-loggers/src/protocols/qq/sys_msg.h branches/soc-2006-file-loggers/src/protocols/qq/udp_proxy_s5.c branches/soc-2006-file-loggers/src/protocols/qq/udp_proxy_s5.h branches/soc-2006-file-loggers/src/protocols/qq/utils.c branches/soc-2006-file-loggers/src/protocols/qq/utils.h branches/soc-2006-file-loggers/src/protocols/yahoo/yahoo.c branches/soc-2006-file-loggers/src/protocols/yahoo/yahoo_packet.c branches/soc-2006-file-loggers/src/protocols/yahoo/yahoo_packet.h branches/soc-2006-file-loggers/src/proxy.c branches/soc-2006-file-loggers/src/prpl.c branches/soc-2006-file-loggers/src/request.c branches/soc-2006-file-loggers/src/roomlist.c branches/soc-2006-file-loggers/src/server.c branches/soc-2006-file-loggers/src/signals.c branches/soc-2006-file-loggers/src/status.c branches/soc-2006-file-loggers/src/util.c branches/soc-2006-file-loggers/src/value.c branches/soc-2006-file-loggers/src/whiteboard.c branches/soc-2006-file-loggers/src/xmlnode.c Added Paths: ----------- branches/soc-2006-file-loggers/console/gntplugin.c branches/soc-2006-file-loggers/console/gntplugin.h branches/soc-2006-file-loggers/console/libgnt/gntutils.c branches/soc-2006-file-loggers/console/libgnt/gntutils.h branches/soc-2006-file-loggers/doc/gntgaim.1.in Removed Paths: ------------- branches/soc-2006-file-loggers/pixmaps/status/default/napster.png branches/soc-2006-file-loggers/src/gaim-socket.h branches/soc-2006-file-loggers/src/protocols/napster/ branches/soc-2006-file-loggers/src/protocols/qq/ip_location.c branches/soc-2006-file-loggers/src/protocols/qq/ip_location.h branches/soc-2006-file-loggers/src/socket.c Property Changed: ---------------- branches/soc-2006-file-loggers/doc/ branches/soc-2006-file-loggers/plugins/codeinline.c Modified: branches/soc-2006-file-loggers/COPYRIGHT =================================================================== --- branches/soc-2006-file-loggers/COPYRIGHT 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/COPYRIGHT 2006-08-09 04:49:19 UTC (rev 16677) @@ -86,6 +86,7 @@ Nelson Elhage Ignacio J. Elia Brian Enigma +Mattias Eriksson Stefan Esser Steffen Eschenbacher Marc Etcheverry Modified: branches/soc-2006-file-loggers/ChangeLog =================================================================== --- branches/soc-2006-file-loggers/ChangeLog 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/ChangeLog 2006-08-09 04:49:19 UTC (rev 16677) @@ -152,6 +152,7 @@ * SIP/SIMPLE support (Thomas Butter, Google Summer of Code) * Sametime protocol support Requires the meanwhile library: http://meanwhile.sourceforge.net + * Removed support for the napster and toc protocols Other Noteworthy Changes: * UPnP and NAT traversal support (Adam J. Warrington, Google Summer of Modified: branches/soc-2006-file-loggers/Makefile.mingw =================================================================== --- branches/soc-2006-file-loggers/Makefile.mingw 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/Makefile.mingw 2006-08-09 04:49:19 UTC (rev 16677) @@ -21,7 +21,6 @@ TOC = $(GAIM_PROTOS)/toc IRC = $(GAIM_PROTOS)/irc JABBER = $(GAIM_PROTOS)/jabber -NAPSTER = $(GAIM_PROTOS)/napster GG = $(GAIM_PROTOS)/gg NOVELL = $(GAIM_PROTOS)/novell SILC = $(GAIM_PROTOS)/silc @@ -55,7 +54,6 @@ TOC_TYPE = PLUGIN IRC_TYPE = PLUGIN JABBER_TYPE = PLUGIN -NAPSTER_TYPE = PLUGIN GG_TYPE = PLUGIN NOVELL_TYPE = PLUGIN SILC_TYPE = PLUGIN @@ -69,7 +67,6 @@ $(MAKE) TYPE='$(MSN_TYPE)' -C $(MSN) -f Makefile.mingw $(MAKE) TYPE='$(IRC_TYPE)' -C $(IRC) -f Makefile.mingw $(MAKE) TYPE='$(JABBER_TYPE)' -C $(JABBER) -f Makefile.mingw - $(MAKE) TYPE='$(NAPSTER_TYPE)' -C $(NAPSTER) -f Makefile.mingw $(MAKE) TYPE='$(GG_TYPE)' -C $(GG) -f Makefile.mingw $(MAKE) TYPE='$(NOVELL_TYPE)' -C $(NOVELL) -f Makefile.mingw $(MAKE) TYPE='$(SILC_TYPE)' -C $(SILC) -f Makefile.mingw @@ -91,7 +88,6 @@ $(MAKE) TYPE='$(MSN_TYPE)' -C $(MSN) -f Makefile.mingw install $(MAKE) TYPE='$(IRC_TYPE)' -C $(IRC) -f Makefile.mingw install $(MAKE) TYPE='$(JABBER_TYPE)' -C $(JABBER) -f Makefile.mingw install - $(MAKE) TYPE='$(NAPSTER_TYPE)' -C $(NAPSTER) -f Makefile.mingw install $(MAKE) TYPE='$(GG_TYPE)' -C $(GG) -f Makefile.mingw install $(MAKE) TYPE='$(NOVELL_TYPE)' -C $(NOVELL) -f Makefile.mingw install $(MAKE) TYPE='$(SILC_TYPE)' -C $(SILC) -f Makefile.mingw install @@ -119,7 +115,6 @@ $(MAKE) -C $(MSN) -f Makefile.mingw clean $(MAKE) -C $(IRC) -f Makefile.mingw clean $(MAKE) -C $(JABBER) -f Makefile.mingw clean - $(MAKE) -C $(NAPSTER) -f Makefile.mingw clean $(MAKE) -C $(GG) -f Makefile.mingw clean $(MAKE) -C $(NOVELL) -f Makefile.mingw clean $(MAKE) -C $(SILC) -f Makefile.mingw clean Modified: branches/soc-2006-file-loggers/configure.ac =================================================================== --- branches/soc-2006-file-loggers/configure.ac 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/configure.ac 2006-08-09 04:49:19 UTC (rev 16677) @@ -1747,6 +1747,7 @@ gaim.service doc/Makefile doc/gaim.1 + doc/gntgaim.1 m4macros/Makefile pixmaps/Makefile pixmaps/smileys/Makefile @@ -1776,7 +1777,6 @@ src/protocols/irc/Makefile src/protocols/jabber/Makefile src/protocols/msn/Makefile - src/protocols/napster/Makefile src/protocols/novell/Makefile src/protocols/oscar/Makefile src/protocols/qq/Makefile Modified: branches/soc-2006-file-loggers/console/Makefile =================================================================== --- branches/soc-2006-file-loggers/console/Makefile 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/console/Makefile 2006-08-09 04:49:19 UTC (rev 16677) @@ -1,7 +1,7 @@ VERSION=gntgaim-0.0.0dev CC=gcc CFLAGS=`pkg-config --cflags gaim gobject-2.0 gnt` -g -Wall -DVERSION=\"$(VERSION)\" -DSTANDALONE -LDFLAGS=`pkg-config --libs gaim gobject-2.0 libxml-2.0 gnt` -pg +LDFLAGS=`pkg-config --libs gaim gobject-2.0 libxml-2.0 gnt` -pg -lgaim GG_SOURCES = \ gntaccount.c \ @@ -10,6 +10,7 @@ gntconv.c \ gntdebug.c \ gntnotify.c \ + gntplugin.c \ gntprefs.c \ gntrequest.c \ gntui.c @@ -22,6 +23,7 @@ gntdebug.h \ gntnotify.h \ gntprefs.h \ + gntplugin.h \ gntrequest.h \ gntui.h @@ -32,6 +34,7 @@ gntconv.o \ gntdebug.o \ gntnotify.o \ + gntplugin.o \ gntprefs.o \ gntrequest.o \ gntui.o Modified: branches/soc-2006-file-loggers/console/gntaccount.c =================================================================== --- branches/soc-2006-file-loggers/console/gntaccount.c 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/console/gntaccount.c 2006-08-09 04:49:19 UTC (rev 16677) @@ -49,6 +49,9 @@ GntWidget *remember; } AccountEditDialog; +/* This is necessary to close an edit-dialog when an account is deleted */ +static GList *accountdialogs; + static void account_add(GaimAccount *account) { @@ -64,6 +67,7 @@ static void edit_dialog_destroy(AccountEditDialog *dialog) { + accountdialogs = g_list_remove(accountdialogs, dialog); g_list_free(dialog->prpl_entries); g_list_free(dialog->split_entries); g_free(dialog); @@ -143,7 +147,6 @@ gaim_account_set_password(account, NULL); /* Mail notification */ - /* XXX: Only if the protocol has anything to do with emails */ gaim_account_set_check_mail(account, gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->newmail))); @@ -210,8 +213,9 @@ } else { - dialog->splits = gnt_box_new(FALSE, TRUE); + dialog->splits = gnt_vbox_new(FALSE); gnt_box_set_pad(GNT_BOX(dialog->splits), 0); + gnt_box_set_fill(GNT_BOX(dialog->splits), TRUE); } dialog->split_entries = NULL; @@ -229,7 +233,7 @@ GntWidget *entry; char *buf; - hbox = gnt_box_new(TRUE, FALSE); + hbox = gnt_hbox_new(TRUE); gnt_box_add_widget(GNT_BOX(dialog->splits), hbox); buf = g_strdup_printf("%s:", gaim_account_user_split_get_text(split)); @@ -426,18 +430,32 @@ GList *list, *iter; AccountEditDialog *dialog; + if (account) + { + GList *iter; + for (iter = accountdialogs; iter; iter = iter->next) + { + AccountEditDialog *dlg = iter->data; + if (dlg->account == account) + return; + } + } + dialog = g_new0(AccountEditDialog, 1); + accountdialogs = g_list_prepend(accountdialogs, dialog); - dialog->window = window = gnt_box_new(FALSE, TRUE); + dialog->window = window = gnt_vbox_new(FALSE); dialog->account = account; gnt_box_set_toplevel(GNT_BOX(window), TRUE); gnt_box_set_title(GNT_BOX(window), account ? _("Modify Account") : _("New Account")); gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); gnt_box_set_pad(GNT_BOX(window), 0); + gnt_widget_set_name(window, "edit-account"); + gnt_box_set_fill(GNT_BOX(window), TRUE); - hbox = gnt_box_new(TRUE, FALSE); + hbox = gnt_hbox_new(TRUE); + gnt_box_set_pad(GNT_BOX(hbox), 0); gnt_box_add_widget(GNT_BOX(window), hbox); - gnt_box_set_alignment(GNT_BOX(hbox), GNT_ALIGN_MID); dialog->protocol = combo = gnt_combo_box_new(); list = gaim_plugins_get_protocols(); @@ -446,6 +464,7 @@ gnt_combo_box_add_data(GNT_COMBO_BOX(combo), iter->data, ((GaimPlugin*)iter->data)->info->name); } + if (account) gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), gaim_plugins_find_with_id(gaim_account_get_protocol_id(account))); @@ -453,10 +472,12 @@ gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), list->data); g_signal_connect(G_OBJECT(combo), "selection-changed", G_CALLBACK(prpl_changed_cb), dialog); + gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(_("Protocol:"))); gnt_box_add_widget(GNT_BOX(hbox), combo); - hbox = gnt_box_new(TRUE, FALSE); + hbox = gnt_hbox_new(TRUE); + gnt_box_set_pad(GNT_BOX(hbox), 0); gnt_box_add_widget(GNT_BOX(window), hbox); dialog->screenname = entry = gnt_entry_new(NULL); @@ -467,7 +488,8 @@ update_user_splits(dialog); gnt_box_add_widget(GNT_BOX(window), dialog->splits); - hbox = gnt_box_new(TRUE, FALSE); + hbox = gnt_hbox_new(TRUE); + gnt_box_set_pad(GNT_BOX(hbox), 0); gnt_box_add_widget(GNT_BOX(window), hbox); dialog->password = entry = gnt_entry_new(NULL); @@ -477,7 +499,8 @@ if (account) gnt_entry_set_text(GNT_ENTRY(entry), gaim_account_get_password(account)); - hbox = gnt_box_new(TRUE, FALSE); + hbox = gnt_hbox_new(TRUE); + gnt_box_set_pad(GNT_BOX(hbox), 0); gnt_box_add_widget(GNT_BOX(window), hbox); dialog->alias = entry = gnt_entry_new(NULL); @@ -500,8 +523,9 @@ /* TODO: Add proxy options */ /* The button box */ - hbox = gnt_box_new(FALSE, FALSE); + hbox = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(window), hbox); + gnt_box_set_alignment(GNT_BOX(hbox), GNT_ALIGN_MID); button = gnt_button_new(_("Cancel")); gnt_box_add_widget(GNT_BOX(hbox), button); @@ -534,10 +558,38 @@ } static void +really_delete_account(GaimAccount *account) +{ + GList *iter; + for (iter = accountdialogs; iter; iter = iter->next) + { + AccountEditDialog *dlg = iter->data; + if (dlg->account == account) + { + gnt_widget_destroy(dlg->window); + break; + } + } + gaim_accounts_delete(account); +} + +static void delete_account_cb(GntWidget *widget, GntTree *tree) { - /* XXX: After the request-api is complete */ - /* Note: remove the modify-dialog for the account */ + GaimAccount *account; + char *prompt; + + account = gnt_tree_get_selection_data(tree); + if (!account) + return; + + prompt = g_strdup_printf(_("Are you sure you want to delete %s?"), + gaim_account_get_username(account)); + + gaim_request_close_with_handle(account); /* Close any other opened delete window */ + gaim_request_action(account, _("Delete Account"), prompt, NULL, 0, account, 2, + _("Delete"), really_delete_account, _("Cancel"), NULL); + g_free(prompt); } static void @@ -548,12 +600,19 @@ gaim_account_set_enabled(account, GAIM_GNT_UI, gnt_tree_get_choice(GNT_TREE(widget), key)); } +static void +reset_accounts_win(GntWidget *widget, gpointer null) +{ + accounts.window = NULL; + accounts.tree = NULL; +} + void gg_accounts_show_all() { GList *iter; GntWidget *box, *button; - accounts.window = gnt_box_new(FALSE, TRUE); + accounts.window = gnt_vbox_new(FALSE); gnt_box_set_toplevel(GNT_BOX(accounts.window), TRUE); gnt_box_set_title(GNT_BOX(accounts.window), _("Accounts")); gnt_box_set_pad(GNT_BOX(accounts.window), 0); @@ -582,7 +641,7 @@ gnt_box_add_widget(GNT_BOX(accounts.window), gnt_line_new(FALSE)); - box = gnt_box_new(FALSE, FALSE); + box = gnt_hbox_new(FALSE); button = gnt_button_new(_("Add")); gnt_box_add_widget(GNT_BOX(box), button); @@ -597,6 +656,8 @@ g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(delete_account_cb), accounts.tree); gnt_box_add_widget(GNT_BOX(accounts.window), box); + + g_signal_connect(G_OBJECT(accounts.window), "destroy", G_CALLBACK(reset_accounts_win), NULL); gnt_widget_show(accounts.window); } @@ -641,7 +702,8 @@ void gg_accounts_uninit() { - gnt_widget_destroy(accounts.window); + if (accounts.window) + gnt_widget_destroy(accounts.window); } /* The following uiops stuff are copied from gtkaccount.c */ Modified: branches/soc-2006-file-loggers/console/gntblist.c =================================================================== --- branches/soc-2006-file-loggers/console/gntblist.c 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/console/gntblist.c 2006-08-09 04:49:19 UTC (rev 16677) @@ -1,18 +1,26 @@ #include <account.h> #include <blist.h> #include <request.h> +#include <savedstatuses.h> #include <server.h> #include <signal.h> +#include <status.h> #include <util.h> #include "gntgaim.h" #include "gntbox.h" +#include "gntcombobox.h" +#include "gntentry.h" #include "gntlabel.h" +#include "gntline.h" #include "gnttree.h" #include "gntblist.h" #include <string.h> +#define PREF_ROOT "/gaim/gnt/blist" +#define TYPING_TIMEOUT 4000 + typedef struct { GntWidget *window; @@ -23,8 +31,29 @@ GntWidget *context; GaimBlistNode *cnode; + + /* XXX: I am KISSing */ + GntWidget *status; /* Dropdown with the statuses */ + GntWidget *statustext; /* Status message */ + int typing; } GGBlist; +typedef enum +{ + STATUS_PRIMITIVE = 0, + STATUS_SAVED +} StatusType; + +typedef struct +{ + StatusType type; + union + { + GaimStatusPrimitive prim; + GaimSavedStatus *saved; + } u; +} StatusBoxItem; + GGBlist *ggblist; static void add_buddy(GaimBuddy *buddy, GGBlist *ggblist); @@ -32,7 +61,9 @@ static void add_chat(GaimChat *chat, GGBlist *ggblist); static void add_node(GaimBlistNode *node, GGBlist *ggblist); static void draw_tooltip(GGBlist *ggblist); +static gboolean remove_typing_cb(gpointer null); static void remove_peripherals(GGBlist *ggblist); +static const char * get_display_name(GaimBlistNode *node); static void new_node(GaimBlistNode *node) @@ -63,7 +94,7 @@ { GGBlist *ggblist = list->ui_data; - if (node->ui_data == NULL) + if (ggblist == NULL || node->ui_data == NULL) return; gnt_tree_remove(GNT_TREE(ggblist->tree), node); @@ -82,6 +113,15 @@ static void node_update(GaimBuddyList *list, GaimBlistNode *node) { + if (list->ui_data == NULL) + return; + + if (node->ui_data != NULL) + { + gnt_tree_change_text(GNT_TREE(ggblist->tree), node, + 0, get_display_name(node)); + } + if (GAIM_BLIST_NODE_IS_BUDDY(node)) { GaimBuddy *buddy = (GaimBuddy*)node; @@ -101,7 +141,7 @@ { } -static GaimBlistUiOps blist_ui_ops = +static GaimBlistUiOps blist_ui_ops = { new_list, new_node, @@ -131,7 +171,7 @@ return; gnt_tree_remove(GNT_TREE(ggblist->tree), group); node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), group, - gnt_tree_create_row(GNT_TREE(ggblist->tree), group->name), NULL, NULL); + gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), NULL, NULL); } static const char * @@ -175,6 +215,8 @@ strncpy(status, "~", sizeof(status) - 1); } + else if (GAIM_BLIST_NODE_IS_GROUP(node)) + return ((GaimGroup*)node)->name; snprintf(text, sizeof(text) - 1, "%s %s", status, name); @@ -188,6 +230,8 @@ GaimBlistNode *node = (GaimBlistNode *)chat; if (node->ui_data) return; + if (!gaim_account_is_connected(chat->account)) + return; group = gaim_chat_get_group(chat); add_node((GaimBlistNode*)group, ggblist); @@ -274,7 +318,9 @@ gnt_append_menu_action(GntTree *tree, GaimMenuAction *action, gpointer parent) { GList *list; - + if (action == NULL) + return; + gnt_tree_add_row_after(tree, action, gnt_tree_create_row(tree, action->label), parent, NULL); for (list = action->children; list; list = list->next) @@ -351,7 +397,7 @@ add_custom_action(tree, _("View Log"), GAIM_CALLBACK(gg_blist_view_log_cb)), buddy); #endif - + /* Protocol actions */ append_proto_menu(tree, gaim_account_get_connection(gaim_buddy_get_account(buddy)), @@ -380,15 +426,54 @@ { void (*callback)(GaimBlistNode *, gpointer); callback = (void (*)(GaimBlistNode *, gpointer))action->callback; - callback(node, action->data); + if (callback) + callback(node, action->data); + else + return; } remove_context_menu(ggblist); } static void +rename_blist_node(GaimBlistNode *node, const char *newname) +{ + const char *name = newname; + if (name && !*name) + name = NULL; + + if (GAIM_BLIST_NODE_IS_BUDDY(node)) + gaim_blist_alias_buddy((GaimBuddy*)node, name); + else if (GAIM_BLIST_NODE_IS_CHAT(node)) + gaim_blist_alias_chat((GaimChat*)node, name); + else if (GAIM_BLIST_NODE_IS_GROUP(node)) + gaim_blist_rename_group((GaimGroup*)node, name); + else + g_return_if_reached(); +} + +static void gg_blist_rename_node_cb(GaimBlistNode *node, GaimBlistNode *null) { + const char *name = NULL; + char *prompt; + + if (GAIM_BLIST_NODE_IS_BUDDY(node)) + name = gaim_buddy_get_contact_alias((GaimBuddy*)node); + else if (GAIM_BLIST_NODE_IS_CHAT(node)) + name = gaim_chat_get_name((GaimChat*)node); + else if (GAIM_BLIST_NODE_IS_GROUP(node)) + name = ((GaimGroup*)node)->name; + else + g_return_if_reached(); + + prompt = g_strdup_printf(_("Please enter the new name for %s"), name); + + gaim_request_input(node, _("Rename"), prompt, _("Enter empty string to reset the name."), + name, FALSE, FALSE, NULL, _("Rename"), G_CALLBACK(rename_blist_node), + _("Cancel"), NULL, node); + + g_free(prompt); } /* XXX: This still doesn't do anything, because request doesn't have a ui yet */ @@ -472,7 +557,8 @@ window = gnt_vbox_new(FALSE); gnt_box_set_toplevel(GNT_BOX(window), TRUE); gnt_box_set_title(GNT_BOX(window), title); - + + gnt_widget_set_size(context, 0, g_list_length(GNT_TREE(context)->list)); gnt_box_add_widget(GNT_BOX(window), context); /* Set the position for the popup */ @@ -593,6 +679,7 @@ gnt_widget_set_position(box, x, y); GNT_WIDGET_UNSET_FLAGS(box, GNT_WIDGET_CAN_TAKE_FOCUS); + GNT_WIDGET_SET_FLAGS(box, GNT_WIDGET_TRANSIENT); gnt_widget_draw(box); g_free(title); @@ -626,7 +713,7 @@ ret = gnt_widget_key_pressed(ggblist->context, text); stop = TRUE; } - + if (text[0] == 27) { if (strcmp(text + 1, GNT_KEY_POPUP) == 0) @@ -677,13 +764,243 @@ remove_context_menu(ggblist); } +static void +size_changed_cb(GntWidget *w, int width, int height) +{ + gaim_prefs_set_int(PREF_ROOT "/size/width", width); + gaim_prefs_set_int(PREF_ROOT "/size/height", height); +} + +static void +save_position_cb(GntWidget *w, int x, int y) +{ + gaim_prefs_set_int(PREF_ROOT "/position/x", x); + gaim_prefs_set_int(PREF_ROOT "/position/y", y); +} + +static void +reset_blist_window(GntWidget *window, gpointer null) +{ + GaimBlistNode *node; + gaim_signals_disconnect_by_handle(gg_blist_get_handle()); + gaim_get_blist()->ui_data = NULL; + + node = gaim_blist_get_root(); + while (node) + { + node->ui_data = NULL; + node = gaim_blist_node_next(node, TRUE); + } + + remove_typing_cb(NULL); + remove_peripherals(ggblist); + g_free(ggblist); + ggblist = NULL; +} + +static void +populate_buddylist() +{ + GaimBlistNode *node; + GaimBuddyList *list; + + list = gaim_get_blist(); + node = gaim_blist_get_root(); + while (node) + { + node_update(list, node); + node = gaim_blist_node_next(node, FALSE); + } +} + +static void +destroy_status_list(GList *list) +{ + g_list_foreach(list, (GFunc)g_free, NULL); + g_list_free(list); +} + +static void +populate_status_dropdown() +{ + int i; + GList *iter; + GList *items = NULL; + + /* First the primitives */ + GaimStatusPrimitive prims[] = {GAIM_STATUS_AVAILABLE, GAIM_STATUS_AWAY, + GAIM_STATUS_INVISIBLE, GAIM_STATUS_OFFLINE, GAIM_STATUS_UNSET}; + + for (i = 0; prims[i] != GAIM_STATUS_UNSET; i++) + { + StatusBoxItem *item = g_new0(StatusBoxItem, 1); + item->type = STATUS_PRIMITIVE; + item->u.prim = prims[i]; + items = g_list_prepend(items, item); + gnt_combo_box_add_data(GNT_COMBO_BOX(ggblist->status), item, + gaim_primitive_get_name_from_type(prims[i])); + } + + /* Now the popular statuses */ + for (iter = gaim_savedstatuses_get_popular(6); iter; iter = iter->next) + { + StatusBoxItem *item = g_new0(StatusBoxItem, 1); + item->type = STATUS_SAVED; + item->u.saved = iter->data; + items = g_list_prepend(items, item); + gnt_combo_box_add_data(GNT_COMBO_BOX(ggblist->status), item, + gaim_savedstatus_get_title(iter->data)); + } + + /* The keys for the combobox are created here, and never used + * anywhere else. So make sure the keys are freed when the widget + * is destroyed. */ + g_object_set_data_full(G_OBJECT(ggblist->status), "list of statuses", items, (GDestroyNotify)destroy_status_list); +} + void gg_blist_init() { + gaim_prefs_add_none(PREF_ROOT); + gaim_prefs_add_none(PREF_ROOT "/size"); + gaim_prefs_add_int(PREF_ROOT "/size/width", 20); + gaim_prefs_add_int(PREF_ROOT "/size/height", 20); + gaim_prefs_add_none(PREF_ROOT "/position"); + gaim_prefs_add_int(PREF_ROOT "/position/x", 0); + gaim_prefs_add_int(PREF_ROOT "/position/y", 0); + + gg_blist_show(); + + return; +} + +static gboolean +remove_typing_cb(gpointer null) +{ + GaimSavedStatus *current; + const char *message, *newmessage; + GaimStatusPrimitive prim, newprim; + StatusBoxItem *item; + + current = gaim_savedstatus_get_current(); + message = gaim_savedstatus_get_message(current); + prim = gaim_savedstatus_get_type(current); + + newmessage = gnt_entry_get_text(GNT_ENTRY(ggblist->statustext)); + item = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(ggblist->status)); + g_return_val_if_fail(item->type == STATUS_PRIMITIVE, FALSE); + newprim = item->u.prim; + + if (newprim != prim || ((message && !newmessage) || + (!message && newmessage) || + (message && newmessage && g_utf8_collate(message, newmessage) != 0))) + { + GaimSavedStatus *status = gaim_savedstatus_find_transient_by_type_and_message(newprim, newmessage); + /* Holy Crap! That's a LAWNG function name */ + if (status == NULL) + { + status = gaim_savedstatus_new(NULL, newprim); + gaim_savedstatus_set_message(status, newmessage); + } + + gaim_savedstatus_activate(status); + } + + gnt_box_give_focus_to_child(GNT_BOX(ggblist->window), ggblist->tree); + if (ggblist->typing) + g_source_remove(ggblist->typing); + ggblist->typing = 0; + return FALSE; +} + +static void +status_selection_changed(GntComboBox *box, StatusBoxItem *old, StatusBoxItem *now, gpointer null) +{ + gnt_entry_set_text(GNT_ENTRY(ggblist->statustext), NULL); + if (now->type == STATUS_SAVED) + { + /* Set the status immediately */ + gaim_savedstatus_activate(now->u.saved); + } + else if (now->type == STATUS_PRIMITIVE) + { + /* Move the focus to the entry box */ + /* XXX: Make sure the selected status can have a message */ + gnt_box_move_focus(GNT_BOX(ggblist->window), 1); + ggblist->typing = g_timeout_add(TYPING_TIMEOUT, (GSourceFunc)remove_typing_cb, NULL); + } + else + g_return_if_reached(); +} + +static gboolean +status_text_changed(GntEntry *entry, const char *text, gpointer null) +{ + if ((text[0] == 27 || (text[0] == '\t' && text[1] == '\0')) && ggblist->typing == 0) + return FALSE; + + if (ggblist->typing) + g_source_remove(ggblist->typing); + ggblist->typing = 0; + + if (text[0] == '\r' && text[1] == 0) + { + /* Set the status only after you press 'Enter' */ + remove_typing_cb(NULL); + return TRUE; + } + + ggblist->typing = g_timeout_add(TYPING_TIMEOUT, (GSourceFunc)remove_typing_cb, NULL); + return FALSE; +} + +static void +savedstatus_changed(GaimSavedStatus *now, GaimSavedStatus *old) +{ + /* Block the signals we don't want to emit */ + GList *list; + GaimStatusPrimitive prim; + const char *message; + + if (!ggblist) + return; + + g_signal_handlers_block_matched(ggblist->status, G_SIGNAL_MATCH_FUNC, + 0, 0, NULL, status_selection_changed, NULL); + g_signal_handlers_block_matched(ggblist->statustext, G_SIGNAL_MATCH_FUNC, + 0, 0, NULL, status_text_changed, NULL); + + prim = gaim_savedstatus_get_type(now); + message = gaim_savedstatus_get_message(now); + + list = g_object_get_data(G_OBJECT(ggblist->status), "list of statuses"); + for (; list; list = list->next) + { + StatusBoxItem *item = list->data; + if (item->type == STATUS_PRIMITIVE && item->u.prim == prim) + { + gnt_combo_box_set_selected(GNT_COMBO_BOX(ggblist->status), item); + gnt_entry_set_text(GNT_ENTRY(ggblist->statustext), message); + gnt_widget_draw(ggblist->status); + break; + } + } + + g_signal_handlers_unblock_matched(ggblist->status, G_SIGNAL_MATCH_FUNC, + 0, 0, NULL, status_selection_changed, NULL); + g_signal_handlers_unblock_matched(ggblist->statustext, G_SIGNAL_MATCH_FUNC, + 0, 0, NULL, status_text_changed, NULL); +} + +void gg_blist_show() +{ + if (ggblist) + return; + ggblist = g_new0(GGBlist, 1); gaim_get_blist()->ui_data = ggblist; - ggblist->window = gnt_box_new(FALSE, FALSE); + ggblist->window = gnt_vbox_new(FALSE); gnt_widget_set_name(ggblist->window, "buddylist"); gnt_box_set_toplevel(GNT_BOX(ggblist->window), TRUE); gnt_box_set_title(GNT_BOX(ggblist->window), _("Buddy List")); @@ -692,16 +1009,29 @@ ggblist->tree = gnt_tree_new(); GNT_WIDGET_SET_FLAGS(ggblist->tree, GNT_WIDGET_NO_BORDER); gnt_tree_set_col_width(GNT_TREE(ggblist->tree), 0, 25); - gnt_widget_set_size(ggblist->tree, 0, getmaxy(stdscr) - 4); + gnt_widget_set_size(ggblist->tree, gaim_prefs_get_int(PREF_ROOT "/size/width"), + gaim_prefs_get_int(PREF_ROOT "/size/height")); + gnt_widget_set_position(ggblist->window, gaim_prefs_get_int(PREF_ROOT "/position/x"), + gaim_prefs_get_int(PREF_ROOT "/position/y")); gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->tree); + + gnt_box_add_widget(GNT_BOX(ggblist->window), gnt_hline_new()); + + ggblist->status = gnt_combo_box_new(); + gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->status); + ggblist->statustext = gnt_entry_new(NULL); + gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->statustext); + + populate_status_dropdown(); + gnt_widget_show(ggblist->window); gaim_signal_connect(gaim_blist_get_handle(), "buddy-status-changed", gg_blist_get_handle(), GAIM_CALLBACK(buddy_status_changed), ggblist); gaim_signal_connect(gaim_blist_get_handle(), "buddy-idle-changed", gg_blist_get_handle(), GAIM_CALLBACK(buddy_idle_changed), ggblist); - + #if 0 gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-on", gg_blist_get_handle(), GAIM_CALLBACK(buddy_signed_on), ggblist); @@ -725,10 +1055,28 @@ ggblist, 0, G_CONNECT_AFTER | G_CONNECT_SWAPPED); g_signal_connect_data(G_OBJECT(ggblist->tree), "lost-focus", G_CALLBACK(remove_peripherals), ggblist, 0, G_CONNECT_AFTER | G_CONNECT_SWAPPED); + g_signal_connect(G_OBJECT(ggblist->tree), "size_changed", G_CALLBACK(size_changed_cb), NULL); + g_signal_connect(G_OBJECT(ggblist->window), "position_set", G_CALLBACK(save_position_cb), NULL); + g_signal_connect(G_OBJECT(ggblist->window), "destroy", G_CALLBACK(reset_blist_window), NULL); + + /* Status signals */ + gaim_signal_connect(gaim_savedstatuses_get_handle(), "savedstatus-changed", gg_blist_get_handle(), + GAIM_CALLBACK(savedstatus_changed), NULL); + g_signal_connect(G_OBJECT(ggblist->status), "selection_changed", + G_CALLBACK(status_selection_changed), NULL); + g_signal_connect(G_OBJECT(ggblist->statustext), "key_pressed", + G_CALLBACK(status_text_changed), NULL); + + populate_buddylist(); + + savedstatus_changed(gaim_savedstatus_get_current(), NULL); } void gg_blist_uninit() { + if (ggblist == NULL) + return; + gnt_widget_destroy(ggblist->window); g_free(ggblist); ggblist = NULL; Modified: branches/soc-2006-file-loggers/console/gntblist.h =================================================================== --- branches/soc-2006-file-loggers/console/gntblist.h 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/console/gntblist.h 2006-08-09 04:49:19 UTC (rev 16677) @@ -6,6 +6,8 @@ void gg_blist_uninit(); +void gg_blist_show(); + void gg_blist_get_position(int *x, int *y); void gg_blist_set_position(int x, int y); Modified: branches/soc-2006-file-loggers/console/gntconv.c =================================================================== --- branches/soc-2006-file-loggers/console/gntconv.c 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/console/gntconv.c 2006-08-09 04:49:19 UTC (rev 16677) @@ -1,17 +1,24 @@ #include <string.h> #include <cmds.h> +#include <prefs.h> #include <util.h> #include "gntgaim.h" +#include "gntaccount.h" #include "gntblist.h" #include "gntconv.h" +#include "gntdebug.h" +#include "gntplugin.h" +#include "gntprefs.h" #include "gnt.h" #include "gntbox.h" #include "gntentry.h" #include "gnttextview.h" +#define PREF_ROOT "/gaim/gnt/conversations" + GHashTable *ggconvs; typedef struct _GGConv GGConv; @@ -101,17 +108,20 @@ } else { + char *escape = g_markup_escape_text(text, -1); switch (gaim_conversation_get_type(ggconv->conv)) { case GAIM_CONV_TYPE_IM: - gaim_conv_im_send_with_flags(GAIM_CONV_IM(ggconv->conv), text, GAIM_MESSAGE_SEND); + gaim_conv_im_send_with_flags(GAIM_CONV_IM(ggconv->conv), escape, GAIM_MESSAGE_SEND); break; case GAIM_CONV_TYPE_CHAT: - gaim_conv_chat_send(GAIM_CONV_CHAT(ggconv->conv), text); + gaim_conv_chat_send(GAIM_CONV_CHAT(ggconv->conv), escape); break; default: + g_free(escape); g_return_val_if_reached(FALSE); } + g_free(escape); } gnt_entry_clear(GNT_ENTRY(ggconv->entry)); return TRUE; @@ -142,19 +152,29 @@ } static void +size_changed_cb(GntWidget *w, int width, int height) +{ + gaim_prefs_set_int(PREF_ROOT "/size/width", width); + gaim_prefs_set_int(PREF_ROOT "/size/height", height); +} + +static void +save_position_cb(GntWidget *w, int x, int y) +{ + gaim_prefs_set_int(PREF_ROOT "/position/x", x); + gaim_prefs_set_int(PREF_ROOT "/position/y", y); +} + +static void gg_create_conversation(GaimConversation *conv) { GGConv *ggc = g_hash_table_lookup(ggconvs, conv); char *title; GaimConversationType type; - int x, width; if (ggc) return; - gg_blist_get_position(&x, NULL); - gg_blist_get_size(&width, NULL); - ggc = g_new0(GGConv, 1); g_hash_table_insert(ggconvs, conv, ggc); @@ -172,7 +192,8 @@ ggc->tv = gnt_text_view_new(); gnt_box_add_widget(GNT_BOX(ggc->window), ggc->tv); gnt_widget_set_name(ggc->tv, "conversation-window-textview"); - gnt_widget_set_size(ggc->tv, getmaxx(stdscr) - 3 - x - width, getmaxy(stdscr) - 5); + gnt_widget_set_size(ggc->tv, gaim_prefs_get_int(PREF_ROOT "/size/width"), + gaim_prefs_get_int(PREF_ROOT "/size/height")); ggc->entry = gnt_entry_new(NULL); gnt_box_add_widget(GNT_BOX(ggc->window), ggc->entry); @@ -181,12 +202,13 @@ g_signal_connect(G_OBJECT(ggc->entry), "key_pressed", G_CALLBACK(entry_key_pressed), ggc); g_signal_connect(G_OBJECT(ggc->window), "destroy", G_CALLBACK(closing_window), ggc); - /* XXX: I am assuming the buddylist is on the leftmost corner. - * That may not always be correct, since the windows can be moved. - * It might be an option to remember the position of conv. windows. */ - gnt_widget_set_position(ggc->window, x + width, 0); + gnt_widget_set_position(ggc->window, gaim_prefs_get_int(PREF_ROOT "/position/x"), + gaim_prefs_get_int(PREF_ROOT "/position/y")); gnt_widget_show(ggc->window); + g_signal_connect(G_OBJECT(ggc->tv), "size_changed", G_CALLBACK(size_changed_cb), NULL); + g_signal_connect(G_OBJECT(ggc->window), "position_set", G_CALLBACK(save_position_cb), NULL); + g_free(title); } @@ -201,8 +223,9 @@ GaimMessageFlags flags, time_t mtime) { GGConv *ggconv = g_hash_table_lookup(ggconvs, conv); /* XXX: ggconv = conv->ui_data; should do */ - char *strip; + char *strip, *newline; GntTextFormatFlags fl = 0; + int pos; g_return_if_fail(ggconv != NULL); @@ -221,12 +244,18 @@ if (flags & GAIM_MESSAGE_NICK) fl |= GNT_TEXT_FLAG_UNDERLINE; - strip = gaim_markup_strip_html(message); + pos = gnt_text_view_get_lines_below(GNT_TEXT_VIEW(ggconv->tv)); + + /* XXX: Remove this workaround when textview can parse messages. */ + newline = gaim_strdup_withhtml(message); + strip = gaim_markup_strip_html(newline); gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), strip, fl); gnt_text_view_next_line(GNT_TEXT_VIEW(ggconv->tv)); - gnt_text_view_scroll(GNT_TEXT_VIEW(ggconv->tv), 0); + if (pos <= 1) + gnt_text_view_scroll(GNT_TEXT_VIEW(ggconv->tv), 0); + g_free(newline); g_free(strip); if (flags & (GAIM_MESSAGE_RECV | GAIM_MESSAGE_NICK | GAIM_MESSAGE_ERROR)) @@ -460,12 +489,27 @@ return GAIM_CMD_STATUS_OK; } +static GaimCmdRet +cmd_show_window(GaimConversation *conv, const char *cmd, char **args, char **error, gpointer data) +{ + void (*callback)() = data; + callback(); + return GAIM_CMD_STATUS_OK; +} void gg_conversation_init() { ggconvs = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, destroy_ggconv); - /* Xerox */ + gaim_prefs_add_none(PREF_ROOT); + gaim_prefs_add_none(PREF_ROOT "/size"); + gaim_prefs_add_int(PREF_ROOT "/size/width", 70); + gaim_prefs_add_int(PREF_ROOT "/size/height", 20); + gaim_prefs_add_none(PREF_ROOT "/position"); + gaim_prefs_add_int(PREF_ROOT "/position/x", 0); + gaim_prefs_add_int(PREF_ROOT "/position/y", 0); + + /* Xerox the commands */ gaim_cmd_register("say", "S", GAIM_CMD_P_DEFAULT, GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, say_command_cb, _("say <message>: Send a message normally as if you weren't using a command."), NULL); @@ -481,6 +525,23 @@ gaim_cmd_register("help", "w", GAIM_CMD_P_DEFAULT, GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM | GAIM_CMD_FLAG_ALLOW_WRONG_ARGS, NULL, help_command_cb, _("help <command>: Help on a specific command."), NULL); + + /* Now some commands to bring up some other windows */ + gaim_cmd_register("plugins", "", GAIM_CMD_P_DEFAULT, + GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, + cmd_show_window, _("plugins: Show the plugins window."), gg_plugins_show_all); + gaim_cmd_register("buddylist", "", GAIM_CMD_P_DEFAULT, + GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, + cmd_show_window, _("buddylist: Show the buddylist."), gg_blist_show); + gaim_cmd_register("accounts", "", GAIM_CMD_P_DEFAULT, + GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, + cmd_show_window, _("accounts: Show the accounts window."), gg_accounts_show_all); + gaim_cmd_register("debugwin", "", GAIM_CMD_P_DEFAULT, + GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, + cmd_show_window, _("debugwin: Show the debug window."), gg_debug_window_show); + gaim_cmd_register("prefs", "", GAIM_CMD_P_DEFAULT, + GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, + cmd_show_window, _("prefs: Show the preference window."), gg_prefs_show_all); } void gg_conversation_uninit() Modified: branches/soc-2006-file-loggers/console/gntdebug.c =================================================================== --- branches/soc-2006-file-loggers/console/gntdebug.c 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/console/gntdebug.c 2006-08-09 04:49:19 UTC (rev 16677) @@ -19,7 +19,6 @@ { if (key[0] == 27) { - /* XXX: This doesn't seem to always work */ if (strcmp(key+1, GNT_KEY_DOWN) == 0) gnt_text_view_scroll(view, 1); else if (strcmp(key+1, GNT_KEY_UP) == 0) @@ -39,9 +38,7 @@ gg_debug_print(GaimDebugLevel level, const char *category, const char *args) { - if (debug.window == NULL) - fprintf(stderr, "%s: %s\n", category, args); - else + if (debug.window) { GntTextFormatFlags flag = GNT_TEXT_FLAG_NORMAL; @@ -63,10 +60,7 @@ } gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(debug.tview), args, flag); - gnt_text_view_next_line(GNT_TEXT_VIEW(debug.tview)); gnt_text_view_scroll(GNT_TEXT_VIEW(debug.tview), 0); - - g_signal_connect(G_OBJECT(debug.window), "key_pressed", G_CALLBACK(debug_window_kpress_cb), debug.tview); } } @@ -97,7 +91,10 @@ debug.tview = gnt_text_view_new(); gnt_box_add_widget(GNT_BOX(debug.window), debug.tview); + /* XXX: Add checkboxes/buttons for Clear, Pause, Timestamps */ + g_signal_connect(G_OBJECT(debug.window), "destroy", G_CALLBACK(reset_debug_win), NULL); + g_signal_connect(G_OBJECT(debug.window), "key_pressed", G_CALLBACK(debug_window_kpress_cb), debug.tview); } gnt_widget_show(debug.window); @@ -105,7 +102,8 @@ void gg_debug_init() { - gg_debug_window_show(); + if (gaim_debug_is_enabled()) + gg_debug_window_show(); } void gg_debug_uninit() Modified: branches/soc-2006-file-loggers/console/gntdebug.h =================================================================== --- branches/soc-2006-file-loggers/console/gntdebug.h 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/console/gntdebug.h 2006-08-09 04:49:19 UTC (rev 16677) @@ -6,3 +6,4 @@ void gg_debug_uninit(); +void gg_debug_window_show(); Modified: branches/soc-2006-file-loggers/console/gntgaim.c =================================================================== --- branches/soc-2006-file-loggers/console/gntgaim.c 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/console/gntgaim.c 2006-08-09 04:49:19 UTC (rev 16677) @@ -140,9 +140,9 @@ char *text; if (terse) { - text = g_strdup_printf(_("Gaim %s. Try `%s -h' for more information.\n"), VERSION, name); + text = g_strdup_printf(_("%s. Try `%s -h' for more information.\n"), VERSION, name); } else { - text = g_strdup_printf(_("Gaim %s\n" + text = g_strdup_printf(_("%s\n" "Usage: %s [OPTION]...\n\n" " -c, --config=DIR use DIR for config files\n" " -d, --debug print debugging messages to stdout\n" @@ -151,6 +151,7 @@ " -v, --version display the current version and exit\n"), VERSION, name); } + gnt_quit(); gaim_print_utf8_to_console(stdout, text); g_free(text); } Copied: branches/soc-2006-file-loggers/console/gntplugin.c (from rev 16676, trunk/console/gntplugin.c) =================================================================== --- branches/soc-2006-file-loggers/console/gntplugin.c (rev 0) +++ branches/soc-2006-file-loggers/console/gntplugin.c 2006-08-09 04:49:19 UTC (rev 16677) @@ -0,0 +1,135 @@ +#include <gnt.h> +#include <gntbox.h> +#include <gntlabel.h> +#include <gntline.h> +#include <gnttree.h> + +#include "notify.h" + +#include "gntgaim.h" +#include "gntplugin.h" + +static struct +{ + GntWidget *tree; + GntWidget *window; + GntWidget *aboot; +} plugins; + +static void +plugin_toggled_cb(GntWidget *tree, GaimPlugin *plugin, gpointer null) +{ + if (gnt_tree_get_choice(GNT_TREE(tree), plugin)) + { + if(!gaim_plugin_load(plugin)) + gaim_notify_error(NULL, "ERROR", "loading plugin failed", NULL); + } + else + { + if (!gaim_plugin_unload(plugin)) + gaim_notify_error(NULL, "ERROR", "unloading plugin failed", NULL); + } + gg_plugins_save_loaded(); +} + +/* Xerox */ +void +gg_plugins_save_loaded(void) +{ + GList *pl; + GList *files = NULL; + GaimPlugin *p; + + for (pl = gaim_plugins_get_loaded(); pl != NULL; pl = pl->next) { + p = pl->data; + + if (p->info->type != GAIM_PLUGIN_PROTOCOL && + p->info->type != GAIM_PLUGIN_LOADER) { + + files = g_list_append(files, p->path); + } + } + + gaim_prefs_set_string_list("/gaim/gnt/plugins/loaded", files); + g_list_free(files); +} + +static void +selection_changed(GntWidget *widget, gpointer old, gpointer current, gpointer null) +{ + GaimPlugin *plugin = current; + char *text; + + /* XXX: Use formatting and stuff */ + gnt_text_view_clear(GNT_TEXT_VIEW(plugins.aboot)); + text = g_strdup_printf(_("Name: %s\nVersion: %s\nDescription: %s\nAuthor: %s\nWebsite: %s\nFilename: %s\n"), + plugin->info->name, plugin->info->version, plugin->info->description, + plugin->info->author, plugin->info->homepage, plugin->path); + gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(plugins.aboot), + text, GNT_TEXT_FLAG_NORMAL); + gnt_text_view_scroll(GNT_TEXT_VIEW(plugins.aboot), 0); +} + +static void +reset_plugin_window(GntWidget *window, gpointer null) +{ + plugins.window = NULL; + plugins.tree = NULL; + plugins.aboot = NULL; +} + +void gg_plugins_show_all() +{ + GntWidget *window, *tree, *box, *aboot; + GList *iter; + if (plugins.window) + return; + + gaim_plugins_probe(G_MODULE_SUFFIX); + + plugins.window = window = gnt_vbox_new(FALSE); + gnt_box_set_toplevel(GNT_BOX(window), TRUE); + gnt_box_set_title(GNT_BOX(window), _("Plugins")); + gnt_box_set_pad(GNT_BOX(window), 0); + + gnt_box_add_widget(GNT_BOX(window), + gnt_label_new(_("You can (un)load plugins from the following list."))); + gnt_box_add_widget(GNT_BOX(window), gnt_hline_new()); + + box = gnt_hbox_new(FALSE); + gnt_box_add_widget(GNT_BOX(window), box); + gnt_box_add_widget(GNT_BOX(window), gnt_hline_new()); + + gnt_box_set_pad(GNT_BOX(box), 0); + plugins.tree = tree = gnt_tree_new(); + GNT_WIDGET_SET_FLAGS(tree, GNT_WIDGET_NO_BORDER); + gnt_box_add_widget(GNT_BOX(box), tree); + gnt_box_add_widget(GNT_BOX(box), gnt_vline_new()); + + plugins.aboot = aboot = gnt_text_view_new(); + gnt_widget_set_size(aboot, 40, 20); + gnt_box_add_widget(GNT_BOX(box), aboot); + + for (iter = gaim_plugins_get_all(); iter; iter = iter->next) + { + GaimPlugin *plug = iter->data; + + if (plug->info->type != GAIM_PLUGIN_STANDARD || + (plug->info->flags & GAIM_PLUGIN_FLAG_INVISIBLE) || + plug->error) + continue; + + gnt_tree_add_choice(GNT_TREE(tree), plug, + gnt_tree_create_row(GNT_TREE(tree), plug->info->name), NULL, NULL); + gnt_tree_set_choice(GNT_TREE(tree), plug, gaim_plugin_is_loaded(plug)); + } + gnt_tree_set_col_width(GNT_TREE(tree), 0, 30); + g_signal_connect(G_OBJECT(tree), "toggled", G_CALLBACK(plugin_toggled_cb), NULL); + g_signal_connect(G_OBJECT(tree), "selection_changed", G_CALLBACK(selection_changed), NULL); + g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(reset_plugin_window), NULL); + + gnt_tree_set_selected(GNT_TREE(tree), gaim_plugins_get_all()->data); + + gnt_widget_show(window); +} + Copied: branches/soc-2006-file-loggers/console/gntplugin.h (from rev 16676, trunk/console/gntplugin.h) =================================================================== --- branches/soc-2006-file-loggers/console/gntplugin.h (rev 0) +++ branches/soc-2006-file-loggers/console/gntplugin.h 2006-08-09 04:49:19 UTC (rev 16677) @@ -0,0 +1,6 @@ +#include <plugin.h> + +void gg_plugins_show_all(); + +void gg_plugins_save_loaded(); + Modified: branches/soc-2006-file-loggers/console/gntprefs.c =================================================================== --- branches/soc-2006-file-loggers/console/gntprefs.c 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/console/gntprefs.c 2006-08-09 04:49:19 UTC (rev 16677) @@ -1,8 +1,11 @@ #include <prefs.h> +#include "gntgaim.h" #include "gntprefs.h" -#include "gntgaim.h" +#include "gntrequest.h" +#include <string.h> + void gg_prefs_init() { gaim_prefs_add_none("/gaim"); @@ -10,5 +13,182 @@ gaim_prefs_add_none("/gaim/gnt/plugins"); gaim_prefs_add_string_list("/gaim/gnt/plugins/loaded", NULL); + + gaim_prefs_add_none("/gaim/gnt/conversations"); + gaim_prefs_add_bool("/gaim/gnt/conversations/timestamps", TRUE); + gaim_prefs_add_bool("/gaim/gnt/conversations/notify_typing", FALSE); } +typedef struct +{ + GaimPrefType type; + const char *pref; + const char *label; + GList *(*lv)(); /* If the value is to be selected from a number of choices */ +} Prefs; + +static GList * +get_log_options() +{ + return gaim_log_logger_get_options(); +} + +static GaimRequestField * +get_pref_field(Prefs *prefs) +{ + GaimRequestField *field = NULL; + + if (prefs->lv == NULL) + { + switch (prefs->type) + { + case GAIM_PREF_BOOLEAN: + field = gaim_request_field_bool_new(prefs->pref, prefs->label, + gaim_prefs_get_bool(prefs->pref)); + break; + case GAIM_PREF_INT: + field = gaim_request_field_int_new(prefs->pref, prefs->label, + gaim_prefs_get_int(prefs->pref)); + break; + case GAIM_PREF_STRING: + field = gaim_request_field_string_new(prefs->pref, prefs->label, + gaim_prefs_get_string(prefs->pref), FALSE); + break; + default: + break; + } + } + else + { + GList *list = prefs->lv(), *iter; + field = gaim_request_field_list_new(prefs->pref, prefs->label); + for (iter = list; iter; iter = iter->next) + { + gboolean select = FALSE; + const char *data = iter->data; + iter = iter->next; + switch (prefs->type) + { + case GAIM_PREF_BOOLEAN: + if (gaim_prefs_get_bool(prefs->pref) == GPOINTER_TO_INT(iter->data)) + select = TRUE; + break; + case GAIM_PREF_INT: + if (gaim_prefs_get_int(prefs->pref) == GPOINTER_TO_INT(iter->data)) + select = TRUE; + break; + case GAIM_PREF_STRING: + if (strcmp(gaim_prefs_get_string(prefs->pref), iter->data) == 0) + select = TRUE; + break; + default: + break; + } + gaim_request_field_list_add(field, data, iter->data); + if (select) + gaim_request_field_list_add_selected(field, data); + } + g_list_free(list); + } + return field; +} + +static Prefs convs[] = +{ + {GAIM_PREF_BOOLEAN, "/gaim/gnt/conversations/timestamps", _("Show Timestamps"), NULL}, + {GAIM_PREF_BOOLEAN, "/gaim/gnt/conversations/notify_typing", _("Notify buddies when you are typing"), NULL}, + {GAIM_PREF_NONE, NULL, NULL, NULL} +}; + +static Prefs logging[] = +{ + {GAIM_PREF_STRING, "/core/logging/format", _("Log format"), get_log_options}, + {GAIM_PREF_BOOLEAN, "/core/logging/log_ims", _("Log IMs"), NULL}, + {GAIM_PREF_BOOLEAN, "/core/logging/log_chats", _("Log chats"), NULL}, + {GAIM_PREF_BOOLEAN, "/core/logging/log_system", _("Log status change events"), NULL}, + {GAIM_PREF_NONE, NULL, NULL, NULL}, +}; + +static void +save_cb(void *data, GaimRequestFields *allfields) +{ + GList *list; + for (list = gaim_request_fields_get_groups(allfields); list; list = list->next) + { + GaimRequestFieldGroup *group = list->data; + GList *fields = gaim_request_field_group_get_fields(group); + + for (; fields ; fields = fields->next) + { + GaimRequestField *field = fields->data; + GaimRequestFieldType type = gaim_request_field_get_type(field); + GaimPrefType pt; + gpointer val = NULL; + const char *id = gaim_request_field_get_id(field); + + switch (type) + { + case GAIM_REQUEST_FIELD_LIST: + val = gaim_request_field_list_get_selected(field)->data; + break; + case GAIM_REQUEST_FIELD_BOOLEAN: + val = GINT_TO_POINTER(gaim_request_field_bool_get_value(field)); + break; + case GAIM_REQUEST_FIELD_INTEGER: + val = GINT_TO_POINTER(gaim_request_field_int_get_value(field)); + break; + case GAIM_REQUEST_FIELD_STRING: + val = (gpointer)gaim_request_field_string_get_value(field); + break; + default: + break; + } + + pt = gaim_prefs_get_type(id); + switch (pt) + { + case GAIM_PREF_INT: + gaim_prefs_set_int(id, GPOINTER_TO_INT(val)); + break; + case GAIM_PREF_BOOLEAN: + gaim_prefs_set_bool(id, GPOINTER_TO_INT(val)); + break; + case GAIM_PREF_STRING: + gaim_prefs_set_string(id, val); + break; + default: + break; + } + } + } +} + +void gg_prefs_show_all() +{ + GaimRequestFields *fields; + GaimRequestField *field; + GaimRequestFieldGroup *group; + int i; + + fields = gaim_request_fields_new(); + + group = gaim_request_field_group_new(_("Conversations")); + gaim_request_fields_add_group(fields, group); + for (i = 0; convs[i].pref; i++) + { + field = get_pref_field(convs + i); + gaim_request_field_group_add_field(group, field); + } + + group = gaim_request_field_group_new(_("Logging")); + gaim_request_fields_add_group(fields, group); + for (i = 0; logging[i].pref; i++) + { + field = get_pref_field(logging + i); + gaim_request_field_group_add_field(group, field); + } + + gaim_request_fields(NULL, _("Preferences"), NULL, NULL, fields, + _("Save"), G_CALLBACK(save_cb), _("Cancel"), NULL, NULL); +} + Modified: branches/soc-2006-file-loggers/console/gntprefs.h =================================================================== --- branches/soc-2006-file-loggers/console/gntprefs.h 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/console/gntprefs.h 2006-08-09 04:49:19 UTC (rev 16677) @@ -1,2 +1,4 @@ void gg_prefs_init(); +void gg_prefs_show_all(); + Modified: branches/soc-2006-file-loggers/console/gntrequest.c =================================================================== --- branches/soc-2006-file-loggers/console/gntrequest.c 2006-08-09 04:22:08 UTC (rev 16676) +++ branches/soc-2006-file-loggers/console/gntrequest.c 2006-08-09 04:49:19 UTC (rev 16677) @@ -1,15 +1,19 @@ #include <gnt.h> #include <gntbox.h> #include <gntbutton.h> +#include <gntcheckbox.h> #include <gntcombobox.h> #include <gntentry.h> #include <gntlabel.h> +#include <gntline.h> +#include <gnttree.h> +#include "gntgaim.h" #include "gntrequest.h" static GntWidget * setup_request_window(const char *title, const char *primary, - const char *secondary) + const char *secondary, GaimRequestType type) { GntWidget *window; @@ -24,6 +28,9 @@ if (secondary) gnt_box_add_widget(GNT_BOX(window), gnt_label_new(secondary)); + g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gaim_request_close), + GINT_TO_POINTER(type)); + return window; } @@ -35,7 +42,7 @@ const char *text; gpointer callback; - box = gnt_hbox_new(TRUE); + box = gnt_hbox_new(FALSE); va_start(list, data); @@ -79,7 +86,7 @@ { GntWidget *window, *box, *entry; - window = setup_request_window(title, primary, secondary); + window = setup_request_window(title, primary, secondary, GAIM_REQUES... [truncated message content] |
From: <ro...@us...> - 2006-08-09 04:22:14
|
Revision: 16676 Author: roast Date: 2006-08-08 21:22:08 -0700 (Tue, 08 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16676&view=rev Log Message: ----------- partial support for account sign on and sign off status Modified Paths: -------------- branches/soc-2006-file-loggers/src/connection.c Modified: branches/soc-2006-file-loggers/src/connection.c =================================================================== --- branches/soc-2006-file-loggers/src/connection.c 2006-08-09 04:21:36 UTC (rev 16675) +++ branches/soc-2006-file-loggers/src/connection.c 2006-08-09 04:22:08 UTC (rev 16676) @@ -281,6 +281,10 @@ gaim_presence_get_login_time(presence), msg); g_free(msg); + + gaim_log_write_action(log, GAIM_ACTION_STATUS_ONLINE, + gaim_account_get_username(account), + gaim_presence_get_login_time(presence), NULL); } } @@ -313,6 +317,11 @@ gaim_account_get_username(account), time(NULL), msg); g_free(msg); + + gaim_log_write_action(log, GAIM_ACTION_STATUS_OFFLINE, + gaim_account_get_username(account), + time(NULL), NULL); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2006-08-09 04:21:45
|
Revision: 16675 Author: roast Date: 2006-08-08 21:21:36 -0700 (Tue, 08 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16675&view=rev Log Message: ----------- working event and status (aka action) logging framework try Modified Paths: -------------- branches/soc-2006-file-loggers/src/log.c branches/soc-2006-file-loggers/src/log.h Modified: branches/soc-2006-file-loggers/src/log.c =================================================================== --- branches/soc-2006-file-loggers/src/log.c 2006-08-09 03:41:45 UTC (rev 16674) +++ branches/soc-2006-file-loggers/src/log.c 2006-08-09 04:21:36 UTC (rev 16675) @@ -48,8 +48,11 @@ static void log_get_log_sets_common(GHashTable *sets); -static gsize xml_logger_write(GaimLog *log, GaimMessageFlags type, - const char *from, time_t time, const char *message); +static gsize xml_logger_write_message(GaimLog *log, GaimMessageFlags type, + const char *from, time_t time, const char *message); +static gsize xml_logger_write_action(GaimLog *log, GaimActionType action, + const char *from, time_t time, const char *data); +static gboolean xml_logger_append_footer(GIOChannel *channel); static void xml_logger_finalize(GaimLog *log); static GList *xml_logger_list(GaimLogType type, const char *sn, GaimAccount *account); static GList *xml_logger_list_syslog(GaimAccount *account); @@ -79,6 +82,70 @@ static char *txt_logger_read(GaimLog *log, GaimLogReadFlags *flags); static int txt_logger_total_size(GaimLogType type, const char *name, GaimAccount *account); +static GaimActionData supported_actions[] = { + { GAIM_ACTION_UNSET_ACTION, GAIM_ACTION_UNSET_ACTION, FALSE, NULL}, + { GAIM_ACTION_UNSET_STATUS, GAIM_ACTION_UNSET_STATUS, FALSE, NULL}, + { GAIM_ACTION_STATUS_ONLINE, GAIM_ACTION_UNSET_ACTION, TRUE, "online"}, + { GAIM_ACTION_STATUS_FREETOCHAT, GAIM_ACTION_STATUS_ONLINE, TRUE, "freeToChat"}, + { GAIM_ACTION_STATUS_MOBILE, GAIM_ACTION_STATUS_ONLINE, TRUE, "mobile"}, + { GAIM_ACTION_STATUS_OFFLINE, GAIM_ACTION_UNSET_ACTION, TRUE, "offline"}, + { GAIM_ACTION_STATUS_INVISIBLE, GAIM_ACTION_STATUS_OFFLINE, TRUE, "invisible"}, + { GAIM_ACTION_STATUS_AWAY, GAIM_ACTION_UNSET_ACTION, TRUE, "away"}, + { GAIM_ACTION_STATUS_BERIGHTBACK, GAIM_ACTION_STATUS_AWAY, TRUE, "beRightBack"}, + { GAIM_ACTION_STATUS_BUSY, GAIM_ACTION_STATUS_AWAY, TRUE, "busy"}, + { GAIM_ACTION_STATUS_DONOTDISTURB, GAIM_ACTION_STATUS_AWAY, TRUE, "doNotDisturb"}, + { GAIM_ACTION_STATUS_EXTENDEDAWAY, GAIM_ACTION_STATUS_AWAY, TRUE, "extendedAway"}, + { GAIM_ACTION_STATUS_GONEHOME, GAIM_ACTION_STATUS_AWAY, TRUE, "goneHome"}, + { GAIM_ACTION_STATUS_INAMEETING, GAIM_ACTION_STATUS_AWAY, TRUE, "inAMeeting"}, + { GAIM_ACTION_STATUS_NOTATHOME, GAIM_ACTION_STATUS_AWAY, TRUE, "notAtHome"}, + { GAIM_ACTION_STATUS_NOTATMYDESK, GAIM_ACTION_STATUS_AWAY, TRUE, "notAtMyDesk"}, + { GAIM_ACTION_STATUS_NOTAVAILABLE, GAIM_ACTION_STATUS_AWAY, TRUE, "notAvailable"}, + { GAIM_ACTION_STATUS_NOTINTHEOFFICE, GAIM_ACTION_STATUS_AWAY, TRUE, "notInTheOffice"}, + { GAIM_ACTION_STATUS_ONTHEPHONE, GAIM_ACTION_STATUS_AWAY, TRUE, "onThePhone"}, + { GAIM_ACTION_STATUS_ONVACATION, GAIM_ACTION_STATUS_AWAY, TRUE, "onVacation"}, + { GAIM_ACTION_STATUS_OUTTOLUNCH, GAIM_ACTION_STATUS_AWAY, TRUE, "outToLunch"}, + { GAIM_ACTION_STATUS_STEPPEDOUT, GAIM_ACTION_STATUS_AWAY, TRUE, "steppedOut"}, + { GAIM_ACTION_UNSET_EVENT, GAIM_ACTION_UNSET_EVENT, FALSE, NULL}, + { GAIM_ACTION_EVENT_LOGSTARTED, GAIM_ACTION_UNSET_ACTION, FALSE, "logStarted"}, + { GAIM_ACTION_EVENT_LOGENDED, GAIM_ACTION_UNSET_ACTION, FALSE, "logEnded"}, + { GAIM_ACTION_EVENT_WINDOWOPENED, GAIM_ACTION_UNSET_ACTION, FALSE, "windowOpened"}, + { GAIM_ACTION_EVENT_WINDOWCLOSED, GAIM_ACTION_UNSET_ACTION, FALSE, "windowClosed"}, + { GAIM_ACTION_EVENT_FILETRANSFERREQUESTED, GAIM_ACTION_UNSET_ACTION, TRUE, "fileTransferRequested"}, + { GAIM_ACTION_EVENT_FILETRANSFERREJECTED, GAIM_ACTION_UNSET_ACTION, TRUE, "fileTransferRejected"}, + { GAIM_ACTION_EVENT_FILETRANSFERACCEPTED, GAIM_ACTION_UNSET_ACTION, TRUE, "fileTransferAccepted"}, + { GAIM_ACTION_EVENT_FILETRANSFERSTARTED, GAIM_ACTION_UNSET_ACTION, TRUE, "fileTransferStarted"}, + { GAIM_ACTION_EVENT_FILETRANSFERABORTED, GAIM_ACTION_UNSET_ACTION, TRUE, "fileTransferAborted"}, + { GAIM_ACTION_EVENT_FILETRANSFERCOMPLETED, GAIM_ACTION_UNSET_ACTION, TRUE, "fileTransferCompleted"}, + { GAIM_ACTION_EVENT_AUTHORIZATIONREQUESTED, GAIM_ACTION_UNSET_ACTION, TRUE, "authorizationRequested"}, + { GAIM_ACTION_EVENT_AUTHORIZATIONDENIED, GAIM_ACTION_UNSET_ACTION, TRUE, "authorizationDenied"}, + { GAIM_ACTION_EVENT_AUTHORIZATIONCANCELLED, GAIM_ACTION_UNSET_ACTION, TRUE, "authorizationCancelled"}, + { GAIM_ACTION_EVENT_AUTHORZATIONGRANTED, GAIM_ACTION_UNSET_ACTION, TRUE, "authorizationGranted"}, + { GAIM_ACTION_EVENT_CHANNELMODES, GAIM_ACTION_UNSET_ACTION, TRUE, "channelModes"}, + { GAIM_ACTION_EVENT_CHANNELMODECHANGED, GAIM_ACTION_EVENT_CHANNELMODES, TRUE, "channelModeChanged"}, + { GAIM_ACTION_EVENT_CHANNELTOPIC, GAIM_ACTION_UNSET_ACTION, TRUE, "channelTopic"}, + { GAIM_ACTION_EVENT_CHANNELTOPICCHANGED, GAIM_ACTION_EVENT_CHANNELTOPIC, TRUE, "channelTopicChanged"}, + { GAIM_ACTION_EVENT_SUBJECT, GAIM_ACTION_UNSET_ACTION, TRUE, "subject"}, + { GAIM_ACTION_EVENT_SUBJECTCHANGED, GAIM_ACTION_EVENT_SUBJECT, TRUE, "subjectChanged"}, + { GAIM_ACTION_EVENT_USERFORMATTEDID, GAIM_ACTION_UNSET_ACTION, TRUE, "userFormattedId"}, + { GAIM_ACTION_EVENT_USERFORMATTEDIDCHANGED, GAIM_ACTION_EVENT_USERFORMATTEDID, TRUE, "userFormattedIdChanged"}, + { GAIM_ACTION_EVENT_USERALIAS, GAIM_ACTION_UNSET_ACTION, TRUE, "userAlias"}, + { GAIM_ACTION_EVENT_USERALIASCHANGED, GAIM_ACTION_EVENT_USERALIAS, TRUE, "userAliasChanged"}, + { GAIM_ACTION_EVENT_USERHANDLE, GAIM_ACTION_UNSET_ACTION, TRUE, "userHandle"}, + { GAIM_ACTION_EVENT_USERHANDLECHANGED, GAIM_ACTION_EVENT_USERHANDLE, TRUE, "userHandleChanged"}, + { GAIM_ACTION_EVENT_USERPERMISSIONS, GAIM_ACTION_UNSET_ACTION, TRUE, "userPermissions"}, + { GAIM_ACTION_EVENT_USERPERMISSIONS_PROMOTED, GAIM_ACTION_EVENT_USERPERMISSIONS, TRUE, "userPermissions/promoted"}, + { GAIM_ACTION_EVENT_USERPERMISSIONS_DEMOTED, GAIM_ACTION_EVENT_USERPERMISSIONS, TRUE, "userPermissions/demoted"}, + { GAIM_ACTION_EVENT_USERPERMISSIONS_VOICED, GAIM_ACTION_EVENT_USERPERMISSIONS, TRUE, "userPermissions/voiced"}, + { GAIM_ACTION_EVENT_USERPERMISSIONS_DEVOICED, GAIM_ACTION_EVENT_USERPERMISSIONS, TRUE, "userPermissions/devoiced"}, + { GAIM_ACTION_EVENT_USERJOINED, GAIM_ACTION_UNSET_ACTION, TRUE, "userJoined"}, + { GAIM_ACTION_EVENT_USERPARTED, GAIM_ACTION_UNSET_ACTION, TRUE, "userParted"}, + { GAIM_ACTION_EVENT_USERQUIT, GAIM_ACTION_UNSET_ACTION, TRUE, "userQuit"}, + { GAIM_ACTION_EVENT_USERKICKED, GAIM_ACTION_UNSET_ACTION, TRUE, "userKicked"}, + { GAIM_ACTION_EVENT_USERBANNED, GAIM_ACTION_UNSET_ACTION, TRUE, "userBanned"}, + { GAIM_ACTION_EVENT_USERKLINED, GAIM_ACTION_UNSET_ACTION, TRUE, "userKlined"}, + { GAIM_ACTION_EVENT_USERGLINED, GAIM_ACTION_UNSET_ACTION, TRUE, "userGlined"} +}; + /************************************************************************** * PUBLIC LOGGING FUNCTIONS *********************************************** **************************************************************************/ @@ -177,6 +244,34 @@ } +void gaim_log_write_action(GaimLog *log, GaimActionType action, + const char *from, time_t time, const char *data) +{ + struct _gaim_logsize_user *lu; + gsize written, total = 0; + gpointer ptrsize; + + g_return_if_fail(log); + g_return_if_fail(log->logger); + g_return_if_fail(log->logger->write_action); + + written = (log->logger->write_action)(log, action, from, time, data); + + lu = g_new(struct _gaim_logsize_user, 1); + + lu->name = g_strdup(gaim_normalize(log->account, log->name)); + lu->account = log->account; + + if(g_hash_table_lookup_extended(logsize_users, lu, NULL, &ptrsize)) { + total = GPOINTER_TO_INT(ptrsize); + total += written; + g_hash_table_replace(logsize_users, lu, GINT_TO_POINTER(total)); + } else { + g_free(lu->name); + g_free(lu); + } +} + char *gaim_log_read(GaimLog *log, GaimLogReadFlags *flags) { GaimLogReadFlags mflags; @@ -360,8 +455,10 @@ logger->list_syslog = va_arg(args, void *); if (functions >= 9) logger->get_log_sets = va_arg(args, void *); + if (functions >= 10) + logger->write_action = va_arg(args, void *); - if (functions > 9) + if (functions > 10) gaim_debug_info("log", "Dropping new functions for logger: %s (%s)\n", name, id); va_end(args); @@ -545,6 +642,52 @@ } /**************************************************************************** + * LOG ACTION SUBSYSTEM ***************************************************** + ****************************************************************************/ +GaimActionData* gaim_log_action_get_actiondata(GaimActionType action) { + int i = 0; + for (i = 0; i < sizeof(supported_actions); i++) { + if (supported_actions[i].action != action) { + continue; + } + else { + return &(supported_actions[i]); + } + } + return NULL; +} + +gboolean gaim_log_action_is_event(GaimActionType action) { + // for now, we know the boundaries of GaimActionType enum declaration + return action > GAIM_ACTION_UNSET_EVENT; +} + +gboolean gaim_log_action_is_status(GaimActionType action) { + // for now, we know the boundaries of GaimActionType enum declaration + return (action > GAIM_ACTION_UNSET_STATUS && action < GAIM_ACTION_UNSET_EVENT); +} + +gboolean gaim_log_action_requires_sender(GaimActionType action) { + GaimActionData *action_data = gaim_log_action_get_actiondata(action); + + if (action_data != NULL) { + return action_data->requires_sender; + } + + return FALSE; +} + +const char* gaim_log_action_ulf_value(GaimActionType action) { + GaimActionData *action_data = gaim_log_action_get_actiondata(action); + + if (action_data != NULL) { + return action_data->ulf_value; + } + + return NULL; +} + +/**************************************************************************** * LOG SUBSYSTEM ************************************************************ ****************************************************************************/ @@ -568,15 +711,17 @@ gaim_prefs_add_string("/core/logging/format", "txt"); - xml_logger = gaim_log_logger_new("xml", _("Unified Log Format (XML)"), 8, + xml_logger = gaim_log_logger_new("xml", _("Unified Log Format (XML)"), 10, NULL, - xml_logger_write, + xml_logger_write_message, xml_logger_finalize, xml_logger_list, xml_logger_read, gaim_log_common_sizer, xml_logger_total_size, - xml_logger_list_syslog); + xml_logger_list_syslog, + NULL, + xml_logger_write_action); gaim_log_logger_add(xml_logger); html_logger = gaim_log_logger_new("html", _("HTML"), 8, @@ -1016,39 +1161,23 @@ } */ -static gsize xml_logger_write(GaimLog *log, - GaimMessageFlags type, - const char *from, time_t time, const char *message) -{ - char *msg_fixed; - char *date = g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S%z", localtime(&time))); +/** Returns the amount of data written to the file, and -1 if the file is unwritable. + * If the file is unwritable, then the integrity of log->logger_data is not guaranteed. */ +static gsize xml_logger_write_create(GaimLog *log, time_t time) { + if (!log->logger_data) { + /* This log is new. We could use the loggers 'new' function, but + * creating a new file there would result in empty files in the case + * that you open a convo with someone, but don't say anything. + */ - GaimPlugin *plugin = gaim_find_prpl(gaim_account_get_protocol_id(log->account)); - GaimLogCommonLoggerData *data = log->logger_data; - gsize written = 0, written_buf = 0; - GString *writebuf; - GIOStatus iostat; - GError *gerror = NULL; - gboolean log_corrected_html = gaim_prefs_get_bool("/core/logging/log_corrected_html"); - - char *from_normed = g_strdup(gaim_normalize(log->account, from)); - char *from_attributes; - if (strncmp(from, from_normed, strlen(from)) == 0) { - // if from is already normalized; leave senderformatted out - from_attributes = g_strconcat(" sender=\"", from_normed, "\"", NULL); - } else { - // from is NOT normalized; specifying senderformatted - from_attributes = g_strconcat(" sender=\"", from_normed, "\" senderformatted=\"", from, "\"", NULL); - } - - writebuf = g_string_new(""); - - /* This log is new. We could use the loggers 'new' function, but - * creating a new file there would result in empty files in the case - * that you open a convo with someone, but don't say anything. - */ - if (!log->logger_data) { + GaimPlugin *plugin = gaim_find_prpl(gaim_account_get_protocol_id(log->account)); + GaimLogCommonLoggerData *data = log->logger_data; + GString *writebuf = g_string_new(""); + char *date = g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S%z", localtime(&time))); + gsize written = 0; const char *prpl = GAIM_PLUGIN_PROTOCOL_INFO(plugin)->list_icon(log->account, NULL); + GIOStatus iostat; + GError *gerror = NULL; char *account_normed = g_strdup(gaim_normalize(log->account, gaim_account_get_username(log->account))); char *account_attributes; @@ -1067,8 +1196,11 @@ data = log->logger_data; // if file doesn't exist, die - if (!data->channel) return 0; + if (!data->channel) { + return -1; + } + // directly write the event to prevent calling xml_logger_write_event, which calls us back g_string_printf(writebuf, "%c%c%c" "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" @@ -1078,21 +1210,58 @@ account_attributes, log->type == GAIM_LOG_SYSTEM ? " gaim:logtype=\"system\"" : "", date); - iostat = g_io_channel_write_chars(data->channel, writebuf->str, -1, &written_buf, &gerror); + iostat = g_io_channel_write_chars(data->channel, writebuf->str, -1, &written, &gerror); if (iostat == G_IO_STATUS_ERROR) { - gaim_debug_info("log", "xml_logger_write could not write to new file: %s\n", gerror->message); + gaim_debug_info("log", "xml_logger_write_common could not write to new file: %s\n", gerror->message); g_error_free(gerror); gerror = NULL; } - else written += written_buf; g_free(account_normed); g_free(account_attributes); + g_string_free(writebuf, TRUE); + return written; } + return 0; +} - /* if we can't write to the file, give up before we hurt ourselves */ - if(!data->channel) +static gsize xml_logger_write_message(GaimLog *log, + GaimMessageFlags type, + const char *from, time_t time, const char *message) +{ + char *date = g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S%z", localtime(&time))); + + GaimLogCommonLoggerData *data; + gsize written = 0, written_buf = 0; + GString *writebuf; + GIOStatus iostat; + GError *gerror = NULL; + + char *from_normed = g_strdup(gaim_normalize(log->account, from)); + char *from_attributes; /**< The XML string of attributes for sender and senderformatted. */ + + gboolean log_corrected_html = gaim_prefs_get_bool("/core/logging/log_corrected_html"); + char *msg_fixed; + + if (strncmp(from, from_normed, strlen(from)) == 0) { + // if from is already normalized; leave senderformatted out + from_attributes = g_strconcat(" sender=\"", from_normed, "\"", NULL); + } else { + // from is NOT normalized; specifying senderformatted + from_attributes = g_strconcat(" sender=\"", from_normed, "\" senderformatted=\"", from, "\"", NULL); + } + + writebuf = g_string_new(""); + + // create the logfile if it doesn't exist + written = xml_logger_write_create(log, time); + /* if we can't write to the file, give up before we hurt ourselves + * if xml_logger_write_common returns -1, the log file is not available */ + if (written == -1) { + gaim_debug_info("log", "xml_logger_write_message could not create the new logfile\n"); return 0; + } + data = log->logger_data; if (log_corrected_html) { gaim_markup_html_to_xhtml(message, &msg_fixed, NULL); @@ -1150,7 +1319,7 @@ iostat = g_io_channel_write_chars(data->channel, writebuf->str, -1, &written_buf, &gerror); if (iostat == G_IO_STATUS_ERROR) { - gaim_debug_info("log", "xml_logger_write could not the message to the logfile: %s\n", gerror->message); + gaim_debug_info("log", "xml_logger_write_message could not the message to the logfile: %s\n", gerror->message); g_error_free(gerror); gerror = NULL; } @@ -1158,43 +1327,131 @@ g_free(date); if (log_corrected_html) { - // free only if we need to free this + // free only if we used this g_free(msg_fixed); } + xml_logger_append_footer(data->channel); + + g_free(from_normed); + g_free(from_attributes); + g_string_free(writebuf, TRUE); + return written; +} + +static gsize xml_logger_write_action(GaimLog *log, GaimActionType action, + const char *from, time_t time, const char *tagdata) { + char *date = g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S%z", localtime(&time))); + + GaimLogCommonLoggerData *data = log->logger_data; + GIOStatus iostat; + GError *gerror = NULL; + + gsize written = 0; + GString *writebuf = g_string_new(""); + + char *from_attributes; + if (from) { + char *from_normed = g_strdup(gaim_normalize(log->account, from)); + + if (strncmp(from, from_normed, strlen(from)) == 0) { + // if from is already normalized; leave senderformatted out + from_attributes = g_strconcat(" sender=\"", from_normed, "\"", NULL); + } else { + // from is NOT normalized; specifying senderformatted + from_attributes = g_strconcat(" sender=\"", from_normed, "\" senderformatted=\"", from, "\"", NULL); + } + + g_free(from_normed); + } + else { + // there is no sender attribute for this action + from_attributes = g_strconcat("", NULL); + + if (gaim_log_action_requires_sender(action)) { + gaim_debug_error("log", "xml_logger_write_action is writing an action that does not have the required sender attribute\n"); + } + } + + // create the log file if it doesn't exist, and die if it fails + written = xml_logger_write_create(log, time); + if (written == -1) { + gaim_debug_info("log", "xml_logger_write_action could not create the new logfile\n"); + return 0; + } + + // create the log action + if (tagdata != NULL && strlen(tagdata) > 0) { + g_string_printf(writebuf, "\t<event time=\"%s\"%s type=\"%s\">%s</event>\n", date, from_attributes, + gaim_log_action_ulf_value(action), tagdata); + } + else { + g_string_printf(writebuf, "\t<event time=\"%s\"%s type=\"%s\" />\n", date, from_attributes, + gaim_log_action_ulf_value(action)); + } + + // write it + iostat = g_io_channel_write_chars(data->channel, writebuf->str, -1, &written, &gerror); + if (iostat == G_IO_STATUS_ERROR) { + gaim_debug_info("log", "xml_logger_write_action could not write the action to the log file: %s\n", gerror->message); + g_error_free(gerror); + gerror = NULL; + } + + xml_logger_append_footer(data->channel); + + g_free(date); + g_free(from_attributes); + g_string_free(writebuf, TRUE); + + return written; +} + +static gboolean xml_logger_append_footer(GIOChannel *channel) { + GIOStatus iostat; + GString *writebuf; + GError *gerror = NULL; + gsize written_buf = 0; + + if (!channel) { + return FALSE; + } + + writebuf = g_string_new(""); + // append suffix to file and seek back to keep a valid XML document out of the user space buffer g_string_printf(writebuf, "\t<event time=\"%s\" type=\"logEnd\" />\n" "</chat>\n", gaim_utf8_strftime("%Y-%m-%d %H:%M:%S%z", NULL)); - iostat = g_io_channel_write_chars(data->channel, writebuf->str, -1, &written_buf, &gerror); + iostat = g_io_channel_write_chars(channel, writebuf->str, -1, &written_buf, &gerror); if (iostat == G_IO_STATUS_ERROR) { - gaim_debug_info("log", "xml_logger_write could not write the tail to the logfile: %s\n", gerror->message); + gaim_debug_info("log", "xml_logger_write_message could not write the tail to the logfile: %s\n", gerror->message); g_error_free(gerror); gerror = NULL; } - iostat = g_io_channel_seek_position(data->channel, -1*(gint64)(written_buf), G_SEEK_CUR, &gerror); + iostat = g_io_channel_seek_position(channel, -1*(gint64)(written_buf), G_SEEK_CUR, &gerror); if (iostat == G_IO_STATUS_ERROR) { - gaim_debug_info("log", "xml_logger_write could not seek backwards to the beginning of the tail: %s\n", gerror->message); + gaim_debug_info("log", "xml_logger_write_message could not seek backwards to the beginning of the tail: %s\n", gerror->message); g_error_free(gerror); gerror = NULL; } - iostat = g_io_channel_flush(data->channel, &gerror); + iostat = g_io_channel_flush(channel, &gerror); if (iostat == G_IO_STATUS_ERROR) { - gaim_debug_info("log", "xml_logger_write could not flush the logfile: %s\n", gerror->message); + gaim_debug_info("log", "xml_logger_write_message could not flush the logfile: %s\n", gerror->message); g_error_free(gerror); gerror = NULL; } - g_free(from_normed); - g_free(from_attributes); g_string_free(writebuf, TRUE); - return written; + + return TRUE; } + static void xml_logger_finalize(GaimLog *log) { GaimLogCommonLoggerData *data = log->logger_data; @@ -1399,7 +1656,7 @@ iostat = g_io_channel_flush(data->channel, &gerror); if (iostat == G_IO_STATUS_ERROR) { - gaim_debug_info("log", "xml_logger_write could not flush the logfile: %s\n", gerror->message); + gaim_debug_info("log", "html_logger_write could not flush the logfile: %s\n", gerror->message); g_error_free(gerror); gerror = NULL; } Modified: branches/soc-2006-file-loggers/src/log.h =================================================================== --- branches/soc-2006-file-loggers/src/log.h 2006-08-09 03:41:45 UTC (rev 16674) +++ branches/soc-2006-file-loggers/src/log.h 2006-08-09 04:21:36 UTC (rev 16675) @@ -36,6 +36,7 @@ typedef struct _GaimLogLogger GaimLogLogger; typedef struct _GaimLogCommonLoggerData GaimLogCommonLoggerData; typedef struct _GaimLogSet GaimLogSet; +typedef struct _GaimActionData GaimActionData; typedef enum { GAIM_LOG_IM, @@ -48,51 +49,72 @@ } GaimLogReadFlags; /** - * A list of recognizable events that are logged. + * A list of recognizable actions that are logged. */ typedef enum { - GAIM_EVENT_UNSET = 0, - GAIM_EVENT_LOGSTARTED, - GAIM_EVENT_LOGENDED, - GAIM_EVENT_WINDOWOPENED, - GAIM_EVENT_WINDOWCLOSED, - GAIM_EVENT_FILETRANSFERREQUESTED, - GAIM_EVENT_FILETRANSFERREJECTED, - GAIM_EVENT_FILETRANSFERACCEPTED, - GAIM_EVENT_FILETRANSFERSTARTED, - GAIM_EVENT_FILETRANSFERABORTED, - GAIM_EVENT_FILETRANSFERCOMPLETED, - GAIM_EVENT_AUTHORIZATIONREQUESTED, - GAIM_EVENT_AUTHORIZATIONDENIED, - GAIM_EVENT_AUTHORIZATIONCANCELLED, - GAIM_EVENT_AUTHORZATIONGRANTED, - GAIM_EVENT_CHANNELMODES, - GAIM_EVENT_CHANNELMODECHANGED, - GAIM_EVENT_CHANNELTOPIC, - GAIM_EVENT_CHANNELTOPICCHANGED, - GAIM_EVENT_SUBJECT, - GAIM_EVENT_SUBJECTCHANGED, - GAIM_EVENT_USERFORMATTEDID, - GAIM_EVENT_USERFORMATTEDIDCHANGED, - GAIM_EVENT_USERALIAS, - GAIM_EVENT_USERALIASCHANGED, - GAIM_EVENT_USERHANDLE, - GAIM_EVENT_USERHANDLECHANGED, - GAIM_EVENT_USERPERMISSIONS, - GAIM_EVENT_USERPERMISSIONS_PROMOTED, - GAIM_EVENT_USERPERMISSIONS_DEMOTED, - GAIM_EVENT_USERPERMISSIONS_VOICED, - GAIM_EVENT_USERPERMISSIONS_DEVOICED, - GAIM_EVENT_USERJOINED, - GAIM_EVENT_USERPARTED, - GAIM_EVENT_USERQUIT, - GAIM_EVENT_USERKICKED, - GAIM_EVENT_USERBANNED, - GAIM_EVENT_USERKLINED, - GAIM_EVENT_USERGLINED, - GAIM_TOTAL_EVENTS -} GaimEvents; + GAIM_ACTION_UNSET_ACTION = 0, + GAIM_ACTION_UNSET_STATUS, /**< Placeholder/Boundary of the first STATUS action types. */ + GAIM_ACTION_STATUS_ONLINE, + GAIM_ACTION_STATUS_FREETOCHAT, + GAIM_ACTION_STATUS_MOBILE, + GAIM_ACTION_STATUS_OFFLINE, + GAIM_ACTION_STATUS_INVISIBLE, + GAIM_ACTION_STATUS_AWAY, + GAIM_ACTION_STATUS_BERIGHTBACK, + GAIM_ACTION_STATUS_BUSY, + GAIM_ACTION_STATUS_DONOTDISTURB, + GAIM_ACTION_STATUS_EXTENDEDAWAY, + GAIM_ACTION_STATUS_GONEHOME, + GAIM_ACTION_STATUS_INAMEETING, + GAIM_ACTION_STATUS_NOTATHOME, + GAIM_ACTION_STATUS_NOTATMYDESK, + GAIM_ACTION_STATUS_NOTAVAILABLE, + GAIM_ACTION_STATUS_NOTINTHEOFFICE, + GAIM_ACTION_STATUS_ONTHEPHONE, + GAIM_ACTION_STATUS_ONVACATION, + GAIM_ACTION_STATUS_OUTTOLUNCH, + GAIM_ACTION_STATUS_STEPPEDOUT, + GAIM_ACTION_UNSET_EVENT, /**< Placeholder/Boundary of the first EVENT action types. */ + GAIM_ACTION_EVENT_LOGSTARTED, + GAIM_ACTION_EVENT_LOGENDED, + GAIM_ACTION_EVENT_WINDOWOPENED, + GAIM_ACTION_EVENT_WINDOWCLOSED, + GAIM_ACTION_EVENT_FILETRANSFERREQUESTED, + GAIM_ACTION_EVENT_FILETRANSFERREJECTED, + GAIM_ACTION_EVENT_FILETRANSFERACCEPTED, + GAIM_ACTION_EVENT_FILETRANSFERSTARTED, + GAIM_ACTION_EVENT_FILETRANSFERABORTED, + GAIM_ACTION_EVENT_FILETRANSFERCOMPLETED, + GAIM_ACTION_EVENT_AUTHORIZATIONREQUESTED, + GAIM_ACTION_EVENT_AUTHORIZATIONDENIED, + GAIM_ACTION_EVENT_AUTHORIZATIONCANCELLED, + GAIM_ACTION_EVENT_AUTHORZATIONGRANTED, + GAIM_ACTION_EVENT_CHANNELMODES, + GAIM_ACTION_EVENT_CHANNELMODECHANGED, + GAIM_ACTION_EVENT_CHANNELTOPIC, + GAIM_ACTION_EVENT_CHANNELTOPICCHANGED, + GAIM_ACTION_EVENT_SUBJECT, + GAIM_ACTION_EVENT_SUBJECTCHANGED, + GAIM_ACTION_EVENT_USERFORMATTEDID, + GAIM_ACTION_EVENT_USERFORMATTEDIDCHANGED, + GAIM_ACTION_EVENT_USERALIAS, + GAIM_ACTION_EVENT_USERALIASCHANGED, + GAIM_ACTION_EVENT_USERHANDLE, + GAIM_ACTION_EVENT_USERHANDLECHANGED, + GAIM_ACTION_EVENT_USERPERMISSIONS, + GAIM_ACTION_EVENT_USERPERMISSIONS_PROMOTED, + GAIM_ACTION_EVENT_USERPERMISSIONS_DEMOTED, + GAIM_ACTION_EVENT_USERPERMISSIONS_VOICED, + GAIM_ACTION_EVENT_USERPERMISSIONS_DEVOICED, + GAIM_ACTION_EVENT_USERJOINED, + GAIM_ACTION_EVENT_USERPARTED, + GAIM_ACTION_EVENT_USERQUIT, + GAIM_ACTION_EVENT_USERKICKED, + GAIM_ACTION_EVENT_USERBANNED, + GAIM_ACTION_EVENT_USERKLINED, + GAIM_ACTION_EVENT_USERGLINED +} GaimActionType; #include "account.h" #include "conversation.h" @@ -113,29 +135,29 @@ I don't think this is actually needed. */ void (*create)(GaimLog *log); - /** This is used to write to the log file */ + /** This is used to write a message to the log file. */ gsize (*write)(GaimLog *log, GaimMessageFlags type, const char *from, time_t time, const char *message); - /** Called when the log is destroyed */ + /** Called when the log is destroyed. */ void (*finalize)(GaimLog *log); - /** This function returns a sorted GList of available GaimLogs */ + /** This function returns a sorted GList of available GaimLogs. */ GList *(*list)(GaimLogType type, const char *name, GaimAccount *account); /** Given one of the logs returned by the logger's list function, - * this returns the contents of the log in GtkIMHtml markup */ + * this returns the contents of the log in GtkIMHtml markup. */ char *(*read)(GaimLog *log, GaimLogReadFlags *flags); /** Given one of the logs returned by the logger's list function, - * this returns the size of the log in bytes */ + * this returns the size of the log in bytes. */ int (*size)(GaimLog *log); /** Returns the total size of all the logs. If this is undefined a default - * implementation is used */ + * implementation is used. */ int (*total_size)(GaimLogType type, const char *name, GaimAccount *account); /** This function returns a sorted GList of available system GaimLogs */ @@ -150,6 +172,13 @@ * Loggers which implement this function must create a GaimLogSet, * then call @a cb with @a sets and the newly created GaimLogSet. */ void (*get_log_sets)(GaimLogSetCallback cb, GHashTable *sets); + + /** This is used to write an action (event or status) to the log file. */ + gsize (*write_action)(GaimLog *log, + GaimActionType action, + const char *from, + time_t time, + const char *tagdata); }; /** @@ -215,6 +244,18 @@ * IMPORTANT: Update that code if you add members here. */ }; +/** + * Describes a specific action type and its attributes. + */ +struct _GaimActionData { + GaimActionType action; /**< The action, which is an action or status. **/ + GaimActionType parent_action; /**< The parent action, if there is one. + * If not, this will be set to NULL or GAIM_ACTION_UNSET. */ + gboolean requires_sender; /**< Indicates whether a sender is required, + * or if the action must have an origin. */ + const char *ulf_value; /**< The corresponding ULF formatted attribute value. */ +}; + #ifdef __cplusplus extern "C" { #endif @@ -248,7 +289,7 @@ void gaim_log_free(GaimLog *log); /** - * Writes to a log file. Assumes you have checked preferences already. + * Writes messages to a log file. Assumes you have checked preferences already. * * @param log The log to write to * @param type The type of message being logged @@ -264,6 +305,22 @@ const char *message); /** + * Writes actions to a log file. Assumes you have checked preferences already. + * + * @param log The log to write to + * @param action The action that occured + * @param from For whom this acton occured, or @c NULL + * if action does not have an origin + * @param time A timestamp in UNIX time + * @param tagdata Any action-associated data to be saved in the action element + */ +void gaim_log_write_action(GaimLog *log, + GaimActionType action, + const char *from, + time_t time, + const char *tagdata); + +/** * Reads from a log * * @param log The log to read from @@ -505,6 +562,57 @@ GList *gaim_log_logger_get_options(void); /**************************************************************************/ +/** @name Action Utilities for Logging functions */ +/**************************************************************************/ +/*@{*/ + +/** + * Returns the corresponding GaimActionData struct of a GaimAction. + * + * @param action The action + * + * @return GaimActionData struct + */ +GaimActionData* gaim_log_action_get_actiondata(GaimActionType action); + +/** + * Returns true if the GaimActionType action is an event + * + * @param action The action + * + * @return True if action is an event + */ +gboolean gaim_log_action_is_event(GaimActionType action); + +/** + * Returns true if the GaimActionType action is an status + * + * @param action The action + * + * @return True if action is a status + */ +gboolean gaim_log_action_is_status(GaimActionType action); + +/** + * Returns true if the GaimAction requires a sender or a from. + * + * @param action The action + * + * @return True if <code>event</code> or <code>status</code> element requires a sender. + */ +gboolean gaim_log_action_requires_sender(GaimActionType action); + +/** + * Returns the corresponding ULF attribute value of an action. + * + * @param action The action + * + * @return The corresponding ULF attribute value + */ +const char* gaim_log_action_ulf_value(GaimActionType action); + +/*@}*/ +/**************************************************************************/ /** @name Log Subsystem */ /**************************************************************************/ /*@{*/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-09 03:42:52
|
Revision: 16674 Author: sadrul Date: 2006-08-08 20:41:45 -0700 (Tue, 08 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16674&view=rev Log Message: ----------- Add a way to change some preferences (the preferences for the conversations do not do anything yet). I used the request-api for this, which I think is cool. But too many preferences will make the dialog long, which may not fit in the screen. It looks alright for now though. You can pop the dialog up with "/prefs" command in a converastion. And some other minor fixes. Modified Paths: -------------- trunk/console/gntaccount.c trunk/console/gntblist.c trunk/console/gntconv.c trunk/console/gntdebug.c trunk/console/gntplugin.c trunk/console/gntprefs.c trunk/console/gntprefs.h trunk/console/gntrequest.c trunk/console/libgnt/Makefile.am trunk/console/libgnt/gntbutton.c trunk/console/libgnt/gntlabel.c trunk/console/libgnt/gntmain.c trunk/console/libgnt/test/combo.c Added Paths: ----------- trunk/console/libgnt/gntutils.c trunk/console/libgnt/gntutils.h Modified: trunk/console/gntaccount.c =================================================================== --- trunk/console/gntaccount.c 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/gntaccount.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -213,8 +213,9 @@ } else { - dialog->splits = gnt_box_new(FALSE, TRUE); + dialog->splits = gnt_vbox_new(FALSE); gnt_box_set_pad(GNT_BOX(dialog->splits), 0); + gnt_box_set_fill(GNT_BOX(dialog->splits), TRUE); } dialog->split_entries = NULL; @@ -232,7 +233,7 @@ GntWidget *entry; char *buf; - hbox = gnt_box_new(TRUE, FALSE); + hbox = gnt_hbox_new(TRUE); gnt_box_add_widget(GNT_BOX(dialog->splits), hbox); buf = g_strdup_printf("%s:", gaim_account_user_split_get_text(split)); @@ -443,16 +444,18 @@ dialog = g_new0(AccountEditDialog, 1); accountdialogs = g_list_prepend(accountdialogs, dialog); - dialog->window = window = gnt_box_new(FALSE, TRUE); + dialog->window = window = gnt_vbox_new(FALSE); dialog->account = account; gnt_box_set_toplevel(GNT_BOX(window), TRUE); gnt_box_set_title(GNT_BOX(window), account ? _("Modify Account") : _("New Account")); gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); gnt_box_set_pad(GNT_BOX(window), 0); + gnt_widget_set_name(window, "edit-account"); + gnt_box_set_fill(GNT_BOX(window), TRUE); - hbox = gnt_box_new(TRUE, FALSE); + hbox = gnt_hbox_new(TRUE); + gnt_box_set_pad(GNT_BOX(hbox), 0); gnt_box_add_widget(GNT_BOX(window), hbox); - gnt_box_set_alignment(GNT_BOX(hbox), GNT_ALIGN_MID); dialog->protocol = combo = gnt_combo_box_new(); list = gaim_plugins_get_protocols(); @@ -461,6 +464,7 @@ gnt_combo_box_add_data(GNT_COMBO_BOX(combo), iter->data, ((GaimPlugin*)iter->data)->info->name); } + if (account) gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), gaim_plugins_find_with_id(gaim_account_get_protocol_id(account))); @@ -468,10 +472,12 @@ gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), list->data); g_signal_connect(G_OBJECT(combo), "selection-changed", G_CALLBACK(prpl_changed_cb), dialog); + gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(_("Protocol:"))); gnt_box_add_widget(GNT_BOX(hbox), combo); - hbox = gnt_box_new(TRUE, FALSE); + hbox = gnt_hbox_new(TRUE); + gnt_box_set_pad(GNT_BOX(hbox), 0); gnt_box_add_widget(GNT_BOX(window), hbox); dialog->screenname = entry = gnt_entry_new(NULL); @@ -482,7 +488,8 @@ update_user_splits(dialog); gnt_box_add_widget(GNT_BOX(window), dialog->splits); - hbox = gnt_box_new(TRUE, FALSE); + hbox = gnt_hbox_new(TRUE); + gnt_box_set_pad(GNT_BOX(hbox), 0); gnt_box_add_widget(GNT_BOX(window), hbox); dialog->password = entry = gnt_entry_new(NULL); @@ -492,7 +499,8 @@ if (account) gnt_entry_set_text(GNT_ENTRY(entry), gaim_account_get_password(account)); - hbox = gnt_box_new(TRUE, FALSE); + hbox = gnt_hbox_new(TRUE); + gnt_box_set_pad(GNT_BOX(hbox), 0); gnt_box_add_widget(GNT_BOX(window), hbox); dialog->alias = entry = gnt_entry_new(NULL); @@ -515,8 +523,9 @@ /* TODO: Add proxy options */ /* The button box */ - hbox = gnt_box_new(FALSE, FALSE); + hbox = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(window), hbox); + gnt_box_set_alignment(GNT_BOX(hbox), GNT_ALIGN_MID); button = gnt_button_new(_("Cancel")); gnt_box_add_widget(GNT_BOX(hbox), button); @@ -603,7 +612,7 @@ GList *iter; GntWidget *box, *button; - accounts.window = gnt_box_new(FALSE, TRUE); + accounts.window = gnt_vbox_new(FALSE); gnt_box_set_toplevel(GNT_BOX(accounts.window), TRUE); gnt_box_set_title(GNT_BOX(accounts.window), _("Accounts")); gnt_box_set_pad(GNT_BOX(accounts.window), 0); @@ -632,7 +641,7 @@ gnt_box_add_widget(GNT_BOX(accounts.window), gnt_line_new(FALSE)); - box = gnt_box_new(FALSE, FALSE); + box = gnt_hbox_new(FALSE); button = gnt_button_new(_("Add")); gnt_box_add_widget(GNT_BOX(box), button); Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/gntblist.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -906,7 +906,8 @@ } gnt_box_give_focus_to_child(GNT_BOX(ggblist->window), ggblist->tree); - g_source_remove(ggblist->typing); + if (ggblist->typing) + g_source_remove(ggblist->typing); ggblist->typing = 0; return FALSE; } @@ -923,6 +924,7 @@ else if (now->type == STATUS_PRIMITIVE) { /* Move the focus to the entry box */ + /* XXX: Make sure the selected status can have a message */ gnt_box_move_focus(GNT_BOX(ggblist->window), 1); ggblist->typing = g_timeout_add(TYPING_TIMEOUT, (GSourceFunc)remove_typing_cb, NULL); } @@ -936,7 +938,8 @@ if ((text[0] == 27 || (text[0] == '\t' && text[1] == '\0')) && ggblist->typing == 0) return FALSE; - g_source_remove(ggblist->typing); + if (ggblist->typing) + g_source_remove(ggblist->typing); ggblist->typing = 0; if (text[0] == '\r' && text[1] == 0) Modified: trunk/console/gntconv.c =================================================================== --- trunk/console/gntconv.c 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/gntconv.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -10,6 +10,7 @@ #include "gntconv.h" #include "gntdebug.h" #include "gntplugin.h" +#include "gntprefs.h" #include "gnt.h" #include "gntbox.h" @@ -538,6 +539,9 @@ gaim_cmd_register("debugwin", "", GAIM_CMD_P_DEFAULT, GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, cmd_show_window, _("debugwin: Show the debug window."), gg_debug_window_show); + gaim_cmd_register("prefs", "", GAIM_CMD_P_DEFAULT, + GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, + cmd_show_window, _("prefs: Show the preference window."), gg_prefs_show_all); } void gg_conversation_uninit() Modified: trunk/console/gntdebug.c =================================================================== --- trunk/console/gntdebug.c 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/gntdebug.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -19,7 +19,6 @@ { if (key[0] == 27) { - /* XXX: This doesn't seem to always work */ if (strcmp(key+1, GNT_KEY_DOWN) == 0) gnt_text_view_scroll(view, 1); else if (strcmp(key+1, GNT_KEY_UP) == 0) @@ -61,10 +60,7 @@ } gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(debug.tview), args, flag); - gnt_text_view_next_line(GNT_TEXT_VIEW(debug.tview)); gnt_text_view_scroll(GNT_TEXT_VIEW(debug.tview), 0); - - g_signal_connect(G_OBJECT(debug.window), "key_pressed", G_CALLBACK(debug_window_kpress_cb), debug.tview); } } @@ -95,7 +91,10 @@ debug.tview = gnt_text_view_new(); gnt_box_add_widget(GNT_BOX(debug.window), debug.tview); + /* XXX: Add checkboxes/buttons for Clear, Pause, Timestamps */ + g_signal_connect(G_OBJECT(debug.window), "destroy", G_CALLBACK(reset_debug_win), NULL); + g_signal_connect(G_OBJECT(debug.window), "key_pressed", G_CALLBACK(debug_window_kpress_cb), debug.tview); } gnt_widget_show(debug.window); Modified: trunk/console/gntplugin.c =================================================================== --- trunk/console/gntplugin.c 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/gntplugin.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -128,6 +128,8 @@ g_signal_connect(G_OBJECT(tree), "selection_changed", G_CALLBACK(selection_changed), NULL); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(reset_plugin_window), NULL); + gnt_tree_set_selected(GNT_TREE(tree), gaim_plugins_get_all()->data); + gnt_widget_show(window); } Modified: trunk/console/gntprefs.c =================================================================== --- trunk/console/gntprefs.c 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/gntprefs.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -1,8 +1,11 @@ #include <prefs.h> +#include "gntgaim.h" #include "gntprefs.h" -#include "gntgaim.h" +#include "gntrequest.h" +#include <string.h> + void gg_prefs_init() { gaim_prefs_add_none("/gaim"); @@ -10,5 +13,182 @@ gaim_prefs_add_none("/gaim/gnt/plugins"); gaim_prefs_add_string_list("/gaim/gnt/plugins/loaded", NULL); + + gaim_prefs_add_none("/gaim/gnt/conversations"); + gaim_prefs_add_bool("/gaim/gnt/conversations/timestamps", TRUE); + gaim_prefs_add_bool("/gaim/gnt/conversations/notify_typing", FALSE); } +typedef struct +{ + GaimPrefType type; + const char *pref; + const char *label; + GList *(*lv)(); /* If the value is to be selected from a number of choices */ +} Prefs; + +static GList * +get_log_options() +{ + return gaim_log_logger_get_options(); +} + +static GaimRequestField * +get_pref_field(Prefs *prefs) +{ + GaimRequestField *field = NULL; + + if (prefs->lv == NULL) + { + switch (prefs->type) + { + case GAIM_PREF_BOOLEAN: + field = gaim_request_field_bool_new(prefs->pref, prefs->label, + gaim_prefs_get_bool(prefs->pref)); + break; + case GAIM_PREF_INT: + field = gaim_request_field_int_new(prefs->pref, prefs->label, + gaim_prefs_get_int(prefs->pref)); + break; + case GAIM_PREF_STRING: + field = gaim_request_field_string_new(prefs->pref, prefs->label, + gaim_prefs_get_string(prefs->pref), FALSE); + break; + default: + break; + } + } + else + { + GList *list = prefs->lv(), *iter; + field = gaim_request_field_list_new(prefs->pref, prefs->label); + for (iter = list; iter; iter = iter->next) + { + gboolean select = FALSE; + const char *data = iter->data; + iter = iter->next; + switch (prefs->type) + { + case GAIM_PREF_BOOLEAN: + if (gaim_prefs_get_bool(prefs->pref) == GPOINTER_TO_INT(iter->data)) + select = TRUE; + break; + case GAIM_PREF_INT: + if (gaim_prefs_get_int(prefs->pref) == GPOINTER_TO_INT(iter->data)) + select = TRUE; + break; + case GAIM_PREF_STRING: + if (strcmp(gaim_prefs_get_string(prefs->pref), iter->data) == 0) + select = TRUE; + break; + default: + break; + } + gaim_request_field_list_add(field, data, iter->data); + if (select) + gaim_request_field_list_add_selected(field, data); + } + g_list_free(list); + } + return field; +} + +static Prefs convs[] = +{ + {GAIM_PREF_BOOLEAN, "/gaim/gnt/conversations/timestamps", _("Show Timestamps"), NULL}, + {GAIM_PREF_BOOLEAN, "/gaim/gnt/conversations/notify_typing", _("Notify buddies when you are typing"), NULL}, + {GAIM_PREF_NONE, NULL, NULL, NULL} +}; + +static Prefs logging[] = +{ + {GAIM_PREF_STRING, "/core/logging/format", _("Log format"), get_log_options}, + {GAIM_PREF_BOOLEAN, "/core/logging/log_ims", _("Log IMs"), NULL}, + {GAIM_PREF_BOOLEAN, "/core/logging/log_chats", _("Log chats"), NULL}, + {GAIM_PREF_BOOLEAN, "/core/logging/log_system", _("Log status change events"), NULL}, + {GAIM_PREF_NONE, NULL, NULL, NULL}, +}; + +static void +save_cb(void *data, GaimRequestFields *allfields) +{ + GList *list; + for (list = gaim_request_fields_get_groups(allfields); list; list = list->next) + { + GaimRequestFieldGroup *group = list->data; + GList *fields = gaim_request_field_group_get_fields(group); + + for (; fields ; fields = fields->next) + { + GaimRequestField *field = fields->data; + GaimRequestFieldType type = gaim_request_field_get_type(field); + GaimPrefType pt; + gpointer val = NULL; + const char *id = gaim_request_field_get_id(field); + + switch (type) + { + case GAIM_REQUEST_FIELD_LIST: + val = gaim_request_field_list_get_selected(field)->data; + break; + case GAIM_REQUEST_FIELD_BOOLEAN: + val = GINT_TO_POINTER(gaim_request_field_bool_get_value(field)); + break; + case GAIM_REQUEST_FIELD_INTEGER: + val = GINT_TO_POINTER(gaim_request_field_int_get_value(field)); + break; + case GAIM_REQUEST_FIELD_STRING: + val = (gpointer)gaim_request_field_string_get_value(field); + break; + default: + break; + } + + pt = gaim_prefs_get_type(id); + switch (pt) + { + case GAIM_PREF_INT: + gaim_prefs_set_int(id, GPOINTER_TO_INT(val)); + break; + case GAIM_PREF_BOOLEAN: + gaim_prefs_set_bool(id, GPOINTER_TO_INT(val)); + break; + case GAIM_PREF_STRING: + gaim_prefs_set_string(id, val); + break; + default: + break; + } + } + } +} + +void gg_prefs_show_all() +{ + GaimRequestFields *fields; + GaimRequestField *field; + GaimRequestFieldGroup *group; + int i; + + fields = gaim_request_fields_new(); + + group = gaim_request_field_group_new(_("Conversations")); + gaim_request_fields_add_group(fields, group); + for (i = 0; convs[i].pref; i++) + { + field = get_pref_field(convs + i); + gaim_request_field_group_add_field(group, field); + } + + group = gaim_request_field_group_new(_("Logging")); + gaim_request_fields_add_group(fields, group); + for (i = 0; logging[i].pref; i++) + { + field = get_pref_field(logging + i); + gaim_request_field_group_add_field(group, field); + } + + gaim_request_fields(NULL, _("Preferences"), NULL, NULL, fields, + _("Save"), G_CALLBACK(save_cb), _("Cancel"), NULL, NULL); +} + Modified: trunk/console/gntprefs.h =================================================================== --- trunk/console/gntprefs.h 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/gntprefs.h 2006-08-09 03:41:45 UTC (rev 16674) @@ -1,2 +1,4 @@ void gg_prefs_init(); +void gg_prefs_show_all(); + Modified: trunk/console/gntrequest.c =================================================================== --- trunk/console/gntrequest.c 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/gntrequest.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -251,13 +251,12 @@ } else if (type == GAIM_REQUEST_FIELD_LIST) { - GntWidget *tree = field->ui_data; GList *list = NULL; - if (gaim_request_field_list_get_multi_select(field)) { const GList *iter; - + GntWidget *tree = field->ui_data; + iter = gaim_request_field_list_get_items(field); for (; iter; iter = iter->next) { @@ -269,7 +268,8 @@ } else { - gpointer data = gnt_tree_get_selection_data(GNT_TREE(tree)); + GntWidget *combo = field->ui_data; + gpointer data = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); list = g_list_append(list, data); } @@ -315,7 +315,9 @@ GList *fields = gaim_request_field_group_get_fields(group); GntWidget *hbox; - /* XXX: Do something with the title, perhaps add a bold label */ + gnt_box_add_widget(GNT_BOX(box), + gnt_label_new_with_format(gaim_request_field_group_get_title(group), + GNT_TEXT_FLAG_BOLD)); for (; fields ; fields = fields->next) { @@ -328,7 +330,11 @@ gnt_box_add_widget(GNT_BOX(box), hbox); if (type != GAIM_REQUEST_FIELD_BOOLEAN) - gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(label)); + { + GntWidget *l = gnt_label_new(label); + gnt_widget_set_size(l, 0, 1); + gnt_box_add_widget(GNT_BOX(hbox), l); + } if (type == GAIM_REQUEST_FIELD_BOOLEAN) { @@ -376,28 +382,38 @@ { const GList *list; gboolean multi = gaim_request_field_list_get_multi_select(field); - GntWidget *tree = gnt_tree_new(); - gnt_box_add_widget(GNT_BOX(hbox), tree); - field->ui_data = tree; + if (multi) + { + GntWidget *tree = gnt_tree_new(); + gnt_box_add_widget(GNT_BOX(hbox), tree); + field->ui_data = tree; - list = gaim_request_field_list_get_items(field); - for (; list; list = list->next) - { - const char *text = list->data; - gpointer key = gaim_request_field_list_get_data(field, text); - if (multi) + list = gaim_request_field_list_get_items(field); + for (; list; list = list->next) { + const char *text = list->data; + gpointer key = gaim_request_field_list_get_data(field, text); gnt_tree_add_choice(GNT_TREE(tree), key, gnt_tree_create_row(GNT_TREE(tree), text), NULL, NULL); if (gaim_request_field_list_is_selected(field, text)) gnt_tree_set_choice(GNT_TREE(tree), key, TRUE); } - else + } + else + { + GntWidget *combo = gnt_combo_box_new(); + gnt_box_set_alignment(GNT_BOX(hbox), GNT_ALIGN_MID); + gnt_box_add_widget(GNT_BOX(hbox), combo); + field->ui_data = combo; + + list = gaim_request_field_list_get_items(field); + for (; list; list = list->next) { - gnt_tree_add_row_after(GNT_TREE(tree), key, - gnt_tree_create_row(GNT_TREE(tree), text), NULL, NULL); + const char *text = list->data; + gpointer key = gaim_request_field_list_get_data(field, text); + gnt_combo_box_add_data(GNT_COMBO_BOX(combo), key, text); if (gaim_request_field_list_is_selected(field, text)) - gnt_tree_set_selected(GNT_TREE(tree), key); + gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), key); } } } @@ -413,9 +429,9 @@ gnt_label_new_with_format(_("Not implemented yet."), GNT_TEXT_FLAG_BOLD)); } - if (fields->next) - gnt_box_add_widget(GNT_BOX(box), gnt_hline_new()); } + if (list->next) + gnt_box_add_widget(GNT_BOX(box), gnt_hline_new()); } gnt_box_add_widget(GNT_BOX(window), box); @@ -425,7 +441,6 @@ gnt_widget_show(window); - return window; } Modified: trunk/console/libgnt/Makefile.am =================================================================== --- trunk/console/libgnt/Makefile.am 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/libgnt/Makefile.am 2006-08-09 03:41:45 UTC (rev 16674) @@ -17,6 +17,7 @@ gntstyle.c \ gnttextview.c \ gnttree.c \ + gntutils.c \ gntmain.c libgnt_la_headers = \ @@ -34,6 +35,7 @@ gntstyle.h \ gnttextview.h \ gnttree.h \ + gntutils.h \ gnt.h libgnt_laincludedir=$(includedir)/gnt Modified: trunk/console/libgnt/gntbutton.c =================================================================== --- trunk/console/libgnt/gntbutton.c 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/libgnt/gntbutton.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -1,6 +1,7 @@ #include <string.h> #include "gntbutton.h" +#include "gntutils.h" enum { @@ -31,8 +32,9 @@ gnt_button_size_request(GntWidget *widget) { GntButton *button = GNT_BUTTON(widget); - widget->priv.width = g_utf8_strlen(button->priv->text, -1) + 4; - widget->priv.height = 1; + gnt_util_get_text_bound(button->priv->text, + &widget->priv.width, &widget->priv.height); + widget->priv.width += 4; if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_BORDER)) widget->priv.height += 2; } Modified: trunk/console/libgnt/gntlabel.c =================================================================== --- trunk/console/libgnt/gntlabel.c 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/libgnt/gntlabel.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -1,4 +1,5 @@ #include "gntlabel.h" +#include "gntutils.h" #include <string.h> @@ -33,27 +34,9 @@ gnt_label_size_request(GntWidget *widget) { GntLabel *label = GNT_LABEL(widget); - char *s = label->text, *last = s; - int count = 1; - int max = 0; - /* XXX: ew ... everyone look away */ - while (*s) - { - if (*s == '\n' || *s == '\r') - { - count++; - if (max < s - last + 1) - max = s - last + 1; - last = s + 1; - } - s++; - } - if (max < s - last + 1) - max = s - last + 1; - widget->priv.height = count; - - widget->priv.width = max; + gnt_util_get_text_bound(label->text, + &widget->priv.width, &widget->priv.height); } static void Modified: trunk/console/libgnt/gntmain.c =================================================================== --- trunk/console/libgnt/gntmain.c 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/libgnt/gntmain.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -391,7 +391,14 @@ ch = ' '; break; } } - fprintf(file, "%c", ch); + if (ch == '&') + fprintf(file, "&"); + else if (ch == '<') + fprintf(file, "<"); + else if (ch == '>') + fprintf(file, ">"); + else + fprintf(file, "%c", ch); old = now; } fprintf(file, "</span>\n"); Added: trunk/console/libgnt/gntutils.c =================================================================== --- trunk/console/libgnt/gntutils.c (rev 0) +++ trunk/console/libgnt/gntutils.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -0,0 +1,33 @@ +#include "gntutils.h" + +void gnt_util_get_text_bound(const char *text, int *width, int *height) +{ + const char *s = text, *last; + int count = 1, max = 0; + int len; + + /* XXX: ew ... everyone look away */ + last = s; + while (*s) + { + if (*s == '\n' || *s == '\r') + { + count++; + len = g_utf8_pointer_to_offset(last, s); + if (max < len) + max = len; + last = s + 1; + } + s++; + } + + len = g_utf8_pointer_to_offset(last, s); + if (max < len) + max = len; + + if (height) + *height = count; + if (width) + *width = max + (count > 1); +} + Property changes on: trunk/console/libgnt/gntutils.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/console/libgnt/gntutils.h =================================================================== --- trunk/console/libgnt/gntutils.h (rev 0) +++ trunk/console/libgnt/gntutils.h 2006-08-09 03:41:45 UTC (rev 16674) @@ -0,0 +1,6 @@ +#include <glib.h> + +#include "gnt.h" +#include "gntwidget.h" + +void gnt_util_get_text_bound(const char *text, int *width, int *height); Property changes on: trunk/console/libgnt/gntutils.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/console/libgnt/test/combo.c =================================================================== --- trunk/console/libgnt/test/combo.c 2006-08-08 23:20:08 UTC (rev 16673) +++ trunk/console/libgnt/test/combo.c 2006-08-09 03:41:45 UTC (rev 16674) @@ -50,7 +50,9 @@ gnt_combo_box_add_data(GNT_COMBO_BOX(combo), "8", "8"); gnt_combo_box_add_data(GNT_COMBO_BOX(combo), "9", "9"); - gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new("Select")); + GntWidget *l = gnt_label_new("Select"); + gnt_box_add_widget(GNT_BOX(hbox), l); + gnt_widget_set_size(l, 0, 1); gnt_box_add_widget(GNT_BOX(hbox), combo); gnt_box_add_widget(GNT_BOX(box), hbox); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2006-08-08 23:20:30
|
Revision: 16673 Author: markhuetsch Date: 2006-08-08 16:20:08 -0700 (Tue, 08 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16673&view=rev Log Message: ----------- Eliminated a number of warnings. Generally, this consisted of fixing incorrectly declared data types and adding a few casts. I also moved some declarations that occurred in the middle of code. Minor formatting changes. Modified Paths: -------------- trunk/src/protocols/qq/buddy_opt.c trunk/src/protocols/qq/char_conv.c trunk/src/protocols/qq/file_trans.c trunk/src/protocols/qq/group_info.c trunk/src/protocols/qq/group_network.c trunk/src/protocols/qq/keep_alive.c trunk/src/protocols/qq/recv_core.c trunk/src/protocols/qq/send_file.c trunk/src/protocols/qq/sendqueue.h trunk/src/protocols/qq/sys_msg.c Modified: trunk/src/protocols/qq/buddy_opt.c =================================================================== --- trunk/src/protocols/qq/buddy_opt.c 2006-08-08 13:20:32 UTC (rev 16672) +++ trunk/src/protocols/qq/buddy_opt.c 2006-08-08 23:20:08 UTC (rev 16673) @@ -64,7 +64,8 @@ g_return_if_fail(gc != NULL && uid > 0); uid_str = g_strdup_printf("%d", uid); - qq_send_cmd(gc, QQ_CMD_DEL_FRIEND, TRUE, 0, TRUE, uid_str, strlen(uid_str)); + qq_send_cmd(gc, QQ_CMD_DEL_FRIEND, TRUE, 0, + TRUE, (guint8 *) uid_str, strlen(uid_str)); g_free(uid_str); } @@ -94,7 +95,8 @@ /* we need to send the ascii code of this uid to qq server */ uid_str = g_strdup_printf("%d", uid); - qq_send_cmd(gc, QQ_CMD_ADD_FRIEND_WO_AUTH, TRUE, 0, TRUE, uid_str, strlen(uid_str)); + qq_send_cmd(gc, QQ_CMD_ADD_FRIEND_WO_AUTH, TRUE, 0, + TRUE, (guint8 *) uid_str, strlen(uid_str)); g_free(uid_str); /* must be set after sending packet to get the correct send_seq */ @@ -118,14 +120,14 @@ raw_data = g_newa(guint8, QQ_MSG_IM_MAX); cursor = raw_data; - create_packet_data(raw_data, &cursor, uid_str, strlen(uid_str)); + create_packet_data(raw_data, &cursor, (guint8 *) uid_str, strlen(uid_str)); create_packet_b(raw_data, &cursor, bar); create_packet_b(raw_data, &cursor, response); if (text != NULL) { text_qq = utf8_to_qq(text, QQ_CHARSET_DEFAULT); create_packet_b(raw_data, &cursor, bar); - create_packet_data(raw_data, &cursor, text_qq, strlen(text_qq)); + create_packet_data(raw_data, &cursor, (guint8 *) text_qq, strlen(text_qq)); g_free(text_qq); } @@ -342,7 +344,8 @@ { qq_data *qd; gint len, for_uid; - gchar *msg, *data, **segments, *uid, *reply; + gchar *msg, **segments, *uid, *reply; + guint8 *data; GList *list; GaimBuddy *b; gc_and_uid *g; Modified: trunk/src/protocols/qq/char_conv.c =================================================================== --- trunk/src/protocols/qq/char_conv.c 2006-08-08 13:20:32 UTC (rev 16672) +++ trunk/src/protocols/qq/char_conv.c 2006-08-08 23:20:08 UTC (rev 16673) @@ -114,7 +114,8 @@ else { /* conversion error */ gaim_debug(GAIM_DEBUG_ERROR, "QQ", "%s\n", error->message); gaim_debug(GAIM_DEBUG_WARNING, "QQ", - "Dump failed text\n%s", hex_dump_to_str(str, (len == -1) ? strlen(str) : len)); + "Dump failed text\n%s", + hex_dump_to_str((guint8 *) str, (len == -1) ? strlen(str) : len)); g_error_free(error); return g_strdup(QQ_NULL_MSG); } @@ -130,7 +131,7 @@ g_return_val_if_fail(data != NULL && from_charset != NULL, -1); len = data[0]; - *ret = _my_convert(data + 1, (gssize) len, UTF8, from_charset); + *ret = _my_convert((gchar *) (data + 1), (gssize) len, UTF8, from_charset); return len + 1; } @@ -154,7 +155,7 @@ read_packet_b(data, &cursor, len, &bar); /* skip, not sure of its use */ read_packet_w(data, &cursor, len, &charset_code); - font_name = g_strndup(cursor, data + len - cursor); + font_name = g_strndup((gchar *) cursor, data + len - cursor); font_size = _get_size(font_attr); is_bold = _check_bold(font_attr); @@ -223,7 +224,7 @@ GString *converted; converted = g_string_new(""); - segments = split_data(text, strlen(text), "\x14", 0); + segments = split_data((guint8 *) text, strlen(text), "\x14", 0); g_string_append(converted, segments[0]); while ((*(++segments)) != NULL) { Modified: trunk/src/protocols/qq/file_trans.c =================================================================== --- trunk/src/protocols/qq/file_trans.c 2006-08-08 13:20:32 UTC (rev 16672) +++ trunk/src/protocols/qq/file_trans.c 2006-08-08 23:20:08 UTC (rev 16673) @@ -85,7 +85,7 @@ cipher = gaim_ciphers_find_cipher("md5"); context = gaim_cipher_context_new(cipher, NULL); - gaim_cipher_context_append(context, filename, strlen(filename)); + gaim_cipher_context_append(context, (guint8 *) filename, strlen(filename)); gaim_cipher_context_digest(context, 16, md5, NULL); gaim_cipher_context_destroy(context); } @@ -93,7 +93,7 @@ static void _fill_file_md5(const gchar *filename, gint filelen, gchar *md5) { FILE *fp; - gchar *buffer; + guint8 *buffer; GaimCipher *cipher; GaimCipherContext *context; @@ -106,7 +106,7 @@ fp = fopen(filename, "rb"); g_return_if_fail(fp != NULL); - buffer = g_newa(gchar, filelen); + buffer = g_newa(guint8, filelen); g_return_if_fail(buffer != NULL); fread(buffer, filelen, 1, fp); @@ -398,10 +398,11 @@ gchar file_md5[16], filename_md5[16], *filename; gint filename_len, filesize; qq_data *qd; + ft_info *info; g_return_if_fail(gc != NULL && gc->proto_data != NULL); qd = (qq_data *) gc->proto_data; - ft_info *info = (ft_info *) qd->xfer->data; + info = (ft_info *) qd->xfer->data; filename = (gchar *) gaim_xfer_get_filename(qd->xfer); filesize = gaim_xfer_get_size(qd->xfer); @@ -664,10 +665,12 @@ static void _qq_update_send_progess(GaimConnection *gc, guint32 fragment_index) { + guint32 mask; + guint8 *buffer; + gint readbytes; qq_data *qd = (qq_data *) gc->proto_data; GaimXfer *xfer = qd->xfer; ft_info *info = (ft_info *) xfer->data; - guint32 mask; gaim_debug(GAIM_DEBUG_INFO, "QQ", "receiving %dth fragment ack, slide window status %o, max_fragment_index %d\n", @@ -698,8 +701,6 @@ { /* move the slide window */ info->window &= ~mask; - guint8 *buffer; - gint readbytes; buffer = g_newa(guint8, info->fragment_len); readbytes = _qq_xfer_read_file(buffer, info->max_fragment_index + sizeof(info->window), Modified: trunk/src/protocols/qq/group_info.c =================================================================== --- trunk/src/protocols/qq/group_info.c 2006-08-08 13:20:32 UTC (rev 16672) +++ trunk/src/protocols/qq/group_info.c 2006-08-08 23:20:08 UTC (rev 16673) @@ -157,7 +157,9 @@ void qq_process_group_cmd_get_group_info(guint8 *data, guint8 **cursor, gint len, GaimConnection *gc) { qq_group *group; + qq_buddy *member; qq_data *qd; + GaimConversation *gaim_conv; guint8 orgnization, role; guint16 unknown; guint32 member_uid, internal_group_id; @@ -206,7 +208,7 @@ if(orgnization != 0 || role != 0) { gaim_debug(GAIM_DEBUG_INFO, "QQ", "group member %d: orgnizatio=%d, role=%d\n", member_uid, orgnization, role); } - qq_buddy *member = qq_group_find_or_add_member(gc, group, member_uid); + member = qq_group_find_or_add_member(gc, group, member_uid); member->role = role; } if(*cursor > (data + len)) { @@ -220,7 +222,8 @@ qq_group_refresh(gc, group); - GaimConversation *gaim_conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_CHAT,group->group_name_utf8, gaim_connection_get_account(gc)); + gaim_conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_CHAT, + group->group_name_utf8, gaim_connection_get_account(gc)); if(NULL == gaim_conv) { gaim_debug(GAIM_DEBUG_WARNING, "QQ", "Conv windows for \"%s\" is not on, do not set topic\n", group->group_name_utf8); Modified: trunk/src/protocols/qq/group_network.c =================================================================== --- trunk/src/protocols/qq/group_network.c 2006-08-08 13:20:32 UTC (rev 16672) +++ trunk/src/protocols/qq/group_network.c 2006-08-08 23:20:08 UTC (rev 16673) @@ -81,7 +81,7 @@ gchar *msg, *msg_utf8; g_return_if_fail(cursor != NULL && len > 0 && gc != NULL); - msg = g_strndup(cursor, len); /* it will append 0x00 */ + msg = g_strndup((gchar *) cursor, len); /* it will append 0x00 */ msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT); g_free(msg); msg = g_strdup_printf(_("Code [0x%02X]: %s"), reply, msg_utf8); Modified: trunk/src/protocols/qq/keep_alive.c =================================================================== --- trunk/src/protocols/qq/keep_alive.c 2006-08-08 13:20:32 UTC (rev 16672) +++ trunk/src/protocols/qq/keep_alive.c 2006-08-08 23:20:08 UTC (rev 16673) @@ -61,10 +61,11 @@ } /* parse the return of keep-alive packet, it includes some system information */ -void qq_process_keep_alive_reply(guint8 * buf, gint buf_len, GaimConnection *gc) { +void qq_process_keep_alive_reply(guint8 *buf, gint buf_len, GaimConnection *gc) { qq_data *qd; gint len; - gchar *data, **segments; /* the returns are gchar, no need guint8 */ + gchar **segments; + guint8 *data; g_return_if_fail(gc != NULL && gc->proto_data != NULL); g_return_if_fail(buf != NULL && buf_len != 0); @@ -125,6 +126,8 @@ { gchar *name; GaimBuddy *bud; + gchar *status_id; + g_return_if_fail(gc != NULL && q_bud != NULL); name = uid_to_gaim_name(q_bud->uid); @@ -138,7 +141,7 @@ /* gaim supports signon and idle time * but it is not much use for QQ, I do not use them */ /* serv_got_update(gc, name, online, 0, q_bud->signon, q_bud->idle, bud->uc); */ - char *status_id = "available"; + status_id = "available"; switch(q_bud->status) { case QQ_BUDDY_OFFLINE: status_id = "offline"; Modified: trunk/src/protocols/qq/recv_core.c =================================================================== --- trunk/src/protocols/qq/recv_core.c 2006-08-08 13:20:32 UTC (rev 16672) +++ trunk/src/protocols/qq/recv_core.c 2006-08-08 23:20:08 UTC (rev 16673) @@ -61,7 +61,7 @@ static gboolean _qq_check_packet_set_window(guint16 seq, GaimConnection *gc) { qq_data *qd; - gchar *byte, mask; + guint8 *byte, mask; g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, FALSE); qd = (qq_data *) gc->proto_data; @@ -291,7 +291,7 @@ void qq_input_pending(gpointer data, gint source, GaimInputCondition cond) { GaimConnection *gc; - qq_data *qd;; + qq_data *qd; guint8 *buf; gint len; Modified: trunk/src/protocols/qq/send_file.c =================================================================== --- trunk/src/protocols/qq/send_file.c 2006-08-08 13:20:32 UTC (rev 16672) +++ trunk/src/protocols/qq/send_file.c 2006-08-08 23:20:08 UTC (rev 16673) @@ -77,12 +77,12 @@ } /* these 2 functions send and recv buffer from/to UDP channel */ -static ssize_t _qq_xfer_udp_recv(char *buf, size_t len, GaimXfer *xfer) +static ssize_t _qq_xfer_udp_recv(guint8 *buf, size_t len, GaimXfer *xfer) { struct sockaddr_in sin; - int sinlen; + socklen_t sinlen; ft_info *info; - int r; + gint r; info = (ft_info *) xfer->data; sinlen = sizeof(sin); @@ -102,7 +102,7 @@ return send(info->sender_fd, buf, len, 0); } */ -static ssize_t _qq_xfer_udp_send(const char *buf, size_t len, GaimXfer *xfer) +static ssize_t _qq_xfer_udp_send(const guint8 *buf, size_t len, GaimXfer *xfer) { struct sockaddr_in sin; ft_info *info; @@ -140,7 +140,7 @@ } */ -gssize _qq_xfer_write(const guchar *buf, size_t len, GaimXfer *xfer) +gssize _qq_xfer_write(const guint8 *buf, size_t len, GaimXfer *xfer) { return _qq_xfer_udp_send(buf, len, xfer); } @@ -219,7 +219,7 @@ g_free(info); } -void qq_show_conn_info(ft_info *info) +static void qq_show_conn_info(ft_info *info) { gchar *internet_ip_str, *real_ip_str; guint32 ip; @@ -375,7 +375,8 @@ static void _qq_xfer_init_socket(GaimXfer *xfer) { - int sockfd, listen_port = 0, i, sin_len; + gint sockfd, listen_port = 0, i; + socklen_t sin_len; struct sockaddr_in sin; ft_info *info; @@ -446,27 +447,28 @@ info->conn_method = 0x00; qd->xfer->data = info; - filename_len = strlen (filename); - filelen_str = g_strdup_printf ("%d \xD7ֽ\xDA", filesize); - filelen_strlen = strlen (filelen_str); + filename_len = strlen(filename); + filelen_str = g_strdup_printf("%d \xD7ֽ\xDA", filesize); + filelen_strlen = strlen(filelen_str); packet_len = 82 + filename_len + filelen_strlen; - raw_data = g_newa (guint8, packet_len); + raw_data = g_newa(guint8, packet_len); cursor = raw_data; - bytes = _qq_create_packet_file_header(raw_data, &cursor, to_uid, QQ_FILE_TRANS_REQ, qd, FALSE); + bytes = _qq_create_packet_file_header(raw_data, &cursor, to_uid, + QQ_FILE_TRANS_REQ, qd, FALSE); bytes += qq_fill_conn_info(raw_data, &cursor, info); /* 079: 0x20 */ bytes += create_packet_b (raw_data, &cursor, 0x20); /* 080: 0x1f */ bytes += create_packet_b (raw_data, &cursor, 0x1f); /* undetermined len: filename */ - bytes += create_packet_data (raw_data, &cursor, filename, + bytes += create_packet_data (raw_data, &cursor, (guint8 *) filename, filename_len); /* 0x1f */ bytes += create_packet_b (raw_data, &cursor, 0x1f); /* file length */ - bytes += create_packet_data (raw_data, &cursor, filelen_str, + bytes += create_packet_data (raw_data, &cursor, (guint8 *) filelen_str, filelen_strlen); if (packet_len == bytes) @@ -485,6 +487,8 @@ { qq_data *qd; guint8 *cursor, *raw_data; + guint16 minor_port; + guint32 real_ip; gint packet_len, bytes; ft_info *info; @@ -494,8 +498,6 @@ gaim_debug(GAIM_DEBUG_INFO, "QQ", "I've accepted the file transfer request from %d\n", to_uid); _qq_xfer_init_socket(qd->xfer); - guint16 minor_port; - guint32 real_ip; packet_len = 79; raw_data = g_newa (guint8, packet_len); @@ -779,7 +781,7 @@ { qq_data *qd; GaimXfer *xfer; - gchar *sender_name; + gchar *sender_name, **fileinfo; ft_info *info; GaimBuddy *b; qq_buddy *q_bud; @@ -803,8 +805,7 @@ *cursor = data + 18 + 12; qq_get_conn_info(data, cursor, data_len, info); - gchar **fileinfo; - fileinfo = g_strsplit(data + 81 + 12, "\x1f", 2); + fileinfo = g_strsplit((gchar *) (data + 81 + 12), "\x1f", 2); g_return_if_fail (fileinfo != NULL && fileinfo[0] != NULL && fileinfo[1] != NULL); sender_name = uid_to_gaim_name(sender_uid); Modified: trunk/src/protocols/qq/sendqueue.h =================================================================== --- trunk/src/protocols/qq/sendqueue.h 2006-08-08 13:20:32 UTC (rev 16672) +++ trunk/src/protocols/qq/sendqueue.h 2006-08-08 23:20:08 UTC (rev 16673) @@ -33,7 +33,7 @@ struct _qq_sendpacket { gint fd; gint len; - gchar *buf; + guint8 *buf; guint16 cmd; guint16 send_seq; gint resend_times; Modified: trunk/src/protocols/qq/sys_msg.c =================================================================== --- trunk/src/protocols/qq/sys_msg.c 2006-08-08 13:20:32 UTC (rev 16672) +++ trunk/src/protocols/qq/sys_msg.c 2006-08-08 23:20:08 UTC (rev 16673) @@ -119,7 +119,7 @@ bytes += create_packet_b(ack, &cursor, code); bytes += create_packet_b(ack, &cursor, bar); - bytes += create_packet_data(ack, &cursor, str, strlen(str)); + bytes += create_packet_data(ack, &cursor, (guint8 *) str, strlen(str)); bytes += create_packet_b(ack, &cursor, bar); bytes += create_packet_w(ack, &cursor, seq); @@ -263,7 +263,7 @@ qd = (qq_data *) gc->proto_data; len = buf_len; - data = g_newa(gchar, len); + data = g_newa(guint8, len); if (qq_crypt(DECRYPT, buf, buf_len, qd->session_key, data, &len)) { if (NULL == (segments = split_data(data, len, "\x1f", 4))) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2006-08-08 13:20:41
|
Revision: 16672 Author: roast Date: 2006-08-08 06:20:32 -0700 (Tue, 08 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16672&view=rev Log Message: ----------- minor cleanup in log.[ch] Modified Paths: -------------- branches/soc-2006-file-loggers/src/log.c branches/soc-2006-file-loggers/src/log.h Modified: branches/soc-2006-file-loggers/src/log.c =================================================================== --- branches/soc-2006-file-loggers/src/log.c 2006-08-08 01:12:58 UTC (rev 16671) +++ branches/soc-2006-file-loggers/src/log.c 2006-08-08 13:20:32 UTC (rev 16672) @@ -49,7 +49,7 @@ static void log_get_log_sets_common(GHashTable *sets); static gsize xml_logger_write(GaimLog *log, GaimMessageFlags type, - const char *from, time_t time, const char *message); + const char *from, time_t time, const char *message); static void xml_logger_finalize(GaimLog *log); static GList *xml_logger_list(GaimLogType type, const char *sn, GaimAccount *account); static GList *xml_logger_list_syslog(GaimAccount *account); @@ -57,7 +57,7 @@ static int xml_logger_total_size(GaimLogType type, const char *name, GaimAccount *account); static gsize html_logger_write(GaimLog *log, GaimMessageFlags type, - const char *from, time_t time, const char *message); + const char *from, time_t time, const char *message); static void html_logger_finalize(GaimLog *log); static GList *html_logger_list(GaimLogType type, const char *sn, GaimAccount *account); static GList *html_logger_list_syslog(GaimAccount *account); @@ -71,9 +71,8 @@ static void old_logger_get_log_sets(GaimLogSetCallback cb, GHashTable *sets); static void old_logger_finalize(GaimLog *log); -static gsize txt_logger_write(GaimLog *log, - GaimMessageFlags type, - const char *from, time_t time, const char *message); +static gsize txt_logger_write(GaimLog *log, GaimMessageFlags type, + const char *from, time_t time, const char *message); static void txt_logger_finalize(GaimLog *log); static GList *txt_logger_list(GaimLogType type, const char *sn, GaimAccount *account); static GList *txt_logger_list_syslog(GaimAccount *account); @@ -319,15 +318,15 @@ GaimLogLogger *gaim_log_logger_new(const char *id, const char *name, int functions, ...) { #if 0 - void(*create)(GaimLog *), - gsize(*write)(GaimLog *, GaimMessageFlags, const char *, time_t, const char *), - void(*finalize)(GaimLog *), - GList*(*list)(GaimLogType type, const char*, GaimAccount*), - char*(*read)(GaimLog*, GaimLogReadFlags*), - int(*size)(GaimLog*), - int(*total_size)(GaimLogType type, const char *name, GaimAccount *account), - GList*(*list_syslog)(GaimAccount *account), - void(*get_log_sets)(GaimLogSetCallback cb, GHashTable *sets)) + void(*create)(GaimLog *), + gsize(*write)(GaimLog *, GaimMessageFlags, const char *, time_t, const char *), + void(*finalize)(GaimLog *), + GList*(*list)(GaimLogType type, const char*, GaimAccount*), + char*(*read)(GaimLog*, GaimLogReadFlags*), + int(*size)(GaimLog*), + int(*total_size)(GaimLogType type, const char *name, GaimAccount *account), + GList*(*list_syslog)(GaimAccount *account), + void(*get_log_sets)(GaimLogSetCallback cb, GHashTable *sets)) { #endif GaimLogLogger *logger; @@ -570,53 +569,53 @@ gaim_prefs_add_string("/core/logging/format", "txt"); xml_logger = gaim_log_logger_new("xml", _("Unified Log Format (XML)"), 8, - NULL, - xml_logger_write, - xml_logger_finalize, - xml_logger_list, - xml_logger_read, - gaim_log_common_sizer, - xml_logger_total_size, - xml_logger_list_syslog); + NULL, + xml_logger_write, + xml_logger_finalize, + xml_logger_list, + xml_logger_read, + gaim_log_common_sizer, + xml_logger_total_size, + xml_logger_list_syslog); gaim_log_logger_add(xml_logger); html_logger = gaim_log_logger_new("html", _("HTML"), 8, - NULL, - html_logger_write, - html_logger_finalize, - html_logger_list, - html_logger_read, - gaim_log_common_sizer, - html_logger_total_size, - html_logger_list_syslog); + NULL, + html_logger_write, + html_logger_finalize, + html_logger_list, + html_logger_read, + gaim_log_common_sizer, + html_logger_total_size, + html_logger_list_syslog); gaim_log_logger_add(html_logger); txt_logger = gaim_log_logger_new("txt", _("Plain text"), 8, - NULL, - txt_logger_write, - txt_logger_finalize, - txt_logger_list, - txt_logger_read, - gaim_log_common_sizer, - txt_logger_total_size, - txt_logger_list_syslog); + NULL, + txt_logger_write, + txt_logger_finalize, + txt_logger_list, + txt_logger_read, + gaim_log_common_sizer, + txt_logger_total_size, + txt_logger_list_syslog); gaim_log_logger_add(txt_logger); old_logger = gaim_log_logger_new("old", _("Old Gaim"), 9, - NULL, - NULL, - old_logger_finalize, - old_logger_list, - old_logger_read, - old_logger_size, - old_logger_total_size, - NULL, - old_logger_get_log_sets); + NULL, + NULL, + old_logger_finalize, + old_logger_list, + old_logger_read, + old_logger_size, + old_logger_total_size, + NULL, + old_logger_get_log_sets); gaim_log_logger_add(old_logger); gaim_signal_register(handle, "log-timestamp", #if SIZEOF_TIME_T == 4 - gaim_marshal_POINTER__POINTER_INT, + gaim_marshal_POINTER__POINTER_INT, #elif SIZEOF_TIME_T == 8 gaim_marshal_POINTER__POINTER_INT64, #else @@ -628,18 +627,18 @@ #if SIZEOF_TIME_T == 4 gaim_value_new(GAIM_TYPE_INT)); #elif SIZEOF_TIME_T == 8 - gaim_value_new(GAIM_TYPE_INT64)); + gaim_value_new(GAIM_TYPE_INT64)); #else # error Unknown size of time_t #endif gaim_prefs_connect_callback(NULL, "/core/logging/format", - logger_pref_cb, NULL); + logger_pref_cb, NULL); gaim_prefs_trigger_callback("/core/logging/format"); logsize_users = g_hash_table_new_full((GHashFunc)_gaim_logsize_user_hash, - (GEqualFunc)_gaim_logsize_user_equal, - (GDestroyNotify)_gaim_logsize_user_free_key, NULL); + (GEqualFunc)_gaim_logsize_user_equal, + (GDestroyNotify)_gaim_logsize_user_free_key, NULL); } void @@ -658,8 +657,8 @@ struct tm tm; date = gaim_signal_emit_return_1(gaim_log_get_handle(), - "log-timestamp", - log, when); + "log-timestamp", + log, when); if (date != NULL) return date; @@ -691,7 +690,7 @@ gaim_build_dir (dir, S_IRUSR | S_IWUSR | S_IXUSR); tm = localtime(&log->time); - + { // build basename char * temp = g_strdup_printf("%s_%s", gaim_normalize(log->account, log->name), gaim_utf8_strftime("%Y-%m-%dT%H%M%S%z%Z", tm)); @@ -722,7 +721,7 @@ if (suffixchar == 'z' && g_file_test(path, G_FILE_TEST_EXISTS)) { /* we have a collision problem. not logging, and complain. */ gaim_conversation_write(log->conv, NULL, _("Logging of this conversation failed."), - GAIM_MESSAGE_ERROR, time(NULL)); + GAIM_MESSAGE_ERROR, time(NULL)); g_free(dir); g_free(path); g_free(extname); Modified: branches/soc-2006-file-loggers/src/log.h =================================================================== --- branches/soc-2006-file-loggers/src/log.h 2006-08-08 01:12:58 UTC (rev 16671) +++ branches/soc-2006-file-loggers/src/log.h 2006-08-08 13:20:32 UTC (rev 16672) @@ -94,26 +94,6 @@ GAIM_TOTAL_EVENTS } GaimEvents; -//typedef enum { -// GAIM_STATUS_ONLINE, /***< online */ -// GAIM_STATUS_OFFLINE, /***< offline */ -// GAIM_STATUS_AWAY, /***< away */ -// GAIM_STATUS_IDLE, /***< idle */ -// GAIM_STATUS_AVAILABLE, /***< available */ -// GAIM_STATUS_BUSY, /***< busy */ -// GAIM_STATUS_NOTATHOME, /***< notAtHome */ -// GAIM_STATUS_ONTHEPHONE, /***< onThePhone */ -// GAIM_STATUS_ONVACATION, /***< onVacation */ -// GAIM_STATUS_DONOTDISTURB, /***< doNotDisturb */ -// GAIM_STATUS_EXTENDEDAWAY, /***< extendedAway */ -// GAIM_STATUS_BERIGHTBACK, /***< beRightBack */ -// GAIM_STATUS_NOTAVAILABLE, /***< notAvailable */ -// GAIM_STATUS_NOTATHOME, /***< notAtHome */ -// GAIM_STATUS_NOTATMYDESK, /***< notAtMyDesk */ -// GAIM_STATUS_NOTINTHEOFFICE, /***< notInTheOffice */ -// GAIM_STATUS_STEPPEDOUT, /***< steppedOut */ -//} GaimStatusFlag; - #include "account.h" #include "conversation.h" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2006-08-08 01:13:01
|
Revision: 16671 Author: markhuetsch Date: 2006-08-07 18:12:58 -0700 (Mon, 07 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16671&view=rev Log Message: ----------- Removed an unused gaim_prefs string for "datadir" and the corresponding DATADIR definition. Both of these should have been removed with the ip_location code. Modified Paths: -------------- trunk/src/protocols/qq/Makefile.am trunk/src/protocols/qq/qq.c Modified: trunk/src/protocols/qq/Makefile.am =================================================================== --- trunk/src/protocols/qq/Makefile.am 2006-08-08 01:02:56 UTC (rev 16670) +++ trunk/src/protocols/qq/Makefile.am 2006-08-08 01:12:58 UTC (rev 16671) @@ -92,7 +92,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src \ - -DDATADIR=\"${datadir}\" \ -DVERSION=\"$(VERSION)\" \ $(DEBUG_CFLAGS) \ $(GLIB_CFLAGS) \ Modified: trunk/src/protocols/qq/qq.c =================================================================== --- trunk/src/protocols/qq/qq.c 2006-08-08 01:02:56 UTC (rev 16670) +++ trunk/src/protocols/qq/qq.c 2006-08-08 01:12:58 UTC (rev 16671) @@ -980,7 +980,6 @@ gaim_prefs_add_none("/plugins/prpl/qq"); gaim_prefs_add_bool("/plugins/prpl/qq/show_status_by_icon", TRUE); gaim_prefs_add_bool("/plugins/prpl/qq/show_fake_video", FALSE); - gaim_prefs_add_string("/plugins/prpl/qq/datadir", DATADIR); gaim_prefs_add_bool("/plugins/prpl/qq/prompt_for_missing_packet", TRUE); gaim_prefs_add_bool("/plugins/prpl/qq/prompt_group_msg_on_recv", TRUE); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |