From: David Woodhouse Date: Wed, 1 Apr 2020 19:39:36 +0000 (+0100) Subject: Merge github.com:phillipberndt/pidgin-chime X-Git-Tag: v1.4~13 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=dd95b0e5a7f451c910e3564d6f2eb6c01a80d654;p=pidgin-chime.git Merge github.com:phillipberndt/pidgin-chime --- dd95b0e5a7f451c910e3564d6f2eb6c01a80d654 diff --cc Makefile.am index 99d40a0,f34be06..4a10d9b --- a/Makefile.am +++ b/Makefile.am @@@ -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 fbc5c81,b24b5f3..e6b848b --- a/configure.ac +++ b/configure.ac @@@ -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 ],[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 73786a2,91c008e..250ed87 --- a/prpl/chat.c +++ b/prpl/chat.c @@@ -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. */ diff --cc prpl/conversations.c index 6b04e9f,5132d9c..c1cfef0 --- a/prpl/conversations.c +++ b/prpl/conversations.c @@@ -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; }