static void flist_sfc_report(PurpleConnection *pc, JsonObject *root) { PurpleAccount *pa = purple_connection_get_account(pc); const gchar *callid, *reporter, *report; gchar *s, *escaped_reporter, *escaped_report, *message; GString *message_str; gdouble timestamp; gint logid; gboolean has_logid; callid = json_object_get_string_member(root, "callid"); reporter = json_object_get_string_member(root, "character"); report = json_object_get_string_member(root, "report"); logid = json_object_get_parse_int_member(root, "logid", &has_logid); timestamp = json_object_get_double_member(root, "timestamp"); g_return_if_fail(callid); g_return_if_fail(reporter); g_return_if_fail(report); message_str = g_string_new(NULL); s = g_strdup(purple_url_encode(flist_serialize_account(pa))); escaped_reporter = purple_markup_escape_text(reporter, -1); escaped_report = purple_markup_escape_text(report, -1); g_string_append_printf(message_str, "Moderator Alert. %s writes:\n", escaped_reporter); g_string_append_printf(message_str, "%s\n", escaped_report); g_string_append_printf(message_str, "<a href=\"flistsfc://%s/%s\">Confirm Alert</a>", s, purple_url_encode(callid)); g_string_append(message_str, ", "); if(has_logid) { g_string_append_printf(message_str, "<a href=\"http://www.f-list.net/fchat/getLog.php?log=%d\">View Log</a>", logid); } else { g_string_append_printf(message_str, "(No Log)"); } message = g_string_free(message_str, FALSE); serv_got_im(pc, GLOBAL_NAME, message, PURPLE_MESSAGE_RECV, time(NULL)); g_free(escaped_report); g_free(escaped_reporter); g_free(message); g_free(s); }
gboolean flist_process_RTB(PurpleConnection *pc, JsonObject *root) { FListAccount *fla = pc->proto_data; const gchar *subject = NULL, *name = NULL, *title = NULL; gchar *url = NULL; gchar *msg = NULL; gint id; gboolean has_id; gint target_id; gboolean has_target_id; const gchar *type_str = json_object_get_string_member(root, "type"); /* Ignore notification if the user doesn't want to see it */ if (!fla->receive_rtb) { return TRUE; } purple_debug_info(FLIST_DEBUG, "Processing RTB... (Character: %s, Type: %s)\n", fla->character, type_str); RTB_TYPE type = flist_rtb_get_type(type_str); if (type == None) { purple_debug_error(FLIST_DEBUG, "Error parsing RTB: Unknown type (Character: %s, Type: %s)\n", fla->character, type_str); return TRUE; } // Handle friend list notifications switch(type) { case FriendRequest: flist_friends_received_request(fla); return TRUE; case FriendAdd: flist_friends_added_friend(fla); return TRUE; case FriendRemove: flist_friends_removed_friend(fla); return TRUE; default: // We will handle other cases further below break; } // --- Past this point, we're going to build a message. // Fields in some RTB message are named differently, depending on their type // Normalize this here if (type == TicketCreate) { name = json_object_get_string_member(root, "user"); title = json_object_get_string_member(root, "subject"); id = json_object_get_parse_int_member(root, "id", &has_id); } else if (type == Note) { name = json_object_get_string_member(root, "sender"); title = json_object_get_string_member(root, "subject"); id = json_object_get_parse_int_member(root, "id", &has_id); } else if (type == Comment) { name = json_object_get_string_member(root, "name"); title = json_object_get_string_member(root, "target"); id = json_object_get_parse_int_member(root, "id", &has_id); } else { name = json_object_get_string_member(root, "name"); title = json_object_get_string_member(root, "title"); id = json_object_get_parse_int_member(root, "id", &has_id); } if (!has_id) { purple_debug_error(FLIST_DEBUG, "Error parsing RTB: Could not parse id (Character: %s, Type: %s)\n", fla->character, type_str); return TRUE; } switch(type) { case Note: msg = g_strdup_printf("New note received from <a href=\"" FLIST_URL_CHARACTER "\">%s</a>: %s (<a href=\"" FLIST_URL_NOTE "\">Open Note</a>)", name, name, title, id); break; case BugReport: msg = g_strdup_printf("<a href=\"" FLIST_URL_CHARACTER "\">%s</a> submitted a bugreport, \"<a href=\"" FLIST_URL_BUGREPORT "\">%s</a>\"", name, name, id, title); break; case FeatureRequest: msg = g_strdup_printf("<a href=\"" FLIST_URL_CHARACTER "\">%s</a> submitted a feature request, \"<a href=\"" FLIST_URL_FEATUREREQUEST "\">%s</a>\"", name, name, id, title); break; // Helpdesk Tickets case HelpdeskTicket: msg = g_strdup_printf("<a href=\"" FLIST_URL_CHARACTER "\">%s</a> submitted a helpdesk ticket, \"<a href=\"" FLIST_URL_HELPDESKTICKET "\">%s</a>\"", name, name, id, title); break; case TicketCreate: msg = g_strdup_printf("<a href=\"" FLIST_URL_CHARACTER "\">%s</a> submitted a helpdesk ticket via email, \"<a href=\"" FLIST_URL_HELPDESKTICKET "\">%s</a>\"", name, name, id, title); break; case HelpdeskReply: msg = g_strdup_printf("<a href=\"" FLIST_URL_CHARACTER "\">%s</a> submitted a reply to your helpdesk ticket, \"<a href=\"" FLIST_URL_HELPDESKTICKET "\">%s</a>\"", name, name, id, title); break; case Comment: subject = json_object_get_string_member(root, "target_type"); target_id = json_object_get_parse_int_member(root, "target_id", &has_target_id); if (!has_target_id) { purple_debug_error(FLIST_DEBUG, "Error parsing RTB: Could not parse target_id (Character: %s, Type: %s)\n", fla->character, type_str); return TRUE; } url = flist_rtb_get_comment_url(subject, target_id, id); msg = g_strdup_printf("<a href=\"" FLIST_URL_CHARACTER "\">%s</a> submitted a comment on the %s \"<a href=\"%s\">%s</a>\"", name, name, subject, url, title); g_free(url); break; default: // We should actually never come here, all other cases are handled above. purple_debug_error(FLIST_DEBUG, "Error parsing RTB: Unhandled type reached(Character: %s, Type: %s)\n", fla->character, type_str); return TRUE; } serv_got_im(pc, GLOBAL_NAME, msg, PURPLE_MESSAGE_RECV, time(NULL)); g_free(msg); return TRUE; }