[epiphany/wip/sync: 83/83] synchronizable-manager: Make _merge_remotes() return a GList
- From: Gabriel Ivașcu <gabrielivascu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany/wip/sync: 83/83] synchronizable-manager: Make _merge_remotes() return a GList
- Date: Mon, 3 Apr 2017 13:14:55 +0000 (UTC)
commit 5f100bd88efd0623b6b0b1a90c5ce83f1394e1a9
Author: Gabriel Ivascu <ivascu gabriel59 gmail com>
Date: Mon Apr 3 16:01:39 2017 +0300
synchronizable-manager: Make _merge_remotes() return a GList
Also, let the sync service destroy the content of the lists passed to
ephy_synchronizable_manager_merge_remotes().
src/bookmarks/ephy-bookmarks-manager.c | 40 +++++++++-----------
src/sync/ephy-sync-service.c | 12 +++---
src/sync/ephy-synchronizable-manager.c | 21 +++++-----
src/sync/ephy-synchronizable-manager.h | 66 +++++++++++++++----------------
4 files changed, 66 insertions(+), 73 deletions(-)
---
diff --git a/src/bookmarks/ephy-bookmarks-manager.c b/src/bookmarks/ephy-bookmarks-manager.c
index 803e1fc..61d0a15 100644
--- a/src/bookmarks/ephy-bookmarks-manager.c
+++ b/src/bookmarks/ephy-bookmarks-manager.c
@@ -307,12 +307,11 @@ synchronizable_manager_remove (EphySynchronizableManager *manager,
ephy_bookmarks_manager_remove_bookmark (self, bookmark);
}
-static void
-synchronizable_manager_merge_remotes (EphySynchronizableManager *manager,
- gboolean is_initial,
- GList *remotes_deleted,
- GList *remotes_updated,
- GList **to_upload)
+static GList *
+synchronizable_manager_merge_remotes (EphySynchronizableManager *manager,
+ gboolean is_initial,
+ GList *remotes_deleted,
+ GList *remotes_updated)
{
EphyBookmarksManager *self;
EphyBookmark *remote;
@@ -320,6 +319,7 @@ synchronizable_manager_merge_remotes (EphySynchronizableManager *manager,
GSequence *bookmarks;
GSequenceIter *iter;
GHashTable *handled;
+ GList *to_upload = NULL;
char *type;
char *parent_id;
const char *id;
@@ -335,17 +335,13 @@ synchronizable_manager_merge_remotes (EphySynchronizableManager *manager,
remote = EPHY_BOOKMARK (l->data);
id = ephy_bookmark_get_id (remote);
local = ephy_bookmarks_manager_get_bookmark_by_id (self, id);
-
- if (!local) {
- g_object_unref (remote);
- continue;
- }
-
- if (ephy_bookmark_get_modification_time (local) > ephy_bookmark_get_modification_time (remote)) {
- *to_upload = g_list_prepend (*to_upload, local);
- g_hash_table_add (handled, (char *)id);
- } else {
- ephy_bookmarks_manager_remove_bookmark (self, local);
+ if (local) {
+ if (ephy_bookmark_get_modification_time (local) > ephy_bookmark_get_modification_time (remote)) {
+ to_upload = g_list_prepend (to_upload, local);
+ g_hash_table_add (handled, (char *)id);
+ } else {
+ ephy_bookmarks_manager_remove_bookmark (self, local);
+ }
}
}
@@ -377,10 +373,10 @@ handle_updated:
ephy_bookmarks_manager_create_tags_from_bookmark (self, remote);
} else if (ephy_bookmark_get_modification_time (local) > ephy_bookmark_get_modification_time (remote))
{
ephy_bookmarks_manager_create_tags_from_bookmark (self, remote);
- *to_upload = g_list_prepend (*to_upload, local);
+ to_upload = g_list_prepend (to_upload, local);
} else {
if (ephy_bookmark_get_modification_time (local) > ephy_bookmark_get_modification_time (remote))
- *to_upload = g_list_prepend (*to_upload, local);
+ to_upload = g_list_prepend (to_upload, local);
g_hash_table_add (handled, local);
}
}
@@ -389,7 +385,6 @@ handle_updated:
next:
g_free (type);
g_free (parent_id);
- g_object_unref (remote);
}
/* Upload unhandled bookmarks to server. */
@@ -401,7 +396,7 @@ next:
id = ephy_bookmark_get_id (local);
if (!g_hash_table_contains (handled, id)) {
if (is_initial || (!is_initial && !ephy_bookmark_is_uploaded (local)))
- *to_upload = g_list_prepend (*to_upload, local);
+ to_upload = g_list_prepend (to_upload, local);
}
}
@@ -409,8 +404,9 @@ next:
ephy_bookmarks_manager_save_to_file_async (self, NULL,
(GAsyncReadyCallback)ephy_bookmarks_manager_save_to_file_warn_on_error_cb,
NULL);
+ g_hash_table_destroy (handled);
- g_hash_table_unref (handled);
+ return to_upload;
}
static void
diff --git a/src/sync/ephy-sync-service.c b/src/sync/ephy-sync-service.c
index 20c7407..f1bc3d4 100644
--- a/src/sync/ephy-sync-service.c
+++ b/src/sync/ephy-sync-service.c
@@ -1428,7 +1428,7 @@ sync_collection_cb (SoupSession *session,
GError *error = NULL;
GList *remotes_updated = NULL;
GList *remotes_deleted = NULL;
- GList *to_upload = NULL;
+ GList *to_upload;
GType type;
const char *collection;
const char *timestamp;
@@ -1485,8 +1485,8 @@ sync_collection_cb (SoupSession *session,
}
merge_remotes:
- ephy_synchronizable_manager_merge_remotes (data->manager, data->is_initial,
- remotes_deleted, remotes_updated, &to_upload);
+ to_upload = ephy_synchronizable_manager_merge_remotes (data->manager, data->is_initial,
+ remotes_deleted, remotes_updated);
if (to_upload) {
LOG ("Uploading local objects to server...");
@@ -1501,9 +1501,9 @@ merge_remotes:
timestamp = soup_message_headers_get_one (msg->response_headers, "X-Weave-Timestamp");
ephy_synchronizable_manager_set_sync_time (data->manager, g_ascii_strtod (timestamp, NULL));
- g_list_free (to_upload);
- g_list_free (remotes_updated);
- g_list_free (remotes_deleted);
+ g_list_free_full (to_upload, g_object_unref);
+ g_list_free_full (remotes_updated, g_object_unref);
+ g_list_free_full (remotes_deleted, g_object_unref);
free_parser:
if (parser)
g_object_unref (parser);
diff --git a/src/sync/ephy-synchronizable-manager.c b/src/sync/ephy-synchronizable-manager.c
index f110587..a114359 100644
--- a/src/sync/ephy-synchronizable-manager.c
+++ b/src/sync/ephy-synchronizable-manager.c
@@ -203,24 +203,23 @@ ephy_synchronizable_manager_remove (EphySynchronizableManager *manager,
* objects that were removed remotely from the server.
* @remotes_updated: (transfer none): a #GList holding the #EphySynchronizable
* objects that were updated remotely on the server.
- * @to_upload: (transfer full): an address of a #GList where to put the
- * #EphySynchronizable objects that need to be re-uploaded to server.
*
* Merges a list of remote-deleted objects and a list of remote-updated objects
* with the local objects in @manager's collection.
+ *
+ * Return value: (transfer full): a #GList holding the #EphySynchronizable
+ * objects that need to be re-uploaded to server.
**/
-void
-ephy_synchronizable_manager_merge_remotes (EphySynchronizableManager *manager,
- gboolean is_initial,
- GList *remotes_deleted,
- GList *remotes_updated,
- GList **to_upload)
+GList *
+ephy_synchronizable_manager_merge_remotes (EphySynchronizableManager *manager,
+ gboolean is_initial,
+ GList *remotes_deleted,
+ GList *remotes_updated)
{
EphySynchronizableManagerInterface *iface;
- g_return_if_fail (EPHY_IS_SYNCHRONIZABLE_MANAGER (manager));
- g_return_if_fail (to_upload);
+ g_return_val_if_fail (EPHY_IS_SYNCHRONIZABLE_MANAGER (manager), NULL);
iface = EPHY_SYNCHRONIZABLE_MANAGER_GET_IFACE (manager);
- iface->merge_remotes (manager, is_initial, remotes_deleted, remotes_updated, to_upload);
+ return iface->merge_remotes (manager, is_initial, remotes_deleted, remotes_updated);
}
diff --git a/src/sync/ephy-synchronizable-manager.h b/src/sync/ephy-synchronizable-manager.h
index 3ae101a..5ab4c05 100644
--- a/src/sync/ephy-synchronizable-manager.h
+++ b/src/sync/ephy-synchronizable-manager.h
@@ -33,45 +33,43 @@ G_DECLARE_INTERFACE (EphySynchronizableManager, ephy_synchronizable_manager, EPH
struct _EphySynchronizableManagerInterface {
GTypeInterface parent_iface;
- const char * (*get_collection_name) (EphySynchronizableManager *manager);
- GType (*get_synchronizable_type) (EphySynchronizableManager *manager);
+ const char * (*get_collection_name) (EphySynchronizableManager *manager);
+ GType (*get_synchronizable_type) (EphySynchronizableManager *manager);
- gboolean (*is_initial_sync) (EphySynchronizableManager *manager);
- void (*set_is_initial_sync) (EphySynchronizableManager *manager,
- gboolean is_initial);
+ gboolean (*is_initial_sync) (EphySynchronizableManager *manager);
+ void (*set_is_initial_sync) (EphySynchronizableManager *manager,
+ gboolean is_initial);
- double (*get_sync_time) (EphySynchronizableManager *manager);
- void (*set_sync_time) (EphySynchronizableManager *manager,
- double sync_time);
+ double (*get_sync_time) (EphySynchronizableManager *manager);
+ void (*set_sync_time) (EphySynchronizableManager *manager,
+ double sync_time);
- void (*add) (EphySynchronizableManager *manager,
- EphySynchronizable *synchronizable);
- void (*remove) (EphySynchronizableManager *manager,
- EphySynchronizable *synchronizable);
+ void (*add) (EphySynchronizableManager *manager,
+ EphySynchronizable *synchronizable);
+ void (*remove) (EphySynchronizableManager *manager,
+ EphySynchronizable *synchronizable);
- void (*merge_remotes) (EphySynchronizableManager *manager,
- gboolean is_initial,
- GList *remotes_deleted,
- GList *remotes_updated,
- GList **to_upload);
+ GList * (*merge_remotes) (EphySynchronizableManager *manager,
+ gboolean is_initial,
+ GList *remotes_deleted,
+ GList *remotes_updated);
};
-const char *ephy_synchronizable_manager_get_collection_name (EphySynchronizableManager
*manager);
-GType ephy_synchronizable_manager_get_synchronizable_type (EphySynchronizableManager
*manager);
-gboolean ephy_synchronizable_manager_is_initial_sync (EphySynchronizableManager
*manager);
-void ephy_synchronizable_manager_set_is_initial_sync (EphySynchronizableManager *manager,
- gboolean
is_initial);
-double ephy_synchronizable_manager_get_sync_time (EphySynchronizableManager
*manager);
-void ephy_synchronizable_manager_set_sync_time (EphySynchronizableManager *manager,
- double
sync_time);
-void ephy_synchronizable_manager_add (EphySynchronizableManager *manager,
- EphySynchronizable
*synchronizable);
-void ephy_synchronizable_manager_remove (EphySynchronizableManager *manager,
- EphySynchronizable
*synchronizable);
-void ephy_synchronizable_manager_merge_remotes (EphySynchronizableManager *manager,
- gboolean
is_initial,
- GList
*remotes_deleted,
- GList
*remotes_updated,
- GList
**to_upload);
+const char *ephy_synchronizable_manager_get_collection_name (EphySynchronizableManager *manager);
+GType ephy_synchronizable_manager_get_synchronizable_type (EphySynchronizableManager *manager);
+gboolean ephy_synchronizable_manager_is_initial_sync (EphySynchronizableManager *manager);
+void ephy_synchronizable_manager_set_is_initial_sync (EphySynchronizableManager *manager,
+ gboolean
is_initial);
+double ephy_synchronizable_manager_get_sync_time (EphySynchronizableManager *manager);
+void ephy_synchronizable_manager_set_sync_time (EphySynchronizableManager *manager,
+ double
sync_time);
+void ephy_synchronizable_manager_add (EphySynchronizableManager *manager,
+ EphySynchronizable
*synchronizable);
+void ephy_synchronizable_manager_remove (EphySynchronizableManager *manager,
+ EphySynchronizable
*synchronizable);
+GList *ephy_synchronizable_manager_merge_remotes (EphySynchronizableManager *manager,
+ gboolean
is_initial,
+ GList
*remotes_deleted,
+ GList
*remotes_updated);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]