Бесполезные новые строки на входящих сообщениях в гибридном языке при использовании гибридного-языка-sipe

При использовании гибридного-языка-sipe с гибридным языком входящие сообщения имеют огромное количество пробела вокруг фактического сообщения. Включение/отключение форматирующий на входящих сообщениях не имеет никакого значения. Посмотрите здесь:

enter image description here

Светло-зеленый я (никакой пробел), темно-зеленый мой друг, использующий Skype для Бизнес-клиента. На его конце все выглядит нормальным. Почему там такой пробел (пустые строки) вокруг входящих сообщений? Как это может быть зафиксировано?

2
задан 20 February 2017 в 10:33

1 ответ

Я зафиксировал это путем взламывания гибридного-языка-sipe сам. Это - вероятно, плохой код, но эй, я плох в C. Все, что это делает, удаляют случаи <BR> в сообщениях. Вот патч, в случае, если кто-либо еще встречается с той же проблемой:

*** purple-im.c     2016-12-18 18:19:07.000000000 +0100
--- /tmp/purple-im.c        2018-04-18 15:49:48.915516011 +0200
***************
*** 43,60 ****
  #include "sipe-core.h"
  #include "sipe-nls.h"

  void sipe_backend_im_message(struct sipe_core_public *sipe_public,
                         const gchar *from,
                         const gchar *html)
  {
    struct sipe_backend_private *purple_private = sipe_public->backend_private;
    purple_serv_got_im(purple_private->gc,
                from,
!               html,
                0,
                time(NULL));
  }

  void sipe_backend_im_topic(struct sipe_core_public *sipe_public,
                       const gchar *with,
                       const gchar *topic)
--- 43,102 ----
  #include "sipe-core.h"
  #include "sipe-nls.h"

+ static void str_replace(gchar *target, const gchar *needle, const gchar *replacement)
+ {
+
+     gchar buffer[1024] = { 0 };
+     gchar *insert_point = &buffer[0];
+     const gchar *tmp = target;
+     size_t needle_len = strlen(needle);
+     size_t repl_len = strlen(replacement);
+
+     while (1) {
+         const gchar *p = strstr(tmp, needle);
+
+         // walked past last occurrence of needle; copy remaining part
+         if (p == NULL) {
+             strcpy(insert_point, tmp);
+             break;
+         }
+
+         // copy part before needle
+         memcpy(insert_point, tmp, p - tmp);
+         insert_point += p - tmp;
+
+         // copy replacement string
+         memcpy(insert_point, replacement, repl_len);
+         insert_point += repl_len;
+
+         // adjust pointers, move on
+         tmp = p + needle_len;
+     }
+
+     // write altered string back to target
+     strcpy(target, buffer);
+ }
+
  void sipe_backend_im_message(struct sipe_core_public *sipe_public,
                         const gchar *from,
                         const gchar *html)
  {
    struct sipe_backend_private *purple_private = sipe_public->backend_private;
+
+     const size_t target_size = strlen(html) + 1;
+     gchar copy_of_html[target_size];
+     strncpy(copy_of_html, html, target_size);
+
+     str_replace(copy_of_html, "<BR>", "");
+
    purple_serv_got_im(purple_private->gc,
                from,
!               copy_of_html,
                0,
                time(NULL));
  }

+
  void sipe_backend_im_topic(struct sipe_core_public *sipe_public,
                       const gchar *with,
                       const gchar *topic)
0
ответ дан 2 December 2019 в 09:26

Другие вопросы по тегам:

Похожие вопросы: