]> www.infradead.org Git - pidgin-chime.git/commitdiff
Merge github.com:phillipberndt/pidgin-chime
authorDavid Woodhouse <dwmw@amazon.co.uk>
Wed, 1 Apr 2020 19:39:36 +0000 (20:39 +0100)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Wed, 1 Apr 2020 19:39:36 +0000 (20:39 +0100)
1  2 
Makefile.am
configure.ac
prpl/chat.c
prpl/conversations.c

diff --cc Makefile.am
index 99d40a032636a3d6a4a6692f83beb3e5e0627dfd,f34be067f03e3031dfaf10dad214607aae3fc8fc..4a10d9bcf154ed2df980e2268aa2224ea12ca547
@@@ -27,7 -23,7 +27,7 @@@ PROTOBUF_SRCS = protobuf/auth_message.p
  
  PRPL_SRCS =   prpl/chime.h prpl/chime.c prpl/buddy.c prpl/rooms.c prpl/chat.c \
                prpl/messages.c prpl/conversations.c prpl/meeting.c prpl/attachments.c \
-               prpl/authenticate.c prpl/dbus.h prpl/dbus.c
 -              prpl/authenticate.c prpl/markdown.c
++              prpl/authenticate.c prpl/markdown.c prpl/dbus.h prpl/dbus.c
  
  WEBSOCKET_SRCS = chime/chime-websocket-connection.c chime/chime-websocket-connection.h \
                chime/chime-websocket.c
@@@ -59,8 -55,8 +59,8 @@@ libchime_la_LIBADD = $(SOUP_LIBS) $(JSO
  libchime_la_LDFLAGS = -module -avoid-version -no-undefined
  
  libchimeprpl_la_SOURCES = $(PRPL_SRCS) $(LOGIN_SRCS)
- libchimeprpl_la_CFLAGS = $(PURPLE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(LIBXML_CFLAGS) $(GSTREAMER_CFLAGS) $(DBUS_CFLAGS) -Ichime -Iprpl
- libchimeprpl_la_LIBADD = $(PURPLE_LIBS) $(SOUP_LIBS) $(JSON_LIBS) $(LIBXML_LIBS) $(GSTREAMER_LIBS) $(DLOPEN_LIBS) $(DBUS_LIBS) libchime.la
 -libchimeprpl_la_CFLAGS = $(PURPLE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(LIBXML_CFLAGS) $(GSTREAMER_CFLAGS) $(MARKDOWN_CFLAGS) -Ichime -Iprpl
 -libchimeprpl_la_LIBADD = $(PURPLE_LIBS) $(SOUP_LIBS) $(JSON_LIBS) $(LIBXML_LIBS) $(GSTREAMER_LIBS) $(DLOPEN_LIBS) $(MARKDOWN_LIBS) libchime.la
++libchimeprpl_la_CFLAGS = $(PURPLE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(LIBXML_CFLAGS) $(GSTREAMER_CFLAGS) $(DBUS_CFLAGS) $(MARKDOWN_CFLAGS) -Ichime -Iprpl
++libchimeprpl_la_LIBADD = $(PURPLE_LIBS) $(SOUP_LIBS) $(JSON_LIBS) $(LIBXML_LIBS) $(GSTREAMER_LIBS) $(DLOPEN_LIBS) $(DBUS_LIBS) $(MARKDOWN_LIBS) libchime.la
  libchimeprpl_la_LDFLAGS = -module -avoid-version -no-undefined
  
  POTFILES = $(libchime_la_SOURCES) $(libchimeprpl_la_SOURCES)
diff --cc configure.ac
index fbc5c810142aa3a205be4b2377863944351f5684,b24b5f3d4b6b1dd8d3b251a1284bfb29fd3dd0ba..e6b848baaa4af3054232f57348e3df3e55abc583
@@@ -75,20 -74,18 +75,31 @@@ PKG_CHECK_MODULES(SOUP, [libsoup-2.4 >
  if $PKG_CONFIG --atleast-version 2.59 libsoup-2.4; then
     AC_DEFINE(USE_LIBSOUP_WEBSOCKETS, 1, [Use libsoup websockets])
  fi
+ PKG_CHECK_MODULES(MARKDOWN, [libmarkdown], [],
+                 [oldLIBS="$LIBS"
+                  LIBS="$LIBS -lmarkdown"
+                  AC_MSG_CHECKING([for libmarkdown without pkg-config])
+                  AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <mkdio.h>],[mkd_initialize();])],
+                                 [AC_MSG_RESULT(yes)
+                                  AC_SUBST([MARKDOWN_LIBS], ["-lmarkdown"])
+                                  AC_SUBST([MARKDOWN_CFLAGS], [])],
+                                 [AC_MSG_RESULT(no)
+                                  AC_ERROR([Could not build against libmarkdown])])
+                  LIBS="$oldLIBS"])
  
 +PKG_CHECK_MODULES(X11, [x11], [have_x11=yes], [have_x11=no])
 +PKG_CHECK_MODULES(GSTBASE, [gstreamer-base-1.0], [have_gstbase=yes], [have_gstbase=no])
 +PKG_CHECK_MODULES(XCB, [xcb], [have_xcb=yes], [have_xcb=no]);
 +AM_CONDITIONAL(BUILD_GSTXCBIMAGESRC, [ test "$have_x11$have_gstbase$have_xcb" = "yesyesyes" ])
 +
 +if test "$have_x11" = "yes"; then
 +   PKG_CHECK_MODULES(XDAMAGE, xdamage, AC_DEFINE(HAVE_XDAMAGE, 1, [xdamage]), [:])
 +   PKG_CHECK_MODULES(XFIXES, xfixes, AC_DEFINE(HAVE_XFIXES, 1, [xfixes]), [:])
 +   PKG_CHECK_MODULES(XEXT, "xext",
 +                         [AC_CHECK_LIB([Xext], [XShmAttach],
 +                                               AC_DEFINE(HAVE_XSHM, 1, [xshm]))], [:])
 +fi
 +
  LIBS="$LIBS $PURPLE_LIBS"
  AC_CHECK_FUNC(purple_request_screenshare_media, [AC_DEFINE(HAVE_SCREENSHARE, 1, [Have purple_request_screenshare_media()])], [])
  LIBS="$oldLIBS"
diff --cc prpl/chat.c
index 73786a233cf16a886806687a68a63480343a3aa8,91c008ebd979576e9466fcaa7d849e28d1e544ba..250ed87033b132780236b92e514750e90e8bdf88
@@@ -174,27 -198,7 +175,35 @@@ static void do_chat_deliver_msg(ChimeCo
                download_attachment(cxn, att, ctx);
        }
  
 -      serv_got_chat_in(conn, id, from, msg_flags, parsed, msg_time);
 +      /* If the message is over a day old, don't beep for it. */
 +      if (!new_msg)
 +              msg_flags |= PURPLE_MESSAGE_DELAYED;
 +
 +      if (parse_string(node, "Content", &content)) {
 +              gchar *escaped = g_markup_escape_text(content, -1);
 +
 +              gchar *parsed = NULL;
 +              if (CHIME_IS_ROOM(chat->m.obj)) {
 +                      if (parse_inbound_mentions(cxn, pc->mention_regex, escaped, &parsed)
 +                                      && (msg_flags & PURPLE_MESSAGE_RECV)) {
 +                              // Presumably this will trigger a notification.
 +                              msg_flags |= PURPLE_MESSAGE_NICK;
 +                      }
 +                      g_free(escaped);
 +              } else
 +                      parsed = escaped;
 +
++              /* Process markdown */
++              if (g_str_has_prefix(parsed, "/md") && (parsed[3] == ' ' || parsed[3] == '\n')) {
++                      gchar *processed;
++                      if (!do_markdown(parsed + 4, &processed)) {
++                              g_free(parsed);
++                              parsed = processed;
++                      }
++              }
 +              serv_got_chat_in(conn, id, from, msg_flags, parsed, msg_time);
 +              g_free(parsed);
 +      }
        /* If the conversation already had focus and unseen-count didn't change, fake
           a PURPLE_CONV_UPDATE_UNSEEN notification anyway, so that we see that it's
           (still) zero and tell the server it's read. */
index 6b04e9fc6eb4aeac0e5f5b9a9898ba9258143a87,5132d9c4638e2bc80d398c172c72eef7b3d31e06..c1cfef0dedd634eb122e82368431e2033c6b1903
@@@ -70,47 -72,48 +71,57 @@@ static gboolean do_conv_deliver_msg(Chi
                /* The attachment and context structs will be owned by the code doing the download and will be disposed of at the end. */
                download_attachment(cxn, att, ctx);
        }
 -      /* Process markdown */
 -      if (g_str_has_prefix(escaped, "/md") && (escaped[3] == ' ' || escaped[3] == '\n')) {
 -              gchar *processed;
 -              if (!do_markdown(escaped + 4, &processed)) {
 -                      g_free(escaped);
 -                      escaped = processed;
 -              }
 -      }
 +      // Download messages don't have 'content' but normal messages do.
 +      // if you receive one, parse it:
 +      if (parse_string(record, "Content", &message)) {
 +              gchar *escaped = g_markup_escape_text(message, -1);
  
 -      if (!strcmp(sender, chime_connection_get_profile_id(cxn))) {
 -              /* Ick, how do we inject a message from ourselves? */
 -              PurpleAccount *account = im->m.conn->account;
 -              PurpleConversation *pconv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
 -                                                                                email, account);
 -              if (!pconv) {
 -                      pconv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, email);
 -                      if (!pconv) {
 -                              purple_debug_error("chime", "NO CONV FOR %s\n", email);
++              /* Process markdown */
++              if (g_str_has_prefix(escaped, "/md") && (escaped[3] == ' ' || escaped[3] == '\n')) {
++                      gchar *processed;
++                      if (!do_markdown(escaped + 4, &processed)) {
+                               g_free(escaped);
 -                              return FALSE;
++                              escaped = processed;
+                       }
+               }
 -              purple_conversation_write(pconv, NULL, escaped, flags | PURPLE_MESSAGE_SEND, msg_time);
 -              purple_signal_emit(purple_connection_get_prpl(account->gc), "chime-got-convmsg",
 -                                 pconv, TRUE, record);
 -      } else {
 -              serv_got_im(im->m.conn, email, escaped, flags | PURPLE_MESSAGE_RECV, msg_time);
 -
 -              /* If the conversation already had focus and unseen-count didn't change, fake
 -                 a PURPLE_CONV_UPDATE_UNSEEN notification anyway, so that we see that it's
 -                 (still) zero and tell the server it's read. */
 -              PurpleConversation *pconv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
 -                                                                                email, im->m.conn->account);
 -              if (pconv) {
 -                      purple_conversation_update(pconv, PURPLE_CONV_UPDATE_UNSEEN);
 -                      purple_signal_emit(purple_connection_get_prpl(im->m.conn),
 -                                         "chime-got-convmsg", pconv, FALSE, record);
 -              }
 +              if (!strcmp(sender, chime_connection_get_profile_id(cxn))) {
 +                      /* Ick, how do we inject a message from ourselves? */
 +                      PurpleAccount *account = im->m.conn->account;
 +                      PurpleConversation *pconv = purple_find_conversation_with_account(
 +                                      PURPLE_CONV_TYPE_IM, email, account);
 +                      if (!pconv) {
 +                              pconv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account,
 +                                                                                              email);
 +                              if (!pconv) {
 +                                      purple_debug_error("chime", "NO CONV FOR %s\n", email);
 +                                      g_free(escaped);
 +                                      return FALSE;
 +                              }
 +                      }
 +                      purple_conversation_write(pconv, NULL, escaped,
 +                                      flags | PURPLE_MESSAGE_SEND, msg_time);
 +                      purple_signal_emit(purple_connection_get_prpl(account->gc),
 +                                      "chime-got-convmsg", pconv, TRUE, record);
 +              } else {
 +                      serv_got_im(im->m.conn, email, escaped, flags | PURPLE_MESSAGE_RECV,
 +                                              msg_time);
 +
 +                      /* If the conversation already had focus and unseen-count didn't change, fake
 +                       a PURPLE_CONV_UPDATE_UNSEEN notification anyway, so that we see that it's
 +                       (still) zero and tell the server it's read. */
 +                      PurpleConversation *pconv = purple_find_conversation_with_account(
 +                                      PURPLE_CONV_TYPE_IM, email, im->m.conn->account);
 +                      if (pconv) {
 +                              purple_conversation_update(pconv, PURPLE_CONV_UPDATE_UNSEEN);
 +                              purple_signal_emit(purple_connection_get_prpl(im->m.conn),
 +                                                                 "chime-got-convmsg", pconv, FALSE, record);
 +                      }
 +
 +              }
 +              g_free(escaped);
        }
 -      g_free(escaped);
        return TRUE;
  }