From 7dbc17ec141352bb177dc52c0a48525070a63771 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Van=C3=AD=C4=8Dek?= Date: Mon, 2 Dec 2024 11:28:45 +0100 Subject: [PATCH] Hiding of root folders --- CinemaJellyfin/CinemaFilterFolder.cs | 3 ++- CinemaJellyfin/CinemaRootFolder.cs | 36 +++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/CinemaJellyfin/CinemaFilterFolder.cs b/CinemaJellyfin/CinemaFilterFolder.cs index 9758329..448f093 100644 --- a/CinemaJellyfin/CinemaFilterFolder.cs +++ b/CinemaJellyfin/CinemaFilterFolder.cs @@ -167,7 +167,8 @@ public abstract class CinemaFilterFolder : Folder { folder.ParentId = Guid.Empty; folder.IsRoot = true; - CinemaHost.LibraryManager.RootFolder.AddVirtualChild(folder); + if (!CinemaHost.LibraryManager.RootFolder.VirtualChildren.Contains(folder)) + CinemaHost.LibraryManager.RootFolder.AddVirtualChild(folder); } else { diff --git a/CinemaJellyfin/CinemaRootFolder.cs b/CinemaJellyfin/CinemaRootFolder.cs index fb5006e..594282d 100644 --- a/CinemaJellyfin/CinemaRootFolder.cs +++ b/CinemaJellyfin/CinemaRootFolder.cs @@ -18,6 +18,7 @@ namespace Jellyfin.Plugin.Cinema; /// public abstract class CinemaRootFolder : CinemaFilterFolder, ICollectionFolder { + private bool _hidden; /// /// Gets the item type for . Shall be kept in @@ -25,12 +26,41 @@ public abstract class CinemaRootFolder : CinemaFilterFolder, ICollectionFolder /// public abstract CollectionType? CollectionType { get; } - public override bool IsHidden => Hide; - internal bool Hide { get; set; } + public override bool IsHidden => _hidden; + internal bool Hide + { + get => _hidden; + set + { + var a = CinemaHost.LibraryManager.RootFolder.VirtualChildren; + if (a.Contains(this) == (!value)) + return; + + if (value) + { + // Remove ourselves + var temp = new List(); + while (!a.IsEmpty) + { + if (!a.TryTake(out BaseItem? b)) + continue; + + if (b == this) + break; + temp.Add(b); + } + foreach (var i in temp) + a.Add(i); + } + else + // Add ourselves + a.Add(this); + } + } /* - + public Task GetChannelImage(ImageType type, CancellationToken cancellationToken) { if (type == ImageType.Primary)