Example #1
0
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);
}
Example #2
0
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;
}