- 
                Notifications
    
You must be signed in to change notification settings  - Fork 11
 
feat: tv sidebar options #71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
Introduces TV app sidebar customization by adding a new tvSidebarLinks setting that allows administrators to configure custom sidebar links with optional content sections. This enhancement improves TV app navigation by enabling curated content pages for specific libraries or collections.
- Adds 
SidebarLinkmodel with support for libraries/collections and optional sections - Introduces 
SidebarLinkTypeenum to differentiate between library and collection links - Extends settings configuration to include 
tvSidebarLinkswith default empty array 
Reviewed Changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
| File | Description | 
|---|---|
| examples/full.yml | Provides comprehensive configuration examples for TV sidebar links with sections | 
| Jellyfin.Plugin.Streamyfin/Configuration/Settings/Settings.cs | Defines SidebarLink model and adds tvSidebarLinks property to Settings | 
| Jellyfin.Plugin.Streamyfin/Configuration/Settings/Enums.cs | Adds SidebarLinkType enum for library/collection differentiation | 
| Jellyfin.Plugin.Streamyfin/Configuration/PluginConfiguration.cs | Initializes tvSidebarLinks with empty array default | 
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
| 
               | 
          ||
| [NotNull] | ||
| [Display(Name = "TV sidebar links", Description = "Custom links to show in the TV app sidebar")] | ||
| public Lockable<SidebarLink[]?>? tvSidebarLinks { get; set; } | 
    
      
    
      Copilot
AI
    
    
    
      Sep 16, 2025 
    
  
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The nested nullable types Lockable<SidebarLink[]?>? create unnecessary complexity. Consider simplifying to Lockable<SidebarLink[]>? since the inner array can be empty instead of null.
| public Lockable<SidebarLink[]?>? tvSidebarLinks { get; set; } | |
| public Lockable<SidebarLink[]>? tvSidebarLinks { get; set; } | 
| marlinServerUrl = new() { value = "Enter marlin server url" }, | ||
| libraryOptions = new() { value = new LibraryOptions() }, | ||
| libraryOptions = new() { value = new LibraryOptions() }, | ||
| tvSidebarLinks = new() { value = new SidebarLink[] { } }, | 
    
      
    
      Copilot
AI
    
    
    
      Sep 16, 2025 
    
  
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider using Array.Empty<SidebarLink>() instead of new SidebarLink[] { } for better performance and clarity when initializing empty arrays.
| tvSidebarLinks = new() { value = new SidebarLink[] { } }, | |
| tvSidebarLinks = new() { value = Array.Empty<SidebarLink>() }, | 
Summary
settings.tvSidebarLinksto configure custom TV app sidebar links (name,type: library|collection,id,icon).Why
Enables richer navigation in the TV app by letting admins present curated, link-specific content pages, improving usability and discoverability.
Notes
Backward compatible: tvSidebarLinks and sections are optional.
UI/editor and consumption logic can be extended to render per-link sections similarly to home.sections.