Пример #1
0
static void
status_presets_set_default (TpConnectionPresenceType   state,
                            const gchar *status)
{
    if (default_preset) {
        status_preset_free (default_preset);
    }

    default_preset = status_preset_new (state, status);
}
Пример #2
0
static void
status_presets_set_default (McPresence   state,
			    const gchar *status)
{
	if (default_preset) {
		status_preset_free (default_preset);
	}

	default_preset = status_preset_new (state, status);
}
Пример #3
0
void
empathy_status_presets_set_last (TpConnectionPresenceType   state,
                                 const gchar *status)
{
    GList        *l;
    StatusPreset *preset;
    gint          num;

    /* Check if duplicate */
    for (l = presets; l; l = l->next) {
        preset = l->data;

        if (state == preset->state &&
                !tp_strdiff (status, preset->status)) {
            return;
        }
    }

    preset = status_preset_new (state, status);
    presets = g_list_prepend (presets, preset);

    num = 0;
    for (l = presets; l; l = l->next) {
        preset = l->data;

        if (state != preset->state) {
            continue;
        }

        num++;

        if (num > STATUS_PRESETS_MAX_EACH) {
            status_preset_free (preset);
            presets = g_list_delete_link (presets, l);
            break;
        }
    }

    status_presets_file_save ();
}
Пример #4
0
static void
status_presets_file_parse (const gchar *filename)
{
    xmlParserCtxtPtr ctxt;
    xmlDocPtr        doc;
    xmlNodePtr       presets_node;
    xmlNodePtr       node;

    DEBUG ("Attempting to parse file:'%s'...", filename);

    ctxt = xmlNewParserCtxt ();

    /* Parse and validate the file. */
    doc = xmlCtxtReadFile (ctxt, filename, NULL, 0);
    if (!doc) {
        g_warning ("Failed to parse file:'%s'", filename);
        xmlFreeParserCtxt (ctxt);
        return;
    }

    if (!tpaw_xml_validate_from_resource (doc, STATUS_PRESETS_DTD_RESOURCENAME)) {
        g_warning ("Failed to validate file:'%s'", filename);
        xmlFreeDoc (doc);
        xmlFreeParserCtxt (ctxt);
        return;
    }

    /* The root node, presets. */
    presets_node = xmlDocGetRootElement (doc);

    node = presets_node->children;
    while (node) {
        if (strcmp ((gchar *) node->name, "status") == 0 ||
                strcmp ((gchar *) node->name, "default") == 0) {
            TpConnectionPresenceType    state;
            gchar        *status;
            gchar        *state_str;
            StatusPreset *preset;
            gboolean      is_default = FALSE;

            if (strcmp ((gchar *) node->name, "default") == 0) {
                is_default = TRUE;
            }

            status = (gchar *) xmlNodeGetContent (node);
            state_str = (gchar *) xmlGetProp (node, (const xmlChar *) "presence");

            if (state_str) {
                state = empathy_presence_from_str (state_str);
                if (empathy_status_presets_is_valid (state)) {
                    if (is_default) {
                        DEBUG ("Default status preset state is:"
                               " '%s', status:'%s'", state_str,
                               status);

                        status_presets_set_default (state, status);
                    } else {
                        preset = status_preset_new (state, status);
                        presets = g_list_append (presets, preset);
                    }
                }
            }

            xmlFree (status);
            xmlFree (state_str);
        }

        node = node->next;
    }

    /* Use the default if not set */
    if (!default_preset) {
        status_presets_set_default (TP_CONNECTION_PRESENCE_TYPE_OFFLINE, NULL);
    }

    DEBUG ("Parsed %d status presets", g_list_length (presets));

    xmlFreeDoc (doc);
    xmlFreeParserCtxt (ctxt);
}