[gnome-photos] source-manager: Store PhotosSource objects not GoaObject



commit a8b0c5786687fc15655d0b7328fe367fa3d3737e
Author: Debarshi Ray <debarshir gnome org>
Date:   Mon Dec 17 02:00:11 2012 +0530

    source-manager: Store PhotosSource objects not GoaObject
    
    ... because PhotosBaseManager is meant to store PhotosFilterable
    implementations, which GoaObject is not. This exploits the fact that
    PhotosSource:id is the same as GoaAccount:id.

 src/photos-source-manager.c |   27 ++++++++++++++++++++-------
 1 files changed, 20 insertions(+), 7 deletions(-)
---
diff --git a/src/photos-source-manager.c b/src/photos-source-manager.c
index 0e67208..9651aab 100644
--- a/src/photos-source-manager.c
+++ b/src/photos-source-manager.c
@@ -46,24 +46,33 @@ static void
 photos_source_manager_client_account_added (GoaClient *client, GoaObject *object, gpointer user_data)
 {
   PhotosSourceManager *self = PHOTOS_SOURCE_MANAGER (user_data);
-  photos_base_manager_add_object (PHOTOS_BASE_MANAGER (self), G_OBJECT (object));
+  PhotosSource *source;
+
+  source = photos_source_new_from_goa_object (object);
+  photos_base_manager_add_object (PHOTOS_BASE_MANAGER (self), G_OBJECT (source));
+  g_object_unref (source);
 }
 
 
 static void
-photos_source_manager_client_account_changed (GoaClient *client, GoaObject *object, gpointer user_data)
+photos_source_manager_client_account_removed (GoaClient *client, GoaObject *object, gpointer user_data)
 {
   PhotosSourceManager *self = PHOTOS_SOURCE_MANAGER (user_data);
-  photos_base_manager_remove_object (PHOTOS_BASE_MANAGER (self), G_OBJECT (object));
-  photos_base_manager_add_object (PHOTOS_BASE_MANAGER (self), G_OBJECT (object));
+  GoaAccount *account;
+  const gchar *id;
+
+  account = goa_object_peek_account (object);
+  id = goa_account_get_id (account);
+  photos_base_manager_remove_object_by_id (PHOTOS_BASE_MANAGER (self), id);
 }
 
 
 static void
-photos_source_manager_client_account_removed (GoaClient *client, GoaObject *object, gpointer user_data)
+photos_source_manager_client_account_changed (GoaClient *client, GoaObject *object, gpointer user_data)
 {
   PhotosSourceManager *self = PHOTOS_SOURCE_MANAGER (user_data);
-  photos_base_manager_remove_object (PHOTOS_BASE_MANAGER (self), G_OBJECT (object));
+  photos_source_manager_client_account_removed (client, object, user_data);
+  photos_source_manager_client_account_added (client, object, user_data);
 }
 
 
@@ -77,11 +86,15 @@ photos_source_manager_refresh_accounts (PhotosSourceManager *self)
   accounts = goa_client_get_accounts (priv->client);
   for (l = accounts; l != NULL; l = l->next)
     {
+      PhotosSource *source;
+
       if (goa_object_peek_account (GOA_OBJECT (l->data)) == NULL)
         continue;
 
       /* TODO: uncomment when we start supporting online providers */
-      /* photos_base_manager_add_object (PHOTOS_BASE_MANAGER (self), G_OBJECT (l->data)); */
+      /* source = photos_source_new_from_goa_object (GOA_OBJECT (l->data)); */
+      /* photos_base_manager_add_object (PHOTOS_BASE_MANAGER (self), G_OBJECT (source)); */
+      /* g_object_unref (source); */
     }
 
   g_list_free_full (accounts, g_object_unref);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]