|
|

楼主 |
发表于 2004-9-9 00:29:17
|
显示全部楼层
新的补丁:
除了修正以上的问题外,还修正了qq-show(原因是找不到默认的图片,我把他改为
~/.gaim/qqshow/default.gif了,如果大家没有到win下找个就行了),修正了群里在线人重复的问题
(这个问题处理的比较傻,好象是gaim的那个clear users的函数有问题,可能出现明明下线却显示在线的问题!)
- diff -urN OpenQ-0.3.0.p3.old/src/qq_char_conv.c OpenQ-0.3.0.p3/src/qq_char_conv.c
- --- OpenQ-0.3.0.p3.old/src/qq_char_conv.c 2004-07-08 16:03:12.000000000 +0000
- +++ OpenQ-0.3.0.p3/src/qq_char_conv.c 2004-09-08 18:50:53.000000000 +0000
- @@ -258,52 +258,4 @@
- return ret;
- }// gaim_smiley_to_qq
- -/*****************************************************************************/
- -// contributed by rakescar@linuxsir
- -//Replace specified keyword with a replacement in a block of text
- -//Note: the returned string should be freed after use
- -gchar *_qq_im_replace_keyword
- -(const gchar *text, const gchar *keyword, const gchar *replacement) {
- - const gchar *h_pattern = "^(.*)";
- - const gchar *t_pattern = "(.*)$";
- - const gint subs = 4;
- - regex_t re;
- - regmatch_t matches[4];
- -
- - g_return_val_if_fail(text != NULL &&
- - keyword != NULL &&
- - replacement != NULL, NULL);
- -
- - gchar *result=g_strdup(text);
- - gchar *pattern = g_strconcat(h_pattern,keyword,t_pattern,NULL);
- -
- - regcomp(&re, pattern, REG_EXTENDED);
- - while( regexec( &re, result, subs, matches, 0) != REG_NOMATCH ) {
- - //replace all occurrence until no match is found
- - gchar *part1 = g_strndup(result+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so);
- - gchar *part2 = g_strndup(result+matches[2].rm_so, matches[2].rm_eo-matches[2].rm_so);
- - g_free(result);
- - result = g_strconcat(part1, replacement, part2,NULL);
- - g_free(part1); g_free(part2);
- - } // while
- -
- - g_free(pattern);
- - return result;
- -}//_qq_im_replace_keyword
- -
- -/*****************************************************************************/
- -// contributed by rakescar@linuxsir
- -//Remove all HTML markups in a block of text. The only exception is made to
- -//"<br>" which is replaced by "\n" newline character
- -//Note: the returned string should be freed after use
- -gchar *qq_im_filter_html(const gchar *text) {
- - const char *newline_markup_pattern = "<[Bb][Rr]>";
- - const char *html_markup_pattern = "<[^<>]*>";
- - gchar *result1=_qq_im_replace_keyword(text,newline_markup_pattern,"\n");
- - gchar *result2=_qq_im_replace_keyword(result1,html_markup_pattern,"");
- - g_free(result1);
- - return result2;
- -}//qq_im_filter_html
- -
- -/*****************************************************************************/
- // END OF FILE
- diff -urN OpenQ-0.3.0.p3.old/src/qq_group_conv.c OpenQ-0.3.0.p3/src/qq_group_conv.c
- --- OpenQ-0.3.0.p3.old/src/qq_group_conv.c 2004-08-31 11:08:28.000000000 +0000
- +++ OpenQ-0.3.0.p3/src/qq_group_conv.c 2004-09-08 23:50:30.759358368 +0000
- @@ -48,26 +48,34 @@
- /*****************************************************************************/
- // refresh online member in group conversation window
- void qq_group_conv_refresh_online_member(GaimConnection *gc, qq_group *group) {
- - GList *names, *list;
- + GList *names, *list, *uid_list;
- qq_buddy *member;
- gchar *member_name;
- GaimConversation *conv;
- g_return_if_fail(gc != NULL && group != NULL);
- names = NULL;
- + uid_list = NULL;
- conv = gaim_find_conversation_with_account(group->group_name_utf8,
- gaim_connection_get_account(gc));
- if (conv != NULL && group->members != NULL) {
- list = group->members;
- while (list != NULL) {
- member = (qq_buddy *)list->data;
- + member_name = uid_to_gaim_name(member->uid);
- if (is_online(member->status))
- + if (!g_slist_length(uid_list) || !g_slist_find(uid_list, member_name))
- + {
- names = g_list_append(names,
- member->nickname != NULL ?
- g_strdup(member->nickname) : uid_to_gaim_name(member->uid));
- + uid_list = g_list_append(uid_list, uid_to_gaim_name(member->uid));
- + }
- list = list->next;
- + g_free(member_name);
- } // while list
- gaim_conv_chat_clear_users(GAIM_CONV_CHAT(conv));
- + gaim_conv_chat_remove_users(GAIM_CONV_CHAT(conv), names, NULL);
- gaim_conv_chat_add_users(GAIM_CONV_CHAT(conv), names, NULL);
- }// if conv
- @@ -77,6 +85,12 @@
- names = g_list_remove(names, member_name);
- g_free(member_name);
- }// while name
- + // clean up uid_list
- + while (uid_list != NULL){
- + member_name = (gchar *)uid_list->data;
- + uid_list = g_list_remove(uid_list,member_name);
- + g_free(member_name);
- + }
- }// qq_group_conv_show_window
- /*****************************************************************************/
- diff -urN OpenQ-0.3.0.p3.old/src/qq_group_im.c OpenQ-0.3.0.p3/src/qq_group_im.c
- --- OpenQ-0.3.0.p3.old/src/qq_group_im.c 2004-07-08 13:22:25.000000000 +0000
- +++ OpenQ-0.3.0.p3/src/qq_group_im.c 2004-09-08 18:50:53.000000000 +0000
- @@ -27,6 +27,7 @@
- #include "notify.h" // gaim_notify_warning
- #include "prefs.h" // gaim_prefs_get_bool
- #include "request.h" // gaim_request_action
- +#include "util.h"
- #include "my_utils.h" // uid_to_gaim_name
- #include "packet_parse.h" // create_packet_xx
- @@ -58,10 +59,12 @@
- gint data_len, bytes;
- guint8 *raw_data, *cursor;
- guint16 msg_len;
- + gchar *msg_filtered;
- g_return_if_fail(gc != NULL && group != NULL && msg != NULL);
- -
- - msg_len = strlen(msg);
- + msg_filtered = gaim_markup_strip_html(msg);
- +
- + msg_len = strlen(msg_filtered);
- data_len = 7 + msg_len + QQ_SEND_IM_AFTER_MSG_LEN;
- raw_data = g_newa(guint8, data_len); cursor = raw_data;
- @@ -69,12 +72,13 @@
- bytes += create_packet_b (raw_data, &cursor, QQ_GROUP_CMD_SEND_MSG);
- bytes += create_packet_dw(raw_data, &cursor, group->internal_group_id);
- bytes += create_packet_w (raw_data, &cursor, msg_len+QQ_SEND_IM_AFTER_MSG_LEN);
- - bytes += create_packet_data(raw_data, &cursor, (gchar *)msg, msg_len);
- + bytes += create_packet_data(raw_data, &cursor, (gchar *)msg_filtered, msg_len);
- guint8 *send_im_tail = qq_get_send_im_tail(NULL, NULL, NULL,
- FALSE, FALSE, FALSE, QQ_SEND_IM_AFTER_MSG_LEN);
- bytes += create_packet_data(raw_data, &cursor, (gchar *) send_im_tail,
- QQ_SEND_IM_AFTER_MSG_LEN);
- g_free(send_im_tail);
- + g_free(msg_filtered);
- if (bytes == data_len) // create OK
- qq_send_group_cmd(gc, group, raw_data, data_len);
- diff -urN OpenQ-0.3.0.p3.old/src/qq_im.c OpenQ-0.3.0.p3/src/qq_im.c
- --- OpenQ-0.3.0.p3.old/src/qq_im.c 2004-07-08 16:03:12.000000000 +0000
- +++ OpenQ-0.3.0.p3/src/qq_im.c 2004-09-08 18:50:53.000000000 +0000
- @@ -471,7 +471,6 @@
- g_datalist_clear(&attribs);
- }
- - //msg_filtered = qq_im_filter_html(msg);
- gaim_debug(GAIM_DEBUG_INFO, "QQ_MESG", "send mesg: %s\n", msg);
- msg_filtered = gaim_markup_strip_html(msg);
- msg_len = strlen(msg_filtered);
- @@ -535,6 +534,7 @@
- if (font_color) g_free(font_color);
- if (font_size) g_free(font_size);
- g_free(send_im_tail);
- + g_free(msg_filtered);
- }// qq_send_packet_im
- /*****************************************************************************/
- diff -urN OpenQ-0.3.0.p3.old/src/qq_show.c OpenQ-0.3.0.p3/src/qq_show.c
- --- OpenQ-0.3.0.p3.old/src/qq_show.c 2004-07-08 13:22:25.000000000 +0000
- +++ OpenQ-0.3.0.p3/src/qq_show.c 2004-09-08 20:51:03.000000000 +0000
- @@ -38,7 +38,7 @@
- #define QQ_SHOW_IMAGE "10/00/00.gif"
- #define QQ_SHOW_CACHE_DIR "qqshow"
- -#define QQ_SHOW_DEFAULT_IMAGE "qqshow.gif"
- +#define QQ_SHOW_DEFAULT_IMAGE "default.gif"
- #define QQ_SHOW_DEST_X 0
- #define QQ_SHOW_DEST_Y 0
- @@ -72,7 +72,7 @@
- gaim_debug(GAIM_DEBUG_WARNING, "QQ",
- "No cached QQ show image for buddy %d\n", uid);
- g_free(file_fullname);
- - file_fullname = g_build_filename(gaim_prefs_get_string("/plugins/prpl/qq/datadir"), "pixmaps", "gaim", "status", "default", QQ_SHOW_DEFAULT_IMAGE, NULL);
- + file_fullname = g_build_filename(gaim_user_dir(),QQ_SHOW_CACHE_DIR, QQ_SHOW_DEFAULT_IMAGE, NULL);
- }// if g_file_test
- }// if io
复制代码 |
|