static void ide_doap_set_languages (IdeDoap *self, gchar **languages) { gsize i; g_return_if_fail (IDE_IS_DOAP (self)); if ((self->languages != NULL) && (self->languages->len > 0)) g_ptr_array_remove_range (self->languages, 0, self->languages->len); g_object_freeze_notify (G_OBJECT (self)); for (i = 0; languages [i]; i++) ide_doap_add_language (self, languages [i]); g_object_thaw_notify (G_OBJECT (self)); }
static gboolean load_doap (IdeDoap *self, XmlReader *reader, GError **error) { if (!xml_reader_read_start_element (reader, "Project")) { g_set_error (error, IDE_DOAP_ERROR, IDE_DOAP_ERROR_INVALID_FORMAT, "Project element is missing from doap."); return FALSE; } g_object_freeze_notify (G_OBJECT (self)); xml_reader_read (reader); do { const gchar *element_name; element_name = xml_reader_get_local_name (reader); if (g_strcmp0 (element_name, "name") == 0 || g_strcmp0 (element_name, "shortdesc") == 0 || g_strcmp0 (element_name, "description") == 0) { gchar *str; str = xml_reader_read_string (reader); if (str != NULL) g_object_set (self, element_name, g_strstrip (str), NULL); g_free (str); } else if (g_strcmp0 (element_name, "category") == 0 || g_strcmp0 (element_name, "homepage") == 0 || g_strcmp0 (element_name, "download-page") == 0 || g_strcmp0 (element_name, "bug-database") == 0) { gchar *str; str = xml_reader_get_attribute (reader, "rdf:resource"); if (str != NULL) g_object_set (self, element_name, g_strstrip (str), NULL); g_free (str); } else if (g_strcmp0 (element_name, "programming-language") == 0) { gchar *str; str = xml_reader_read_string (reader); if (str != NULL && str[0] != '\0') ide_doap_add_language (self, g_strstrip (str)); g_free (str); } else if (g_strcmp0 (element_name, "maintainer") == 0) { if (!ide_doap_parse_maintainer (self, reader)) break; } } while (xml_reader_read_to_next (reader)); g_object_thaw_notify (G_OBJECT (self)); return TRUE; }
gboolean ide_doap_load_from_file (IdeDoap *self, GFile *file, GCancellable *cancellable, GError **error) { g_autoptr(XmlReader) reader = NULL; g_return_val_if_fail (IDE_IS_DOAP (self), FALSE); g_return_val_if_fail (G_IS_FILE (file), FALSE); g_return_val_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable), FALSE); reader = xml_reader_new (); if (!xml_reader_load_from_file (reader, file, cancellable, error)) return FALSE; if (!xml_reader_read_start_element (reader, "Project")) { g_set_error (error, IDE_DOAP_ERROR, IDE_DOAP_ERROR_INVALID_FORMAT, "Project element is missing from doap."); return FALSE; } g_object_freeze_notify (G_OBJECT (self)); xml_reader_read (reader); do { const gchar *element_name; element_name = xml_reader_get_local_name (reader); if (ide_str_equal0 (element_name, "name") || ide_str_equal0 (element_name, "shortdesc") || ide_str_equal0 (element_name, "description")) { gchar *str; str = xml_reader_read_string (reader); if (str != NULL) g_object_set (self, element_name, g_strstrip (str), NULL); g_free (str); } else if (ide_str_equal0 (element_name, "category") || ide_str_equal0 (element_name, "homepage") || ide_str_equal0 (element_name, "download-page") || ide_str_equal0 (element_name, "bug-database")) { gchar *str; str = xml_reader_get_attribute (reader, "rdf:resource"); if (str != NULL) g_object_set (self, element_name, g_strstrip (str), NULL); g_free (str); } else if (ide_str_equal0 (element_name, "programming-language")) { gchar *str; str = xml_reader_read_string (reader); if (!ide_str_empty0 (str)) ide_doap_add_language (self, g_strstrip (str)); g_free (str); } else if (ide_str_equal0 (element_name, "maintainer")) { if (!ide_doap_parse_maintainer (self, reader)) break; } } while (xml_reader_read_to_next (reader)); g_object_thaw_notify (G_OBJECT (self)); return TRUE; }