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)