paperbox r128 - in trunk: . src



Author: markoa
Date: Wed Apr 23 23:21:28 2008
New Revision: 128
URL: http://svn.gnome.org/viewvc/paperbox?rev=128&view=rev

Log:
Async tag removal

Modified:
   trunk/ChangeLog
   trunk/src/browser.cc
   trunk/src/browser.hh
   trunk/src/tracker-phone.cc
   trunk/src/tracker-phone.hh

Modified: trunk/src/browser.cc
==============================================================================
--- trunk/src/browser.cc	(original)
+++ trunk/src/browser.cc	Wed Apr 23 23:21:28 2008
@@ -73,6 +73,9 @@
         tracker_client_->signal_add_tags_request_completed().connect(
             sigc::mem_fun(*this, &Browser::on_add_tags_request_completed));
 
+        tracker_client_->signal_remove_tags_request_completed().connect(
+            sigc::mem_fun(*this, &Browser::on_remove_tags_request_completed));
+
         Glib::signal_idle().connect(
             sigc::mem_fun(*this, &Browser::on_idle_initial_document_retrieval));
     }
@@ -144,9 +147,6 @@
                                            const vector<ustring>& tags)
     {
         doc_map::iterator doc_iter = docs_.find(uri.raw());
-        if (doc_iter == docs_.end() || tags.empty())
-            LOG_DD("Tags added for a non-existing document: " << uri);
-
         shared_ptr<Document> doc = doc_iter->second;
 
         // TODO: be properly status-aware
@@ -187,6 +187,26 @@
         tracker_client_->add_tags(uri, tags_copy);
     }
 
+    void
+    Browser::on_remove_tags_request_completed(bool status,
+                                              const ustring& uri,
+                                              const vector<ustring>& tags)
+    {
+        doc_map::iterator doc_iter = docs_.find(uri.raw());
+        shared_ptr<Document> doc = doc_iter->second;
+
+        // TODO: be properly status-aware
+        if (status) {
+            vector<ustring>::const_iterator it(tags.begin());
+            vector<ustring>::const_iterator end(tags.end());
+
+            for ( ; it != end; ++it) doc->remove_tag(*it);
+
+            vector<ustring> tags_added_none;
+            signal_tags_changed_.emit(uri, tags_added_none, tags);
+        }
+    }
+
     // Does the validation work and forwards the remove request to TrackerPhone
     void
     Browser::remove_tags(const Glib::ustring& uri,
@@ -215,21 +235,7 @@
 
         if (tags_copy.empty()) return;
 
-        try {
-            tracker_client_->remove_tags(uri, tags_copy);
-
-            vector<ustring>::iterator it(tags_copy.begin());
-            vector<ustring>::iterator end(tags_copy.end());
-            for ( ; it != end; ++it)
-                doc->remove_tag(*it);
-
-            vector<ustring> tags_added; // none
-            signal_tags_changed_.emit(uri, tags_added, tags_copy);
-        }
-        catch (const std::runtime_error& ex) {
-            LOG_EXCEPTION("Could not remove tags for " << uri
-                          << ": " << ex.what());
-        }
+        tracker_client_->remove_tags(uri, tags_copy);
     }
 
     void

Modified: trunk/src/browser.hh
==============================================================================
--- trunk/src/browser.hh	(original)
+++ trunk/src/browser.hh	Wed Apr 23 23:21:28 2008
@@ -100,6 +100,11 @@
             const Glib::ustring& uri,
             const std::vector<Glib::ustring>& tags);
 
+        void on_remove_tags_request_completed(
+            bool status,
+            const Glib::ustring& uri,
+            const std::vector<Glib::ustring>& tags);
+
         boost::shared_ptr<TrackerPhone> tracker_client_;
         std::queue<Glib::ustring> uri_queue_;
         doc_map docs_;

Modified: trunk/src/tracker-phone.cc
==============================================================================
--- trunk/src/tracker-phone.cc	(original)
+++ trunk/src/tracker-phone.cc	Wed Apr 23 23:21:28 2008
@@ -101,8 +101,15 @@
 
 namespace paperbox {
 
+    enum AsyncRequestType
+    {
+        ASYNC_REQUEST_TYPE_ADD,
+        ASYNC_REQUEST_TYPE_REMOVE
+    };
+
     struct AsyncTagPack
     {
+        AsyncRequestType req_type;
         TrackerPhone* phone;
         Glib::ustring uri;
         char** tags;
@@ -113,12 +120,18 @@
 namespace {
 
     void
-    tracker_add_reply(GError* error, paperbox::AsyncTagPack* pack)
+    on_tracker_void_reply(GError* error, paperbox::AsyncTagPack* pack)
     {
         bool success = true;
 
         if (error) {
-            LOG_ERROR("Tracker add tags request failed: " << error->message);
+            if (pack->req_type == paperbox::ASYNC_REQUEST_TYPE_ADD)
+                LOG_ERROR("Tracker add tags request failed: "
+                          << error->message);
+            else if (pack->req_type == paperbox::ASYNC_REQUEST_TYPE_REMOVE)
+                LOG_ERROR("Tracker remove tags request failed: "
+                          << error->message);
+
             g_clear_error(&error);
             success = false;
         }
@@ -126,8 +139,13 @@
         std::vector<Glib::ustring> cpp_tags;
         ustring_array_to_vector(pack->tags, cpp_tags);
 
-        pack->phone->signal_add_tags_request_completed().emit(
-            success, pack->uri, cpp_tags);
+        if (pack->req_type == paperbox::ASYNC_REQUEST_TYPE_ADD) {
+            pack->phone->signal_add_tags_request_completed().emit(
+                success, pack->uri, cpp_tags);
+        } else if (pack->req_type == paperbox::ASYNC_REQUEST_TYPE_REMOVE) {
+            pack->phone->signal_remove_tags_request_completed().emit(
+                success, pack->uri, cpp_tags);
+        }
 
         g_strfreev(pack->tags);
         delete pack;
@@ -156,12 +174,18 @@
         tracker_disconnect(tracker_connection_);
     }
 
-    TrackerPhone::SignalAddCompleted&
+    TrackerPhone::SignalTagRequestCompleted&
     TrackerPhone::signal_add_tags_request_completed()
     {
         return signal_add_completed_;
     }
 
+    TrackerPhone::SignalTagRequestCompleted&
+    TrackerPhone::signal_remove_tags_request_completed()
+    {
+        return signal_remove_completed_;
+    }
+
     bool
     TrackerPhone::ping_tracker()
     {
@@ -333,6 +357,8 @@
     {
         char** ctags = ustring_vector_to_array(tags);
         AsyncTagPack* data = new AsyncTagPack;
+
+        data->req_type = ASYNC_REQUEST_TYPE_ADD;
         data->phone = this;
         data->uri = uri;
         data->tags = ctags;
@@ -341,7 +367,7 @@
                                     SERVICE_DOCUMENTS,
                                     uri.c_str(),
                                     ctags,
-                                    (TrackerVoidReply) tracker_add_reply,
+                                    (TrackerVoidReply) on_tracker_void_reply,
                                     data);
     }
 
@@ -349,22 +375,20 @@
     TrackerPhone::remove_tags(const Glib::ustring& uri,
                               const std::vector<Glib::ustring> tags)
     {
-        GError* error = 0;
-
         char** ctags = ustring_vector_to_array(tags);
+        AsyncTagPack* data = new AsyncTagPack;
 
-        tracker_keywords_remove (tracker_connection_,
-                                 SERVICE_DOCUMENTS,
-                                 uri.c_str(),
-                                 ctags,
-                                 &error);
-
-        g_strfreev (ctags);
+        data->req_type = ASYNC_REQUEST_TYPE_REMOVE;
+        data->phone = this;
+        data->uri = uri;
+        data->tags = ctags;
 
-        if (error) {
-            LOG_ERROR("Ha! Removing tags failed: " << error->message);
-            throw std::runtime_error(error->message);
-        }
+        tracker_keywords_remove_async (tracker_connection_,
+                                       SERVICE_DOCUMENTS,
+                                       uri.c_str(),
+                                       ctags,
+                                       (TrackerVoidReply) on_tracker_void_reply,
+                                       data);
     }
 
 } // namespace paperbox

Modified: trunk/src/tracker-phone.hh
==============================================================================
--- trunk/src/tracker-phone.hh	(original)
+++ trunk/src/tracker-phone.hh	Wed Apr 23 23:21:28 2008
@@ -44,7 +44,7 @@
                              bool,                               // success
                              const Glib::ustring&,               // uri
                              const std::vector<Glib::ustring> >  // tags
-        SignalAddCompleted;
+        SignalTagRequestCompleted;
 
         explicit TrackerPhone() throw (std::runtime_error);
         virtual ~TrackerPhone();
@@ -59,7 +59,9 @@
         void add_tags(const Glib::ustring& uri,
                       const std::vector<Glib::ustring> tags);
 
-        SignalAddCompleted& signal_add_tags_request_completed();
+        SignalTagRequestCompleted& signal_add_tags_request_completed();
+
+        SignalTagRequestCompleted& signal_remove_tags_request_completed();
 
         void remove_tags(const Glib::ustring& uri,
                          const std::vector<Glib::ustring> tags);
@@ -73,7 +75,8 @@
 
         TrackerClient* tracker_connection_;
 
-        SignalAddCompleted signal_add_completed_;
+        SignalTagRequestCompleted signal_add_completed_;
+        SignalTagRequestCompleted signal_remove_completed_;
     };
 
 } // namespace paperbox



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