aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2016-08-27 15:53:08 -0400
committerGitHub <noreply@github.com>2016-08-27 15:53:08 -0400
commit6c156ce841eb530ddb2deca29bad948c73e84194 (patch)
treed164c774a57291a1149288e60b65b96ec9706624 /MediaBrowser.Server.Implementations
parenta8fb422fe47a46e4ad546a96b7263cfa7fec5ffd (diff)
parent633cdb99c2251711b73bb5cb6dca709b4497baed (diff)
Merge pull request #2112 from MediaBrowser/beta
Beta
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/Library/UserViewManager.cs2
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs7
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/TunerHosts/SatIp/SatIpDiscovery.cs4
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs94
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncRepository.cs142
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs4
6 files changed, 134 insertions, 119 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/UserViewManager.cs b/MediaBrowser.Server.Implementations/Library/UserViewManager.cs
index 319e715c3..5fffa3d1f 100644
--- a/MediaBrowser.Server.Implementations/Library/UserViewManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/UserViewManager.cs
@@ -283,7 +283,7 @@ namespace MediaBrowser.Server.Implementations.Library
ExcludeItemTypes = excludeItemTypes,
ExcludeLocationTypes = new[] { LocationType.Virtual },
Limit = limit * 5,
- ExcludeSourceTypes = parentIds.Length == 0 ? new[] { SourceType.Channel, SourceType.LiveTV } : new SourceType[] { },
+ SourceTypes = parentIds.Length == 0 ? new[] { SourceType.Library } : new SourceType[] { },
IsPlayed = request.IsPlayed
}, parentIds);
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index ccbcb910d..88017aa59 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -2475,7 +2475,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
return await _libraryManager.GetNamedView(name, CollectionType.LiveTv, name, cancellationToken).ConfigureAwait(false);
}
- public async Task<TunerHostInfo> SaveTunerHost(TunerHostInfo info)
+ public async Task<TunerHostInfo> SaveTunerHost(TunerHostInfo info, bool dataSourceChanged = true)
{
info = (TunerHostInfo)_jsonSerializer.DeserializeFromString(_jsonSerializer.SerializeToString(info), typeof(TunerHostInfo));
@@ -2508,7 +2508,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv
_config.SaveConfiguration("livetv", config);
- _taskManager.CancelIfRunningAndQueue<RefreshChannelsScheduledTask>();
+ if (dataSourceChanged)
+ {
+ _taskManager.CancelIfRunningAndQueue<RefreshChannelsScheduledTask>();
+ }
return info;
}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/SatIp/SatIpDiscovery.cs b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/SatIp/SatIpDiscovery.cs
index 43f48b37b..9d5dba282 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/SatIp/SatIpDiscovery.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/SatIp/SatIpDiscovery.cs
@@ -111,7 +111,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp
M3UUrl = info.M3UUrl,
IsEnabled = true
- }).ConfigureAwait(false);
+ }, true).ConfigureAwait(false);
}
else
{
@@ -120,7 +120,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.SatIp
existing.M3UUrl = info.M3UUrl;
existing.FriendlyName = info.FriendlyName;
existing.Tuners = info.Tuners;
- await _liveTvManager.SaveTunerHost(existing).ConfigureAwait(false);
+ await _liveTvManager.SaveTunerHost(existing, false).ConfigureAwait(false);
}
}
catch (OperationCanceledException)
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index 5c94d589d..5ece3dd82 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -92,7 +92,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
private IDbCommand _deleteImagesCommand;
private IDbCommand _saveImagesCommand;
- private IDbCommand _updateInheritedRatingCommand;
private IDbCommand _updateInheritedTagsCommand;
public const int LatestSchemaVersion = 109;
@@ -412,7 +411,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
"SeasonId",
"SeriesId",
"SeriesSortName",
- "PresentationUniqueKey"
+ "PresentationUniqueKey",
+ "InheritedParentalRatingValue"
};
private readonly string[] _mediaStreamSaveColumns =
@@ -611,11 +611,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
_saveStreamCommand.Parameters.Add(_saveStreamCommand, "@" + col);
}
- _updateInheritedRatingCommand = _connection.CreateCommand();
- _updateInheritedRatingCommand.CommandText = "Update TypedBaseItems set InheritedParentalRatingValue=@InheritedParentalRatingValue where Guid=@Guid";
- _updateInheritedRatingCommand.Parameters.Add(_updateInheritedRatingCommand, "@Guid");
- _updateInheritedRatingCommand.Parameters.Add(_updateInheritedRatingCommand, "@InheritedParentalRatingValue");
-
_updateInheritedTagsCommand = _connection.CreateCommand();
_updateInheritedTagsCommand.CommandText = "Update TypedBaseItems set InheritedTags=@InheritedTags where Guid=@Guid";
_updateInheritedTagsCommand.Parameters.Add(_updateInheritedTagsCommand, "@Guid");
@@ -942,7 +937,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
_saveItemCommand.GetParameter(index++).Value = item.Album;
- _saveItemCommand.GetParameter(index++).Value = item.IsVirtualItem || (!item.IsFolder && item.LocationType == LocationType.Virtual);
+ _saveItemCommand.GetParameter(index++).Value = item.IsVirtualItem;
var hasSeries = item as IHasSeries;
if (hasSeries != null)
@@ -1458,6 +1453,12 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
index++;
+ if (!reader.IsDBNull(index))
+ {
+ item.InheritedParentalRatingValue = reader.GetInt32(index);
+ }
+ index++;
+
return item;
}
@@ -3402,7 +3403,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
public async Task UpdateInheritedValues(CancellationToken cancellationToken)
{
- await UpdateInheritedParentalRating(cancellationToken).ConfigureAwait(false);
await UpdateInheritedTags(cancellationToken).ConfigureAwait(false);
}
@@ -3482,82 +3482,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
}
- private async Task UpdateInheritedParentalRating(CancellationToken cancellationToken)
- {
- var newValues = new List<Tuple<Guid, int>>();
-
- using (var cmd = _connection.CreateCommand())
- {
- cmd.CommandText = "select Guid,InheritedParentalRatingValue,(select Max(InheritedParentalRatingValue, (select COALESCE(MAX(InheritedParentalRatingValue),0) from TypedBaseItems where guid in (Select AncestorId from AncestorIds where ItemId=Outer.guid)))) as NewInheritedParentalRatingValue from typedbaseitems as Outer where InheritedParentalRatingValue <> NewInheritedParentalRatingValue";
-
- using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
- {
- while (reader.Read())
- {
- var id = reader.GetGuid(0);
- var newValue = reader.GetInt32(2);
-
- newValues.Add(new Tuple<Guid, int>(id, newValue));
- }
- }
- }
-
- Logger.Debug("UpdateInheritedParentalRatings - {0} rows", newValues.Count);
- if (newValues.Count == 0)
- {
- return;
- }
-
- await WriteLock.WaitAsync(cancellationToken).ConfigureAwait(false);
-
- IDbTransaction transaction = null;
-
- try
- {
- transaction = _connection.BeginTransaction();
-
- foreach (var item in newValues)
- {
- _updateInheritedRatingCommand.GetParameter(0).Value = item.Item1;
- _updateInheritedRatingCommand.GetParameter(1).Value = item.Item2;
-
- _updateInheritedRatingCommand.Transaction = transaction;
- _updateInheritedRatingCommand.ExecuteNonQuery();
- }
-
- transaction.Commit();
- }
- catch (OperationCanceledException)
- {
- if (transaction != null)
- {
- transaction.Rollback();
- }
-
- throw;
- }
- catch (Exception e)
- {
- Logger.ErrorException("Error running query:", e);
-
- if (transaction != null)
- {
- transaction.Rollback();
- }
-
- throw;
- }
- finally
- {
- if (transaction != null)
- {
- transaction.Dispose();
- }
-
- WriteLock.Release();
- }
- }
-
private static Dictionary<string, string[]> GetTypeMapDictionary()
{
var dict = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase);
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
index 6b7bcfa01..64ed00ded 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
@@ -47,15 +47,18 @@ namespace MediaBrowser.Server.Implementations.Sync
string[] queries = {
"create table if not exists SyncJobs (Id GUID PRIMARY KEY, TargetId TEXT NOT NULL, Name TEXT NOT NULL, Profile TEXT, Quality TEXT, Bitrate INT, Status TEXT NOT NULL, Progress FLOAT, UserId TEXT NOT NULL, ItemIds TEXT NOT NULL, Category TEXT, ParentId TEXT, UnwatchedOnly BIT, ItemLimit INT, SyncNewContent BIT, DateCreated DateTime, DateLastModified DateTime, ItemCount int)",
- "create index if not exists idx_SyncJobs on SyncJobs(Id)",
- "create index if not exists idx_SyncJobs1 on SyncJobs(TargetId)",
"create table if not exists SyncJobItems (Id GUID PRIMARY KEY, ItemId TEXT, ItemName TEXT, MediaSourceId TEXT, JobId TEXT, TemporaryPath TEXT, OutputPath TEXT, Status TEXT, TargetId TEXT, DateCreated DateTime, Progress FLOAT, AdditionalFiles TEXT, MediaSource TEXT, IsMarkedForRemoval BIT, JobItemIndex INT, ItemDateModifiedTicks BIGINT)",
- "create index if not exists idx_SyncJobItems1 on SyncJobItems(Id)",
"drop index if exists idx_SyncJobItems2",
"drop index if exists idx_SyncJobItems3",
+ "drop index if exists idx_SyncJobs1",
+ "drop index if exists idx_SyncJobs",
+ "drop index if exists idx_SyncJobItems1",
"create index if not exists idx_SyncJobItems4 on SyncJobItems(TargetId,ItemId,Status,Progress,DateCreated)",
+ "create index if not exists idx_SyncJobItems5 on SyncJobItems(TargetId,Status,ItemId,Progress)",
+
+ "create index if not exists idx_SyncJobs2 on SyncJobs(TargetId,Status,ItemIds,Progress)",
"pragma shrink_memory"
};
@@ -615,6 +618,8 @@ namespace MediaBrowser.Server.Implementations.Sync
{
var result = new Dictionary<string, SyncedItemProgress>();
+ var now = DateTime.UtcNow;
+
using (var connection = CreateConnection(true).Result)
{
using (var cmd = connection.CreateCommand())
@@ -641,37 +646,26 @@ namespace MediaBrowser.Server.Implementations.Sync
cmd.CommandText += " where " + string.Join(" AND ", whereClauses.ToArray());
}
- using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
+ cmd.CommandText += ";" + cmd.CommandText
+ .Replace("select ItemId,Status,Progress from SyncJobItems", "select ItemIds,Status,Progress from SyncJobs")
+ .Replace("'Synced'", "'Completed','CompletedWithError'");
+
+ //Logger.Debug(cmd.CommandText);
+
+ using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
+ LogQueryTime("GetSyncedItemProgresses", cmd, now);
+
while (reader.Read())
{
- var itemId = reader.GetString(0);
+ AddStatusResult(reader, result, false);
+ }
- if (!reader.IsDBNull(1))
+ if (reader.NextResult())
+ {
+ while (reader.Read())
{
- var status = (SyncJobItemStatus)Enum.Parse(typeof(SyncJobItemStatus), reader.GetString(1), true);
-
- if (status == SyncJobItemStatus.Synced)
- {
- result[itemId] = new SyncedItemProgress
- {
- Status = SyncJobItemStatus.Synced
- };
- }
- else
- {
- SyncedItemProgress currentStatus;
- double progress = reader.IsDBNull(2) ? 0.0 : reader.GetDouble(2);
-
- if (!result.TryGetValue(itemId, out currentStatus) || (currentStatus.Status != SyncJobItemStatus.Synced && progress >= currentStatus.Progress))
- {
- result[itemId] = new SyncedItemProgress
- {
- Status = status,
- Progress = progress
- };
- }
- }
+ AddStatusResult(reader, result, true);
}
}
}
@@ -681,6 +675,96 @@ namespace MediaBrowser.Server.Implementations.Sync
return result;
}
+ private void LogQueryTime(string methodName, IDbCommand cmd, DateTime startDate)
+ {
+ var elapsed = (DateTime.UtcNow - startDate).TotalMilliseconds;
+
+ var slowThreshold = 1000;
+
+#if DEBUG
+ slowThreshold = 50;
+#endif
+
+ if (elapsed >= slowThreshold)
+ {
+ Logger.Debug("{2} query time (slow): {0}ms. Query: {1}",
+ Convert.ToInt32(elapsed),
+ cmd.CommandText,
+ methodName);
+ }
+ else
+ {
+ //Logger.Debug("{2} query time: {0}ms. Query: {1}",
+ // Convert.ToInt32(elapsed),
+ // cmd.CommandText,
+ // methodName);
+ }
+ }
+
+ private void AddStatusResult(IDataReader reader, Dictionary<string, SyncedItemProgress> result, bool multipleIds)
+ {
+ if (reader.IsDBNull(0))
+ {
+ return;
+ }
+
+ var itemIds = new List<string>();
+
+ var ids = reader.GetString(0);
+
+ if (multipleIds)
+ {
+ itemIds = ids.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
+ }
+ else
+ {
+ itemIds.Add(ids);
+ }
+
+ if (!reader.IsDBNull(1))
+ {
+ SyncJobItemStatus status;
+ var statusString = reader.GetString(1);
+ if (string.Equals(statusString, "Completed", StringComparison.OrdinalIgnoreCase) ||
+ string.Equals(statusString, "CompletedWithError", StringComparison.OrdinalIgnoreCase))
+ {
+ status = SyncJobItemStatus.Synced;
+ }
+ else
+ {
+ status = (SyncJobItemStatus)Enum.Parse(typeof(SyncJobItemStatus), statusString, true);
+ }
+
+ if (status == SyncJobItemStatus.Synced)
+ {
+ foreach (var itemId in itemIds)
+ {
+ result[itemId] = new SyncedItemProgress
+ {
+ Status = SyncJobItemStatus.Synced
+ };
+ }
+ }
+ else
+ {
+ double progress = reader.IsDBNull(2) ? 0.0 : reader.GetDouble(2);
+
+ foreach (var itemId in itemIds)
+ {
+ SyncedItemProgress currentStatus;
+ if (!result.TryGetValue(itemId, out currentStatus) || (currentStatus.Status != SyncJobItemStatus.Synced && progress >= currentStatus.Progress))
+ {
+ result[itemId] = new SyncedItemProgress
+ {
+ Status = status,
+ Progress = progress
+ };
+ }
+ }
+ }
+ }
+ }
+
public QueryResult<SyncJobItem> GetJobItems(SyncJobItemQuery query)
{
return GetJobItemReader(query, BaseJobItemSelectText, GetJobItem);
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs b/MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs
index efd37fa00..a2b5851ac 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs
@@ -144,6 +144,10 @@ namespace MediaBrowser.Server.Implementations.Sync
{
mediaSource.Id = item.Id;
mediaSource.SupportsTranscoding = false;
+ if (mediaSource.Protocol == Model.MediaInfo.MediaProtocol.File)
+ {
+ mediaSource.ETag = item.Id;
+ }
}
public Task CloseMediaSource(string liveStreamId, CancellationToken cancellationToken)