@@ -1509,6 +1509,10 @@ class DataLink(QObject):
15091509 service : LinkService = None
15101510 # Data
15111511 data = LinkData ()
1512+ #
1513+ enable_request_type_actors = True
1514+ enable_request_type_motions = True
1515+ enable_request_type_scene = True
15121516
15131517
15141518 def __init__ (self ):
@@ -1844,6 +1848,13 @@ def update_ui(self):
18441848 qt .enable (self .button_sync_lights , self .button_sync_cameras ,
18451849 self .button_sync_viewport , self .button_sync_scene )
18461850
1851+ if not self .enable_request_type_actors :
1852+ qt .disable (self .button_send )
1853+ if not self .enable_request_type_motions :
1854+ qt .disable (self .button_animation )
1855+ if not self .enable_request_type_scene :
1856+ qt .disable (self .button_sync_scene )
1857+
18471858 # context info
18481859
18491860 if avatar :
@@ -1928,6 +1939,21 @@ def update_combo_ccic_export_mode(self):
19281939 OPTS .IC_EXPORT_MODE = self .combo_ccic_export_mode .currentText ()
19291940 OPTS .write_state ()
19301941
1942+ def allow_request_type (self , request_type , enable ):
1943+ if request_type == "ACTORS" :
1944+ self .enable_request_type_actors = enable
1945+ elif request_type == "MOTIONS" :
1946+ self .enable_request_type_motions = enable
1947+ elif request_type == "SCENE" :
1948+ self .enable_request_type_scene = enable
1949+ self .update_ui ()
1950+ return
1951+
1952+ def reset_request_types (self , enable = True ):
1953+ self .enable_request_type_actors = enable
1954+ self .enable_request_type_motions = enable
1955+ self .enable_request_type_scene = enable
1956+
19311957 def show_link_state (self ):
19321958 link_service = self .get_link_service ()
19331959 if self .is_connected ():
@@ -1994,6 +2020,7 @@ def link_stop(self):
19942020 link_service = self .get_link_service ()
19952021 if link_service :
19962022 link_service .service_stop ()
2023+ self .reset_request_types ()
19972024
19982025 def link_disconnect (self ):
19992026 link_service = self .get_link_service ()
@@ -2048,10 +2075,14 @@ def parse(self, op_code, data):
20482075 if op_code == OpCodes .CONFIRM :
20492076 self .receive_confirm (data )
20502077
2078+ if op_code == OpCodes .RELINK :
2079+ self .receive_relink (data )
2080+
20512081 error_show ()
20522082
20532083 def on_connected (self ):
20542084 self .update_ui ()
2085+ self .reset_request_types ()
20552086 self .send_notify ("Connected" )
20562087
20572088 def send (self , op_code , data = None ):
@@ -2394,6 +2425,17 @@ def send_relink(self):
23942425 self .send (OpCodes .RELINK , relink_data )
23952426 self .update_link_status (f"Relink Sent: { actor .name } { actor .get_link_id ()} " )
23962427
2428+ def receive_relink (self , data ):
2429+ relink_data = decode_to_json (data )
2430+ utils .log_info (f"relink reply: { relink_data } " )
2431+ from_link_id = relink_data .get ("link_id" )
2432+ to_link_id = relink_data .get ("to_link_id" )
2433+ source_name = relink_data .get ("name" )
2434+ actor = LinkActor .find_actor (from_link_id , search_name = source_name )
2435+ if actor :
2436+ actor .set_link_id (to_link_id )
2437+ self .update_link_status (f"LinkId Sync: { actor .name } { to_link_id } " )
2438+
23972439 def send_actors_request (self ):
23982440 cc .deduplicate_scene_objects ()
23992441 self .send_request ("ACTORS" )
@@ -2487,9 +2529,9 @@ def send_motions(self, actors=None):
24872529 actor : LinkActor
24882530 for actor in actors :
24892531 if self .motion_prefix :
2490- motion_name = actor .name + "_" + self .motion_prefix + "_motion "
2532+ motion_name = actor .name + "_" + self .motion_prefix + "_Motion "
24912533 else :
2492- motion_name = actor .name + "_motion "
2534+ motion_name = actor .name + "_Motion "
24932535 self .update_link_status (f"Exporting Motion: { motion_name } " , True )
24942536 self .send_notify (f"Exporting Motion: { motion_name } " )
24952537 # Determine export path
@@ -3233,14 +3275,16 @@ def send_request(self, request_type):
32333275 # get actors
32343276 actors = self .get_selected_actors ()
32353277 if actors :
3236- self .update_link_status (f"Sending Request" )
3278+ self .update_link_status (f"Sending Request, waiting for response ... " )
32373279 self .send_notify (f"Request" )
32383280 # send request
32393281 request_data = self .encode_request_data (actors , request_type )
32403282 self .send (OpCodes .REQUEST , request_data )
32413283 # store the actors
32423284 self .data .sequence_actors = actors
32433285 self .data .sequence_type = request_type
3286+ # disable buttons for further requests ...
3287+ self .allow_request_type (request_type , False )
32443288
32453289 def receive_request (self , data ):
32463290 self .update_link_status (f"Receiving Request ..." )
@@ -3275,6 +3319,7 @@ def receive_confirm(self, data):
32753319 id_tree = actor_data .get ("id_tree" )
32763320 if request_type in ["SCENE" , "MOTIONS" , "ACTORS" ]:
32773321 self .do_send_update_actors (actors_data , request_type )
3322+ self .allow_request_type (request_type , True )
32783323 error_show ()
32793324 return
32803325
0 commit comments