aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2017-08-11 02:29:49 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2017-08-11 02:29:49 -0400
commita7db7cd40cf303b4f95c25ac34bd7f947b084344 (patch)
treea4c0c2b25341ec468db2bc3d4db7a87f4dccc83f /Emby.Server.Implementations
parent900714c866a764e76ca4d6fb0d11833addc953b4 (diff)
reduce traffic from session player
Diffstat (limited to 'Emby.Server.Implementations')
-rw-r--r--Emby.Server.Implementations/Data/SqliteItemRepository.cs92
-rw-r--r--Emby.Server.Implementations/Dto/DtoService.cs8
-rw-r--r--Emby.Server.Implementations/Emby.Server.Implementations.csproj1
-rw-r--r--Emby.Server.Implementations/Library/LibraryManager.cs2
-rw-r--r--Emby.Server.Implementations/Sorting/AirTimeComparer.cs71
5 files changed, 64 insertions, 110 deletions
diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
index b7e2687ec..e8a9b2eaa 100644
--- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
@@ -345,7 +345,10 @@ namespace Emby.Server.Implementations.Data
// items by name
"create index if not exists idx_ItemValues6 on ItemValues(ItemId,Type,CleanValue)",
- "create index if not exists idx_ItemValues7 on ItemValues(Type,CleanValue,ItemId)"
+ "create index if not exists idx_ItemValues7 on ItemValues(Type,CleanValue,ItemId)",
+
+ // Used to update inherited tags
+ "create index if not exists idx_ItemValues8 on ItemValues(Type, ItemId, Value)",
};
connection.RunQueries(postQueries);
@@ -1293,16 +1296,13 @@ namespace Emby.Server.Implementations.Data
return false;
}
- if (_config.Configuration.SkipDeserializationForAudio)
+ if (type == typeof(Audio))
{
- if (type == typeof(Audio))
- {
- return false;
- }
- if (type == typeof(MusicAlbum))
- {
- return false;
- }
+ return false;
+ }
+ if (type == typeof(MusicAlbum))
+ {
+ return false;
}
return true;
@@ -4695,41 +4695,65 @@ namespace Emby.Server.Implementations.Data
private async Task UpdateInheritedTags(CancellationToken cancellationToken)
{
- var newValues = new List<Tuple<Guid, string>>();
+ var newValues = new List<Tuple<Guid, string[]>>();
- var commandText = "select Guid,(select group_concat(Tags, '|') from TypedBaseItems where (guid=outer.guid) OR (guid in (Select AncestorId from AncestorIds where ItemId=Outer.guid))) as NewInheritedTags from typedbaseitems as Outer";
+ var commandText = @"select guid,
+(select group_concat(Value, '|') from ItemValues where (ItemValues.ItemId = Outer.Guid OR ItemValues.ItemId in ((Select AncestorId from AncestorIds where AncestorIds.ItemId=Outer.guid))) and ItemValues.Type = 4) NewInheritedTags,
+(select group_concat(Value, '|') from ItemValues where ItemValues.ItemId = Outer.Guid and ItemValues.Type = 6) CurrentInheritedTags
+from typedbaseitems as Outer
+where (NewInheritedTags <> CurrentInheritedTags or (NewInheritedTags is null) <> (CurrentInheritedTags is null))
+limit 100";
using (WriteLock.Write())
{
using (var connection = CreateConnection())
{
- foreach (var row in connection.Query(commandText))
+ connection.RunInTransaction(db =>
{
- var id = row.GetGuid(0);
- string value = row.IsDBNull(2) ? null : row.GetString(2);
+ foreach (var row in connection.Query(commandText))
+ {
+ var id = row.GetGuid(0);
+ string value = row.IsDBNull(1) ? null : row.GetString(1);
- newValues.Add(new Tuple<Guid, string>(id, value));
- }
+ var valuesArray = string.IsNullOrWhiteSpace(value) ? new string[] { } : value.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
- Logger.Debug("UpdateInheritedTags - {0} rows", newValues.Count);
- if (newValues.Count == 0)
- {
- return;
- }
+ newValues.Add(new Tuple<Guid, string[]>(id, valuesArray));
+ }
- // write lock here
- using (var statement = PrepareStatement(connection, "Update TypedBaseItems set InheritedTags=@InheritedTags where Guid=@Guid"))
- {
- foreach (var item in newValues)
+ Logger.Debug("UpdateInheritedTags - {0} rows", newValues.Count);
+ if (newValues.Count == 0)
{
- var paramList = new List<object>();
+ return;
+ }
+
+ using (var insertStatement = PrepareStatement(connection, "insert into ItemValues (ItemId, Type, Value, CleanValue) values (@ItemId, 6, @Value, @CleanValue)"))
+ {
+ using (var deleteStatement = PrepareStatement(connection, "delete from ItemValues where ItemId=@ItemId and Type=6"))
+ {
+ foreach (var item in newValues)
+ {
+ var guidBlob = item.Item1.ToGuidBlob();
- paramList.Add(item.Item1);
- paramList.Add(item.Item2);
+ deleteStatement.Reset();
+ deleteStatement.TryBind("@ItemId", guidBlob);
+ deleteStatement.MoveNext();
- statement.Execute(paramList.ToArray());
+ foreach (var itemValue in item.Item2)
+ {
+ insertStatement.Reset();
+
+ insertStatement.TryBind("@ItemId", guidBlob);
+ insertStatement.TryBind("@Value", itemValue);
+
+ insertStatement.TryBind("@CleanValue", GetCleanValue(itemValue));
+
+ insertStatement.MoveNext();
+ }
+ }
+ }
}
- }
+
+ }, TransactionMode);
}
}
}
@@ -5458,8 +5482,10 @@ namespace Emby.Server.Implementations.Data
CheckDisposed();
+ var guidBlob = itemId.ToGuidBlob();
+
// First delete
- db.Execute("delete from ItemValues where ItemId=@Id", itemId.ToGuidBlob());
+ db.Execute("delete from ItemValues where ItemId=@Id", guidBlob);
using (var statement = PrepareStatement(db, "insert into ItemValues (ItemId, Type, Value, CleanValue) values (@ItemId, @Type, @Value, @CleanValue)"))
{
@@ -5475,7 +5501,7 @@ namespace Emby.Server.Implementations.Data
statement.Reset();
- statement.TryBind("@ItemId", itemId.ToGuidBlob());
+ statement.TryBind("@ItemId", guidBlob);
statement.TryBind("@Type", pair.Item1);
statement.TryBind("@Value", itemValue);
diff --git a/Emby.Server.Implementations/Dto/DtoService.cs b/Emby.Server.Implementations/Dto/DtoService.cs
index 1fab23b32..2d717dc2c 100644
--- a/Emby.Server.Implementations/Dto/DtoService.cs
+++ b/Emby.Server.Implementations/Dto/DtoService.cs
@@ -1119,8 +1119,7 @@ namespace Emby.Server.Implementations.Dto
// Include artists that are not in the database yet, e.g., just added via metadata editor
//var foundArtists = artistItems.Items.Select(i => i.Item1.Name).ToList();
- dto.ArtistItems = new List<NameIdPair>();
- dto.ArtistItems.AddRange(hasArtist.Artists
+ dto.ArtistItems = hasArtist.Artists
//.Except(foundArtists, new DistinctNameComparer())
.Select(i =>
{
@@ -1145,7 +1144,7 @@ namespace Emby.Server.Implementations.Dto
return null;
- }).Where(i => i != null));
+ }).Where(i => i != null).ToArray();
}
var hasAlbumArtist = item as IHasAlbumArtist;
@@ -1332,8 +1331,7 @@ namespace Emby.Server.Implementations.Dto
var series = item as Series;
if (series != null)
{
- dto.AirDays = series.AirDays.ToArray();
- dto.AirTime = series.AirTime;
+ dto.AirDays = new DayOfWeek[] {};
dto.Status = series.Status.HasValue ? series.Status.Value.ToString() : null;
}
diff --git a/Emby.Server.Implementations/Emby.Server.Implementations.csproj b/Emby.Server.Implementations/Emby.Server.Implementations.csproj
index d4976196c..38f51919a 100644
--- a/Emby.Server.Implementations/Emby.Server.Implementations.csproj
+++ b/Emby.Server.Implementations/Emby.Server.Implementations.csproj
@@ -249,7 +249,6 @@
<Compile Include="Social\SharingManager.cs" />
<Compile Include="Social\SharingRepository.cs" />
<Compile Include="Sorting\AiredEpisodeOrderComparer.cs" />
- <Compile Include="Sorting\AirTimeComparer.cs" />
<Compile Include="Sorting\AlbumArtistComparer.cs" />
<Compile Include="Sorting\AlbumComparer.cs" />
<Compile Include="Sorting\AlphanumComparator.cs" />
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs
index 271dac153..b4ba58cfd 100644
--- a/Emby.Server.Implementations/Library/LibraryManager.cs
+++ b/Emby.Server.Implementations/Library/LibraryManager.cs
@@ -1172,6 +1172,8 @@ namespace Emby.Server.Implementations.Library
progress.Report(percent * 100);
}
+ await ItemRepository.UpdateInheritedValues(cancellationToken).ConfigureAwait(false);
+
progress.Report(100);
}
diff --git a/Emby.Server.Implementations/Sorting/AirTimeComparer.cs b/Emby.Server.Implementations/Sorting/AirTimeComparer.cs
deleted file mode 100644
index bc05e9af3..000000000
--- a/Emby.Server.Implementations/Sorting/AirTimeComparer.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Sorting;
-using MediaBrowser.Model.Querying;
-using System;
-
-namespace Emby.Server.Implementations.Sorting
-{
- public class AirTimeComparer : IBaseItemComparer
- {
- /// <summary>
- /// Compares the specified x.
- /// </summary>
- /// <param name="x">The x.</param>
- /// <param name="y">The y.</param>
- /// <returns>System.Int32.</returns>
- public int Compare(BaseItem x, BaseItem y)
- {
- return DateTime.Compare(GetValue(x), GetValue(y));
- }
-
- /// <summary>
- /// Gets the value.
- /// </summary>
- /// <param name="x">The x.</param>
- /// <returns>System.String.</returns>
- private DateTime GetValue(BaseItem x)
- {
- var series = x as Series;
-
- if (series == null)
- {
- var season = x as Season;
-
- if (season != null)
- {
- series = season.Series;
- }
- else
- {
- var episode = x as Episode;
-
- if (episode != null)
- {
- series = episode.Series;
- }
- }
- }
-
- if (series != null)
- {
- DateTime result;
- if (DateTime.TryParse(series.AirTime, out result))
- {
- return result;
- }
- }
-
- return DateTime.MinValue;
- }
-
- /// <summary>
- /// Gets the name.
- /// </summary>
- /// <value>The name.</value>
- public string Name
- {
- get { return ItemSortBy.AirTime; }
- }
- }
-}