raylim Claude (claude-sonnet-4.5) commited on
Commit
60e6798
·
unverified ·
1 Parent(s): 0c53eeb

feat: truncate long slide names in progress bar

Browse files

Added automatic truncation of long slide names in the progress bar
to improve readability and prevent UI overflow.

Changes:
- Added _truncate_name() helper function
- Truncates names longer than 40 characters
- Keeps file extension visible (e.g., "very_long_name...svs")
- Applied in SlideProgressWrapper for all progress messages

Examples:
- "short.svs" → "short.svs" (unchanged)
- "this_is_a_very_long_filename_that_should_be_truncated.svs"
→ "this_is_a_very_long_filename_that....svs" (40 chars)
- "TCGA-A1-A0SB-01Z-00-DX1.6a0ea716-a5f2-47f3-880b-537a5cdc2324.svs"
→ "TCGA-A1-A0SB-01Z-00-DX1.6a0ea716-....svs" (40 chars)

Benefits:
- Better progress bar readability
- Prevents UI overflow with very long TCGA filenames
- Extension always visible for file type identification

Testing:
- All 10 UI event tests pass
- All 3 generator behavior tests pass
- Verified truncation logic with multiple edge cases

Co-Authored-By: Claude (claude-sonnet-4.5) <noreply@anthropic.com>

Files changed (1) hide show
  1. src/mosaic/ui/app.py +24 -1
src/mosaic/ui/app.py CHANGED
@@ -186,6 +186,28 @@ def analyze_slides(
186
  ):
187
  global _model_download_thread, _model_download_complete, _core_models_complete
188
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
  # Initialize telemetry tracking
190
  from mosaic.telemetry import TelemetryTracker
191
 
@@ -311,7 +333,8 @@ def analyze_slides(
311
  self.base_progress = base_progress
312
  self.slide_idx = slide_idx
313
  self.total_slides = total_slides
314
- self.slide_name = slide_name
 
315
  self.slides_remaining = total_slides - slide_idx
316
 
317
  def __call__(self, current_progress=None, desc=None):
 
186
  ):
187
  global _model_download_thread, _model_download_complete, _core_models_complete
188
 
189
+ def _truncate_name(name: str, max_length: int = 40) -> str:
190
+ """Truncate long filenames for progress display.
191
+
192
+ Args:
193
+ name: Filename to truncate
194
+ max_length: Maximum length before truncation
195
+
196
+ Returns:
197
+ Truncated filename with ellipsis if needed
198
+ """
199
+ if len(name) <= max_length:
200
+ return name
201
+ # Keep the extension visible
202
+ stem = Path(name).stem
203
+ ext = Path(name).suffix
204
+ # Reserve space for extension (including dot) and ellipsis (3 chars)
205
+ available = max_length - len(ext) - 3
206
+ if available > 0:
207
+ return f"{stem[:available]}...{ext}"
208
+ # Edge case: extension itself is very long
209
+ return f"{name[:max_length-3]}..."
210
+
211
  # Initialize telemetry tracking
212
  from mosaic.telemetry import TelemetryTracker
213
 
 
333
  self.base_progress = base_progress
334
  self.slide_idx = slide_idx
335
  self.total_slides = total_slides
336
+ # Truncate long slide names for better progress display
337
+ self.slide_name = _truncate_name(slide_name)
338
  self.slides_remaining = total_slides - slide_idx
339
 
340
  def __call__(self, current_progress=None, desc=None):