diff options
author | David Robillard <d@drobilla.net> | 2010-12-15 04:35:58 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-12-15 04:35:58 +0000 |
commit | 02dbee4a9bd8a02873b359cbc45e55f0b3de3973 (patch) | |
tree | e9270a04cf6d2ef9f896aef29d24b0dacd3e1ca9 /src/LashProxy.cpp | |
parent | ef93b2e47870c95e9c9b547a23f9a4279a20451f (diff) | |
download | patchage-02dbee4a9bd8a02873b359cbc45e55f0b3de3973.tar.gz patchage-02dbee4a9bd8a02873b359cbc45e55f0b3de3973.tar.bz2 patchage-02dbee4a9bd8a02873b359cbc45e55f0b3de3973.zip |
Remove LashProxy dependency from Project.
git-svn-id: http://svn.drobilla.net/lad/trunk/patchage@2696 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/LashProxy.cpp')
-rw-r--r-- | src/LashProxy.cpp | 157 |
1 files changed, 86 insertions, 71 deletions
diff --git a/src/LashProxy.cpp b/src/LashProxy.cpp index 7bd9ec5..45941fc 100644 --- a/src/LashProxy.cpp +++ b/src/LashProxy.cpp @@ -61,6 +61,10 @@ struct LashProxyImpl { string id, string name); + void get_loaded_project_properties( + const std::string& name, + LoadedProjectProperties& properties); + bool _server_responding; Session* _session; LashProxy* _interface; @@ -472,7 +476,10 @@ unref: shared_ptr<Project> LashProxyImpl::on_project_added(const string& name) { - shared_ptr<Project> project(new Project(_interface, name)); + LoadedProjectProperties properties; + get_loaded_project_properties(name, properties); + + shared_ptr<Project> project(new Project(name, properties)); _session->project_add(project); @@ -494,6 +501,76 @@ LashProxyImpl::on_client_added( } void +LashProxyImpl::get_loaded_project_properties( + const string& name, + LoadedProjectProperties& properties) +{ + DBusMessage* reply_ptr; + const char* reply_signature; + DBusMessageIter iter; + DBusMessageIter dict_iter; + DBusMessageIter dict_entry_iter; + DBusMessageIter variant_iter; + const char* key; + const char* value_type; + dbus_bool_t value_bool; + const char* value_string; + + const char* const project_name_cstr = name.c_str(); + + if (!call( + true, + LASH_IFACE_CONTROL, + "ProjectGetProperties", + &reply_ptr, + DBUS_TYPE_STRING, &project_name_cstr, + DBUS_TYPE_INVALID)) { + return; + } + + reply_signature = dbus_message_get_signature(reply_ptr); + + if (strcmp(reply_signature, "a{sv}") != 0) { + error_msg((string)"ProjectGetProperties() reply signature mismatch. " + reply_signature); + goto unref; + } + + dbus_message_iter_init(reply_ptr, &iter); + + for (dbus_message_iter_recurse(&iter, &dict_iter); + dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_INVALID; + dbus_message_iter_next(&dict_iter)) { + dbus_message_iter_recurse(&dict_iter, &dict_entry_iter); + dbus_message_iter_get_basic(&dict_entry_iter, &key); + dbus_message_iter_next(&dict_entry_iter); + dbus_message_iter_recurse(&dict_entry_iter, &variant_iter); + value_type = dbus_message_iter_get_signature(&variant_iter); + if (value_type[0] != 0 && value_type[1] == 0) { + switch (*value_type) { + case DBUS_TYPE_BOOLEAN: + if (strcmp(key, "Modified Status") == 0) { + dbus_message_iter_get_basic(&variant_iter, &value_bool); + properties.modified_status = value_bool; + } + break; + case DBUS_TYPE_STRING: + if (strcmp(key, "Description") == 0) { + dbus_message_iter_get_basic(&variant_iter, &value_string); + properties.description = value_string; + } else if (strcmp(key, "Notes") == 0) { + dbus_message_iter_get_basic(&variant_iter, &value_string); + properties.notes = value_string; + } + break; + } + } + } + +unref: + dbus_message_unref(reply_ptr); +} + +void LashProxy::get_available_projects(list<ProjectInfo>& projects) { DBusMessage* reply_ptr; @@ -571,6 +648,14 @@ unref: } void +LashProxy::get_loaded_project_properties( + const string& name, + LoadedProjectProperties& properties) +{ + return _impl->get_loaded_project_properties(name, properties); +} + +void LashProxy::load_project(const string& project_name) { DBusMessage* reply_ptr; @@ -655,76 +740,6 @@ LashProxy::project_rename(const string& old_name, const string& new_name) } void -LashProxy::get_loaded_project_properties( - const string& name, - LoadedProjectProperties& properties) -{ - DBusMessage* reply_ptr; - const char* reply_signature; - DBusMessageIter iter; - DBusMessageIter dict_iter; - DBusMessageIter dict_entry_iter; - DBusMessageIter variant_iter; - const char* key; - const char* value_type; - dbus_bool_t value_bool; - const char* value_string; - - const char* const project_name_cstr = name.c_str(); - - if (!_impl->call( - true, - LASH_IFACE_CONTROL, - "ProjectGetProperties", - &reply_ptr, - DBUS_TYPE_STRING, &project_name_cstr, - DBUS_TYPE_INVALID)) { - return; - } - - reply_signature = dbus_message_get_signature(reply_ptr); - - if (strcmp(reply_signature, "a{sv}") != 0) { - _impl->error_msg((string)"ProjectGetProperties() reply signature mismatch. " + reply_signature); - goto unref; - } - - dbus_message_iter_init(reply_ptr, &iter); - - for (dbus_message_iter_recurse(&iter, &dict_iter); - dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_INVALID; - dbus_message_iter_next(&dict_iter)) { - dbus_message_iter_recurse(&dict_iter, &dict_entry_iter); - dbus_message_iter_get_basic(&dict_entry_iter, &key); - dbus_message_iter_next(&dict_entry_iter); - dbus_message_iter_recurse(&dict_entry_iter, &variant_iter); - value_type = dbus_message_iter_get_signature(&variant_iter); - if (value_type[0] != 0 && value_type[1] == 0) { - switch (*value_type) { - case DBUS_TYPE_BOOLEAN: - if (strcmp(key, "Modified Status") == 0) { - dbus_message_iter_get_basic(&variant_iter, &value_bool); - properties.modified_status = value_bool; - } - break; - case DBUS_TYPE_STRING: - if (strcmp(key, "Description") == 0) { - dbus_message_iter_get_basic(&variant_iter, &value_string); - properties.description = value_string; - } else if (strcmp(key, "Notes") == 0) { - dbus_message_iter_get_basic(&variant_iter, &value_string); - properties.notes = value_string; - } - break; - } - } - } - -unref: - dbus_message_unref(reply_ptr); -} - -void LashProxy::project_set_description(const string& project_name, const string& description) { DBusMessage* reply_ptr; |