Skip to content

Commit 6f3050c

Browse files
committed
get_update_event return Result
1 parent cc1b474 commit 6f3050c

File tree

1 file changed

+21
-25
lines changed

1 file changed

+21
-25
lines changed

src/client.rs

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::dbus::notifier_item_proxy::StatusNotifierItemProxy;
33
use crate::dbus::notifier_watcher_proxy::StatusNotifierWatcherProxy;
44
use crate::dbus::status_notifier_watcher::StatusNotifierWatcher;
55
use crate::dbus::{self, OwnedValueExt};
6-
use crate::error::Error;
6+
use crate::error::{Error, Result};
77
use crate::item::{self, Status, StatusNotifierItem, Tooltip};
88
use crate::menu::{MenuDiff, TrayMenu};
99
use crate::names;
@@ -358,9 +358,15 @@ impl Client {
358358
loop {
359359
tokio::select! {
360360
Some(change) = props_changed.next() => {
361-
if let Some(event) = Self::get_update_event(change, &properties_proxy).await {
362-
debug!("[{destination}{path}] received property change: {event:?}");
363-
tx.send(Event::Update(destination.to_string(), event))?;
361+
match Self::get_update_event(change, &properties_proxy).await {
362+
Ok(Some(event)) => {
363+
debug!("[{destination}{path}] received property change: {event:?}");
364+
tx.send(Event::Update(destination.to_string(), event))?;
365+
}
366+
Err(e) => {
367+
error!("Error parsing update properties from {destination}{path}: {e:?}");
368+
}
369+
_ => {}
364370
}
365371
}
366372
Some(signal) = disconnect_stream.next() => {
@@ -393,9 +399,11 @@ impl Client {
393399
async fn get_update_event(
394400
change: Message,
395401
properties_proxy: &PropertiesProxy<'_>,
396-
) -> Option<UpdateEvent> {
402+
) -> Result<Option<UpdateEvent>> {
397403
let header = change.header();
398-
let member = header.member()?;
404+
let member = header
405+
.member()
406+
.ok_or(Error::InvalidData("Update message header missing `member`"))?;
399407

400408
let property_name = match member.as_str() {
401409
"NewAttentionIcon" => "AttentionIconName",
@@ -407,49 +415,37 @@ impl Client {
407415
_ => &member.as_str()["New".len()..],
408416
};
409417

410-
let res = properties_proxy
418+
let property = properties_proxy
411419
.get(
412420
InterfaceName::from_static_str(PROPERTIES_INTERFACE)
413421
.expect("to be valid interface name"),
414422
property_name,
415423
)
416-
.await;
417-
418-
let property = match res {
419-
Ok(property) => property,
420-
Err(err) => {
421-
error!("error fetching property '{property_name}': {err:?}");
422-
return None;
423-
}
424-
};
424+
.await?;
425425

426426
debug!("received tray item update: {member} -> {property:?}");
427427

428428
use UpdateEvent::*;
429-
match member.as_str() {
429+
Ok(match member.as_str() {
430430
"NewAttentionIcon" => Some(AttentionIcon(property.to_string().ok())),
431431
"NewIcon" => Some(Icon(property.to_string().ok())),
432432
"NewOverlayIcon" => Some(OverlayIcon(property.to_string().ok())),
433433
"NewStatus" => Some(Status(
434-
property
435-
.downcast_ref::<&str>()
436-
.ok()
437-
.map(item::Status::from)
438-
.unwrap_or_default(),
434+
property.downcast_ref::<&str>().map(item::Status::from)?,
439435
)),
440436
"NewTitle" => Some(Title(property.to_string().ok())),
441437
"NewToolTip" => Some(Tooltip({
442438
property
443439
.downcast_ref::<&Structure>()
444440
.ok()
445-
.map(crate::item::Tooltip::try_from)?
446-
.ok()
441+
.map(crate::item::Tooltip::try_from)
442+
.transpose()?
447443
})),
448444
_ => {
449445
warn!("received unhandled update event: {member}");
450446
None
451447
}
452-
}
448+
})
453449
}
454450

455451
/// Watches the `DBusMenu` associated with an SNI item.

0 commit comments

Comments
 (0)