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
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)
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"
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. */
/* 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;
}