[gnote] Use NoteManagerBase instead of NoteManager in SyncManager



commit 87815820822e7d7c7402aaba1c27f8f43ac31d18
Author: Aurimas Černius <aurisc4 gmail com>
Date:   Sun May 25 20:56:35 2014 +0300

    Use NoteManagerBase instead of NoteManager in SyncManager

 src/synchronization/syncmanager.cpp |   64 +++++++++++++++++++++++++---------
 src/synchronization/syncmanager.hpp |   15 +++++---
 2 files changed, 56 insertions(+), 23 deletions(-)
---
diff --git a/src/synchronization/syncmanager.cpp b/src/synchronization/syncmanager.cpp
index 987d554..86ff9c8 100644
--- a/src/synchronization/syncmanager.cpp
+++ b/src/synchronization/syncmanager.cpp
@@ -42,7 +42,7 @@
 namespace gnote {
 namespace sync {
 
-  SyncManager::SyncManager(NoteManager & m)
+  SyncManager::SyncManager(NoteManagerBase & m)
     : m_note_manager(m)
     , m_state(IDLE)
     , m_sync_thread(NULL)
@@ -50,14 +50,14 @@ namespace sync {
   }
 
 
-  void SyncManager::init(NoteManager & m)
+  void SyncManager::init(NoteManagerBase & m)
   {
     SyncManager *manager = new SyncManager(m);
     manager->_init(m);
   }
 
 
-  void SyncManager::_init(NoteManager & manager)
+  void SyncManager::_init(NoteManagerBase & manager)
   {
     m_client = SyncClient::Ptr(new GnoteSyncClient(manager));
     // Add a "Synchronize Notes" to Gnote's Application Menu
@@ -66,20 +66,44 @@ namespace sync {
     am.add_app_menu_item(IActionManager::APP_ACTION_MANAGE, 200, _("Synchronize Notes"), "app.sync-notes");
 
     // Initialize all the SyncServiceAddins
-    manager.get_addin_manager().initialize_sync_service_addins();
+    initialize_sync_service_addins(manager);
 
-    Preferences::obj().get_schema_settings(Preferences::SCHEMA_SYNC)->signal_changed()
-      .connect(sigc::mem_fun(*this, &SyncManager::preferences_setting_changed));
-    note_mgr().signal_note_saved.connect(sigc::mem_fun(*this, &SyncManager::handle_note_saved_or_deleted));
-    note_mgr().signal_note_deleted.connect(sigc::mem_fun(*this, &SyncManager::handle_note_saved_or_deleted));
-    note_mgr().signal_note_buffer_changed.connect(sigc::mem_fun(*this, 
&SyncManager::handle_note_buffer_changed));
-    m_autosync_timer.signal_timeout.connect(sigc::mem_fun(*this, &SyncManager::background_sync_checker));
+    connect_system_signals();
 
     // Update sync item based on configuration.
     update_sync_action();
   }
 
 
+  void SyncManager::initialize_sync_service_addins(NoteManagerBase & note_manager)
+  {
+    try {
+      NoteManager & manager(dynamic_cast<NoteManager&>(note_manager));
+      manager.get_addin_manager().initialize_sync_service_addins();
+    }
+    catch(std::bad_cast & e) {
+      ERR_OUT(_("Report a bug. Cast failed: %s"), e.what());
+    }
+  }
+
+
+  void SyncManager::connect_system_signals()
+  {
+    try {
+      NoteManager & manager(dynamic_cast<NoteManager&>(note_mgr()));
+      Preferences::obj().get_schema_settings(Preferences::SCHEMA_SYNC)->signal_changed()
+        .connect(sigc::mem_fun(*this, &SyncManager::preferences_setting_changed));
+      manager.signal_note_saved.connect(sigc::mem_fun(*this, &SyncManager::handle_note_saved_or_deleted));
+      manager.signal_note_deleted.connect(sigc::mem_fun(*this, &SyncManager::handle_note_saved_or_deleted));
+      manager.signal_note_buffer_changed.connect(sigc::mem_fun(*this, 
&SyncManager::handle_note_buffer_changed));
+      m_autosync_timer.signal_timeout.connect(sigc::mem_fun(*this, &SyncManager::background_sync_checker));
+    }
+    catch(std::bad_cast & e) {
+      ERR_OUT(_("Report a bug. Cast failed: %s"), e.what());
+    }
+  }
+
+
   void SyncManager::reset_client()
   {
     try {
@@ -536,14 +560,20 @@ namespace sync {
   {
     SyncServiceAddin *addin = NULL;
 
-    std::list<SyncServiceAddin*> addins;
-    m_note_manager.get_addin_manager().get_sync_service_addins(addins);
-    for(std::list<SyncServiceAddin*>::iterator iter = addins.begin(); iter != addins.end(); ++iter) {
-      if((*iter)->id() == sync_service_id) {
-        addin = *iter;
-        break;
+    try {
+      NoteManager & manager(dynamic_cast<NoteManager&>(m_note_manager));
+      std::list<SyncServiceAddin*> addins;
+      manager.get_addin_manager().get_sync_service_addins(addins);
+      for(std::list<SyncServiceAddin*>::iterator iter = addins.begin(); iter != addins.end(); ++iter) {
+        if((*iter)->id() == sync_service_id) {
+          addin = *iter;
+          break;
+        }
       }
     }
+    catch(std::bad_cast & e) {
+      ERR_OUT(_("Report a bug. Cast failed: %s"), e.what());
+    }
 
     return addin;
   }
@@ -605,7 +635,7 @@ namespace sync {
   }
 
 
-  NoteManager & SyncManager::note_mgr()
+  NoteManagerBase & SyncManager::note_mgr()
   {
     return m_note_manager;
   }
diff --git a/src/synchronization/syncmanager.hpp b/src/synchronization/syncmanager.hpp
index e7ea829..bf4ef64 100644
--- a/src/synchronization/syncmanager.hpp
+++ b/src/synchronization/syncmanager.hpp
@@ -40,8 +40,8 @@ namespace sync {
     : public ISyncManager
   {
   public:
-    SyncManager(NoteManager &);
-    static void init(NoteManager &);
+    SyncManager(NoteManagerBase &);
+    static void init(NoteManagerBase &);
     virtual void reset_client() override;
     virtual void perform_synchronization(const SyncUI::Ptr & sync_ui) override;
     void synchronization_thread();
@@ -51,12 +51,16 @@ namespace sync {
       {
         return m_state;
       }
+  protected:
+    virtual void initialize_sync_service_addins(NoteManagerBase &);
+    virtual void connect_system_signals();
+    virtual SyncServiceAddin *get_sync_service_addin(const std::string & sync_service_id);
   private:
     static SyncManager & _obj()
       {
         return static_cast<SyncManager&>(obj());
       }
-    void _init(NoteManager &);
+    void _init(NoteManagerBase &);
     void handle_note_saved_or_deleted(const NoteBase::Ptr & note);
     void handle_note_buffer_changed(const NoteBase::Ptr & note);
     void preferences_setting_changed(const Glib::ustring & key);
@@ -64,13 +68,12 @@ namespace sync {
     void background_sync_checker();
     void set_state(SyncState new_state);
     SyncServiceAddin *get_configured_sync_service();
-    SyncServiceAddin *get_sync_service_addin(const std::string & sync_service_id);
     void create_note_in_main_thread(const NoteUpdate & noteUpdate);
     void update_note_in_main_thread(const Note::Ptr & existingNote, const NoteUpdate & noteUpdate);
     void delete_note_in_main_thread(const Note::Ptr & existingNote);
     void update_local_note(const NoteBase::Ptr & localNote, const NoteUpdate & serverNote, NoteSyncType 
syncType);
     NoteBase::Ptr find_note_by_uuid(const std::string & uuid);
-    NoteManager & note_mgr();
+    NoteManagerBase & note_mgr();
     void get_synchronized_xml_bits(const std::string & noteXml, std::string & title, std::string & tags, 
std::string & content);
     void delete_notes(const SyncServer::Ptr & server);
     void create_note(const NoteUpdate & noteUpdate);
@@ -78,7 +81,7 @@ namespace sync {
     void delete_note(const Note::Ptr & existingNote);
     static void note_save(const Note::Ptr & note);
 
-    NoteManager & m_note_manager;
+    NoteManagerBase & m_note_manager;
     SyncUI::Ptr m_sync_ui;
     SyncClient::Ptr m_client;
     SyncState m_state;


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