فهرست منبع

fix clearing speed bug

tuanchris 5 ماه پیش
والد
کامیت
f935a0c5e9
6فایلهای تغییر یافته به همراه68 افزوده شده و 22 حذف شده
  1. 1 1
      VERSION
  2. 13 6
      main.py
  3. 5 1
      modules/core/pattern_manager.py
  4. 3 3
      modules/core/state.py
  5. 43 9
      static/js/settings.js
  6. 3 2
      templates/settings.html

+ 1 - 1
VERSION

@@ -1 +1 @@
-3.1.0
+3.1.1

+ 13 - 6
main.py

@@ -890,26 +890,33 @@ async def get_clear_pattern_speed():
     """Get the current clearing pattern speed setting."""
     return {
         "success": True,
-        "clear_pattern_speed": state.clear_pattern_speed
+        "clear_pattern_speed": state.clear_pattern_speed,
+        "effective_speed": state.clear_pattern_speed if state.clear_pattern_speed is not None else state.speed
     }
 
 @app.post("/api/clear_pattern_speed")
 async def set_clear_pattern_speed(request: dict):
     """Set the clearing pattern speed."""
     try:
-        speed = int(request.get("clear_pattern_speed", 200))
+        # If speed is None or "none", use default behavior (state.speed)
+        speed_value = request.get("clear_pattern_speed")
+        if speed_value is None or speed_value == "none" or speed_value == "":
+            speed = None
+        else:
+            speed = int(speed_value)
         
-        # Validate speed range (same as regular speed limits)
-        if not (50 <= speed <= 2000):
+        # Validate speed range (same as regular speed limits) only if speed is not None
+        if speed is not None and not (50 <= speed <= 2000):
             raise HTTPException(status_code=400, detail="Speed must be between 50 and 2000")
         
         state.clear_pattern_speed = speed
         state.save()
         
-        logger.info(f"Clear pattern speed updated to {speed}")
+        logger.info(f"Clear pattern speed set to {speed if speed is not None else 'default (state.speed)'}")
         return {
             "success": True,
-            "clear_pattern_speed": state.clear_pattern_speed
+            "clear_pattern_speed": state.clear_pattern_speed,
+            "effective_speed": state.clear_pattern_speed if state.clear_pattern_speed is not None else state.speed
         }
     except ValueError:
         raise HTTPException(status_code=400, detail="Invalid speed value")

+ 5 - 1
modules/core/pattern_manager.py

@@ -283,7 +283,11 @@ async def run_theta_rho_file(file_path, is_playlist=False):
 
         # Determine if this is a clearing pattern and set appropriate speed
         is_clear_file = is_clear_pattern(file_path)
-        pattern_speed = state.clear_pattern_speed if is_clear_file else state.speed
+        # Use clear_pattern_speed if it's set and this is a clear file, otherwise use state.speed
+        if is_clear_file and state.clear_pattern_speed is not None:
+            pattern_speed = state.clear_pattern_speed
+        else:
+            pattern_speed = state.speed
         
         if is_clear_file:
             logger.info(f"Running clearing pattern at speed {pattern_speed}")

+ 3 - 3
modules/core/state.py

@@ -11,7 +11,7 @@ class AppState:
         # Private variables for properties
         self._current_playing_file = None
         self._pause_requested = False
-        self._speed = 130
+        self._speed = 100
         self._current_playlist = None
         self._current_playlist_name = None  # New variable for playlist name
         
@@ -46,7 +46,7 @@ class AppState:
         self._playlist_mode = "loop"
         self._pause_time = 0
         self._clear_pattern = "none"
-        self._clear_pattern_speed = 200  # Default speed for clearing patterns
+        self._clear_pattern_speed = None  # None means use state.speed as default
         self.custom_clear_from_in = None  # Custom clear from center pattern
         self.custom_clear_from_out = None  # Custom clear from perimeter pattern
         
@@ -202,7 +202,7 @@ class AppState:
         self._playlist_mode = data.get("playlist_mode", "loop")
         self._pause_time = data.get("pause_time", 0)
         self._clear_pattern = data.get("clear_pattern", "none")
-        self._clear_pattern_speed = data.get("clear_pattern_speed", 200)
+        self._clear_pattern_speed = data.get("clear_pattern_speed", None)
         self.custom_clear_from_in = data.get("custom_clear_from_in", None)
         self.custom_clear_from_out = data.get("custom_clear_from_out", None)
         self.port = data.get("port", None)

+ 43 - 9
static/js/settings.js

@@ -277,8 +277,21 @@ document.addEventListener('DOMContentLoaded', async () => {
         
         // Set clear pattern speed
         const clearPatternSpeedInput = document.getElementById('clearPatternSpeedInput');
-        if (clearPatternSpeedInput && clearSpeedData && clearSpeedData.clear_pattern_speed) {
-            clearPatternSpeedInput.value = clearSpeedData.clear_pattern_speed;
+        const effectiveClearSpeed = document.getElementById('effectiveClearSpeed');
+        if (clearPatternSpeedInput && clearSpeedData) {
+            // Only set value if clear_pattern_speed is not null
+            if (clearSpeedData.clear_pattern_speed !== null && clearSpeedData.clear_pattern_speed !== undefined) {
+                clearPatternSpeedInput.value = clearSpeedData.clear_pattern_speed;
+                if (effectiveClearSpeed) {
+                    effectiveClearSpeed.textContent = `Current: ${clearSpeedData.clear_pattern_speed} steps/min`;
+                }
+            } else {
+                // Leave empty to show placeholder for default
+                clearPatternSpeedInput.value = '';
+                if (effectiveClearSpeed && clearSpeedData.effective_speed) {
+                    effectiveClearSpeed.textContent = `Using default pattern speed: ${clearSpeedData.effective_speed} steps/min`;
+                }
+            }
         }
         
         // Update app name
@@ -527,12 +540,18 @@ function setupEventListeners() {
                 return;
             }
             
-            const speed = parseInt(clearPatternSpeedInput.value);
-            
-            // Validate speed
-            if (isNaN(speed) || speed < 50 || speed > 2000) {
-                showStatusMessage('Clear pattern speed must be between 50 and 2000', 'error');
-                return;
+            let speed;
+            if (clearPatternSpeedInput.value === '' || clearPatternSpeedInput.value === null) {
+                // Empty value means use default (None)
+                speed = null;
+            } else {
+                speed = parseInt(clearPatternSpeedInput.value);
+                
+                // Validate speed only if it's not null
+                if (isNaN(speed) || speed < 50 || speed > 2000) {
+                    showStatusMessage('Clear pattern speed must be between 50 and 2000, or leave empty for default', 'error');
+                    return;
+                }
             }
             
             try {
@@ -543,7 +562,22 @@ function setupEventListeners() {
                 });
                 
                 if (response.ok) {
-                    showStatusMessage('Clear pattern speed saved successfully', 'success');
+                    const data = await response.json();
+                    if (speed === null) {
+                        showStatusMessage(`Clear pattern speed set to default (${data.effective_speed} steps/min)`, 'success');
+                    } else {
+                        showStatusMessage(`Clear pattern speed set to ${speed} steps/min`, 'success');
+                    }
+                    
+                    // Update the effective speed display
+                    const effectiveClearSpeed = document.getElementById('effectiveClearSpeed');
+                    if (effectiveClearSpeed) {
+                        if (speed === null) {
+                            effectiveClearSpeed.textContent = `Using default pattern speed: ${data.effective_speed} steps/min`;
+                        } else {
+                            effectiveClearSpeed.textContent = `Current: ${speed} steps/min`;
+                        }
+                    }
                 } else {
                     const error = await response.json();
                     throw new Error(error.detail || 'Failed to save clear pattern speed');

+ 3 - 2
templates/settings.html

@@ -244,7 +244,7 @@ endblock %}
       <div class="bg-slate-50 rounded-lg p-4 space-y-4">
         <h3 class="text-slate-800 text-base font-semibold">Clearing Speed</h3>
         <p class="text-sm text-slate-600">
-          Set a custom speed for clearing patterns. This allows clearing patterns to run at a different speed than regular patterns.
+          Set a custom speed for clearing patterns. Leave empty to use the default pattern speed. This allows clearing patterns to run at a different speed than regular patterns.
         </p>
         <div class="flex flex-col gap-1.5">
           <label for="clearPatternSpeedInput" class="text-slate-700 text-sm font-medium leading-normal">
@@ -258,7 +258,7 @@ endblock %}
               max="2000"
               step="50"
               class="form-input flex-1 resize-none overflow-hidden rounded-lg text-slate-900 focus:outline-0 focus:ring-2 focus:ring-sky-500 border border-slate-300 bg-white focus:border-sky-500 h-10 placeholder:text-slate-400 px-4 text-base font-normal leading-normal transition-colors"
-              placeholder="200"
+              placeholder="Default (use pattern speed)"
               value=""
             />
             <button
@@ -269,6 +269,7 @@ endblock %}
               <span class="truncate">Save Speed</span>
             </button>
           </div>
+          <div id="effectiveClearSpeed" class="text-xs text-slate-500 mt-1"></div>
         </div>
       </div>