Releases: dtseto/Hermes-master
v200b5
Patch to new skipping bug introduced in b4, fix login button bug, patch to rare intel infinite skip loop, new feature : add indicator for current station modes and other station modes in menu.
Introduces new unit tests for AudioBufferManager and AudioStreamer, including concurrency and buffering scenarios. Refactors AudioBufferManager for improved thread safety and error handling. Adds test hooks and debug logging to AudioStreamer for more reliable and deterministic testing for intel builds. Improves error handling in Pandora login methods. Fix login button bug. Also includes test output and debug log files.
v200b4 bug fix to stream crash
bug fixes for streaming crash
If signed and it doesn't open might not be executable try below
sudo chmod +x /Applications/Hermes.app/Contents/MacOS/Hermes
v200b3
v200b2
Audiostreaming fixes to reduce sound glitches from lost packets and retries. UI fixes to align with modern macos standards use nested vstack hstacks from 2019 rather than manual constraints in 2010 code. Faster UI loading and fewer glitches. Unfortunately had to delete buttons and some graphics.
- Audio pipeline (Sources/AudioStreamer/AudioStreamer.m, HermesTests/AudioStreamerRetryTests.m, docs): removed the legacy state-controller glue, made the state controller mandatory, added ADTS fallback,
startup buffering, and strict content-length handling so retries happen before Core Audio plays truncated data. Tests were updated to cover the retry bookkeeping. - UI/layout (Resources/Base.lproj/MainMenu.xib): rewrote the playback view using nested NSStackViews, removed the ad-hoc fixed widths that caused constraint spam, added explicit widths/minimums for the
playback stack/history pane, wrapped the album art so it stays square, and anchored the station list/history stacks so they don’t resize when cover art loads. - Hover fields (Sources/Views/LabelHoverShowFieldCell.m): fixed the custom cell to only subtract the hover overlay’s width when it’s visible, so artist/title/album labels no longer clip to a single
word.
\Auto Layout stable (no more “Unable to satisfy constraints” flurries), the hover labels show full text, the history view shows complete rows, and AudioStreamer handles corrupted AAC chunks by buffering/retrying instead of glitching.
In short AudioStreamer: remove legacy glue, add ADTS fallback & startup buffer
UI: rebuilt playback pane with stack views, fixed hover labels, stabilize album art
v2.0.0b1 prerelease 11.0+ req
Major bug release fix and making Mac OS 11.0+ requirement permanent thus increasing version number.
- error code, transient flag, and underlying NSError before teardown (Sources/AudioStreamer/AudioStreamer.h:88-125, Sources/AudioStreamer/
AudioStreamer.m:29-339).-
Introduced +[AudioStreamer isErrorCodeTransient:networkError:], codifying which errors are worth retrying, and ensured classifications are
logged without changing existing playback behaviour. -
Documented the hook (Documentation/AudioStreamerErrorHandling.md:1-9) and added AudioStreamerErrorClassificationTests to validate the
helper and notification payload (HermesTests/AudioStreamerErrorClassificationTests.m:1-59). -
Adjusted header nullability annotations so new APIs compile cleanly with strict warnings.
• Input Monitoring reminder now respects a “don’t ask again” flow and moves the opt‑in to Preferences so it stops nagging after the first
prompt. -
Added a third “Don’t Remind Me Again” choice to the permission alert and gated auto-prompts behind a new inputMonitoringReminderEnabled
toggle so reminders stop once dismissed (Sources/Controllers/PlaybackController.m:90-173, Sources/HermesAppDelegate.m:667-715). -
Registered the new default and wired the status-menu reminder to disappear when the toggle is off (Sources/HermesAppDelegate.m:333-352,
Sources/HermesAppDelegate.m:667-715). -
Surfaced a “Enable Input Monitoring Reminder…” link in Preferences ▸ Playback that appears after suppression, updates the explanatory
copy, and lets users re-enable the prompt on demand (Sources/Controllers/PreferencesController.h:13-38, Sources/Controllers/
PreferencesController.m:100-226). -
Synced the reminder toggle with the “Bind media keys” checkbox so disabling media keys also silences the reminder (Sources/Controllers/
PreferencesController.m:148-178). -
Updated the input-monitoring test suite to cover the new preference semantics and keep existing permission tests passing (HermesTests/
InputMonitoringReminderTests.m:5-143, HermesTests/MediaPermissionTests.m:1-61, HermesTests/PlaybackControllerTests.m:150-180).
-
• - Dropped the persisted stream queue when decoding Station to avoid replaying stale URLs, zeroing lastKnownSeekTime, and flagging a fresh
fetch while keeping the last-known song for UI (Sources/Pandora/Station.m:92-140).
- Added a safety guard around attemptingNewSong: so we don’t index an empty queue when the restored state has no pending tracks (Sources/
Pandora/Station.m:196-200). - Updated the secure-coding tests to expect the queue to be cleared (but the last song retained) after a round-trip (HermesTests/
SecureCodingPersistenceTests.m:132-146).
• - Adopted NSSecureCoding end‑to‑end for Song and Station, adding defensive decode helpers and tightening encode/decode logic so archives stay
type-safe.
- Forced history and playback persistence to write with requiresSecureCoding:YES, but kept a one-time legacy fallback that rewrites old blobs
into the secure format so upgrades still work. - Added SecureCodingPersistenceTests to exercise the secure round-trip and legacy→secure migration paths.
- Fixed header/includes so both app and test targets resolve the AudioStreamer playlist dependency and history imports consistently.
improves compatibility future versions with station list and history playing list
• Wrapped initializeModernAudioSystem in autorelease pools to keep startup allocations tightly scoped, and added a per-iteration pool plus an
inner pool for the async AAC warm-up. No tests were run for this refactor.
- Added the PlaybackSleepLockTests suite that stubs a lightweight PlaybackController to verify pause/play behavior and flag resets across
screensaver and screen-lock notifications (HermesTests/PlaybackSleepLockTests.m:1).
Refined proxy validation so we no longer block on NSHost during setHTTPProxy:—we trim/validate host/port locally and leave DNS work to the
existing async validator. Added a regression test that covers whitespace trimming and makes sure empty hosts are rejected.
• Added a consistent “Input Monitoring required” reminder across the app: playback startup now checks media-key readiness, the Preferences
toggle prompts again when binding media keys, and the status-bar menu gains a contextual “Enable Media Keys…” entry with live visibility.
Centralized helper logic in PlaybackController to reopen System Settings, decide when reminders should appear, and keep menu state in sync
through HermesAppDelegate. Verified reminder behavior with the new HermesTests/InputMonitoringReminderTests.m, which stubs the controller/
delegate to ensure reminders fire and hide as expected.
• - Added connection-level session tracking so every URLConnection records its active NSURLSession, supports reconfiguration, and exposes an
API to invalidate cached sessions (Sources/URLConnection.h:5, Sources/URLConnection.m:7, Sources/URLConnection.m:325).
- Updated the preferences flow to remember the last proxy selection and trigger a cache reset whenever users return to “System
proxy,” ensuring stale proxy sessions are torn down (Sources/Controllers/PreferencesController.m:7, Sources/Controllers/
PreferencesController.m:156, Sources/Controllers/PreferencesController.m:181). - Expanded the proxy test suite with mock sessions/data tasks to confirm that resetting cached sessions does invalidate any tracked proxy
session (HermesTests/URLConnectionProxyTests.m:7, HermesTests/URLConnectionProxyTests.m:24, HermesTests/URLConnectionProxyTests.m:153).
Audiostreamer refactor into separate files
fix to delete station setting to stop centering that causes view to glitch
1.32b12 bug fixes
start fix - Routed the status-item window activation back onto the main thread so AppKit isn’t touched from a background queue (Sources/HermesAppDelegate.m:644-651).
start fix - Added AX permission checks before starting the media-key tap, prompting users and skipping setup when Input Monitoring isn’t granted (Sources/Controllers/PlaybackController.m:11-203).
Play/pause button fix - Replaced the deprecated menu/toolbar validation hooks with a single validateUserInterfaceItem: implementation that updates Play/Pause titles and enables rules for both menus and toolbar buttons
(Sources/Controllers/PlaybackController.h:16, Sources/Controllers/PlaybackController.m:710-760).
delete station added back - Injected a “Delete Station…” item into the Pandora menu at launch so it reuses the existing deleteSelected: behavior without editing the nib (Sources/HermesAppDelegate.m:338-366).
1.32b11 UI Refresh and macOS 11.0 Minimum
Big ui fix and minimum os increase to 11.0. BIG change in UI flatter UI now that drawers are removed in High Sierra replaced with views in main view that mimic web layout. Minor changes to work with 11.0 remove deprecated code. Removed references to growler and drawers. EDIT quick patch for crashing error Strong reference to fix "Block Retain Cycle" or "Completion Handler Retain Cycle".
1.32b10 double stream fixes
Double stream fixes mostly.
Minimum deployment target raised to 10.12, remove nskeydown nsdeviceindependentmodifier, nsalternatekeymask, nscompositesourceover.
Double playing fixes, automatic station restart caused some double playing, in future manually refresh, added extra state locking, state transition recovery, state warnings, extra logging for audio, logging for when playstation is called,
increase buffering for newer computers
1.32b8 apple silicon
nsurl session refactor, better compatiblity on newer machines 10.11+ target, App should be apple developer signed.
1.32b9 streaming fixes
Streaming fixes by using newer audio apis, logging cleaned up, added hardened runtime network and memory settings for better compatibility with newer mac os versions.
Built for apple silicon and intel below signed/notarized version available.