Skip to content

Conversation

@nilleb
Copy link

@nilleb nilleb commented Oct 3, 2025

Description

I do not expect you to merge this, Rawa, but I wanted to show you what I did - and let you pick the features you like.
Just name the features you'd like to have merged and I'll try to do that.

The features present in this branch

  • the system tray icon now changes color during recordings
  • the system tray icon has a menu where to access a few options
    • Start|Stop recording (cmd+R)
    • Settings
    • Drag & Drop a recording and get the summary/transcription
    • Quit (cmd+Q)
    • shortcuts (configurable) for start/stop recording
    • use an openai model (hosted on the official API or on a Azure instance)
    • button to test the llm endpoint
    • the icon changes color according to the system tray settings (dark/light mode)
    • define a storage location for the recordings/transcripts/summaries (useful for Obsidian integration)
    • markdown format for the transcriptions, prettified
    • the recap window allows you to retry the transcription / summarization (in case of errors) and even mark the recording as complete if the recording is not recoverable
    • rationalized the panels (recording sources now go to the general settings, recaps are accessed directly through the menu)
    • all the ilnter issues of the project have been fixed
    • the unit tests are passing

Notable fixes:

  • connecting bluetooth devices was preventing the recording from starting (because of an incorrect sampling frequency)

All this has been done with Claude/Codex/Cursor (with little supervision of my own)

All the best

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Test improvement

Testing

  • Unit tests pass locally
  • New tests have been added for new functionality
  • Existing tests have been updated if needed

Checklist

  • I have performed a self-review of my own code
  • I have commented my code where necessary (following the no-comments rule)
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

Screenshots (if applicable)

Additional Notes

Ivo Bellin Salarin and others added 30 commits October 3, 2025 13:31
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
Ivo Bellin Salarin and others added 22 commits October 3, 2025 14:04
the sampling rate differs from the previously set one
Replace string concatenation with multiline literals in logger calls
to fix compilation errors and comply with SwiftLint line length rules.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
This comprehensive refactoring addresses all critical swiftlint violations
and significantly improves code quality and maintainability:

## Violations Fixed

### Closure Parameter Position (5 files) ✅
- Fixed closure parameters to be on same line as opening brace
- Updated in DropdownWindowManager, RecapsWindowManager, MicrophoneCapture+AudioEngine, LLMService

### Function Body Length (6 files) ✅
- ProcessTap.swift: Extracted helper methods (createTapDescription, createProcessTap, createAggregateDevice)
- AudioRecordingCoordinator.swift: Extracted startSystemAudioRecording, startMicrophoneRecording, getTapStreamDescription
- GlobalShortcutManager.swift: Replaced switch with dictionary lookup
- SummaryView.swift: Extracted stateHeader, actionSection, stateWarningMessage, button computed properties
- AlertToast.swift: Extracted view mode methods and handleTapGesture

### Cyclomatic Complexity (3 occurrences) ✅
- GlobalShortcutManager.getKeyString: Reduced from 57 to 1 using dictionary
- GlobalShortcutSettingsView.getKeyString: Replaced with dictionary lookup
- GlobalShortcutSettingsView.getKeyCodeFromKeyEquivalent: Simplified with dictionary + small switch

### Type Body Length (5 files) ✅
- UserPreferencesRepository: 345→176 lines (extracted performUpdate helper, consolidated update methods)
- ProcessingCoordinator: Extracted processSummarizationIfEnabled, saveTranscriptionResults
- GeneralSettingsViewModel: Extracted validation and model update methods
- GeneralSettingsView: Reduced by extracting preview mocks
- SummaryView: Extracted helper methods and computed properties

### File Length (3 files) ✅
- AlertToast.swift: 775→425 lines (45% reduction)
  - Created AnimatedCheckmark.swift
  - Created AlertToast+Modifiers.swift
  - Created AlertToastTypes.swift
  - Created View+Toast.swift
- GeneralSettingsView.swift: 444→332 lines
  - Created GeneralSettingsView+Preview.swift
- GeneralSettingsViewModelSpec.swift: Minor test file cleanup

## Files Created
- Recap/Frameworks/Toast/AnimatedCheckmark.swift
- Recap/Frameworks/Toast/AlertToast+Modifiers.swift
- Recap/Frameworks/Toast/AlertToastTypes.swift
- Recap/Frameworks/Toast/View+Toast.swift
- Recap/UseCases/Settings/Components/TabViews/GeneralSettingsView+Preview.swift

## Build Status
✅ All files compile successfully
✅ No swiftlint errors remaining
⚠️ 8 minor warnings remain (file/type length just above thresholds)

## Key Improvements
- Better code organization with logical method extraction
- Reduced complexity using dictionaries instead of large switch statements
- Improved reusability with extracted helpers (e.g., performUpdate())
- Better separation of concerns with extracted preview mocks
- Maintained functionality while improving maintainability

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
feat: drag and drop and test the configured LLM
@nilleb nilleb changed the title features: define a custom folder for the summaries and transcriptions, pretty formatting for the markdown export, use openai compatible endpoints, CLI to build and run the project locally, features: define a custom folder for the summaries and transcriptions, pretty formatting for the markdown export, use openai compatible endpoints, CLI to build and run the project locally, ... Oct 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants