Ejemplo n.º 1
0
/**
 * xml_reader_load_from_file:
 * @reader: a #XmlReader
 * @filename: the full path to an XML file
 * @error: return location for a #GError, or %NULL
 *
 * Loads an XML file at @filename into @reader and sets the #XmlReader
 * to be ready to walk the XML document object model.
 *
 * See also xml_reader_load_from_file().
 *
 * Return value: %TRUE if the file was successfully loaded.
 */
gboolean
xml_reader_load_from_file (XmlReader    *reader,
                           const gchar  *filename,
                           GError      **error)
{
  XmlReaderPrivate *priv;
  GError *internal_error;
  gchar *buffer;
  gboolean retval;

  g_return_val_if_fail (XML_IS_READER (reader), FALSE);
  g_return_val_if_fail (filename != NULL, FALSE);

  priv = reader->priv;

  internal_error = NULL;
  if (!g_file_get_contents (filename, &buffer, NULL, &internal_error))
    {
      g_propagate_error (error, internal_error);
      return FALSE;
    }

  g_free (priv->filename);

  priv->is_filename = TRUE;
  priv->filename = g_strdup (filename);

  retval = xml_reader_load_from_data (reader, buffer, &internal_error);
  if (!retval)
    g_propagate_error (error, internal_error);

  g_free (buffer);

  return retval;
}
Ejemplo n.º 2
0
gboolean
ide_doap_load_from_data (IdeDoap       *self,
                         const gchar   *data,
                         gsize          length,
                         GError       **error)
{
  g_autoptr(XmlReader) reader = NULL;

  g_return_val_if_fail (IDE_IS_DOAP (self), FALSE);
  g_return_val_if_fail (data != NULL, FALSE);

  reader = xml_reader_new ();

  if (!xml_reader_load_from_data (reader, (const gchar *)data, length, NULL, NULL))
    return FALSE;

  return load_doap (self, reader, error);
}
Ejemplo n.º 3
0
static void
parse_opml (IrisTask *task,
            gpointer  user_data)
{
  MarinaGoogleReaderSource *google_source;
  XmlReader                *reader;
  GList                    *sources = NULL;
  MarinaSource             *source;
  gchar                    *id;
  GValue                    value = {0,};

  g_return_if_fail (MARINA_IS_GOOGLE_READER_SOURCE (user_data));
  
  google_source = MARINA_GOOGLE_READER_SOURCE (user_data);
  reader = xml_reader_new ();

  iris_task_get_result (task, &value);
  
  if (!xml_reader_load_from_data (reader,
                                  g_value_get_string (&value),
                                  -1, OPML_URI, NULL))
    goto cleanup;
  
  if (!xml_reader_read_start_element (reader, "opml"))
    // set error
    goto cleanup;
    
  if (!xml_reader_read_start_element (reader, "body"))
    // set error
    goto cleanup;
    
  while (xml_reader_read_start_element (reader, "outline"))
    {
      source = marina_soup_source_new ();
      id = g_strconcat (marina_source_get_id (MARINA_SOURCE (google_source)),
                        "+",
                        xml_reader_get_attribute (reader, "xmlUrl"),
                        NULL);
      MARINA_SOURCE_BASE (source)->id = g_strdup (id);
      g_object_set (source,
                    "title", xml_reader_get_attribute (reader, "title"),
                    "uri", xml_reader_get_attribute (reader, "xmlUrl"),
                    NULL);
      sources = g_list_prepend (sources, source);
      g_free (id);
    }
  
  sources = g_list_reverse (sources);
  
  if (!google_source->priv->children)
    {
      google_source->priv->children = sources;
      
      GList *iter;
      for (iter = sources; iter; iter = iter->next)
        {
          marina_source_child_added (MARINA_SOURCE (google_source), iter->data);
          marina_sync_source (iter->data);
        }
    }
  else
    {
      g_list_foreach (sources, (GFunc)g_object_unref, NULL);
      g_list_free (sources);
      sources = NULL;
      // set error
    }
  
  // update the unread counts
  marina_sources_stat (marina_sources_get_default ());
  
cleanup:
  g_object_unref (reader);
}