LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 872|回复: 10

[提交补丁]openq的群组消息html标记补丁。

[复制链接]
发表于 2004-9-7 01:20:30 | 显示全部楼层 |阅读模式
sunmoon1997请签收。

  1. diff -urN OpenQ-0.3.0.p3.old/src/qq_char_conv.c OpenQ-0.3.0.p3/src/qq_char_conv.c
  2. --- OpenQ-0.3.0.p3.old/src/qq_char_conv.c       2004-07-08 16:03:12.000000000 +0000
  3. +++ OpenQ-0.3.0.p3/src/qq_char_conv.c   2004-09-06 23:15:39.000000000 +0000
  4. @@ -258,52 +258,4 @@
  5.         return ret;
  6. }// gaim_smiley_to_qq

  7. -/*****************************************************************************/
  8. -// contributed by rakescar@linuxsir
  9. -//Replace specified keyword with a replacement in a block of text
  10. -//Note: the returned string should be freed after use
  11. -gchar *_qq_im_replace_keyword
  12. -(const gchar *text, const gchar *keyword, const gchar *replacement) {
  13. -  const gchar *h_pattern = "^(.*)";
  14. -  const gchar *t_pattern =  "(.*)$";
  15. -  const gint subs = 4;
  16. -  regex_t re;
  17. -  regmatch_t matches[4];
  18. -
  19. -  g_return_val_if_fail(text != NULL &&
  20. -                       keyword != NULL &&
  21. -                       replacement != NULL, NULL);
  22. -
  23. -  gchar *result=g_strdup(text);
  24. -  gchar *pattern = g_strconcat(h_pattern,keyword,t_pattern,NULL);
  25. -
  26. -  regcomp(&re, pattern, REG_EXTENDED);
  27. -  while( regexec( &re, result, subs, matches, 0) != REG_NOMATCH ) {
  28. -    //replace all occurrence until no match is found
  29. -    gchar *part1 = g_strndup(result+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so);
  30. -    gchar *part2 = g_strndup(result+matches[2].rm_so, matches[2].rm_eo-matches[2].rm_so);
  31. -    g_free(result);
  32. -    result = g_strconcat(part1, replacement, part2,NULL);
  33. -    g_free(part1); g_free(part2);
  34. -  } // while
  35. -
  36. -  g_free(pattern);
  37. -  return result;
  38. -}//_qq_im_replace_keyword
  39. -
  40. -/*****************************************************************************/
  41. -// contributed by rakescar@linuxsir
  42. -//Remove all HTML markups in a block of text. The only exception is made to
  43. -//"<br>" which is replaced by "\n" newline character
  44. -//Note: the returned string should be freed after use
  45. -gchar *qq_im_filter_html(const gchar *text) {
  46. -  const char *newline_markup_pattern = "<[Bb][Rr]>";
  47. -  const char *html_markup_pattern = "<[^<>]*>";
  48. -  gchar *result1=_qq_im_replace_keyword(text,newline_markup_pattern,"\n");
  49. -  gchar *result2=_qq_im_replace_keyword(result1,html_markup_pattern,"");
  50. -  g_free(result1);
  51. -  return result2;
  52. -}//qq_im_filter_html
  53. -
  54. -/*****************************************************************************/
  55. // END OF FILE
  56. diff -urN OpenQ-0.3.0.p3.old/src/qq_group_im.c OpenQ-0.3.0.p3/src/qq_group_im.c
  57. --- OpenQ-0.3.0.p3.old/src/qq_group_im.c        2004-07-08 13:22:25.000000000 +0000
  58. +++ OpenQ-0.3.0.p3/src/qq_group_im.c    2004-09-07 01:12:42.891215072 +0000
  59. @@ -27,6 +27,7 @@
  60. #include "notify.h"             // gaim_notify_warning
  61. #include "prefs.h"              // gaim_prefs_get_bool
  62. #include "request.h"            // gaim_request_action
  63. +#include "util.h"

  64. #include "my_utils.h"           // uid_to_gaim_name
  65. #include "packet_parse.h"       // create_packet_xx
  66. @@ -58,10 +59,12 @@
  67.    gint    data_len, bytes;
  68.    guint8  *raw_data, *cursor;
  69.    guint16 msg_len;
  70. +  gchar *msg_filtered;

  71.    g_return_if_fail(gc != NULL && group != NULL && msg != NULL);
  72. -
  73. -  msg_len   = strlen(msg);
  74. +  msg_filtered    = gaim_markup_strip_html(msg);
  75. +
  76. +  msg_len   = strlen(msg_filtered);
  77.    data_len  = 7 + msg_len + QQ_SEND_IM_AFTER_MSG_LEN;
  78.    raw_data  = g_newa(guint8, data_len); cursor = raw_data;

  79. @@ -69,12 +72,13 @@
  80.    bytes += create_packet_b (raw_data, &cursor, QQ_GROUP_CMD_SEND_MSG);
  81.    bytes += create_packet_dw(raw_data, &cursor, group->internal_group_id);
  82.    bytes += create_packet_w (raw_data, &cursor, msg_len+QQ_SEND_IM_AFTER_MSG_LEN);
  83. -  bytes += create_packet_data(raw_data, &cursor, (gchar *)msg, msg_len);
  84. +  bytes += create_packet_data(raw_data, &cursor, (gchar *)msg_filtered, msg_len);
  85.    guint8 *send_im_tail = qq_get_send_im_tail(NULL, NULL, NULL,
  86.                   FALSE, FALSE, FALSE, QQ_SEND_IM_AFTER_MSG_LEN);
  87.    bytes += create_packet_data(raw_data, &cursor, (gchar *) send_im_tail,
  88.                                QQ_SEND_IM_AFTER_MSG_LEN);
  89.    g_free(send_im_tail);
  90. +  g_free(msg_filtered);

  91.    if (bytes == data_len) // create OK
  92.      qq_send_group_cmd(gc, group, raw_data, data_len);
  93. diff -urN OpenQ-0.3.0.p3.old/src/qq_im.c OpenQ-0.3.0.p3/src/qq_im.c
  94. --- OpenQ-0.3.0.p3.old/src/qq_im.c      2004-07-08 16:03:12.000000000 +0000
  95. +++ OpenQ-0.3.0.p3/src/qq_im.c  2004-09-06 23:13:28.000000000 +0000
  96. @@ -471,7 +471,6 @@
  97.                 g_datalist_clear(&attribs);
  98.         }

  99. -       //msg_filtered    = qq_im_filter_html(msg);
  100.         gaim_debug(GAIM_DEBUG_INFO, "QQ_MESG", "send mesg: %s\n", msg);
  101.         msg_filtered    = gaim_markup_strip_html(msg);
  102.    msg_len         = strlen(msg_filtered);
复制代码
发表于 2004-9-7 02:51:21 | 显示全部楼层
小锁兄辛苦了,不过我现在在重新系统中。。。。
 楼主| 发表于 2004-9-7 09:21:41 | 显示全部楼层
呵呵,没什么了。
你更辛苦。
发表于 2004-9-7 10:03:00 | 显示全部楼层
是因为要用xorg的缘故吗?
 楼主| 发表于 2004-9-9 00:29:17 | 显示全部楼层
新的补丁:
除了修正以上的问题外,还修正了qq-show(原因是找不到默认的图片,我把他改为
~/.gaim/qqshow/default.gif了,如果大家没有到win下找个就行了),修正了群里在线人重复的问题
(这个问题处理的比较傻,好象是gaim的那个clear users的函数有问题,可能出现明明下线却显示在线的问题!)

  1. diff -urN OpenQ-0.3.0.p3.old/src/qq_char_conv.c OpenQ-0.3.0.p3/src/qq_char_conv.c
  2. --- OpenQ-0.3.0.p3.old/src/qq_char_conv.c       2004-07-08 16:03:12.000000000 +0000
  3. +++ OpenQ-0.3.0.p3/src/qq_char_conv.c   2004-09-08 18:50:53.000000000 +0000
  4. @@ -258,52 +258,4 @@
  5.         return ret;
  6. }// gaim_smiley_to_qq

  7. -/*****************************************************************************/
  8. -// contributed by rakescar@linuxsir
  9. -//Replace specified keyword with a replacement in a block of text
  10. -//Note: the returned string should be freed after use
  11. -gchar *_qq_im_replace_keyword
  12. -(const gchar *text, const gchar *keyword, const gchar *replacement) {
  13. -  const gchar *h_pattern = "^(.*)";
  14. -  const gchar *t_pattern =  "(.*)$";
  15. -  const gint subs = 4;
  16. -  regex_t re;
  17. -  regmatch_t matches[4];
  18. -
  19. -  g_return_val_if_fail(text != NULL &&
  20. -                       keyword != NULL &&
  21. -                       replacement != NULL, NULL);
  22. -
  23. -  gchar *result=g_strdup(text);
  24. -  gchar *pattern = g_strconcat(h_pattern,keyword,t_pattern,NULL);
  25. -
  26. -  regcomp(&re, pattern, REG_EXTENDED);
  27. -  while( regexec( &re, result, subs, matches, 0) != REG_NOMATCH ) {
  28. -    //replace all occurrence until no match is found
  29. -    gchar *part1 = g_strndup(result+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so);
  30. -    gchar *part2 = g_strndup(result+matches[2].rm_so, matches[2].rm_eo-matches[2].rm_so);
  31. -    g_free(result);
  32. -    result = g_strconcat(part1, replacement, part2,NULL);
  33. -    g_free(part1); g_free(part2);
  34. -  } // while
  35. -
  36. -  g_free(pattern);
  37. -  return result;
  38. -}//_qq_im_replace_keyword
  39. -
  40. -/*****************************************************************************/
  41. -// contributed by rakescar@linuxsir
  42. -//Remove all HTML markups in a block of text. The only exception is made to
  43. -//"<br>" which is replaced by "\n" newline character
  44. -//Note: the returned string should be freed after use
  45. -gchar *qq_im_filter_html(const gchar *text) {
  46. -  const char *newline_markup_pattern = "<[Bb][Rr]>";
  47. -  const char *html_markup_pattern = "<[^<>]*>";
  48. -  gchar *result1=_qq_im_replace_keyword(text,newline_markup_pattern,"\n");
  49. -  gchar *result2=_qq_im_replace_keyword(result1,html_markup_pattern,"");
  50. -  g_free(result1);
  51. -  return result2;
  52. -}//qq_im_filter_html
  53. -
  54. -/*****************************************************************************/
  55. // END OF FILE
  56. diff -urN OpenQ-0.3.0.p3.old/src/qq_group_conv.c OpenQ-0.3.0.p3/src/qq_group_conv.c
  57. --- OpenQ-0.3.0.p3.old/src/qq_group_conv.c      2004-08-31 11:08:28.000000000 +0000
  58. +++ OpenQ-0.3.0.p3/src/qq_group_conv.c  2004-09-08 23:50:30.759358368 +0000
  59. @@ -48,26 +48,34 @@
  60. /*****************************************************************************/
  61. // refresh online member in group conversation window
  62. void qq_group_conv_refresh_online_member(GaimConnection *gc, qq_group *group) {
  63. -  GList             *names, *list;
  64. +  GList             *names, *list, *uid_list;
  65.    qq_buddy          *member;
  66.    gchar             *member_name;
  67.    GaimConversation  *conv;
  68.    g_return_if_fail(gc != NULL && group != NULL);

  69.    names = NULL;
  70. +  uid_list = NULL;
  71.    conv = gaim_find_conversation_with_account(group->group_name_utf8,
  72.                                               gaim_connection_get_account(gc));
  73.    if (conv != NULL && group->members != NULL) {
  74.      list = group->members;
  75.      while (list != NULL) {
  76.        member  = (qq_buddy *)list->data;
  77. +         member_name = uid_to_gaim_name(member->uid);
  78.        if (is_online(member->status))
  79. +         if (!g_slist_length(uid_list) || !g_slist_find(uid_list, member_name))
  80. +         {
  81.          names = g_list_append(names,
  82.                                member->nickname != NULL ?
  83.                                g_strdup(member->nickname) : uid_to_gaim_name(member->uid));
  84. +               uid_list = g_list_append(uid_list, uid_to_gaim_name(member->uid));
  85. +          }
  86.        list = list->next;
  87. +         g_free(member_name);
  88.      } // while list
  89.      gaim_conv_chat_clear_users(GAIM_CONV_CHAT(conv));
  90. +    gaim_conv_chat_remove_users(GAIM_CONV_CHAT(conv), names, NULL);
  91.      gaim_conv_chat_add_users(GAIM_CONV_CHAT(conv), names, NULL);
  92.    }// if conv

  93. @@ -77,6 +85,12 @@
  94.      names = g_list_remove(names, member_name);
  95.      g_free(member_name);
  96.    }// while name
  97. +  // clean up uid_list
  98. +  while (uid_list != NULL){
  99. +       member_name = (gchar *)uid_list->data;
  100. +       uid_list = g_list_remove(uid_list,member_name);
  101. +       g_free(member_name);
  102. +  }
  103. }// qq_group_conv_show_window

  104. /*****************************************************************************/
  105. diff -urN OpenQ-0.3.0.p3.old/src/qq_group_im.c OpenQ-0.3.0.p3/src/qq_group_im.c
  106. --- OpenQ-0.3.0.p3.old/src/qq_group_im.c        2004-07-08 13:22:25.000000000 +0000
  107. +++ OpenQ-0.3.0.p3/src/qq_group_im.c    2004-09-08 18:50:53.000000000 +0000
  108. @@ -27,6 +27,7 @@
  109. #include "notify.h"             // gaim_notify_warning
  110. #include "prefs.h"              // gaim_prefs_get_bool
  111. #include "request.h"            // gaim_request_action
  112. +#include "util.h"

  113. #include "my_utils.h"           // uid_to_gaim_name
  114. #include "packet_parse.h"       // create_packet_xx
  115. @@ -58,10 +59,12 @@
  116.    gint    data_len, bytes;
  117.    guint8  *raw_data, *cursor;
  118.    guint16 msg_len;
  119. +  gchar *msg_filtered;

  120.    g_return_if_fail(gc != NULL && group != NULL && msg != NULL);
  121. -
  122. -  msg_len   = strlen(msg);
  123. +  msg_filtered    = gaim_markup_strip_html(msg);
  124. +
  125. +  msg_len   = strlen(msg_filtered);
  126.    data_len  = 7 + msg_len + QQ_SEND_IM_AFTER_MSG_LEN;
  127.    raw_data  = g_newa(guint8, data_len); cursor = raw_data;

  128. @@ -69,12 +72,13 @@
  129.    bytes += create_packet_b (raw_data, &cursor, QQ_GROUP_CMD_SEND_MSG);
  130.    bytes += create_packet_dw(raw_data, &cursor, group->internal_group_id);
  131.    bytes += create_packet_w (raw_data, &cursor, msg_len+QQ_SEND_IM_AFTER_MSG_LEN);
  132. -  bytes += create_packet_data(raw_data, &cursor, (gchar *)msg, msg_len);
  133. +  bytes += create_packet_data(raw_data, &cursor, (gchar *)msg_filtered, msg_len);
  134.    guint8 *send_im_tail = qq_get_send_im_tail(NULL, NULL, NULL,
  135.                   FALSE, FALSE, FALSE, QQ_SEND_IM_AFTER_MSG_LEN);
  136.    bytes += create_packet_data(raw_data, &cursor, (gchar *) send_im_tail,
  137.                                QQ_SEND_IM_AFTER_MSG_LEN);
  138.    g_free(send_im_tail);
  139. +  g_free(msg_filtered);

  140.    if (bytes == data_len) // create OK
  141.      qq_send_group_cmd(gc, group, raw_data, data_len);
  142. diff -urN OpenQ-0.3.0.p3.old/src/qq_im.c OpenQ-0.3.0.p3/src/qq_im.c
  143. --- OpenQ-0.3.0.p3.old/src/qq_im.c      2004-07-08 16:03:12.000000000 +0000
  144. +++ OpenQ-0.3.0.p3/src/qq_im.c  2004-09-08 18:50:53.000000000 +0000
  145. @@ -471,7 +471,6 @@
  146.                 g_datalist_clear(&attribs);
  147.         }

  148. -       //msg_filtered    = qq_im_filter_html(msg);
  149.         gaim_debug(GAIM_DEBUG_INFO, "QQ_MESG", "send mesg: %s\n", msg);
  150.         msg_filtered    = gaim_markup_strip_html(msg);
  151.    msg_len         = strlen(msg_filtered);
  152. @@ -535,6 +534,7 @@
  153.    if (font_color) g_free(font_color);
  154.    if (font_size) g_free(font_size);
  155.    g_free(send_im_tail);
  156. +  g_free(msg_filtered);
  157. }// qq_send_packet_im

  158. /*****************************************************************************/
  159. diff -urN OpenQ-0.3.0.p3.old/src/qq_show.c OpenQ-0.3.0.p3/src/qq_show.c
  160. --- OpenQ-0.3.0.p3.old/src/qq_show.c    2004-07-08 13:22:25.000000000 +0000
  161. +++ OpenQ-0.3.0.p3/src/qq_show.c        2004-09-08 20:51:03.000000000 +0000
  162. @@ -38,7 +38,7 @@
  163. #define QQ_SHOW_IMAGE           "10/00/00.gif"

  164. #define QQ_SHOW_CACHE_DIR       "qqshow"
  165. -#define QQ_SHOW_DEFAULT_IMAGE   "qqshow.gif"
  166. +#define QQ_SHOW_DEFAULT_IMAGE   "default.gif"

  167. #define QQ_SHOW_DEST_X          0
  168. #define QQ_SHOW_DEST_Y          0
  169. @@ -72,7 +72,7 @@
  170.        gaim_debug(GAIM_DEBUG_WARNING, "QQ",
  171.                   "No cached QQ show image for buddy %d\n", uid);
  172.        g_free(file_fullname);
  173. -      file_fullname = g_build_filename(gaim_prefs_get_string("/plugins/prpl/qq/datadir"), "pixmaps", "gaim", "status", "default", QQ_SHOW_DEFAULT_IMAGE, NULL);
  174. +      file_fullname = g_build_filename(gaim_user_dir(),QQ_SHOW_CACHE_DIR, QQ_SHOW_DEFAULT_IMAGE, NULL);
  175.      }// if g_file_test
  176.    }// if io

复制代码
发表于 2004-9-9 00:48:57 | 显示全部楼层
小锁真的很不错 , 不过qqshow的补丁还是取消为好.,原因吗, 就是原始的代码灵活性更强.解决方法只要把qqshow的default.gif复制到/usr/share/pixmaps/gaim/status/default/qqshow.gif就可以了.
 楼主| 发表于 2004-9-9 11:32:07 | 显示全部楼层
那你就去掉吧!你最好在最新的openq的ebuild里面加入那个qqshow的图标。
 楼主| 发表于 2004-9-10 11:01:17 | 显示全部楼层
这次的补丁彻底的找到并解决了openq的聊天室(组)人名重复问题:

  1. diff -urN OpenQ-0.3.0.p3.old/src/qq_char_conv.c OpenQ-0.3.0.p3/src/qq_char_conv.c
  2. --- OpenQ-0.3.0.p3.old/src/qq_char_conv.c       2004-07-08 16:03:12.000000000 +0000
  3. +++ OpenQ-0.3.0.p3/src/qq_char_conv.c   2004-09-08 18:50:53.000000000 +0000
  4. @@ -258,52 +258,4 @@
  5.         return ret;
  6. }// gaim_smiley_to_qq

  7. -/*****************************************************************************/
  8. -// contributed by rakescar@linuxsir
  9. -//Replace specified keyword with a replacement in a block of text
  10. -//Note: the returned string should be freed after use
  11. -gchar *_qq_im_replace_keyword
  12. -(const gchar *text, const gchar *keyword, const gchar *replacement) {
  13. -  const gchar *h_pattern = "^(.*)";
  14. -  const gchar *t_pattern =  "(.*)$";
  15. -  const gint subs = 4;
  16. -  regex_t re;
  17. -  regmatch_t matches[4];
  18. -
  19. -  g_return_val_if_fail(text != NULL &&
  20. -                       keyword != NULL &&
  21. -                       replacement != NULL, NULL);
  22. -
  23. -  gchar *result=g_strdup(text);
  24. -  gchar *pattern = g_strconcat(h_pattern,keyword,t_pattern,NULL);
  25. -
  26. -  regcomp(&re, pattern, REG_EXTENDED);
  27. -  while( regexec( &re, result, subs, matches, 0) != REG_NOMATCH ) {
  28. -    //replace all occurrence until no match is found
  29. -    gchar *part1 = g_strndup(result+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so);
  30. -    gchar *part2 = g_strndup(result+matches[2].rm_so, matches[2].rm_eo-matches[2].rm_so);
  31. -    g_free(result);
  32. -    result = g_strconcat(part1, replacement, part2,NULL);
  33. -    g_free(part1); g_free(part2);
  34. -  } // while
  35. -
  36. -  g_free(pattern);
  37. -  return result;
  38. -}//_qq_im_replace_keyword
  39. -
  40. -/*****************************************************************************/
  41. -// contributed by rakescar@linuxsir
  42. -//Remove all HTML markups in a block of text. The only exception is made to
  43. -//"<br>" which is replaced by "\n" newline character
  44. -//Note: the returned string should be freed after use
  45. -gchar *qq_im_filter_html(const gchar *text) {
  46. -  const char *newline_markup_pattern = "<[Bb][Rr]>";
  47. -  const char *html_markup_pattern = "<[^<>]*>";
  48. -  gchar *result1=_qq_im_replace_keyword(text,newline_markup_pattern,"\n");
  49. -  gchar *result2=_qq_im_replace_keyword(result1,html_markup_pattern,"");
  50. -  g_free(result1);
  51. -  return result2;
  52. -}//qq_im_filter_html
  53. -
  54. -/*****************************************************************************/
  55. // END OF FILE
  56. diff -urN OpenQ-0.3.0.p3.old/src/qq_group_conv.c OpenQ-0.3.0.p3/src/qq_group_conv.c
  57. --- OpenQ-0.3.0.p3.old/src/qq_group_conv.c      2004-08-31 11:08:28.000000000 +0000
  58. +++ OpenQ-0.3.0.p3/src/qq_group_conv.c  2004-09-10 10:50:58.316887344 +0000
  59. @@ -48,13 +48,14 @@
  60. /*****************************************************************************/
  61. // refresh online member in group conversation window
  62. void qq_group_conv_refresh_online_member(GaimConnection *gc, qq_group *group) {
  63. -  GList             *names, *list;
  64. +  GList             *names, *list, *flags;
  65.    qq_buddy          *member;
  66.    gchar             *member_name;
  67.    GaimConversation  *conv;
  68.    g_return_if_fail(gc != NULL && group != NULL);

  69.    names = NULL;
  70. +  flags = NULL;
  71.    conv = gaim_find_conversation_with_account(group->group_name_utf8,
  72.                                               gaim_connection_get_account(gc));
  73.    if (conv != NULL && group->members != NULL) {
  74. @@ -62,13 +63,16 @@
  75.      while (list != NULL) {
  76.        member  = (qq_buddy *)list->data;
  77.        if (is_online(member->status))
  78. +         {
  79.          names = g_list_append(names,
  80.                                member->nickname != NULL ?
  81.                                g_strdup(member->nickname) : uid_to_gaim_name(member->uid));
  82. +               flags = g_list_append(flags, GINT_TO_POINTER(GAIM_CBFLAGS_NONE));
  83. +         }
  84.        list = list->next;
  85.      } // while list
  86.      gaim_conv_chat_clear_users(GAIM_CONV_CHAT(conv));
  87. -    gaim_conv_chat_add_users(GAIM_CONV_CHAT(conv), names, NULL);
  88. +    gaim_conv_chat_add_users(GAIM_CONV_CHAT(conv), names, flags);
  89.    }// if conv

  90.    // clean up names
  91. @@ -77,6 +81,12 @@
  92.      names = g_list_remove(names, member_name);
  93.      g_free(member_name);
  94.    }// while name
  95. +  // clean up flags
  96. +  while(flags != NULL) {
  97. +       member_name = (gchar *)flags->data;
  98. +       flags = g_list_remove(flags, member_name);
  99. +       g_free(member_name);
  100. +  }
  101. }// qq_group_conv_show_window

  102. /*****************************************************************************/
  103. diff -urN OpenQ-0.3.0.p3.old/src/qq_group_im.c OpenQ-0.3.0.p3/src/qq_group_im.c
  104. --- OpenQ-0.3.0.p3.old/src/qq_group_im.c        2004-07-08 13:22:25.000000000 +0000
  105. +++ OpenQ-0.3.0.p3/src/qq_group_im.c    2004-09-08 18:50:53.000000000 +0000
  106. @@ -27,6 +27,7 @@
  107. #include "notify.h"             // gaim_notify_warning
  108. #include "prefs.h"              // gaim_prefs_get_bool
  109. #include "request.h"            // gaim_request_action
  110. +#include "util.h"

  111. #include "my_utils.h"           // uid_to_gaim_name
  112. #include "packet_parse.h"       // create_packet_xx
  113. @@ -58,10 +59,12 @@
  114.    gint    data_len, bytes;
  115.    guint8  *raw_data, *cursor;
  116.    guint16 msg_len;
  117. +  gchar *msg_filtered;

  118.    g_return_if_fail(gc != NULL && group != NULL && msg != NULL);
  119. -
  120. -  msg_len   = strlen(msg);
  121. +  msg_filtered    = gaim_markup_strip_html(msg);
  122. +
  123. +  msg_len   = strlen(msg_filtered);
  124.    data_len  = 7 + msg_len + QQ_SEND_IM_AFTER_MSG_LEN;
  125.    raw_data  = g_newa(guint8, data_len); cursor = raw_data;

  126. @@ -69,12 +72,13 @@
  127.    bytes += create_packet_b (raw_data, &cursor, QQ_GROUP_CMD_SEND_MSG);
  128.    bytes += create_packet_dw(raw_data, &cursor, group->internal_group_id);
  129.    bytes += create_packet_w (raw_data, &cursor, msg_len+QQ_SEND_IM_AFTER_MSG_LEN);
  130. -  bytes += create_packet_data(raw_data, &cursor, (gchar *)msg, msg_len);
  131. +  bytes += create_packet_data(raw_data, &cursor, (gchar *)msg_filtered, msg_len);
  132.    guint8 *send_im_tail = qq_get_send_im_tail(NULL, NULL, NULL,
  133.                   FALSE, FALSE, FALSE, QQ_SEND_IM_AFTER_MSG_LEN);
  134.    bytes += create_packet_data(raw_data, &cursor, (gchar *) send_im_tail,
  135.                                QQ_SEND_IM_AFTER_MSG_LEN);
  136.    g_free(send_im_tail);
  137. +  g_free(msg_filtered);

  138.    if (bytes == data_len) // create OK
  139.      qq_send_group_cmd(gc, group, raw_data, data_len);
  140. diff -urN OpenQ-0.3.0.p3.old/src/qq_im.c OpenQ-0.3.0.p3/src/qq_im.c
  141. --- OpenQ-0.3.0.p3.old/src/qq_im.c      2004-07-08 16:03:12.000000000 +0000
  142. +++ OpenQ-0.3.0.p3/src/qq_im.c  2004-09-08 18:50:53.000000000 +0000
  143. @@ -471,7 +471,6 @@
  144.                 g_datalist_clear(&attribs);
  145.         }

  146. -       //msg_filtered    = qq_im_filter_html(msg);
  147.         gaim_debug(GAIM_DEBUG_INFO, "QQ_MESG", "send mesg: %s\n", msg);
  148.         msg_filtered    = gaim_markup_strip_html(msg);
  149.    msg_len         = strlen(msg_filtered);
  150. @@ -535,6 +534,7 @@
  151.    if (font_color) g_free(font_color);
  152.    if (font_size) g_free(font_size);
  153.    g_free(send_im_tail);
  154. +  g_free(msg_filtered);
  155. }// qq_send_packet_im

复制代码
发表于 2004-9-10 11:59:59 | 显示全部楼层
小锁兄,打上这个补丁, libqq.so会小很多的。
  1. diff -urN  OpenQ-0.3.0.p3/src/Makefile.in.orig OpenQ-0.3.0.p3/src/Makefile.in
  2. --- OpenQ-0.3.0.p3/src/Makefile.in.orig 2004-09-10 00:33:10.695718856 +0000
  3. +++ OpenQ-0.3.0.p3/src/Makefile.in 2004-09-10 00:33:29.972788296 +0000
  4. @@ -191,7 +191,7 @@

  5. AM_CFLAGS = $(st)

  6. -libqq_la_LDFLAGS = -module -avoid-version `pkg-config --libs gtk+-2.0`
  7. +libqq_la_LDFLAGS = -module -avoid-version

  8. @STATIC_QQ_FALSE@st = -DDATADIR="$(datadir)"

复制代码
发表于 2004-9-10 12:10:27 | 显示全部楼层
我想我们应该另外做一个包,把ip数据库,qq 笑脸和qqshow都包含进去,而不只是源码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表