1
1
from gettext import gettext as _
2
- from typing import Optional , TYPE_CHECKING , List , Any , cast , Callable , Set , Dict
2
+ from typing import Optional , TYPE_CHECKING , List , Any , cast , Callable , Dict
3
3
import html
4
4
import logging
5
5
import cairo
16
16
from blueman .Functions import launch
17
17
from blueman .Sdp import ServiceUUID , OBEX_OBJPUSH_SVCLASS_ID
18
18
from blueman .gui .GtkAnimation import TreeRowFade , CellFade , AnimBase
19
- from _blueman import ConnInfoReadError , conn_info
20
19
21
20
import gi
22
21
gi .require_version ("Gtk" , "3.0" )
23
22
from gi .repository import Gtk
24
- from gi .repository import GLib
25
23
from gi .repository import Gio
26
24
from gi .repository import Gdk
27
25
from gi .repository import GdkPixbuf
@@ -71,8 +69,6 @@ def __init__(self, inst: "Blueman", adapter: Optional[str] = None) -> None:
71
69
self .props .has_tooltip = True
72
70
self .Blueman = inst
73
71
74
- self ._monitored_devices : Set [str ] = set ()
75
-
76
72
self .manager .connect_signal ("battery-created" , self .on_battery_created )
77
73
self .manager .connect_signal ("battery-removed" , self .on_battery_removed )
78
74
self ._batteries : Dict [str , Battery ] = {}
@@ -368,48 +364,6 @@ def row_setup_event(self, tree_iter: Gtk.TreeIter, device: Device) -> None:
368
364
except Exception as e :
369
365
logging .exception (e )
370
366
371
- if device ["Connected" ]:
372
- self ._monitor_power_levels (tree_iter , device )
373
-
374
- def _monitor_power_levels (self , tree_iter : Gtk .TreeIter , device : Device ) -> None :
375
- if device ["Address" ] in self ._monitored_devices :
376
- return
377
-
378
- assert self .Adapter is not None
379
- cinfo = conn_info (device ["Address" ], os .path .basename (self .Adapter .get_object_path ()))
380
- try :
381
- cinfo .init ()
382
- except ConnInfoReadError :
383
- logging .warning ("Failed to get power levels, probably a LE device." )
384
-
385
- model = self .liststore
386
- assert isinstance (model , Gtk .TreeModel )
387
- r = Gtk .TreeRowReference .new (model , model .get_path (tree_iter ))
388
- self ._update_power_levels (tree_iter , device , cinfo )
389
- GLib .timeout_add (1000 , self ._check_power_levels , r , cinfo , device ["Address" ])
390
- self ._monitored_devices .add (device ["Address" ])
391
-
392
- def _check_power_levels (self , row_ref : Gtk .TreeRowReference , cinfo : conn_info , address : str ) -> bool :
393
- if not row_ref .valid ():
394
- logging .warning ("stopping monitor (row does not exist)" )
395
- cinfo .deinit ()
396
- self ._monitored_devices .remove (address )
397
- return False
398
-
399
- tree_iter = self .get_iter (row_ref .get_path ())
400
- assert tree_iter is not None
401
-
402
- device = self .get (tree_iter , "device" )["device" ]
403
-
404
- if device ["Connected" ]:
405
- self ._update_power_levels (tree_iter , device , cinfo )
406
- return True
407
- else :
408
- cinfo .deinit ()
409
- self ._disable_power_levels (tree_iter )
410
- self ._monitored_devices .remove (address )
411
- return False
412
-
413
367
def row_update_event (self , tree_iter : Gtk .TreeIter , key : str , value : Any ) -> None :
414
368
logging .info (f"{ key } { value } " )
415
369
@@ -438,9 +392,7 @@ def row_update_event(self, tree_iter: Gtk.TreeIter, key: str, value: Any) -> Non
438
392
elif key == "Connected" :
439
393
self .set (tree_iter , connected = value )
440
394
441
- if value :
442
- self ._monitor_power_levels (tree_iter , self .get (tree_iter , "device" )["device" ])
443
- else :
395
+ if not value :
444
396
self ._disable_power_levels (tree_iter )
445
397
elif key == "Name" :
446
398
self .set (tree_iter , no_name = False )
@@ -449,40 +401,26 @@ def row_update_event(self, tree_iter: Gtk.TreeIter, key: str, value: Any) -> Non
449
401
elif key == "Blocked" :
450
402
self .set (tree_iter , blocked = value )
451
403
452
- def _update_power_levels (self , tree_iter : Gtk .TreeIter , device : Device , cinfo : conn_info ) -> None :
453
- row = self .get (tree_iter , "cell_fader" , "battery" , "rssi" , "lq" , "tpl" )
454
-
455
- bars = {}
404
+ elif key == "RSSI" :
405
+ self ._update_bar (tree_iter , "rssi" , 50 if value is None else max (50 + float (value ) / 127 * 50 , 10 ))
456
406
457
- obj_path = device .get_object_path ()
458
- if obj_path in self ._batteries :
459
- bars ["battery" ] = self ._batteries [obj_path ]["Percentage" ]
407
+ elif key == "TxPower" :
408
+ self ._update_bar (tree_iter , "tpl" , 0 if value is None else max (float (value ) / 127 * 100 , 10 ))
460
409
461
- # cinfo init may fail for bluetooth devices version 4 and up
462
- # FIXME Workaround is horrible and we should show something better
463
- if cinfo .failed :
464
- bars .update ({"rssi" : 100.0 , "tpl" : 100.0 })
465
- else :
466
- try :
467
- bars ["rssi" ] = max (50 + float (cinfo .get_rssi ()) / 127 * 50 , 10 )
468
- except ConnInfoReadError :
469
- bars ["rssi" ] = 50
470
- try :
471
- bars ["tpl" ] = max (50 + float (cinfo .get_tpl ()) / 127 * 50 , 10 )
472
- except ConnInfoReadError :
473
- bars ["tpl" ] = 50
410
+ def _update_bar (self , tree_iter : Gtk .TreeIter , name : str , perc : float ) -> None :
411
+ row = self .get (tree_iter , "cell_fader" , "battery" , "rssi" , "tpl" )
412
+ row [name ] = perc
474
413
475
414
if row ["battery" ] == row ["rssi" ] == row ["tpl" ] == 0 :
476
415
self ._prepare_fader (row ["cell_fader" ]).animate (start = 0.0 , end = 1.0 , duration = 400 )
477
416
478
417
w = 14 * self .get_scale_factor ()
479
418
h = 48 * self .get_scale_factor ()
480
419
481
- for (name , perc ) in bars .items ():
482
- if round (row [name ], - 1 ) != round (perc , - 1 ):
483
- icon_name = f"blueman-{ name } -{ int (round (perc , - 1 ))} .png"
484
- icon = GdkPixbuf .Pixbuf .new_from_file_at_scale (os .path .join (PIXMAP_PATH , icon_name ), w , h , True )
485
- self .set (tree_iter , ** {name : perc , f"{ name } _pb" : icon })
420
+ if round (row [name ], - 1 ) != round (perc , - 1 ):
421
+ icon_name = f"blueman-{ name } -{ int (round (perc , - 1 ))} .png"
422
+ icon = GdkPixbuf .Pixbuf .new_from_file_at_scale (os .path .join (PIXMAP_PATH , icon_name ), w , h , True )
423
+ self .set (tree_iter , ** {name : perc , f"{ name } _pb" : icon })
486
424
487
425
def _disable_power_levels (self , tree_iter : Gtk .TreeIter ) -> None :
488
426
row = self .get (tree_iter , "cell_fader" , "battery" , "rssi" , "tpl" )
0 commit comments