2

When using pidgin-sipe with pidgin, incoming messages have a huge amount of whitespace around the actual message. Enabling/disabling formatting on incoming messages makes no difference. See here:

enter image description here

Light green is me (no whitespace), dark green is my friend using the Skype for Business client. On his end everything looks normal. Why is there so much whitespace (empty lines) around incoming messages? How can this be fixed?

0

I fixed this by hacking pidgin-sipe myself. It's probably bad code, but hey, I'm bad at C. All it does is remove occurrences of <BR> in messages. Here's the patch, in case anyone else encounters the same problem:

*** 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)
  • I have the same but opposite issue. My pidgin is removing all newlines from certain messages (that are pasted from a text file). – FractalSpace Nov 5 '18 at 16:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.