paperbox r128 - in trunk: . src
- From: markoa svn gnome org
- To: svn-commits-list gnome org
- Subject: paperbox r128 - in trunk: . src
- Date: Thu, 24 Apr 2008 00:21:29 +0100 (BST)
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]