aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Api/ApiEntryPoint.cs23
-rw-r--r--MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs40
-rw-r--r--MediaBrowser.Api/Reports/ReportsService.cs33
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs33
-rw-r--r--MediaBrowser.Api/UserLibrary/PlaystateService.cs7
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs67
-rw-r--r--MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs3
-rw-r--r--MediaBrowser.Controller/Persistence/IItemRepository.cs23
-rw-r--r--MediaBrowser.Dlna/Didl/DidlBuilder.cs20
-rw-r--r--MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs2
-rw-r--r--MediaBrowser.Providers/Manager/ImageSaver.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs149
-rw-r--r--MediaBrowser.Server.Implementations/Session/SessionManager.cs4
-rw-r--r--MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj3
15 files changed, 97 insertions, 314 deletions
diff --git a/MediaBrowser.Api/ApiEntryPoint.cs b/MediaBrowser.Api/ApiEntryPoint.cs
index 55f191f1a..117ff2305 100644
--- a/MediaBrowser.Api/ApiEntryPoint.cs
+++ b/MediaBrowser.Api/ApiEntryPoint.cs
@@ -63,6 +63,15 @@ namespace MediaBrowser.Api
_mediaSourceManager = mediaSourceManager;
Instance = this;
+ _sessionManager.PlaybackProgress += _sessionManager_PlaybackProgress;
+ }
+
+ void _sessionManager_PlaybackProgress(object sender, PlaybackProgressEventArgs e)
+ {
+ if (!string.IsNullOrWhiteSpace(e.PlaySessionId))
+ {
+ PingTranscodingJob(e.PlaySessionId, e.IsPaused);
+ }
}
/// <summary>
@@ -300,26 +309,31 @@ namespace MediaBrowser.Api
PingTimer(job, false);
}
}
- internal void PingTranscodingJob(string playSessionId)
+ internal void PingTranscodingJob(string playSessionId, bool? isUserPaused)
{
if (string.IsNullOrEmpty(playSessionId))
{
throw new ArgumentNullException("playSessionId");
}
- //Logger.Debug("PingTranscodingJob PlaySessionId={0}", playSessionId);
+ //Logger.Debug("PingTranscodingJob PlaySessionId={0} isUsedPaused: {1}", playSessionId, isUserPaused);
- var jobs = new List<TranscodingJob>();
+ List<TranscodingJob> jobs;
lock (_activeTranscodingJobs)
{
// This is really only needed for HLS.
// Progressive streams can stop on their own reliably
- jobs = jobs.Where(j => string.Equals(playSessionId, j.PlaySessionId, StringComparison.OrdinalIgnoreCase)).ToList();
+ jobs = _activeTranscodingJobs.Where(j => string.Equals(playSessionId, j.PlaySessionId, StringComparison.OrdinalIgnoreCase)).ToList();
}
foreach (var job in jobs)
{
+ if (isUserPaused.HasValue)
+ {
+ //Logger.Debug("Setting job.IsUserPaused to {0}. jobId: {1}", isUserPaused, job.Id);
+ job.IsUserPaused = isUserPaused.Value;
+ }
PingTimer(job, true);
}
}
@@ -655,6 +669,7 @@ namespace MediaBrowser.Api
public object ProcessLock = new object();
public bool HasExited { get; set; }
+ public bool IsUserPaused { get; set; }
public string Id { get; set; }
diff --git a/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs b/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs
index 2719b1faf..f766f46b1 100644
--- a/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs
+++ b/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs
@@ -61,8 +61,9 @@ namespace MediaBrowser.Api.Playback.Progressive
{
try
{
- new ProgressiveFileCopier(_fileSystem, _job)
- .StreamFile(Path, responseStream);
+ var task = new ProgressiveFileCopier(_fileSystem, _job, Logger).StreamFile(Path, responseStream);
+
+ Task.WaitAll(task);
}
catch (IOException)
{
@@ -91,19 +92,21 @@ namespace MediaBrowser.Api.Playback.Progressive
{
private readonly IFileSystem _fileSystem;
private readonly TranscodingJob _job;
+ private readonly ILogger _logger;
// 256k
private const int BufferSize = 262144;
-
+
private long _bytesWritten = 0;
- public ProgressiveFileCopier(IFileSystem fileSystem, TranscodingJob job)
+ public ProgressiveFileCopier(IFileSystem fileSystem, TranscodingJob job, ILogger logger)
{
_fileSystem = fileSystem;
_job = job;
+ _logger = logger;
}
- public void StreamFile(string path, Stream outputStream)
+ public async Task StreamFile(string path, Stream outputStream)
{
var eofCount = 0;
long position = 0;
@@ -126,8 +129,7 @@ namespace MediaBrowser.Api.Playback.Progressive
{
eofCount++;
}
- var task = Task.Delay(100);
- Task.WaitAll(task);
+ await Task.Delay(100).ConfigureAwait(false);
}
else
{
@@ -145,6 +147,30 @@ namespace MediaBrowser.Api.Playback.Progressive
int count;
while ((count = source.Read(array, 0, array.Length)) != 0)
{
+ //if (_job != null)
+ //{
+ // var didPause = false;
+ // var totalPauseTime = 0;
+
+ // if (_job.IsUserPaused)
+ // {
+ // _logger.Debug("Pausing writing to network stream while user has paused playback.");
+
+ // while (_job.IsUserPaused && totalPauseTime < 30000)
+ // {
+ // didPause = true;
+ // var pauseTime = 500;
+ // totalPauseTime += pauseTime;
+ // await Task.Delay(pauseTime).ConfigureAwait(false);
+ // }
+ // }
+
+ // if (didPause)
+ // {
+ // _logger.Debug("Resuming writing to network stream due to user unpausing playback.");
+ // }
+ //}
+
destination.Write(array, 0, count);
_bytesWritten += count;
diff --git a/MediaBrowser.Api/Reports/ReportsService.cs b/MediaBrowser.Api/Reports/ReportsService.cs
index 15bdf4be6..ae6fbc9e2 100644
--- a/MediaBrowser.Api/Reports/ReportsService.cs
+++ b/MediaBrowser.Api/Reports/ReportsService.cs
@@ -213,8 +213,6 @@ namespace MediaBrowser.Api.Reports
SortBy = request.GetOrderBy(),
SortOrder = request.SortOrder ?? SortOrder.Ascending,
- Filter = i => ApplyAdditionalFilters(request, i, user, _libraryManager),
-
IsFavorite = request.IsFavorite,
Limit = request.Limit,
StartIndex = request.StartIndex,
@@ -351,6 +349,15 @@ namespace MediaBrowser.Api.Reports
}
// Artists
+ if (!string.IsNullOrEmpty(request.ArtistIds))
+ {
+ var artistIds = request.ArtistIds.Split(new[] { '|', ',' });
+
+ var artistItems = artistIds.Select(_libraryManager.GetItemById).Where(i => i != null).ToList();
+ query.ArtistNames = artistItems.Select(i => i.Name).ToArray();
+ }
+
+ // Artists
if (!string.IsNullOrEmpty(request.Artists))
{
query.ArtistNames = request.Artists.Split('|');
@@ -371,28 +378,6 @@ namespace MediaBrowser.Api.Reports
return query;
}
- private bool ApplyAdditionalFilters(BaseReportRequest request, BaseItem i, User user, ILibraryManager libraryManager)
- {
- // Artists
- if (!string.IsNullOrEmpty(request.ArtistIds))
- {
- var artistIds = request.ArtistIds.Split(new[] { '|', ',' });
-
- var audio = i as IHasArtist;
-
- if (!(audio != null && artistIds.Any(id =>
- {
- var artistItem = libraryManager.GetItemById(id);
- return artistItem != null && audio.HasAnyArtist(artistItem.Name);
- })))
- {
- return false;
- }
- }
-
- return true;
- }
-
/// <summary> Gets query result. </summary>
/// <param name="request"> The request. </param>
/// <returns> The query result. </returns>
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index 566b1dfd5..ea7e16e8d 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -184,8 +184,6 @@ namespace MediaBrowser.Api.UserLibrary
SortBy = request.GetOrderBy(),
SortOrder = request.SortOrder ?? SortOrder.Ascending,
- Filter = i => ApplyAdditionalFilters(request, i, user, _libraryManager),
-
IsFavorite = request.IsFavorite,
Limit = request.Limit,
StartIndex = request.StartIndex,
@@ -324,6 +322,15 @@ namespace MediaBrowser.Api.UserLibrary
}
// Artists
+ if (!string.IsNullOrEmpty(request.ArtistIds))
+ {
+ var artistIds = request.ArtistIds.Split(new[] { '|', ',' });
+
+ var artistItems = artistIds.Select(_libraryManager.GetItemById).Where(i => i != null).ToList();
+ query.ArtistNames = artistItems.Select(i => i.Name).ToArray();
+ }
+
+ // Artists
if (!string.IsNullOrEmpty(request.Artists))
{
query.ArtistNames = request.Artists.Split('|');
@@ -337,28 +344,6 @@ namespace MediaBrowser.Api.UserLibrary
return query;
}
-
- private bool ApplyAdditionalFilters(GetItems request, BaseItem i, User user, ILibraryManager libraryManager)
- {
- // Artists
- if (!string.IsNullOrEmpty(request.ArtistIds))
- {
- var artistIds = request.ArtistIds.Split(new[] { '|', ',' });
-
- var audio = i as IHasArtist;
-
- if (!(audio != null && artistIds.Any(id =>
- {
- var artistItem = libraryManager.GetItemById(id);
- return artistItem != null && audio.HasAnyArtist(artistItem.Name);
- })))
- {
- return false;
- }
- }
-
- return true;
- }
}
/// <summary>
diff --git a/MediaBrowser.Api/UserLibrary/PlaystateService.cs b/MediaBrowser.Api/UserLibrary/PlaystateService.cs
index 08c6b0ba4..0a96a5b06 100644
--- a/MediaBrowser.Api/UserLibrary/PlaystateService.cs
+++ b/MediaBrowser.Api/UserLibrary/PlaystateService.cs
@@ -335,11 +335,6 @@ namespace MediaBrowser.Api.UserLibrary
public void Post(ReportPlaybackProgress request)
{
- if (!string.IsNullOrWhiteSpace(request.PlaySessionId))
- {
- ApiEntryPoint.Instance.PingTranscodingJob(request.PlaySessionId);
- }
-
request.SessionId = GetSession().Result.Id;
var task = _sessionManager.OnPlaybackProgress(request);
@@ -349,7 +344,7 @@ namespace MediaBrowser.Api.UserLibrary
public void Post(PingPlaybackSession request)
{
- ApiEntryPoint.Instance.PingTranscodingJob(request.PlaySessionId);
+ ApiEntryPoint.Instance.PingTranscodingJob(request.PlaySessionId, null);
}
/// <summary>
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index fa96ba4e5..a1a89d71f 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -151,16 +151,6 @@ namespace MediaBrowser.Controller.Entities
AddChildInternal(item.Id);
await LibraryManager.CreateItem(item, cancellationToken).ConfigureAwait(false);
-
- if (!EnableNewFolderQuerying())
- {
- await ItemRepository.SaveChildren(Id, ActualChildren.Select(i => i.Id).ToList(), cancellationToken).ConfigureAwait(false);
- }
- }
-
- private static bool EnableNewFolderQuerying()
- {
- return ConfigurationManager.Configuration.MigrationVersion >= 1;
}
protected void AddChildrenInternal(List<Guid> children)
@@ -197,21 +187,11 @@ namespace MediaBrowser.Controller.Entities
/// Removes the child.
/// </summary>
/// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- /// <exception cref="System.InvalidOperationException">Unable to remove + item.Name</exception>
- public Task RemoveChild(BaseItem item, CancellationToken cancellationToken)
+ public void RemoveChild(BaseItem item)
{
RemoveChildrenInternal(new[] { item.Id }.ToList());
item.SetParent(null);
-
- if (!EnableNewFolderQuerying())
- {
- return ItemRepository.SaveChildren(Id, ActualChildren.Select(i => i.Id).ToList(), cancellationToken);
- }
-
- return Task.FromResult(true);
}
#region Indexing
@@ -500,11 +480,6 @@ namespace MediaBrowser.Controller.Entities
await LibraryManager.CreateItems(newItems, cancellationToken).ConfigureAwait(false);
AddChildrenInternal(newItems.Select(i => i.Id).ToList());
-
- if (!EnableNewFolderQuerying())
- {
- await ItemRepository.SaveChildren(Id, ActualChildren.Select(i => i.Id).ToList(), cancellationToken).ConfigureAwait(false);
- }
}
}
@@ -734,45 +709,11 @@ namespace MediaBrowser.Controller.Entities
/// <returns>IEnumerable{BaseItem}.</returns>
protected IEnumerable<Guid> GetCachedChildren()
{
- if (EnableNewFolderQuerying())
+ return ItemRepository.GetItemIdsList(new InternalItemsQuery
{
- return ItemRepository.GetItemIdsList(new InternalItemsQuery
- {
- ParentId = Id
-
- });
- }
-
- return ItemRepository.GetChildrenItems(Id).Select(RetrieveChild).Where(i => i != null).Select(i => i.Id);
- }
-
- private BaseItem RetrieveChild(BaseItem child)
- {
- if (child == null || child.Id == Guid.Empty)
- {
- Logger.Error("Item found with empty Id: " + (child.Path ?? child.Name));
- return null;
- }
-
- var item = LibraryManager.GetMemoryItemById(child.Id);
-
- if (item != null)
- {
- if (item is IByReferenceItem)
- {
- return LibraryManager.GetOrAddByReferenceItem(item);
- }
-
- item.SetParent(this);
- }
- else
- {
- child.SetParent(this);
- LibraryManager.RegisterItem(child);
- item = child;
- }
+ ParentId = Id
- return item;
+ });
}
public QueryResult<BaseItem> QueryRecursive(InternalItemsQuery query)
diff --git a/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs b/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs
index 50528c6ae..bcf39558e 100644
--- a/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs
+++ b/MediaBrowser.Controller/Library/PlaybackProgressEventArgs.cs
@@ -15,11 +15,14 @@ namespace MediaBrowser.Controller.Library
public BaseItem Item { get; set; }
public BaseItemInfo MediaInfo { get; set; }
public string MediaSourceId { get; set; }
+ public bool IsPaused { get; set; }
public string DeviceId { get; set; }
public string DeviceName { get; set; }
public string ClientName { get; set; }
+ public string PlaySessionId { get; set; }
+
public PlaybackProgressEventArgs()
{
Users = new List<User>();
diff --git a/MediaBrowser.Controller/Persistence/IItemRepository.cs b/MediaBrowser.Controller/Persistence/IItemRepository.cs
index 533d66b95..15df1f649 100644
--- a/MediaBrowser.Controller/Persistence/IItemRepository.cs
+++ b/MediaBrowser.Controller/Persistence/IItemRepository.cs
@@ -43,13 +43,6 @@ namespace MediaBrowser.Controller.Persistence
IEnumerable<ItemReview> GetCriticReviews(Guid itemId);
/// <summary>
- /// Gets the children items.
- /// </summary>
- /// <param name="parentId">The parent identifier.</param>
- /// <returns>IEnumerable&lt;BaseItem&gt;.</returns>
- IEnumerable<BaseItem> GetChildrenItems(Guid parentId);
-
- /// <summary>
/// Saves the critic reviews.
/// </summary>
/// <param name="itemId">The item id.</param>
@@ -97,22 +90,6 @@ namespace MediaBrowser.Controller.Persistence
Task SaveChapters(Guid id, IEnumerable<ChapterInfo> chapters, CancellationToken cancellationToken);
/// <summary>
- /// Gets the children.
- /// </summary>
- /// <param name="parentId">The parent id.</param>
- /// <returns>IEnumerable{ChildDefinition}.</returns>
- IEnumerable<Guid> GetChildren(Guid parentId);
-
- /// <summary>
- /// Saves the children.
- /// </summary>
- /// <param name="parentId">The parent id.</param>
- /// <param name="children">The children.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- Task SaveChildren(Guid parentId, IEnumerable<Guid> children, CancellationToken cancellationToken);
-
- /// <summary>
/// Gets the media streams.
/// </summary>
/// <param name="query">The query.</param>
diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs
index 91d1af8f4..e8e969a5f 100644
--- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs
+++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs
@@ -188,15 +188,15 @@ namespace MediaBrowser.Dlna.Didl
{
var subtitleAdded = AddSubtitleElement(container, subtitle);
- if (subtitleAdded && _profile.EnableSingleSubtitleLimit)
- {
- break;
- }
+ if (subtitleAdded && _profile.EnableSingleSubtitleLimit)
+ {
+ break;
+ }
}
}
}
- private bool AddSubtitleElement(XmlElement container, SubtitleStreamInfo info)
+ private bool AddSubtitleElement(XmlElement container, SubtitleStreamInfo info)
{
var subtitleProfile = _profile.SubtitleProfiles
.FirstOrDefault(i => string.Equals(info.Format, i.Format, StringComparison.OrdinalIgnoreCase) && i.Method == SubtitleDeliveryMethod.External);
@@ -213,13 +213,13 @@ namespace MediaBrowser.Dlna.Didl
// <sec:CaptionInfoEx sec:type="srt">http://192.168.1.3:9999/video.srt</sec:CaptionInfoEx>
// <sec:CaptionInfo sec:type="srt">http://192.168.1.3:9999/video.srt</sec:CaptionInfo>
- //var res = container.OwnerDocument.CreateElement("SEC", "CaptionInfoEx");
+ var res = container.OwnerDocument.CreateElement("CaptionInfoEx", "sec");
- //res.InnerText = info.Url;
+ res.InnerText = info.Url;
//// TODO: attribute needs SEC:
- //res.SetAttribute("type", info.Format.ToLower());
- //container.AppendChild(res);
+ res.SetAttribute("type", "sec", info.Format.ToLower());
+ container.AppendChild(res);
}
else if (string.Equals(subtitleMode, "smi", StringComparison.OrdinalIgnoreCase))
{
@@ -243,7 +243,7 @@ namespace MediaBrowser.Dlna.Didl
container.AppendChild(res);
}
- return true;
+ return true;
}
private void AddVideoResource(XmlElement container, IHasMediaSources video, string deviceId, Filter filter, string contentFeatures, StreamInfo streamInfo)
diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
index 882b2e1c2..cbe24bda8 100644
--- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
+++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
@@ -604,7 +604,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
process.StandardError.BaseStream.CopyToAsync(logFileStream);
- var ranToCompletion = process.WaitForExit(120000);
+ var ranToCompletion = process.WaitForExit(300000);
if (!ranToCompletion)
{
diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs
index 64a0e6d5b..bd1961143 100644
--- a/MediaBrowser.Providers/Manager/ImageSaver.cs
+++ b/MediaBrowser.Providers/Manager/ImageSaver.cs
@@ -421,7 +421,7 @@ namespace MediaBrowser.Providers.Manager
if (saveLocally)
{
- if (item is Episode)
+ if (type == ImageType.Primary && item is Episode)
{
path = Path.Combine(Path.GetDirectoryName(item.Path), "metadata", filename + extension);
}
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 50d365335..ad3cd2576 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -430,7 +430,7 @@ namespace MediaBrowser.Server.Implementations.Library
}
else if (parent != null)
{
- await parent.RemoveChild(item, CancellationToken.None).ConfigureAwait(false);
+ parent.RemoveChild(item);
}
await ItemRepository.DeleteItem(item.Id, CancellationToken.None).ConfigureAwait(false);
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index a6e92171f..0b337b2a1 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -63,8 +63,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
private readonly string _criticReviewsPath;
- private IDbCommand _deleteChildrenCommand;
- private IDbCommand _saveChildrenCommand;
private IDbCommand _deleteItemCommand;
private IDbCommand _deletePeopleCommand;
@@ -138,9 +136,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
"create index if not exists idx_AncestorIds1 on AncestorIds(AncestorId)",
"create index if not exists idx_AncestorIds2 on AncestorIds(AncestorIdText)",
- "create table if not exists ChildrenIds (ParentId GUID, ItemId GUID, PRIMARY KEY (ParentId, ItemId))",
- "create index if not exists idx_ChildrenIds on ChildrenIds(ParentId,ItemId)",
-
"create table if not exists People (ItemId GUID, Name TEXT NOT NULL, Role TEXT, PersonType TEXT, SortOrder int, ListOrder int)",
"create index if not exists idxPeopleItemId on People(ItemId)",
"create index if not exists idxPeopleName on People(Name)",
@@ -477,19 +472,10 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
_saveItemCommand.CommandText += ")";
- _deleteChildrenCommand = _connection.CreateCommand();
- _deleteChildrenCommand.CommandText = "delete from ChildrenIds where ParentId=@ParentId";
- _deleteChildrenCommand.Parameters.Add(_deleteChildrenCommand, "@ParentId");
-
_deleteItemCommand = _connection.CreateCommand();
_deleteItemCommand.CommandText = "delete from TypedBaseItems where guid=@Id";
_deleteItemCommand.Parameters.Add(_deleteItemCommand, "@Id");
- _saveChildrenCommand = _connection.CreateCommand();
- _saveChildrenCommand.CommandText = "replace into ChildrenIds (ParentId, ItemId) values (@ParentId, @ItemId)";
- _saveChildrenCommand.Parameters.Add(_saveChildrenCommand, "@ParentId");
- _saveChildrenCommand.Parameters.Add(_saveChildrenCommand, "@ItemId");
-
// People
_deletePeopleCommand = _connection.CreateCommand();
_deletePeopleCommand.CommandText = "delete from People where ItemId=@Id";
@@ -1375,63 +1361,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
}
- public IEnumerable<Guid> GetChildren(Guid parentId)
- {
- if (parentId == Guid.Empty)
- {
- throw new ArgumentNullException("parentId");
- }
-
- CheckDisposed();
-
- using (var cmd = _connection.CreateCommand())
- {
- cmd.CommandText = "select ItemId from ChildrenIds where ParentId = @ParentId";
-
- cmd.Parameters.Add(cmd, "@ParentId", DbType.Guid).Value = parentId;
-
- using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
- {
- while (reader.Read())
- {
- yield return reader.GetGuid(0);
- }
- }
- }
- }
-
- public IEnumerable<BaseItem> GetChildrenItems(Guid parentId)
- {
- if (parentId == Guid.Empty)
- {
- throw new ArgumentNullException("parentId");
- }
-
- CheckDisposed();
-
- using (var cmd = _connection.CreateCommand())
- {
- cmd.CommandText = "select " + string.Join(",", _retriveItemColumns) + " from TypedBaseItems where guid in (select ItemId from ChildrenIds where ParentId = @ParentId)";
-
- cmd.Parameters.Add(cmd, "@ParentId", DbType.Guid).Value = parentId;
-
- //Logger.Debug(cmd.CommandText);
-
- using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
- {
- while (reader.Read())
- {
- var item = GetItem(reader);
-
- if (item != null)
- {
- yield return item;
- }
- }
- }
- }
- }
-
public IEnumerable<BaseItem> GetItemsOfType(Type type)
{
if (type == null)
@@ -2392,11 +2321,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
{
transaction = _connection.BeginTransaction();
- // First delete children
- _deleteChildrenCommand.GetParameter(0).Value = id;
- _deleteChildrenCommand.Transaction = transaction;
- _deleteChildrenCommand.ExecuteNonQuery();
-
// Delete people
_deletePeopleCommand.GetParameter(0).Value = id;
_deletePeopleCommand.Transaction = transaction;
@@ -2455,79 +2379,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
}
- public async Task SaveChildren(Guid parentId, IEnumerable<Guid> children, CancellationToken cancellationToken)
- {
- if (parentId == Guid.Empty)
- {
- throw new ArgumentNullException("parentId");
- }
-
- if (children == null)
- {
- throw new ArgumentNullException("children");
- }
-
- CheckDisposed();
-
- await WriteLock.WaitAsync(cancellationToken).ConfigureAwait(false);
-
- IDbTransaction transaction = null;
-
- try
- {
- transaction = _connection.BeginTransaction();
-
- // First delete
- _deleteChildrenCommand.GetParameter(0).Value = parentId;
- _deleteChildrenCommand.Transaction = transaction;
-
- _deleteChildrenCommand.ExecuteNonQuery();
-
- foreach (var id in children)
- {
- cancellationToken.ThrowIfCancellationRequested();
-
- _saveChildrenCommand.GetParameter(0).Value = parentId;
- _saveChildrenCommand.GetParameter(1).Value = id;
-
- _saveChildrenCommand.Transaction = transaction;
-
- _saveChildrenCommand.ExecuteNonQuery();
- }
-
- transaction.Commit();
- }
- catch (OperationCanceledException)
- {
- if (transaction != null)
- {
- transaction.Rollback();
- }
-
- throw;
- }
- catch (Exception e)
- {
- Logger.ErrorException("Failed to save children:", e);
-
- if (transaction != null)
- {
- transaction.Rollback();
- }
-
- throw;
- }
- finally
- {
- if (transaction != null)
- {
- transaction.Dispose();
- }
-
- WriteLock.Release();
- }
- }
-
public List<string> GetPeopleNames(InternalPeopleQuery query)
{
if (query == null)
diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs
index 824e5e0e8..98127d39a 100644
--- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs
+++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs
@@ -705,7 +705,9 @@ namespace MediaBrowser.Server.Implementations.Session
MediaInfo = info.Item,
DeviceName = session.DeviceName,
ClientName = session.Client,
- DeviceId = session.DeviceId
+ DeviceId = session.DeviceId,
+ IsPaused = info.IsPaused,
+ PlaySessionId = info.PlaySessionId
}, _logger);
diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
index f28b54016..1622eff93 100644
--- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
+++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
@@ -272,6 +272,9 @@
<Content Include="dashboard-ui\legacy\objectassign.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\legacy\selectmenu.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\livetvguideprovider.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>