aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Library/Validators/CountHelpers.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-09-10 14:56:00 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-09-10 14:56:00 -0400
commit740a10a4e3f85ffcfd26ec18263d4c78d4b14ecc (patch)
tree61462d05ce44c1bb17f48e557b02e14bb480816d /MediaBrowser.Server.Implementations/Library/Validators/CountHelpers.cs
parentd078edfb96fe2dcfebdc34e9189f85b0487ac242 (diff)
de-normalize item by name data. create counts during library scan for fast access.
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/Validators/CountHelpers.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/CountHelpers.cs155
1 files changed, 155 insertions, 0 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/CountHelpers.cs b/MediaBrowser.Server.Implementations/Library/Validators/CountHelpers.cs
new file mode 100644
index 000000000..ea4d887ea
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/Library/Validators/CountHelpers.cs
@@ -0,0 +1,155 @@
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.Entities.TV;
+using MediaBrowser.Model.Dto;
+using System;
+using System.Collections.Generic;
+
+namespace MediaBrowser.Server.Implementations.Library.Validators
+{
+ /// <summary>
+ /// Class CountHelpers
+ /// </summary>
+ internal static class CountHelpers
+ {
+ /// <summary>
+ /// Adds to dictionary.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="counts">The counts.</param>
+ internal static void AddToDictionary(BaseItem item, Dictionary<string, int> counts)
+ {
+ if (item is Movie)
+ {
+ IncrementCount(counts, "Movie");
+ }
+ else if (item is Trailer)
+ {
+ IncrementCount(counts, "Trailer");
+ }
+ else if (item is Series)
+ {
+ IncrementCount(counts, "Series");
+ }
+ else if (item is Game)
+ {
+ IncrementCount(counts, "Game");
+ }
+ else if (item is Audio)
+ {
+ IncrementCount(counts, "Audio");
+ }
+ else if (item is MusicAlbum)
+ {
+ IncrementCount(counts, "MusicAlbum");
+ }
+ else if (item is Episode)
+ {
+ IncrementCount(counts, "Episode");
+ }
+ else if (item is MusicVideo)
+ {
+ IncrementCount(counts, "MusicVideo");
+ }
+ else if (item is AdultVideo)
+ {
+ IncrementCount(counts, "AdultVideo");
+ }
+
+ IncrementCount(counts, "Total");
+ }
+
+ /// <summary>
+ /// Increments the count.
+ /// </summary>
+ /// <param name="counts">The counts.</param>
+ /// <param name="key">The key.</param>
+ internal static void IncrementCount(Dictionary<string, int> counts, string key)
+ {
+ int count;
+
+ if (counts.TryGetValue(key, out count))
+ {
+ count++;
+ counts[key] = count;
+ }
+ else
+ {
+ counts.Add(key, 1);
+ }
+ }
+
+ /// <summary>
+ /// Gets the counts.
+ /// </summary>
+ /// <param name="counts">The counts.</param>
+ /// <returns>ItemByNameCounts.</returns>
+ internal static ItemByNameCounts GetCounts(Dictionary<string, int> counts)
+ {
+ return new ItemByNameCounts
+ {
+ AdultVideoCount = GetCount(counts, "AdultVideo"),
+ AlbumCount = GetCount(counts, "MusicAlbum"),
+ EpisodeCount = GetCount(counts, "Episode"),
+ GameCount = GetCount(counts, "Game"),
+ MovieCount = GetCount(counts, "Movie"),
+ MusicVideoCount = GetCount(counts, "MusicVideo"),
+ SeriesCount = GetCount(counts, "Series"),
+ SongCount = GetCount(counts, "Audio"),
+ TrailerCount = GetCount(counts, "Trailer"),
+ TotalCount = GetCount(counts, "Total")
+ };
+ }
+
+ /// <summary>
+ /// Gets the count.
+ /// </summary>
+ /// <param name="counts">The counts.</param>
+ /// <param name="key">The key.</param>
+ /// <returns>System.Int32.</returns>
+ internal static int GetCount(Dictionary<string, int> counts, string key)
+ {
+ int count;
+
+ if (counts.TryGetValue(key, out count))
+ {
+ return count;
+ }
+
+ return 0;
+ }
+
+ /// <summary>
+ /// Sets the item counts.
+ /// </summary>
+ /// <param name="userId">The user id.</param>
+ /// <param name="media">The media.</param>
+ /// <param name="names">The names.</param>
+ /// <param name="masterDictionary">The master dictionary.</param>
+ internal static void SetItemCounts(Guid? userId, BaseItem media, List<string> names, Dictionary<string, Dictionary<Guid, Dictionary<string, int>>> masterDictionary)
+ {
+ foreach (var name in names)
+ {
+ Dictionary<Guid, Dictionary<string, int>> libraryCounts;
+
+ if (!masterDictionary.TryGetValue(name, out libraryCounts))
+ {
+ libraryCounts = new Dictionary<Guid, Dictionary<string, int>>();
+ masterDictionary.Add(name, libraryCounts);
+ }
+
+ var userLibId = userId ?? Guid.Empty;
+ Dictionary<string, int> userDictionary;
+
+ if (!libraryCounts.TryGetValue(userLibId, out userDictionary))
+ {
+ userDictionary = new Dictionary<string, int>();
+ libraryCounts.Add(userLibId, userDictionary);
+ }
+
+ AddToDictionary(media, userDictionary);
+ }
+ }
+ }
+}