Movie Roulette v4.0 Release Notes
This release introduces major new features focused on user authentication and personalized movie caching.
New Features
- User Authentication & Authorization:
- Added a robust authentication system allowing users to log in via local accounts, Plex, Emby, or Jellyfin.
- Implemented user roles (admin vs. regular user).
- Added dedicated login (
/login) and first-run setup (/setup) pages. - Protected most routes, requiring users to be logged in.
- Added CSRF protection for relevant actions.
- Added Flask Secret Key implementation.
- User-Specific Experience:
- Movie lists, watched status, and service interactions (Plex, Emby, Jellyfin) are now tailored to the logged-in user.
- Implemented user-specific caching for Plex unwatched movies, improving performance for individual users.
- Added an admin interface (
/user_cache_admin) to view and manage user caches. - A new theme as test on the user_cache_admin page.
- Filtering Enhancements:
- The filter dropdown now shows the count of movies matching the selected criteria before applying the filter.
- The count updates live as filter options (genre, year, rating, watch status) are changed.
- UI & Performance Improvements:
- Added asynchronous loading for movie details (cast, crew, links, trailer, logo, collection info) after the main poster/title appears, improving initial page load speed.
- Added support for displaying movie logos (fetched from TMDB) via the
ENABLE_MOVIE_LOGOSsetting. - Added a setting (
LOAD_MOVIE_ON_START) to control whether a movie loads immediately or requires clicking a "Get Random Movie" button. - Improved description truncation (shows 2 lines on desktop before expanding).
- Added placeholder text ("Loading...") for asynchronously loaded content.
Backend & Technical Changes
- Refactored Core Logic (
movie_selector.py): Major overhaul to handle user sessions, context switching (g.user,g.plex_service,g.cache_manager), and service interaction based on the logged-in user. - Cache Management: Reworked
CacheManagerto support both a global cache (for admin/unauthenticated) and user-specific caches. Cache paths are now user-dependent. - Dependencies: Added
Flask-WTFfor form handling and CSRF protection. - Security: Improved Flask secret key handling (uses
FLASK_SECRET_KEYenvironment variable or generates a temporary one).
Frontend Changes
- Implemented logic for the new
LOAD_MOVIE_ON_STARTsetting and the "Get Random Movie" button. - Integrated the filtered movie count display and live updates into the filter UI.
- Added CSRF token handling to relevant fetch requests.
- Updated service switching logic to hide the button if only one service is available to the user.
- Refactored event listener setup for better reliability.
Bug Fixes
- Fixed a bug in trakt where the token wouldn't update.
- Fixed an issue in emby where the Genre filter would not work.
- Backend bug fixes.
- CSS bug fixes.
Full Changelog: v3.4...v4.0