@@ -3,7 +3,7 @@ use crate::dbus::notifier_item_proxy::StatusNotifierItemProxy;
33use crate :: dbus:: notifier_watcher_proxy:: StatusNotifierWatcherProxy ;
44use crate :: dbus:: status_notifier_watcher:: StatusNotifierWatcher ;
55use crate :: dbus:: { self , OwnedValueExt } ;
6- use crate :: error:: Error ;
6+ use crate :: error:: { Error , Result } ;
77use crate :: item:: { self , Status , StatusNotifierItem , Tooltip } ;
88use crate :: menu:: { MenuDiff , TrayMenu } ;
99use 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