@@ -16,7 +16,7 @@ use tokio::time::sleep;
16
16
use tokio_tungstenite:: { connect_async, tungstenite, MaybeTlsStream , WebSocketStream } ;
17
17
use uuid:: Uuid ;
18
18
19
- use crate :: config:: AppConfig ;
19
+ use crate :: config:: { AppConfig , Z2mServer } ;
20
20
use crate :: hue;
21
21
use crate :: hue:: api:: {
22
22
Button , ButtonData , ButtonMetadata , ButtonReport , ColorTemperature , ColorTemperatureUpdate ,
@@ -43,7 +43,7 @@ struct LearnScene {
43
43
44
44
pub struct Client {
45
45
name : String ,
46
- conn : String ,
46
+ server : Z2mServer ,
47
47
config : Arc < AppConfig > ,
48
48
state : Arc < Mutex < Resources > > ,
49
49
map : HashMap < String , Uuid > ,
@@ -55,7 +55,7 @@ pub struct Client {
55
55
impl Client {
56
56
pub fn new (
57
57
name : String ,
58
- conn : String ,
58
+ server : Z2mServer ,
59
59
config : Arc < AppConfig > ,
60
60
state : Arc < Mutex < Resources > > ,
61
61
) -> ApiResult < Self > {
@@ -65,7 +65,7 @@ impl Client {
65
65
let ignore = HashSet :: new ( ) ;
66
66
Ok ( Self {
67
67
name,
68
- conn ,
68
+ server ,
69
69
config,
70
70
state,
71
71
map,
@@ -163,6 +163,23 @@ impl Client {
163
163
}
164
164
165
165
pub async fn add_group ( & mut self , grp : & crate :: z2m:: api:: Group ) -> ApiResult < ( ) > {
166
+ let room_name;
167
+
168
+ if let Some ( ref prefix) = self . server . group_prefix {
169
+ if !grp. friendly_name . starts_with ( prefix) {
170
+ log:: debug!(
171
+ "[{}] Ignoring room outside our prefix: {}" ,
172
+ self . name,
173
+ grp. friendly_name
174
+ ) ;
175
+ return Ok ( ( ) ) ;
176
+ } else {
177
+ room_name = grp. friendly_name . strip_prefix ( prefix) . unwrap ( )
178
+ }
179
+ } else {
180
+ room_name = & grp. friendly_name ;
181
+ }
182
+
166
183
let link_room = RType :: Room . deterministic ( & grp. friendly_name ) ;
167
184
let link_glight = RType :: GroupedLight . deterministic ( ( link_room. rid , grp. id ) ) ;
168
185
@@ -234,7 +251,7 @@ impl Client {
234
251
log:: debug!( "[{}] {link_room:?} is new, adding.." , self . name) ;
235
252
}
236
253
237
- let mut metadata = RoomMetadata :: new ( RoomArchetype :: Home , & topic ) ;
254
+ let mut metadata = RoomMetadata :: new ( RoomArchetype :: Home , room_name ) ;
238
255
if let Some ( room_conf) = self . config . rooms . get ( & topic) {
239
256
if let Some ( name) = & room_conf. name {
240
257
metadata. name = name. to_string ( ) ;
@@ -623,8 +640,8 @@ impl Client {
623
640
pub async fn run_forever ( mut self ) -> ApiResult < ( ) > {
624
641
let mut chan = self . state . lock ( ) . await . z2m_channel ( ) ;
625
642
loop {
626
- log:: info!( "[{}] Connecting to {}" , self . name, self . conn ) ;
627
- match connect_async ( & self . conn ) . await {
643
+ log:: info!( "[{}] Connecting to {}" , self . name, self . server . url ) ;
644
+ match connect_async ( & self . server . url ) . await {
628
645
Ok ( ( socket, _) ) => {
629
646
let res = self . event_loop ( & mut chan, socket) . await ;
630
647
log:: error!( "[{}] Event loop broke: {res:?}" , self . name) ;
0 commit comments