github JFLXCLOUD/NeXroll v1.7.7
Nexroll v1.7.7

latest releases: v1.9.6, v1.8.9, v1.7.16...
one month ago

NeXroll v1.7.7 Release Notes

Release Date: 11-11-2025

Overview

NeXroll v1.7.7 is a significant update featuring UI improvements, installer optimizations, and critical bug fixes:

  • New: Schedule playback mode dropdown selector (replaces dual checkboxes)
  • Improved: Smaller installer size (44.73 MB, down from ~48 MB)
  • Improved: Cleaner installation directory structure
  • Fixed: Schedule "Invalid Date" display issue
  • Fixed: Schedule time zone shifting (times were shifting 4-5 hours) - Issue #9
  • Fixed: Backup/restore database foreign key constraint errors - Issue #10

New Features & Improvements

Community Prerolls - Rename Before Download (#8)

  • New rename dialog appears before downloading community prerolls
  • Automatically removes bug number prefix from default name (e.g., Bug 123 - Holiday PrerollHoliday Preroll)
  • Community preroll ID now stored in description field for easy reference
  • Press Enter to quickly confirm download with custom name

Schedule Playback Mode Dropdown

Improvement: Replaced dual checkbox system with single dropdown selector for choosing between Random and Sequential playback modes.

Benefits:

  • Mutually exclusive selection: Prevents accidentally enabling both Random and Sequential modes simultaneously
  • Clearer UI: Single dropdown makes it obvious only one mode can be active at a time
  • Better user experience: More intuitive control that matches expected behavior

Location: Schedule creation and editing forms


Installer Optimization

Improvements: Significant reduction in installer size and cleaner installation directory structure.

Changes:

  • Smaller installer: Reduced from ~48 MB to 44.73 MB (~3 MB reduction)
  • Bundled assets: Frontend files now embedded inside NeXroll.exe instead of separate folder
  • Embedded icons: All executable icons embedded directly (no external icon files needed)
  • Cleaner directory: Installation folder now contains only executables and batch file
  • Automatic cleanup: Installer removes legacy resources/ and frontend/ folders from previous versions during upgrade

Before (v1.7.6 (Unreleased) and earlier):

C:\Program Files\NeXroll\
├── NeXroll.exe
├── NeXrollService.exe
├── NeXrollTray.exe
├── setup_plex_token.exe
├── start_windows.bat
├── uninstall.exe
├── resources\                    ← Removed
│   ├── icon_16x16.ico
│   └── icon_32x32.ico
└── frontend\                     ← Removed
    └── build\
        ├── index.html
        ├── static\
        └── ...

After (v1.7.7):

C:\Program Files\NeXroll\
├── NeXroll.exe (with bundled frontend)
├── NeXrollService.exe
├── NeXrollTray.exe
├── setup_plex_token.exe
├── start_windows.bat
└── uninstall.exe

Technical Details:

  • Frontend assets extracted to temporary _MEIPASS folder at runtime
  • Icons embedded during PyInstaller build process
  • No loss of functionality - all features work exactly the same

Fixed Issues

Edit Preroll Modal Rendering

  • Fixed modal not appearing when clicking edit button on prerolls from non-Categories tabs
  • Edit Preroll modal now renders globally and appears immediately regardless of active tab
  • Improved modal architecture for better cross-tab functionality

Improved Error Messages

  • Delete category now shows specific error: "Cannot delete category that is in use"
  • Delete schedule errors now display detailed backend messages
  • Delete preroll errors now show clear explanations
  • Update operations display helpful error details instead of generic HTTP status codes

Installer - ProgramData Storage

  • Changed default preroll storage from Documents\NeXroll\Prerolls to %ProgramData%\NeXroll\Prerolls
  • Prevents creation of unused empty folders in user Documents directory
  • Existing installations continue using their configured path from registry

Schedule "Invalid Date" Display

Problem: After creating a schedule, the displayed dates would change to "Invalid Date" after a few seconds when the page auto-refreshes.

Root Cause: The backend API was returning timezone offsets in two different formats:

  • POST /schedules returned: 2025-11-11T14:30:00Z (with Z suffix)
  • GET /schedules returned: 2025-11-11T14:30:00-05:00 (with timezone offset)

The frontend's date parser only recognized the Z and positive + timezone indicators, but not negative - offsets. This caused it to incorrectly append a Z to dates with negative offsets, creating invalid date strings like 2025-11-11T14:30:00-05:00Z.

Solution: Updated frontend ensureUtcIso() function to recognize both positive and negative timezone offsets using regex pattern /[+-]\d{2}:\d{2}$/.

Verification: Schedule dates now remain stable and display correctly even after the 30-second auto-refresh polling.


Issue #9 - Schedule Timezone Shifting

Problem: When creating schedules with specific times (e.g., 5:00 AM), the system would display shifted times (e.g., 1:00 AM) due to incorrect timezone handling in the API response.

Root Cause: The API was appending timezone indicators ('Z') to naive datetime objects, which JavaScript's Date parser would interpret as UTC and shift to browser local time. Additionally, times weren't being explicitly converted at API boundaries.

Solution: Implemented comprehensive UTC-based datetime storage with user timezone conversion at all API boundaries:

  • On Schedule Create/Update: Frontend sends local time → parse → localize to user's timezone → convert to UTC → store
  • On Schedule Get: Retrieve UTC from database → assume naive datetime is UTC → convert to user's timezone → return without 'Z' indicator
  • Uses pytz library for robust timezone handling
  • Respects user's configured timezone from application settings

Verification: Users can now create schedules and times display exactly as entered without shifting.


Issue #10 - Backup/Restore Foreign Key Error

Problem: Backup and restore operations were failing with foreign key constraint violations when deleting categories: FOREIGN KEY constraint failed.

Root Cause: Incorrect deletion order during restore. Multiple database tables had foreign key references to the categories table:

  • preroll_categories (junction table)
  • genre_maps
  • schedules (category_id and fallback_category)
  • holiday_presets
  • prerolls
  • settings.active_category

Solution:

  1. Reordered deletion sequence to clear all foreign key references first
  2. Implemented category ID mapping to handle auto-incremented ID changes during restore
  3. Proper deletion order:
    • Delete preroll_categories junction table first
    • Delete genre_maps
    • Clear settings.active_category field
    • Delete schedules
    • Delete holiday_presets
    • Delete prerolls
    • Finally delete categories

Verification: Users can now successfully backup and restore databases without foreign key errors.


Technical Changes

Frontend Code (NeXroll/frontend/src/App.js)

  • Modified: Schedule form - replaced dual checkboxes with <select> dropdown for playback mode
  • Modified: ensureUtcIso() function - added regex to detect negative timezone offsets /[+-]\d{2}:\d{2}$/
  • Improved: Playback mode state management - now uses single boolean with mutually exclusive dropdown

Backend Code (NeXroll/backend/main.py)

  • Added: import pytz for timezone support
  • Modified: POST /schedules endpoint - converts user's local time to UTC before storage
  • Modified: GET /schedules endpoint - converts UTC times back to user's local timezone for display
  • Modified: PUT /schedules endpoint - same timezone conversion logic as create
  • Modified: restore_database() function - proper FK deletion order and category ID mapping
  • Added: ScheduleResponse.Config class with JSON encoders for datetime serialization
  • Added: Debug logging for troubleshooting timezone conversions

PyInstaller Build (*.spec files)

  • Modified: NeXroll.spec - frontend assets bundled via datas parameter
  • Modified: NeXrollService.spec - corrected icon path to NeXroll_ICON\icon_48x48.ico
  • Modified: setup_plex_token.spec - corrected icon path to NeXroll_ICON\icon_48x48.ico
  • Improved: All executables now have proper NeXroll branding icons embedded

Dependencies (requirements.txt)

  • Added: pytz==2024.1 for timezone handling

Installation

Windows Users

Download and run the installer:

NeXroll_Installer.exe

Features:

  • Installs v1.7.7 executables with all improvements and bug fixes
  • Smaller size: 44.73 MB (down from ~48 MB in previous versions)
  • Cleaner installation: Only essential executables and batch file
  • Automatic cleanup: Removes legacy resources/ and frontend/ folders from older versions
  • Automatically clears old registry entries (supports upgrades from earlier versions)
  • Creates start menu shortcuts
  • Configures database and preroll storage directories
  • Optional: Install FFmpeg, NeXroll Windows Service, and Plex Token setup

Docker Users

If using Docker, pull the latest image to get v1.7.7:

docker pull ghcr.io/jbrns/nexroll:latest

The Docker image will automatically include the updated backend code and pytz dependency.


Known Limitations

  • Timezone conversion assumes user has their system timezone correctly configured in NeXroll settings
  • Schedule times are stored as UTC in the database, but displayed in user's configured timezone
  • Docker container uses UTC timezone by default; set TZ environment variable to use local timezone

Changelog

Added

  • Community Prerolls - Rename Before Download (#8)
  • Comprehensive UTC-based datetime handling with user timezone conversion
  • Timezone-aware schedule creation, update, and retrieval
  • Proper foreign key deletion order for backup/restore operations
  • Category ID mapping during restore to handle auto-incremented ID changes
  • Registry cleanup during installation upgrade
  • Debug logging for timezone conversion troubleshooting

Fixed

  • #9: Schedule times no longer shift when created or viewed
  • #10: Backup/restore no longer fails with foreign key constraint errors
  • Installer now correctly updates version registry on upgrade
  • System tray application will report correct v1.7.7 version after install

Changed

  • API responses no longer include 'Z' timezone indicator on naive datetime objects
  • Database schema behavior unchanged; continues using naive datetime storage with UTC assumption

Special Thanks

Thanks to all users who reported issues and helped identify the root causes of these bugs. Your feedback is essential for improving NeXroll!


Support

For issues, questions, or feedback:


Happy prerolling!

Don't miss a new NeXroll release

NewReleases is sending notifications on new releases.