@@ -323,8 +323,6 @@ impl Midi {
323323 if self . crossfade_state == crate :: CrossfadeState :: Pause {
324324 self . blink_state = !self . blink_state ;
325325
326-
327-
328326 let _v = if self . blink_state { 127 } else { 0 } ;
329327 // Need to find which device(s) have this mapping?
330328 // set_crossfade_state handles the finding.
@@ -710,17 +708,21 @@ pub async fn execute_mapping(
710708 for ( out_idx, output) in mapping. outputs . iter ( ) . enumerate ( ) {
711709 match output {
712710 crate :: controller:: Output :: Osc { addr, arg_type } => {
711+ // Skip generic OSC processing for Page actions as they are handled manually with specific timing
712+ if matches ! (
713+ mapping. action,
714+ crate :: controller:: LogicalAction :: FaderPageUp
715+ | crate :: controller:: LogicalAction :: FaderPageDown
716+ ) {
717+ continue ;
718+ }
719+
713720 let client_clone = client. clone ( ) ;
714721 let mut final_addr = addr. clone ( ) ;
715722
716723 // Perform dynamic replacement
717724 if final_addr. contains ( "{page}" ) {
718- let page_str = if current_page <= 1 {
719- String :: new ( )
720- } else {
721- ( current_page - 1 ) . to_string ( )
722- } ;
723- final_addr = final_addr. replace ( "{page}" , & page_str) ;
725+ final_addr = final_addr. replace ( "{page}" , & current_page. to_string ( ) ) ;
724726 }
725727 if final_addr. contains ( "{bank_size}" ) {
726728 final_addr = final_addr. replace ( "{bank_size}" , & bank_size. to_string ( ) ) ;
0 commit comments