aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Entities')
-rw-r--r--MediaBrowser.Controller/Entities/Audio/Artist.cs16
-rw-r--r--MediaBrowser.Controller/Entities/Audio/Audio.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs5
-rw-r--r--MediaBrowser.Controller/Entities/Audio/IHasMusicGenres.cs9
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs30
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicGenre.cs15
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs53
-rw-r--r--MediaBrowser.Controller/Entities/GameGenre.cs15
-rw-r--r--MediaBrowser.Controller/Entities/Genre.cs15
-rw-r--r--MediaBrowser.Controller/Entities/IItemByName.cs8
-rw-r--r--MediaBrowser.Controller/Entities/MusicVideo.cs5
-rw-r--r--MediaBrowser.Controller/Entities/Person.cs15
-rw-r--r--MediaBrowser.Controller/Entities/Studio.cs15
-rw-r--r--MediaBrowser.Controller/Entities/Video.cs5
-rw-r--r--MediaBrowser.Controller/Entities/Year.cs15
15 files changed, 196 insertions, 27 deletions
diff --git a/MediaBrowser.Controller/Entities/Audio/Artist.cs b/MediaBrowser.Controller/Entities/Audio/Artist.cs
index 274356b30..3d2d41fb7 100644
--- a/MediaBrowser.Controller/Entities/Audio/Artist.cs
+++ b/MediaBrowser.Controller/Entities/Audio/Artist.cs
@@ -1,11 +1,20 @@
-
+using MediaBrowser.Model.Dto;
+using System;
+using System.Collections.Generic;
+
namespace MediaBrowser.Controller.Entities.Audio
{
/// <summary>
/// Class Artist
/// </summary>
- public class Artist : BaseItem, IItemByName
+ public class Artist : BaseItem, IItemByName, IHasMusicGenres
{
+ public Artist()
+ {
+ ItemCounts = new ItemByNameCounts();
+ UserItemCounts = new Dictionary<Guid, ItemByNameCounts>();
+ }
+
public string LastFmImageUrl { get; set; }
/// <summary>
@@ -17,5 +26,8 @@ namespace MediaBrowser.Controller.Entities.Audio
return "Artist-" + Name;
}
+ public ItemByNameCounts ItemCounts { get; set; }
+
+ public Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; }
}
}
diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs
index ff632c981..beb25f1f2 100644
--- a/MediaBrowser.Controller/Entities/Audio/Audio.cs
+++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs
@@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.Entities.Audio
/// <summary>
/// Class Audio
/// </summary>
- public class Audio : BaseItem, IHasMediaStreams, IHasAlbumArtist
+ public class Audio : BaseItem, IHasMediaStreams, IHasAlbumArtist, IHasArtist, IHasMusicGenres
{
public Audio()
{
diff --git a/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs b/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs
index d9dac077f..77bd3fd66 100644
--- a/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs
+++ b/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs
@@ -5,4 +5,9 @@ namespace MediaBrowser.Controller.Entities.Audio
{
string AlbumArtist { get; }
}
+
+ public interface IHasArtist
+ {
+ bool HasArtist(string name);
+ }
}
diff --git a/MediaBrowser.Controller/Entities/Audio/IHasMusicGenres.cs b/MediaBrowser.Controller/Entities/Audio/IHasMusicGenres.cs
new file mode 100644
index 000000000..fdf939e35
--- /dev/null
+++ b/MediaBrowser.Controller/Entities/Audio/IHasMusicGenres.cs
@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Controller.Entities.Audio
+{
+ public interface IHasMusicGenres
+ {
+ List<string> Genres { get; }
+ }
+}
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
index 834fc6943..46b4bc73c 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
@@ -1,4 +1,5 @@
-using System.Linq;
+using System;
+using System.Linq;
using System.Runtime.Serialization;
namespace MediaBrowser.Controller.Entities.Audio
@@ -6,10 +7,15 @@ namespace MediaBrowser.Controller.Entities.Audio
/// <summary>
/// Class MusicAlbum
/// </summary>
- public class MusicAlbum : Folder, IHasAlbumArtist
+ public class MusicAlbum : Folder, IHasAlbumArtist, IHasArtist, IHasMusicGenres
{
+ public MusicAlbum()
+ {
+ Artists = new string[] { };
+ }
+
public string LastFmImageUrl { get; set; }
-
+
/// <summary>
/// Songs will group into us so don't also include us in the index
/// </summary>
@@ -60,23 +66,17 @@ namespace MediaBrowser.Controller.Entities.Audio
/// <returns><c>true</c> if the specified artist has artist; otherwise, <c>false</c>.</returns>
public bool HasArtist(string artist)
{
- return RecursiveChildren.OfType<Audio>().Any(i => i.HasArtist(artist));
+ return string.Equals(AlbumArtist, artist, StringComparison.OrdinalIgnoreCase)
+ || Artists.Contains(artist, StringComparer.OrdinalIgnoreCase);
}
- public string AlbumArtist
- {
- get
- {
- return RecursiveChildren
- .OfType<Audio>()
- .Select(i => i.AlbumArtist)
- .FirstOrDefault(i => !string.IsNullOrEmpty(i));
- }
- }
+ public string AlbumArtist { get; set; }
+
+ public string[] Artists { get; set; }
}
public class MusicAlbumDisc : Folder
{
-
+
}
}
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
index 452aaec58..3839f2a0b 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
@@ -1,4 +1,7 @@
-
+using MediaBrowser.Model.Dto;
+using System;
+using System.Collections.Generic;
+
namespace MediaBrowser.Controller.Entities.Audio
{
/// <summary>
@@ -6,6 +9,12 @@ namespace MediaBrowser.Controller.Entities.Audio
/// </summary>
public class MusicGenre : BaseItem, IItemByName
{
+ public MusicGenre()
+ {
+ ItemCounts = new ItemByNameCounts();
+ UserItemCounts = new Dictionary<Guid, ItemByNameCounts>();
+ }
+
/// <summary>
/// Gets the user data key.
/// </summary>
@@ -14,5 +23,9 @@ namespace MediaBrowser.Controller.Entities.Audio
{
return "MusicGenre-" + Name;
}
+
+ public ItemByNameCounts ItemCounts { get; set; }
+
+ public Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; }
}
}
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index fb2260769..4887af2cf 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -1537,5 +1537,58 @@ namespace MediaBrowser.Controller.Entities
// Refresh metadata
return RefreshMetadata(CancellationToken.None, forceSave: true);
}
+
+ /// <summary>
+ /// Validates that images within the item are still on the file system
+ /// </summary>
+ public void ValidateImages()
+ {
+ // Only validate paths from the same directory - need to copy to a list because we are going to potentially modify the collection below
+ var deletedKeys = Images
+ .ToList()
+ .Where(image => !File.Exists(image.Value))
+ .Select(i => i.Key)
+ .ToList();
+
+ // Now remove them from the dictionary
+ foreach (var key in deletedKeys)
+ {
+ Images.Remove(key);
+ }
+ }
+
+ /// <summary>
+ /// Validates that backdrops within the item are still on the file system
+ /// </summary>
+ public void ValidateBackdrops()
+ {
+ // Only validate paths from the same directory - need to copy to a list because we are going to potentially modify the collection below
+ var deletedImages = BackdropImagePaths
+ .Where(path => !File.Exists(path))
+ .ToList();
+
+ // Now remove them from the dictionary
+ foreach (var path in deletedImages)
+ {
+ BackdropImagePaths.Remove(path);
+ }
+ }
+
+ /// <summary>
+ /// Validates the screenshots.
+ /// </summary>
+ public void ValidateScreenshots()
+ {
+ // Only validate paths from the same directory - need to copy to a list because we are going to potentially modify the collection below
+ var deletedImages = ScreenshotImagePaths
+ .Where(path => !File.Exists(path))
+ .ToList();
+
+ // Now remove them from the dictionary
+ foreach (var path in deletedImages)
+ {
+ ScreenshotImagePaths.Remove(path);
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/GameGenre.cs b/MediaBrowser.Controller/Entities/GameGenre.cs
index f2462aac2..7ae4f8f73 100644
--- a/MediaBrowser.Controller/Entities/GameGenre.cs
+++ b/MediaBrowser.Controller/Entities/GameGenre.cs
@@ -1,8 +1,17 @@
-
+using MediaBrowser.Model.Dto;
+using System;
+using System.Collections.Generic;
+
namespace MediaBrowser.Controller.Entities
{
public class GameGenre : BaseItem, IItemByName
{
+ public GameGenre()
+ {
+ ItemCounts = new ItemByNameCounts();
+ UserItemCounts = new Dictionary<Guid, ItemByNameCounts>();
+ }
+
/// <summary>
/// Gets the user data key.
/// </summary>
@@ -11,5 +20,9 @@ namespace MediaBrowser.Controller.Entities
{
return "GameGenre-" + Name;
}
+
+ public ItemByNameCounts ItemCounts { get; set; }
+
+ public Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; }
}
}
diff --git a/MediaBrowser.Controller/Entities/Genre.cs b/MediaBrowser.Controller/Entities/Genre.cs
index e02a427e0..83fa57dfb 100644
--- a/MediaBrowser.Controller/Entities/Genre.cs
+++ b/MediaBrowser.Controller/Entities/Genre.cs
@@ -1,4 +1,7 @@
-
+using MediaBrowser.Model.Dto;
+using System;
+using System.Collections.Generic;
+
namespace MediaBrowser.Controller.Entities
{
/// <summary>
@@ -6,6 +9,12 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public class Genre : BaseItem, IItemByName
{
+ public Genre()
+ {
+ ItemCounts = new ItemByNameCounts();
+ UserItemCounts = new Dictionary<Guid, ItemByNameCounts>();
+ }
+
/// <summary>
/// Gets the user data key.
/// </summary>
@@ -14,5 +23,9 @@ namespace MediaBrowser.Controller.Entities
{
return "Genre-" + Name;
}
+
+ public ItemByNameCounts ItemCounts { get; set; }
+
+ public Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; }
}
}
diff --git a/MediaBrowser.Controller/Entities/IItemByName.cs b/MediaBrowser.Controller/Entities/IItemByName.cs
index 6d66acb70..380846d15 100644
--- a/MediaBrowser.Controller/Entities/IItemByName.cs
+++ b/MediaBrowser.Controller/Entities/IItemByName.cs
@@ -1,4 +1,7 @@
-
+using MediaBrowser.Model.Dto;
+using System;
+using System.Collections.Generic;
+
namespace MediaBrowser.Controller.Entities
{
/// <summary>
@@ -6,5 +9,8 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public interface IItemByName
{
+ ItemByNameCounts ItemCounts { get; set; }
+
+ Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; }
}
}
diff --git a/MediaBrowser.Controller/Entities/MusicVideo.cs b/MediaBrowser.Controller/Entities/MusicVideo.cs
index 6b2601687..207f76efd 100644
--- a/MediaBrowser.Controller/Entities/MusicVideo.cs
+++ b/MediaBrowser.Controller/Entities/MusicVideo.cs
@@ -1,9 +1,10 @@
-using MediaBrowser.Model.Entities;
+using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Model.Entities;
using System;
namespace MediaBrowser.Controller.Entities
{
- public class MusicVideo : Video
+ public class MusicVideo : Video, IHasArtist, IHasMusicGenres
{
/// <summary>
/// Gets or sets the artist.
diff --git a/MediaBrowser.Controller/Entities/Person.cs b/MediaBrowser.Controller/Entities/Person.cs
index 273a10acc..3e0798435 100644
--- a/MediaBrowser.Controller/Entities/Person.cs
+++ b/MediaBrowser.Controller/Entities/Person.cs
@@ -1,4 +1,7 @@
-
+using MediaBrowser.Model.Dto;
+using System;
+using System.Collections.Generic;
+
namespace MediaBrowser.Controller.Entities
{
/// <summary>
@@ -6,6 +9,16 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public class Person : BaseItem, IItemByName
{
+ public Person()
+ {
+ ItemCounts = new ItemByNameCounts();
+ UserItemCounts = new Dictionary<Guid, ItemByNameCounts>();
+ }
+
+ public ItemByNameCounts ItemCounts { get; set; }
+
+ public Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; }
+
/// <summary>
/// Gets the user data key.
/// </summary>
diff --git a/MediaBrowser.Controller/Entities/Studio.cs b/MediaBrowser.Controller/Entities/Studio.cs
index 57e560348..8bbf59173 100644
--- a/MediaBrowser.Controller/Entities/Studio.cs
+++ b/MediaBrowser.Controller/Entities/Studio.cs
@@ -1,4 +1,7 @@
-
+using MediaBrowser.Model.Dto;
+using System;
+using System.Collections.Generic;
+
namespace MediaBrowser.Controller.Entities
{
/// <summary>
@@ -6,6 +9,12 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public class Studio : BaseItem, IItemByName
{
+ public Studio()
+ {
+ ItemCounts = new ItemByNameCounts();
+ UserItemCounts = new Dictionary<Guid, ItemByNameCounts>();
+ }
+
/// <summary>
/// Gets the user data key.
/// </summary>
@@ -14,5 +23,9 @@ namespace MediaBrowser.Controller.Entities
{
return "Studio-" + Name;
}
+
+ public ItemByNameCounts ItemCounts { get; set; }
+
+ public Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; }
}
}
diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs
index 7ce008c5e..ed07e3175 100644
--- a/MediaBrowser.Controller/Entities/Video.cs
+++ b/MediaBrowser.Controller/Entities/Video.cs
@@ -136,6 +136,11 @@ namespace MediaBrowser.Controller.Entities
get { return Video3DFormat.HasValue; }
}
+ public bool IsHd
+ {
+ get { return MediaStreams != null && MediaStreams.Any(i => i.Type == MediaStreamType.Video && i.Width.HasValue && i.Width.Value >= 1280); }
+ }
+
/// <summary>
/// Gets the type of the media.
/// </summary>
diff --git a/MediaBrowser.Controller/Entities/Year.cs b/MediaBrowser.Controller/Entities/Year.cs
index c5235a07a..daaebdc85 100644
--- a/MediaBrowser.Controller/Entities/Year.cs
+++ b/MediaBrowser.Controller/Entities/Year.cs
@@ -1,4 +1,7 @@
-
+using MediaBrowser.Model.Dto;
+using System;
+using System.Collections.Generic;
+
namespace MediaBrowser.Controller.Entities
{
/// <summary>
@@ -6,6 +9,16 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public class Year : BaseItem, IItemByName
{
+ public Year()
+ {
+ ItemCounts = new ItemByNameCounts();
+ UserItemCounts = new Dictionary<Guid, ItemByNameCounts>();
+ }
+
+ public ItemByNameCounts ItemCounts { get; set; }
+
+ public Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; }
+
/// <summary>
/// Gets the user data key.
/// </summary>