|
Packit |
f01ec2 |
/*
|
|
Packit |
f01ec2 |
* GNOME Online Miners - crawls through your online content
|
|
Packit |
f01ec2 |
* Copyright (c) 2011, 2012, 2013, 2014, 2015 Red Hat, Inc.
|
|
Packit |
f01ec2 |
*
|
|
Packit |
f01ec2 |
* This program is free software; you can redistribute it and/or
|
|
Packit |
f01ec2 |
* modify it under the terms of the GNU General Public License
|
|
Packit |
f01ec2 |
* as published by the Free Software Foundation; either version 2
|
|
Packit |
f01ec2 |
* of the License, or (at your option) any later version.
|
|
Packit |
f01ec2 |
*
|
|
Packit |
f01ec2 |
* This program is distributed in the hope that it will be useful,
|
|
Packit |
f01ec2 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
f01ec2 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
f01ec2 |
* GNU General Public License for more details.
|
|
Packit |
f01ec2 |
*
|
|
Packit |
f01ec2 |
* You should have received a copy of the GNU General Public License
|
|
Packit |
f01ec2 |
* along with this program; if not, write to the Free Software
|
|
Packit |
f01ec2 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
Packit |
f01ec2 |
* 02110-1301, USA.
|
|
Packit |
f01ec2 |
*
|
|
Packit |
f01ec2 |
* Author: Cosimo Cecchi <cosimoc@redhat.com>
|
|
Packit |
f01ec2 |
*
|
|
Packit |
f01ec2 |
*/
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
#include "config.h"
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
#include <gdata/gdata.h>
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
#include "gom-utils.h"
|
|
Packit |
f01ec2 |
#include "gom-gdata-miner.h"
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
#define MINER_IDENTIFIER "gd:gdata:miner:86ec9bc9-c242-427f-aa19-77b5a2c9b6f0"
|
|
Packit |
f01ec2 |
#define PARENT_LINK_REL "http://schemas.google.com/docs/2007#parent"
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* used by applications to identify the source of an entry */
|
|
Packit |
f01ec2 |
#define PREFIX_DRIVE "google:drive:"
|
|
Packit |
f01ec2 |
#define PREFIX_PICASAWEB "google:picasaweb:"
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static const guint MAX_RESULTS = 50;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
G_DEFINE_TYPE (GomGDataMiner, gom_gdata_miner, GOM_TYPE_MINER)
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static gchar *
|
|
Packit |
f01ec2 |
generate_fake_email_from_fullname (const gchar *fullname)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GChecksum *checksum;
|
|
Packit |
f01ec2 |
const gchar *digest;
|
|
Packit |
f01ec2 |
gchar *retval;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
checksum = g_checksum_new (G_CHECKSUM_MD5);
|
|
Packit |
f01ec2 |
g_checksum_update (checksum, fullname, -1);
|
|
Packit |
f01ec2 |
digest = g_checksum_get_string (checksum);
|
|
Packit |
f01ec2 |
retval = g_strdup (digest);
|
|
Packit |
f01ec2 |
g_checksum_free (checksum);
|
|
Packit |
f01ec2 |
return retval;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static gboolean
|
|
Packit |
f01ec2 |
account_miner_job_process_entry (TrackerSparqlConnection *connection,
|
|
Packit |
f01ec2 |
GHashTable *previous_resources,
|
|
Packit |
f01ec2 |
const gchar *datasource_urn,
|
|
Packit |
f01ec2 |
GDataDocumentsService *service,
|
|
Packit |
f01ec2 |
GDataDocumentsEntry *doc_entry,
|
|
Packit |
f01ec2 |
GCancellable *cancellable,
|
|
Packit |
f01ec2 |
GError **error)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataEntry *entry = GDATA_ENTRY (doc_entry);
|
|
Packit |
f01ec2 |
gchar *resource = NULL;
|
|
Packit |
f01ec2 |
gchar *date, *identifier;
|
|
Packit |
f01ec2 |
const gchar *class = NULL;
|
|
Packit |
f01ec2 |
const gchar *mimetype_override = NULL;
|
|
Packit |
f01ec2 |
gboolean mtime_changed, resource_exists;
|
|
Packit |
f01ec2 |
gint64 new_mtime;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
GList *authors, *l, *parents = NULL;
|
|
Packit |
f01ec2 |
GDataAuthor *author;
|
|
Packit |
f01ec2 |
GDataLink *parent;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
GDataLink *alternate;
|
|
Packit |
f01ec2 |
const gchar *alternate_uri;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
GList *categories;
|
|
Packit |
f01ec2 |
GDataCategory *category;
|
|
Packit |
f01ec2 |
gboolean starred = FALSE;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
GDataFeed *access_rules = NULL;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (GDATA_IS_DOCUMENTS_FOLDER (doc_entry))
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataLink *link;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
link = gdata_entry_look_up_link (entry, GDATA_LINK_SELF);
|
|
Packit |
f01ec2 |
identifier = g_strdup_printf ("gd:collection:%s%s", PREFIX_DRIVE, gdata_link_get_uri (link));
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
else
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
const gchar *id;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
id = gdata_entry_get_id (entry);
|
|
Packit |
f01ec2 |
identifier = g_strdup_printf ("%s%s", PREFIX_DRIVE, id);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* remove from the list of the previous resources, if any */
|
|
Packit |
f01ec2 |
if (previous_resources != NULL)
|
|
Packit |
f01ec2 |
g_hash_table_remove (previous_resources, identifier);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (GDATA_IS_DOCUMENTS_PRESENTATION (doc_entry))
|
|
Packit |
f01ec2 |
class = "nfo:Presentation";
|
|
Packit |
f01ec2 |
else if (GDATA_IS_DOCUMENTS_SPREADSHEET (doc_entry))
|
|
Packit |
f01ec2 |
class = "nfo:Spreadsheet";
|
|
Packit |
f01ec2 |
else if (GDATA_IS_DOCUMENTS_TEXT (doc_entry))
|
|
Packit |
f01ec2 |
class = "nfo:PaginatedTextDocument";
|
|
Packit |
f01ec2 |
else if (GDATA_IS_DOCUMENTS_DRAWING (doc_entry))
|
|
Packit |
f01ec2 |
class = "nfo:PaginatedTextDocument";
|
|
Packit |
f01ec2 |
else if (GDATA_IS_DOCUMENTS_PDF (doc_entry))
|
|
Packit |
f01ec2 |
class = "nfo:PaginatedTextDocument";
|
|
Packit |
f01ec2 |
else if (GDATA_IS_DOCUMENTS_FOLDER (doc_entry))
|
|
Packit |
f01ec2 |
class = "nfo:DataContainer";
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
resource = gom_tracker_sparql_connection_ensure_resource
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
&resource_exists,
|
|
Packit |
f01ec2 |
datasource_urn, identifier,
|
|
Packit |
f01ec2 |
"nfo:RemoteDataObject", class, NULL);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_update_datasource (connection, datasource_urn,
|
|
Packit |
f01ec2 |
resource_exists, identifier, resource,
|
|
Packit |
f01ec2 |
cancellable, error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
new_mtime = gdata_entry_get_updated (entry);
|
|
Packit |
f01ec2 |
mtime_changed = gom_tracker_update_mtime (connection, new_mtime,
|
|
Packit |
f01ec2 |
resource_exists, identifier, resource,
|
|
Packit |
f01ec2 |
cancellable, error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* avoid updating the DB if the entry already exists and has not
|
|
Packit |
f01ec2 |
* been modified since our last run.
|
|
Packit |
f01ec2 |
*/
|
|
Packit |
f01ec2 |
if (!mtime_changed)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* the resource changed - just set all the properties again */
|
|
Packit |
f01ec2 |
alternate = gdata_entry_look_up_link (entry, GDATA_LINK_ALTERNATE);
|
|
Packit |
f01ec2 |
alternate_uri = gdata_link_get_uri (alternate);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:url", alternate_uri);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* fake a drawing mimetype, so Documents can get the correct icon */
|
|
Packit |
f01ec2 |
if (GDATA_IS_DOCUMENTS_DRAWING (doc_entry))
|
|
Packit |
f01ec2 |
mimetype_override = "application/vnd.sun.xml.draw";
|
|
Packit |
f01ec2 |
else if (GDATA_IS_DOCUMENTS_PDF (doc_entry))
|
|
Packit |
f01ec2 |
mimetype_override = "application/pdf";
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:mimeType", mimetype_override);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
parents = gdata_entry_look_up_links (entry, PARENT_LINK_REL);
|
|
Packit |
f01ec2 |
for (l = parents; l != NULL; l = l->next)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
gchar *parent_resource_urn, *parent_resource_id;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
parent = l->data;
|
|
Packit |
f01ec2 |
parent_resource_id =
|
|
Packit |
f01ec2 |
g_strdup_printf ("gd:collection:%s%s", PREFIX_DRIVE, gdata_link_get_uri (parent));
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
parent_resource_urn = gom_tracker_sparql_connection_ensure_resource
|
|
Packit |
f01ec2 |
(connection, cancellable, error,
|
|
Packit |
f01ec2 |
NULL,
|
|
Packit |
f01ec2 |
datasource_urn, parent_resource_id,
|
|
Packit |
f01ec2 |
"nfo:RemoteDataObject", "nfo:DataContainer", NULL);
|
|
Packit |
f01ec2 |
g_free (parent_resource_id);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:isPartOf", parent_resource_urn);
|
|
Packit |
f01ec2 |
g_free (parent_resource_urn);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
categories = gdata_entry_get_categories (entry);
|
|
Packit |
f01ec2 |
for (l = categories; l != NULL; l = l->next)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
category = l->data;
|
|
Packit |
f01ec2 |
if (g_strcmp0 (gdata_category_get_term (category), GDATA_CATEGORY_SCHEMA_LABELS_STARRED) == 0)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
starred = TRUE;
|
|
Packit |
f01ec2 |
break;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_toggle_favorite
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
resource, starred);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:description", gdata_entry_get_summary (entry));
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:title", gdata_entry_get_title (entry));
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
authors = gdata_entry_get_authors (entry);
|
|
Packit |
f01ec2 |
for (l = authors; l != NULL; l = l->next)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
gchar *contact_resource;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
author = l->data;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
contact_resource = gom_tracker_utils_ensure_contact_resource (connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
gdata_author_get_email_address (author),
|
|
Packit |
f01ec2 |
gdata_author_get_name (author));
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nco:creator", contact_resource);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
g_free (contact_resource);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
access_rules = gdata_access_handler_get_rules (GDATA_ACCESS_HANDLER (entry),
|
|
Packit |
f01ec2 |
GDATA_SERVICE (service),
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
NULL, NULL, error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
for (l = gdata_feed_get_entries (access_rules); l != NULL; l = l->next)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataAccessRule *rule = l->data;
|
|
Packit |
f01ec2 |
const gchar *scope_type;
|
|
Packit |
f01ec2 |
const gchar *scope_value;
|
|
Packit |
f01ec2 |
gchar *contact_resource;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gdata_access_rule_get_scope (rule, &scope_type, &scope_value);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* default scope access means the document is completely public */
|
|
Packit |
f01ec2 |
if (g_strcmp0 (scope_type, GDATA_ACCESS_SCOPE_DEFAULT) == 0)
|
|
Packit |
f01ec2 |
continue;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* skip domain scopes */
|
|
Packit |
f01ec2 |
if (g_strcmp0 (scope_type, GDATA_ACCESS_SCOPE_DOMAIN) == 0)
|
|
Packit |
f01ec2 |
continue;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
contact_resource = gom_tracker_utils_ensure_contact_resource (connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
scope_value,
|
|
Packit |
f01ec2 |
"");
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nco:contributor", contact_resource);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
g_free (contact_resource);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
date = gom_iso8601_from_timestamp (gdata_entry_get_published (entry));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:contentCreated", date);
|
|
Packit |
f01ec2 |
g_free (date);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
out:
|
|
Packit |
f01ec2 |
g_clear_object (&access_rules);
|
|
Packit |
f01ec2 |
g_free (resource);
|
|
Packit |
f01ec2 |
g_free (identifier);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
g_list_free (parents);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
return FALSE;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
return TRUE;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static gchar *
|
|
Packit |
f01ec2 |
account_miner_job_process_photo (TrackerSparqlConnection *connection,
|
|
Packit |
f01ec2 |
GHashTable *previous_resources,
|
|
Packit |
f01ec2 |
const gchar *datasource_urn,
|
|
Packit |
f01ec2 |
GDataPicasaWebFile *photo,
|
|
Packit |
f01ec2 |
const gchar *parent_resource_urn,
|
|
Packit |
f01ec2 |
GCancellable *cancellable,
|
|
Packit |
f01ec2 |
GError **error)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GList *l, *media_contents;
|
|
Packit |
f01ec2 |
gchar *resource = NULL, *equipment_resource = NULL;
|
|
Packit |
f01ec2 |
gchar *contact_resource, *date, *identifier = NULL;
|
|
Packit |
f01ec2 |
gboolean resource_exists, mtime_changed;
|
|
Packit |
f01ec2 |
gint64 new_mtime;
|
|
Packit |
f01ec2 |
gint64 timestamp;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
const gchar *flash_off = "http://www.tracker-project.org/temp/nmm#flash-off";
|
|
Packit |
f01ec2 |
const gchar *flash_on = "http://www.tracker-project.org/temp/nmm#flash-on";
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gboolean flash;
|
|
Packit |
f01ec2 |
const gchar *credit;
|
|
Packit |
f01ec2 |
const gchar *id;
|
|
Packit |
f01ec2 |
const gchar *make;
|
|
Packit |
f01ec2 |
const gchar *model;
|
|
Packit |
f01ec2 |
const gchar *title;
|
|
Packit |
f01ec2 |
const gchar *summary;
|
|
Packit |
f01ec2 |
const gchar *mime;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gchar *email;
|
|
Packit |
f01ec2 |
gchar *exposure;
|
|
Packit |
f01ec2 |
gchar *focal_length;
|
|
Packit |
f01ec2 |
gchar *fstop;
|
|
Packit |
f01ec2 |
gchar *iso;
|
|
Packit |
f01ec2 |
gchar *width;
|
|
Packit |
f01ec2 |
gchar *height;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
GDataLink *alternate;
|
|
Packit |
f01ec2 |
const gchar *alternate_uri;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
id = gdata_entry_get_id (GDATA_ENTRY (photo));
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
media_contents = gdata_picasaweb_file_get_contents (photo);
|
|
Packit |
f01ec2 |
for (l = media_contents; l != NULL; l = l->next)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataMediaContent *media_content = GDATA_MEDIA_CONTENT (l->data);
|
|
Packit |
f01ec2 |
GDataMediaMedium medium;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
medium = gdata_media_content_get_medium (media_content);
|
|
Packit |
f01ec2 |
if (medium != GDATA_MEDIA_IMAGE)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
g_debug ("Skipping %s because medium(%d) is not an image", id, medium);
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
identifier = g_strdup_printf ("%s%s", PREFIX_PICASAWEB, id);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* remove from the list of the previous resources, if any */
|
|
Packit |
f01ec2 |
if (previous_resources != NULL)
|
|
Packit |
f01ec2 |
g_hash_table_remove (previous_resources, identifier);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
resource = gom_tracker_sparql_connection_ensure_resource
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
&resource_exists,
|
|
Packit |
f01ec2 |
datasource_urn, identifier,
|
|
Packit |
f01ec2 |
"nfo:RemoteDataObject", "nmm:Photo", NULL);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_update_datasource (connection, datasource_urn,
|
|
Packit |
f01ec2 |
resource_exists, identifier, resource,
|
|
Packit |
f01ec2 |
cancellable, error);
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* Check updated time to avoid updating the DB if it has not
|
|
Packit |
f01ec2 |
* been modified since our last run
|
|
Packit |
f01ec2 |
*/
|
|
Packit |
f01ec2 |
new_mtime = gdata_entry_get_updated (GDATA_ENTRY (photo));
|
|
Packit |
f01ec2 |
mtime_changed = gom_tracker_update_mtime (connection, new_mtime,
|
|
Packit |
f01ec2 |
resource_exists, identifier, resource,
|
|
Packit |
f01ec2 |
cancellable, error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* avoid updating the DB if the resource already exists and has not
|
|
Packit |
f01ec2 |
* been modified since our last run.
|
|
Packit |
f01ec2 |
*/
|
|
Packit |
f01ec2 |
if (!mtime_changed)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* the resource changed - just set all the properties again */
|
|
Packit |
f01ec2 |
alternate = gdata_entry_look_up_link (GDATA_ENTRY (photo), GDATA_LINK_ALTERNATE);
|
|
Packit |
f01ec2 |
alternate_uri = gdata_link_get_uri (alternate);
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:url", alternate_uri);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
summary = gdata_entry_get_summary ((GDATA_ENTRY (photo)));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:description", summary);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (parent_resource_urn != NULL)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:isPartOf", parent_resource_urn);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
mime = gdata_media_content_get_content_type (GDATA_MEDIA_CONTENT (media_contents->data));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:mimeType", mime);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
title = gdata_entry_get_title ((GDATA_ENTRY (photo)));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:title", title);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
credit = gdata_picasaweb_file_get_credit (photo);
|
|
Packit |
f01ec2 |
email = generate_fake_email_from_fullname (credit);
|
|
Packit |
f01ec2 |
contact_resource = gom_tracker_utils_ensure_contact_resource
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
email, credit);
|
|
Packit |
f01ec2 |
g_free (email);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nco:creator", contact_resource);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
g_free (contact_resource);
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
exposure = g_strdup_printf ("%f", gdata_picasaweb_file_get_exposure (photo));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nmm:exposureTime", exposure);
|
|
Packit |
f01ec2 |
g_free (exposure);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
focal_length = g_strdup_printf ("%f", gdata_picasaweb_file_get_focal_length (photo));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nmm:focalLength", focal_length);
|
|
Packit |
f01ec2 |
g_free (focal_length);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
fstop = g_strdup_printf ("%f", gdata_picasaweb_file_get_fstop (photo));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nmm:fnumber", fstop);
|
|
Packit |
f01ec2 |
g_free (fstop);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
iso = g_strdup_printf ("%ld", (glong) gdata_picasaweb_file_get_iso (photo));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nmm:isoSpeed", iso);
|
|
Packit |
f01ec2 |
g_free (iso);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
flash = gdata_picasaweb_file_get_flash (photo);
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nmm:flash", flash ? flash_on : flash_off);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
make = gdata_picasaweb_file_get_make (photo);
|
|
Packit |
f01ec2 |
model = gdata_picasaweb_file_get_model (photo);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (make != NULL || model != NULL)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
equipment_resource = gom_tracker_utils_ensure_equipment_resource (connection,
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
error,
|
|
Packit |
f01ec2 |
make,
|
|
Packit |
f01ec2 |
model);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nfo:equipment", equipment_resource);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
width = g_strdup_printf ("%u", gdata_picasaweb_file_get_width (photo));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nfo:width", width);
|
|
Packit |
f01ec2 |
g_free (width);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
height = g_strdup_printf ("%u", gdata_picasaweb_file_get_height (photo));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nfo:height", height);
|
|
Packit |
f01ec2 |
g_free (height);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
timestamp = gdata_picasaweb_file_get_timestamp (photo);
|
|
Packit |
f01ec2 |
date = gom_iso8601_from_timestamp (timestamp / 1000);
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:contentCreated", date);
|
|
Packit |
f01ec2 |
g_free (date);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
out:
|
|
Packit |
f01ec2 |
g_free (identifier);
|
|
Packit |
f01ec2 |
g_free (equipment_resource);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
return NULL;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
return resource;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static gboolean
|
|
Packit |
f01ec2 |
account_miner_job_process_album (TrackerSparqlConnection *connection,
|
|
Packit |
f01ec2 |
GHashTable *previous_resources,
|
|
Packit |
f01ec2 |
const gchar *datasource_urn,
|
|
Packit |
f01ec2 |
GDataPicasaWebService *service,
|
|
Packit |
f01ec2 |
GDataPicasaWebAlbum *album,
|
|
Packit |
f01ec2 |
GCancellable *cancellable,
|
|
Packit |
f01ec2 |
GError **error)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataFeed *feed = NULL;
|
|
Packit |
f01ec2 |
GDataPicasaWebQuery *query;
|
|
Packit |
f01ec2 |
gchar *resource = NULL;
|
|
Packit |
f01ec2 |
gchar *contact_resource, *date, *identifier;
|
|
Packit |
f01ec2 |
gchar *email;
|
|
Packit |
f01ec2 |
gboolean resource_exists, mtime_changed;
|
|
Packit |
f01ec2 |
gint64 new_mtime;
|
|
Packit |
f01ec2 |
gint64 timestamp;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
const gchar *album_id;
|
|
Packit |
f01ec2 |
const gchar *nickname;
|
|
Packit |
f01ec2 |
const gchar *title;
|
|
Packit |
f01ec2 |
const gchar *summary;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
GList *l, *photos = NULL;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
GDataLink *alternate;
|
|
Packit |
f01ec2 |
const gchar *alternate_uri;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
album_id = gdata_entry_get_id (GDATA_ENTRY (album));
|
|
Packit |
f01ec2 |
identifier = g_strdup_printf ("photos:collection:%s%s", PREFIX_PICASAWEB, album_id);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* remove from the list of the previous resources, if any */
|
|
Packit |
f01ec2 |
if (previous_resources != NULL)
|
|
Packit |
f01ec2 |
g_hash_table_remove (previous_resources, identifier);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
resource = gom_tracker_sparql_connection_ensure_resource
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
&resource_exists,
|
|
Packit |
f01ec2 |
datasource_urn, identifier,
|
|
Packit |
f01ec2 |
"nfo:RemoteDataObject", "nfo:DataContainer",
|
|
Packit |
f01ec2 |
NULL);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_update_datasource
|
|
Packit |
f01ec2 |
(connection, datasource_urn,
|
|
Packit |
f01ec2 |
resource_exists, identifier, resource,
|
|
Packit |
f01ec2 |
cancellable, error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* Check updated time to avoid updating the DB if it has not
|
|
Packit |
f01ec2 |
* been modified since our last run
|
|
Packit |
f01ec2 |
*/
|
|
Packit |
f01ec2 |
new_mtime = gdata_entry_get_updated (GDATA_ENTRY (album));
|
|
Packit |
f01ec2 |
mtime_changed = gom_tracker_update_mtime (connection, new_mtime,
|
|
Packit |
f01ec2 |
resource_exists, identifier, resource,
|
|
Packit |
f01ec2 |
cancellable, error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* avoid updating the DB if the resource already exists and has not
|
|
Packit |
f01ec2 |
* been modified since our last run.
|
|
Packit |
f01ec2 |
*/
|
|
Packit |
f01ec2 |
if (!mtime_changed)
|
|
Packit |
f01ec2 |
goto album_photos;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* the resource changed - just set all the properties again */
|
|
Packit |
f01ec2 |
alternate = gdata_entry_look_up_link (GDATA_ENTRY (album), GDATA_LINK_ALTERNATE);
|
|
Packit |
f01ec2 |
alternate_uri = gdata_link_get_uri (alternate);
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:url", alternate_uri);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
summary = gdata_entry_get_summary ((GDATA_ENTRY (album)));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:description", summary);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
title = gdata_entry_get_title ((GDATA_ENTRY (album)));
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:title", title);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
nickname = gdata_picasaweb_album_get_nickname (album);
|
|
Packit |
f01ec2 |
email = generate_fake_email_from_fullname (nickname);
|
|
Packit |
f01ec2 |
contact_resource = gom_tracker_utils_ensure_contact_resource
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
email, nickname);
|
|
Packit |
f01ec2 |
g_free (email);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nco:creator", contact_resource);
|
|
Packit |
f01ec2 |
g_free (contact_resource);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
timestamp = gdata_picasaweb_album_get_timestamp (album);
|
|
Packit |
f01ec2 |
date = gom_iso8601_from_timestamp (timestamp / 1000);
|
|
Packit |
f01ec2 |
gom_tracker_sparql_connection_insert_or_replace_triple
|
|
Packit |
f01ec2 |
(connection,
|
|
Packit |
f01ec2 |
cancellable, error,
|
|
Packit |
f01ec2 |
datasource_urn, resource,
|
|
Packit |
f01ec2 |
"nie:contentCreated", date);
|
|
Packit |
f01ec2 |
g_free (date);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
album_photos:
|
|
Packit |
f01ec2 |
query = gdata_picasaweb_query_new (NULL);
|
|
Packit |
f01ec2 |
gdata_picasaweb_query_set_image_size (query, "d");
|
|
Packit |
f01ec2 |
feed = gdata_picasaweb_service_query_files (service, album, GDATA_QUERY (query),
|
|
Packit |
f01ec2 |
cancellable, NULL, NULL, error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
g_object_unref (query);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (feed == NULL)
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
photos = gdata_feed_get_entries (feed);
|
|
Packit |
f01ec2 |
for (l = photos; l != NULL; l = l->next)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataPicasaWebFile *file = GDATA_PICASAWEB_FILE (l->data);
|
|
Packit |
f01ec2 |
gchar *photo_resource_urn = NULL;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
photo_resource_urn = account_miner_job_process_photo (connection,
|
|
Packit |
f01ec2 |
previous_resources,
|
|
Packit |
f01ec2 |
datasource_urn,
|
|
Packit |
f01ec2 |
file,
|
|
Packit |
f01ec2 |
resource,
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
const gchar *photo_id;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
photo_id = gdata_picasaweb_file_get_id (file);
|
|
Packit |
f01ec2 |
g_warning ("Unable to process photo %s: %s", photo_id, (*error)->message);
|
|
Packit |
f01ec2 |
g_clear_error (error);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
g_free (photo_resource_urn);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
out:
|
|
Packit |
f01ec2 |
g_clear_object (&feed);
|
|
Packit |
f01ec2 |
g_free (resource);
|
|
Packit |
f01ec2 |
g_free (identifier);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
return FALSE;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
return TRUE;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static void
|
|
Packit |
f01ec2 |
insert_shared_content_photos (TrackerSparqlConnection *connection,
|
|
Packit |
f01ec2 |
const gchar *datasource_urn,
|
|
Packit |
f01ec2 |
const gchar *shared_id,
|
|
Packit |
f01ec2 |
const gchar *source_urn,
|
|
Packit |
f01ec2 |
GDataPicasaWebService *service,
|
|
Packit |
f01ec2 |
GCancellable *cancellable,
|
|
Packit |
f01ec2 |
GError **error)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GError *local_error;
|
|
Packit |
f01ec2 |
GDataAuthorizationDomain *authorization_domain;
|
|
Packit |
f01ec2 |
GDataEntry *entry = NULL;
|
|
Packit |
f01ec2 |
GDataPicasaWebFile *file;
|
|
Packit |
f01ec2 |
GDataPicasaWebQuery *query = NULL;
|
|
Packit |
f01ec2 |
gchar *photo_resource_urn = NULL;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
authorization_domain = gdata_picasaweb_service_get_primary_authorization_domain ();
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
query = gdata_picasaweb_query_new (NULL);
|
|
Packit |
f01ec2 |
gdata_picasaweb_query_set_image_size (query, "d");
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
local_error = NULL;
|
|
Packit |
f01ec2 |
entry = gdata_service_query_single_entry (GDATA_SERVICE (service),
|
|
Packit |
f01ec2 |
authorization_domain,
|
|
Packit |
f01ec2 |
shared_id,
|
|
Packit |
f01ec2 |
GDATA_QUERY (query),
|
|
Packit |
f01ec2 |
GDATA_TYPE_PICASAWEB_FILE,
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
&local_error);
|
|
Packit |
f01ec2 |
if (local_error != NULL)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
g_propagate_error (error, local_error);
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
file = GDATA_PICASAWEB_FILE (entry);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
local_error = NULL;
|
|
Packit |
f01ec2 |
photo_resource_urn = account_miner_job_process_photo (connection,
|
|
Packit |
f01ec2 |
NULL,
|
|
Packit |
f01ec2 |
datasource_urn,
|
|
Packit |
f01ec2 |
file,
|
|
Packit |
f01ec2 |
NULL,
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
&local_error);
|
|
Packit |
f01ec2 |
if (local_error != NULL)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
g_propagate_error (error, local_error);
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
local_error = NULL;
|
|
Packit |
f01ec2 |
if (!gom_tracker_sparql_connection_insert_or_replace_triple (connection,
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
&local_error,
|
|
Packit |
f01ec2 |
datasource_urn,
|
|
Packit |
f01ec2 |
source_urn,
|
|
Packit |
f01ec2 |
"nie:relatedTo",
|
|
Packit |
f01ec2 |
photo_resource_urn))
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
g_propagate_error (error, local_error);
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
local_error = NULL;
|
|
Packit |
f01ec2 |
if (!gom_tracker_sparql_connection_insert_or_replace_triple (connection,
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
&local_error,
|
|
Packit |
f01ec2 |
datasource_urn,
|
|
Packit |
f01ec2 |
photo_resource_urn,
|
|
Packit |
f01ec2 |
"nie:links",
|
|
Packit |
f01ec2 |
source_urn))
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
g_propagate_error (error, local_error);
|
|
Packit |
f01ec2 |
goto out;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
out:
|
|
Packit |
f01ec2 |
g_clear_object (&entry);
|
|
Packit |
f01ec2 |
g_clear_object (&query);
|
|
Packit |
f01ec2 |
g_free (photo_resource_urn);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static void
|
|
Packit |
f01ec2 |
insert_shared_content (GomMiner *miner,
|
|
Packit |
f01ec2 |
gpointer service,
|
|
Packit |
f01ec2 |
TrackerSparqlConnection *connection,
|
|
Packit |
f01ec2 |
const gchar *datasource_urn,
|
|
Packit |
f01ec2 |
const gchar *shared_id,
|
|
Packit |
f01ec2 |
const gchar *shared_type,
|
|
Packit |
f01ec2 |
const gchar *source_urn,
|
|
Packit |
f01ec2 |
GCancellable *cancellable,
|
|
Packit |
f01ec2 |
GError **error)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
if (g_strcmp0 (shared_type, "photos") == 0)
|
|
Packit |
f01ec2 |
insert_shared_content_photos (connection,
|
|
Packit |
f01ec2 |
datasource_urn,
|
|
Packit |
f01ec2 |
shared_id,
|
|
Packit |
f01ec2 |
source_urn,
|
|
Packit |
f01ec2 |
GDATA_PICASAWEB_SERVICE (service),
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
error);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static void
|
|
Packit |
f01ec2 |
query_gdata_documents (GomAccountMinerJob *job,
|
|
Packit |
f01ec2 |
TrackerSparqlConnection *connection,
|
|
Packit |
f01ec2 |
GHashTable *previous_resources,
|
|
Packit |
f01ec2 |
const gchar *datasource_urn,
|
|
Packit |
f01ec2 |
GDataDocumentsService *service,
|
|
Packit |
f01ec2 |
GCancellable *cancellable,
|
|
Packit |
f01ec2 |
GError **error)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataDocumentsQuery *query = NULL;
|
|
Packit |
f01ec2 |
GDataDocumentsFeed *feed = NULL;
|
|
Packit |
f01ec2 |
GList *entries, *l;
|
|
Packit |
f01ec2 |
gboolean succeeded_once = FALSE;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
query = gdata_documents_query_new_with_limits (NULL, 1, MAX_RESULTS);
|
|
Packit |
f01ec2 |
gdata_documents_query_set_show_folders (query, TRUE);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
while (TRUE)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GError *local_error;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
local_error = NULL;
|
|
Packit |
f01ec2 |
feed = gdata_documents_service_query_documents
|
|
Packit |
f01ec2 |
(service, query,
|
|
Packit |
f01ec2 |
cancellable, NULL, NULL, &local_error);
|
|
Packit |
f01ec2 |
if (local_error != NULL)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
if (succeeded_once)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
g_warning ("Unable to query: %s", local_error->message);
|
|
Packit |
f01ec2 |
g_error_free (local_error);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
else
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
g_propagate_error (error, local_error);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
break;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
succeeded_once = TRUE;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
entries = gdata_feed_get_entries (GDATA_FEED (feed));
|
|
Packit |
f01ec2 |
if (entries == NULL)
|
|
Packit |
f01ec2 |
break;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
for (l = entries; l != NULL; l = l->next)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
local_error = NULL;
|
|
Packit |
f01ec2 |
account_miner_job_process_entry (connection,
|
|
Packit |
f01ec2 |
previous_resources,
|
|
Packit |
f01ec2 |
datasource_urn,
|
|
Packit |
f01ec2 |
service,
|
|
Packit |
f01ec2 |
l->data,
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
&local_error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (local_error != NULL)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
g_warning ("Unable to process entry %p: %s", l->data, local_error->message);
|
|
Packit |
f01ec2 |
g_error_free (local_error);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
gdata_query_next_page (GDATA_QUERY (query));
|
|
Packit |
f01ec2 |
g_clear_object (&feed);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
out:
|
|
Packit |
f01ec2 |
g_clear_object (&feed);
|
|
Packit |
f01ec2 |
g_clear_object (&query);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static void
|
|
Packit |
f01ec2 |
query_gdata_photos (GomAccountMinerJob *job,
|
|
Packit |
f01ec2 |
TrackerSparqlConnection *connection,
|
|
Packit |
f01ec2 |
GHashTable *previous_resources,
|
|
Packit |
f01ec2 |
const gchar *datasource_urn,
|
|
Packit |
f01ec2 |
GDataPicasaWebService *service,
|
|
Packit |
f01ec2 |
GCancellable *cancellable,
|
|
Packit |
f01ec2 |
GError **error)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataFeed *feed;
|
|
Packit |
f01ec2 |
GList *albums, *l;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
feed = gdata_picasaweb_service_query_all_albums (service, NULL, NULL, cancellable, NULL, NULL, error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (feed == NULL)
|
|
Packit |
f01ec2 |
return;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
albums = gdata_feed_get_entries (feed);
|
|
Packit |
f01ec2 |
for (l = albums; l != NULL; l = l->next)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataPicasaWebAlbum *album = GDATA_PICASAWEB_ALBUM (l->data);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
account_miner_job_process_album (connection,
|
|
Packit |
f01ec2 |
previous_resources,
|
|
Packit |
f01ec2 |
datasource_urn,
|
|
Packit |
f01ec2 |
service,
|
|
Packit |
f01ec2 |
album,
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (*error != NULL)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
const gchar *album_id;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
album_id = gdata_picasaweb_album_get_id (album);
|
|
Packit |
f01ec2 |
g_warning ("Unable to process album %s: %s", album_id, (*error)->message);
|
|
Packit |
f01ec2 |
g_clear_error (error);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
g_object_unref (feed);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static void
|
|
Packit |
f01ec2 |
query_gdata (GomAccountMinerJob *job,
|
|
Packit |
f01ec2 |
TrackerSparqlConnection *connection,
|
|
Packit |
f01ec2 |
GHashTable *previous_resources,
|
|
Packit |
f01ec2 |
const gchar *datasource_urn,
|
|
Packit |
f01ec2 |
GCancellable *cancellable,
|
|
Packit |
f01ec2 |
GError **error)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
gpointer service;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
service = g_hash_table_lookup (job->services, "documents");
|
|
Packit |
f01ec2 |
if (service != NULL)
|
|
Packit |
f01ec2 |
query_gdata_documents (job,
|
|
Packit |
f01ec2 |
connection,
|
|
Packit |
f01ec2 |
previous_resources,
|
|
Packit |
f01ec2 |
datasource_urn,
|
|
Packit |
f01ec2 |
GDATA_DOCUMENTS_SERVICE (service),
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
error);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
service = g_hash_table_lookup (job->services, "photos");
|
|
Packit |
f01ec2 |
if (service != NULL)
|
|
Packit |
f01ec2 |
query_gdata_photos (job,
|
|
Packit |
f01ec2 |
connection,
|
|
Packit |
f01ec2 |
previous_resources,
|
|
Packit |
f01ec2 |
datasource_urn,
|
|
Packit |
f01ec2 |
GDATA_PICASAWEB_SERVICE (service),
|
|
Packit |
f01ec2 |
cancellable,
|
|
Packit |
f01ec2 |
error);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static gpointer
|
|
Packit |
f01ec2 |
create_service (GomMiner *miner, GoaObject *object, const gchar *type)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataGoaAuthorizer *authorizer;
|
|
Packit |
f01ec2 |
gpointer service = NULL;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
authorizer = gdata_goa_authorizer_new (object);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (g_strcmp0 (type, "documents") == 0)
|
|
Packit |
f01ec2 |
service = gdata_documents_service_new (GDATA_AUTHORIZER (authorizer));
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (g_strcmp0 (type, "photos") == 0)
|
|
Packit |
f01ec2 |
service = gdata_picasaweb_service_new (GDATA_AUTHORIZER (authorizer));
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
g_object_unref (authorizer);
|
|
Packit |
f01ec2 |
return service;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static GHashTable *
|
|
Packit |
f01ec2 |
create_services (GomMiner *self,
|
|
Packit |
f01ec2 |
GoaObject *object)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataGoaAuthorizer *authorizer;
|
|
Packit |
f01ec2 |
GHashTable *services;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
services = g_hash_table_new_full (g_str_hash, g_str_equal,
|
|
Packit |
f01ec2 |
NULL, (GDestroyNotify) g_object_unref);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
authorizer = gdata_goa_authorizer_new (object);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (gom_miner_supports_type (self, "documents") && goa_object_peek_documents (object) != NULL)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataDocumentsService *service;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
service = gdata_documents_service_new (GDATA_AUTHORIZER (authorizer));
|
|
Packit |
f01ec2 |
g_hash_table_insert (services, "documents", service);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
if (gom_miner_supports_type (self, "photos") && goa_object_peek_photos (object) != NULL)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GDataPicasaWebService *service;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
service = gdata_picasaweb_service_new (GDATA_AUTHORIZER (authorizer));
|
|
Packit |
f01ec2 |
g_hash_table_insert (services, "photos", service);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
/* the service takes ownership of the authorizer */
|
|
Packit |
f01ec2 |
g_object_unref (authorizer);
|
|
Packit |
f01ec2 |
return services;
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static void
|
|
Packit |
f01ec2 |
destroy_service (GomMiner *miner, gpointer service)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
g_object_unref (service);
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static void
|
|
Packit |
f01ec2 |
gom_gdata_miner_init (GomGDataMiner *miner)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
}
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
static void
|
|
Packit |
f01ec2 |
gom_gdata_miner_class_init (GomGDataMinerClass *klass)
|
|
Packit |
f01ec2 |
{
|
|
Packit |
f01ec2 |
GomMinerClass *miner_class = GOM_MINER_CLASS (klass);
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
miner_class->goa_provider_type = "google";
|
|
Packit |
f01ec2 |
miner_class->miner_identifier = MINER_IDENTIFIER;
|
|
Packit |
f01ec2 |
miner_class->version = 5;
|
|
Packit |
f01ec2 |
|
|
Packit |
f01ec2 |
miner_class->create_service = create_service;
|
|
Packit |
f01ec2 |
miner_class->create_services = create_services;
|
|
Packit |
f01ec2 |
miner_class->destroy_service = destroy_service;
|
|
Packit |
f01ec2 |
miner_class->insert_shared_content = insert_shared_content;
|
|
Packit |
f01ec2 |
miner_class->query = query_gdata;
|
|
Packit |
f01ec2 |
}
|