Skip to content

Tags: mmcdole/kino

Tags

v0.4.1

Toggle v0.4.1's commit message
Update demo gif

v0.4.0

Toggle v0.4.0's commit message
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.

v0.3.3

Toggle v0.3.3's commit message
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

v0.3.2

Toggle v0.3.2's commit message
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

v0.3.1

Toggle v0.3.1's commit message
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.

v0.3.0

Toggle v0.3.0's commit message
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

v0.2.3

Toggle v0.2.3's commit message
Add version flag support

Users can now check the version with -v or --version flags.
Version is baked in at build time via ldflags in CI releases.

v0.2.2

Toggle v0.2.2's commit message
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.

v0.2.1

Toggle v0.2.1's commit message
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

v0.2.0

Toggle v0.2.0's commit message
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