[dbus] remove missed exceptions; set dbus call timeout to 2 seconds

pull/197/head
jackun 4 years ago
parent 1e300ae583
commit 72602fab89
No known key found for this signature in database
GPG Key ID: 119DB3F1D05A9ED3

@ -14,6 +14,8 @@ typedef std::vector<std::pair<std::string, std::string>> string_pair_vec;
typedef std::unordered_map<std::string, string_pair_vec> string_pair_vec_map;
typedef std::unordered_map<std::string, std::string> string_map;
#define DBUS_TIMEOUT 2000 // ms
std::string format_signal(const DBusSignal& s)
{
std::stringstream ss;
@ -413,24 +415,24 @@ bool dbus_get_name_owner(dbusmgr::dbus_manager& dbus_mgr, std::string& name_owne
{
auto& dbus = dbus_mgr.dbus();
DBusError error;
dbus.error_init(&error);
DBusMessage * dbus_reply = nullptr;
DBusMessage * dbus_msg = nullptr;
// dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:"org.mpris.MediaPlayer2.spotify"
if (nullptr == (dbus_msg = dbus.message_new_method_call("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "GetNameOwner"))) {
throw std::runtime_error("unable to allocate memory for dbus message");
std::cerr << "MANGOHUD: " << __func__ << ": unable to allocate memory for dbus message\n";
return false;
}
if (!dbus.message_append_args (dbus_msg, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID)) {
dbus.message_unref(dbus_msg);
std::cerr << "MANGOHUD: " << __func__ << ": dbus_message_append_args failed\n";
dbus.error_free(&error);
return false;
}
if (nullptr == (dbus_reply = dbus.connection_send_with_reply_and_block(dbus_mgr.get_conn(), dbus_msg, DBUS_TIMEOUT_USE_DEFAULT, &error))) {
dbus.error_init(&error);
if (nullptr == (dbus_reply = dbus.connection_send_with_reply_and_block(dbus_mgr.get_conn(), dbus_msg, DBUS_TIMEOUT, &error))) {
dbus.message_unref(dbus_msg);
std::cerr << "MANGOHUD: " << __func__ << ": "<< error.message << "\n";
dbus.error_free(&error);
@ -458,7 +460,6 @@ bool dbus_list_name_to_owner(dbusmgr::dbus_manager& dbus_mgr, string_map& name_o
{
auto& dbus = dbus_mgr.dbus();
DBusError error;
dbus.error_init(&error);
std::vector<std::string> names;
std::string owner;
@ -469,10 +470,12 @@ bool dbus_list_name_to_owner(dbusmgr::dbus_manager& dbus_mgr, string_map& name_o
// dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:"org.mpris.MediaPlayer2.spotify"
if (nullptr == (dbus_msg = dbus.message_new_method_call("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "ListNames"))) {
throw std::runtime_error("unable to allocate memory for dbus message");
std::cerr << "MANGOHUD: " << __func__ << ": unable to allocate memory for dbus message\n";
return false;
}
if (nullptr == (dbus_reply = dbus.connection_send_with_reply_and_block(dbus_mgr.get_conn(), dbus_msg, DBUS_TIMEOUT_USE_DEFAULT, &error))) {
dbus.error_init(&error);
if (nullptr == (dbus_reply = dbus.connection_send_with_reply_and_block(dbus_mgr.get_conn(), dbus_msg, DBUS_TIMEOUT, &error))) {
dbus.message_unref(dbus_msg);
std::cerr << "MANGOHUD: " << __func__ << ": "<< error.message << "\n";
dbus.error_free(&error);
@ -503,7 +506,6 @@ bool dbus_get_player_property(dbusmgr::dbus_manager& dbus_mgr, string_pair_vec&
{
auto& dbus = dbus_mgr.dbus();
DBusError error;
dbus.error_init(&error);
DBusMessage * dbus_reply = nullptr;
DBusMessage * dbus_msg = nullptr;
@ -511,7 +513,6 @@ bool dbus_get_player_property(dbusmgr::dbus_manager& dbus_mgr, string_pair_vec&
// dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata'
if (nullptr == (dbus_msg = dbus.message_new_method_call(dest, "/org/mpris/MediaPlayer2", "org.freedesktop.DBus.Properties", "Get"))) {
std::cerr << "MANGOHUD: unable to allocate memory for dbus message" << std::endl;
dbus.error_free(&error);
return false;
}
@ -521,12 +522,12 @@ bool dbus_get_player_property(dbusmgr::dbus_manager& dbus_mgr, string_pair_vec&
if (!dbus.message_append_args (dbus_msg, DBUS_TYPE_STRING, &v_STRINGS[0], DBUS_TYPE_STRING, &prop, DBUS_TYPE_INVALID)) {
std::cerr << "MANGOHUD: dbus_message_append_args failed" << std::endl;
dbus.error_free(&error);
dbus.message_unref(dbus_msg);
return false;
}
if (nullptr == (dbus_reply = dbus.connection_send_with_reply_and_block(dbus_mgr.get_conn(), dbus_msg, DBUS_TIMEOUT_USE_DEFAULT, &error))) {
dbus.error_init(&error);
if (nullptr == (dbus_reply = dbus.connection_send_with_reply_and_block(dbus_mgr.get_conn(), dbus_msg, DBUS_TIMEOUT, &error))) {
dbus.message_unref(dbus_msg);
std::cerr << "MANGOHUD: " << error.message << std::endl;
dbus.error_free(&error);
@ -744,15 +745,12 @@ void dbus_manager::dbus_thread(dbus_manager *pmgr)
if (str.size() == 3
&& str[0] == main_dest
) {
main_metadata.valid = false;
main_metadata.clear();
} else {
auto it = pmgr->m_name_owners.find(str[0]);
if (it != pmgr->m_name_owners.end()
&& it->second == str[1]) {
generic_mpris.artists.clear();
generic_mpris.title.clear();
generic_mpris.album.clear();
generic_mpris.valid = false;
generic_mpris.clear();
}
}
}

Loading…
Cancel
Save