aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model/Entities/Folder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Model/Entities/Folder.cs')
-rw-r--r--MediaBrowser.Model/Entities/Folder.cs96
1 files changed, 96 insertions, 0 deletions
diff --git a/MediaBrowser.Model/Entities/Folder.cs b/MediaBrowser.Model/Entities/Folder.cs
new file mode 100644
index 000000000..6af9bf259
--- /dev/null
+++ b/MediaBrowser.Model/Entities/Folder.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.IO;
+using Newtonsoft.Json;
+
+namespace MediaBrowser.Model.Entities
+{
+ public class Folder : BaseItem
+ {
+ public bool IsRoot { get; set; }
+
+ public bool IsVirtualFolder
+ {
+ get
+ {
+ return Parent != null && Parent.IsRoot;
+ }
+ }
+
+ [JsonIgnore]
+ public BaseItem[] Children { get; set; }
+
+ [JsonIgnore]
+ public IEnumerable<Folder> FolderChildren { get { return Children.OfType<Folder>(); } }
+
+ public Folder GetFolderByName(string name)
+ {
+ return FolderChildren.FirstOrDefault(f => System.IO.Path.GetFileName(f.Path).Equals(name, StringComparison.OrdinalIgnoreCase));
+ }
+
+ /// <summary>
+ /// Finds an item by ID, recursively
+ /// </summary>
+ public BaseItem FindById(Guid id)
+ {
+ if (Id == id)
+ {
+ return this;
+ }
+
+ foreach (BaseItem item in Children)
+ {
+ if (item.Id == id)
+ {
+ return item;
+ }
+ }
+
+ foreach (Folder folder in FolderChildren)
+ {
+ BaseItem item = folder.FindById(id);
+
+ if (item != null)
+ {
+ return item;
+ }
+ }
+
+ return null;
+ }
+
+ /// <summary>
+ /// Finds an item by path, recursively
+ /// </summary>
+ public BaseItem FindByPath(string path)
+ {
+ if (Path.Equals(path, StringComparison.OrdinalIgnoreCase))
+ {
+ return this;
+ }
+
+ foreach (BaseItem item in Children)
+ {
+ if (item.Path.Equals(path, StringComparison.OrdinalIgnoreCase))
+ {
+ return item;
+ }
+ }
+
+ foreach (Folder folder in FolderChildren)
+ {
+ BaseItem item = folder.FindByPath(path);
+
+ if (item != null)
+ {
+ return item;
+ }
+ }
+
+ return null;
+ }
+ }
+}