Tags: mmcdole/kino
Tags
Add sort fields, sort tags, and rich inspector Extend domain entities with rating, content rating, and technical metadata (resolution, codec, file size, audio channels). Map these fields from both Plex and Jellyfin APIs. Add duration, rating, date added, release year, and episode number sort options. Display the active sort value as a right-aligned tag in list rows for at-a-glance context. Redesign the inspector panel with structured sections for metadata, technical details, and playback info instead of free-form text.
Fix global search not scrolling past visible results The result list rendered a fixed window starting at index 0, so selecting past the 10th item moved the cursor off-screen. Track a scroll offset and adjust it when the cursor leaves the visible window. Fixes #18
Fix race condition in async column content loading When async content loads (movies, shows, seasons, episodes, playlist items), handlers blindly updated the top column without verifying it was the one that requested the content. If the user navigated away before content arrived, the wrong column would be overwritten. Add contentID tracking to columns and validate before applying async content. Messages include IDs (e.g., LibraryID, ShowID) which are now checked against the column's expected ID before updating. Fixes #11
Add show_library_counts UI config option Library item counts are shown during sync to indicate progress. Previously they would always remain visible after sync completed. This adds a config option (default false) to let users keep counts visible if preferred.
Add BoltDB persistence for library caching Primary changes: - BoltDB-backed persistence for library data across sessions - Hierarchical caching: memory → disk → network - Server timestamp invalidation for cache freshness - Package-by-feature architecture reorganization
Extract keyboard handlers and centralize playlists helper Refactors keyboard.go to use consistent handler extraction pattern for all key bindings and modal input routing. This eliminates inline logic from the main switch statement and routeToModal, making the code easier to navigate and maintain. Also adds allLibraryEntries() helper to centralize knowledge about the synthetic Playlists library entry, replacing 3 scattered calls.
Add Jellyfin mixed library support and code cleanup Features: - Added support for Jellyfin 'Mixed' (Other) library type containing both movies and TV shows - Fixed global search navigation for items in mixed libraries Code Quality: - Removed dead/vestigial code identified by deadcode tool - Centralized key bindings and refactored TUI structure - Simplified Column interface and ListItem interfaces - Improved type safety and consistency throughout - Renamed SmartSync to SyncLibrary for clarity Fixes #6
Fix Plex playlist creation with machineIdentifier Plex CreatePlaylist requires a URI with the server's machineIdentifier. The previous implementation passed no URI, causing 400 errors. - Add machineIdentifier field to Plex client, fetched from /identity on init - Use canonical URI format (server://<machineId>/com.plexapp.plugins.library/...) for both CreatePlaylist and AddToPlaylist - Return error for empty playlists (Plex doesn't support them) - Update UI to show hint message instead of empty playlist modal - Remove "n New" from playlists footer since empty creation isn't supported
PreviousNext