From e2d6a5c05df874cb812cbc0b85e7deda22ce567a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 17 May 2013 14:05:49 -0400 Subject: support static trailer streaming --- .../Session/SessionManager.cs | 37 ++++++++++++++-------- 1 file changed, 23 insertions(+), 14 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 2f9c7e389..d3dbbc62b 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -200,7 +200,7 @@ namespace MediaBrowser.Server.Implementations.Session /// Name of the device. /// /// - public void OnPlaybackStart(User user, BaseItem item, string clientType, string deviceId, string deviceName) + public async Task OnPlaybackStart(User user, BaseItem item, string clientType, string deviceId, string deviceName) { if (user == null) { @@ -213,6 +213,15 @@ namespace MediaBrowser.Server.Implementations.Session UpdateNowPlayingItemId(user, clientType, deviceId, deviceName, item, false); + var key = item.GetUserDataKey(); + + var data = await _userDataRepository.GetUserData(user.Id, key).ConfigureAwait(false); + + data.PlayCount++; + data.LastPlayedDate = DateTime.UtcNow; + + await _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None).ConfigureAwait(false); + // Nothing to save here // Fire events to inform plugins EventHelper.QueueEventIfNotNull(PlaybackStart, this, new PlaybackProgressEventArgs @@ -254,7 +263,7 @@ namespace MediaBrowser.Server.Implementations.Session { var data = await _userDataRepository.GetUserData(user.Id, key).ConfigureAwait(false); - UpdatePlayState(item, data, positionTicks.Value, false); + UpdatePlayState(item, data, positionTicks.Value); await _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None).ConfigureAwait(false); } @@ -297,7 +306,7 @@ namespace MediaBrowser.Server.Implementations.Session if (positionTicks.HasValue) { - UpdatePlayState(item, data, positionTicks.Value, true); + UpdatePlayState(item, data, positionTicks.Value); } else { @@ -322,11 +331,12 @@ namespace MediaBrowser.Server.Implementations.Session /// The item /// User data for the item /// The current playback position - /// Whether or not to increment playcount - private void UpdatePlayState(BaseItem item, UserItemData data, long positionTicks, bool incrementPlayCount) + private void UpdatePlayState(BaseItem item, UserItemData data, long positionTicks) { + var hasRuntime = item.RunTimeTicks.HasValue && item.RunTimeTicks > 0; + // If a position has been reported, and if we know the duration - if (positionTicks > 0 && item.RunTimeTicks.HasValue && item.RunTimeTicks > 0) + if (positionTicks > 0 && hasRuntime) { var pctIn = Decimal.Divide(positionTicks, item.RunTimeTicks.Value) * 100; @@ -334,7 +344,6 @@ namespace MediaBrowser.Server.Implementations.Session if (pctIn < _configurationManager.Configuration.MinResumePct) { positionTicks = 0; - incrementPlayCount = false; } // If we're at the end, assume completed @@ -356,19 +365,19 @@ namespace MediaBrowser.Server.Implementations.Session } } } + else if (!hasRuntime) + { + // If we don't know the runtime we'll just have to assume it was fully played + data.Played = true; + positionTicks = 0; + } if (item is Audio) { - data.PlaybackPositionTicks = 0; + positionTicks = 0; } data.PlaybackPositionTicks = positionTicks; - - if (incrementPlayCount) - { - data.PlayCount++; - data.LastPlayedDate = DateTime.UtcNow; - } } } } -- cgit v1.2.3 From 4cd7030248ae26e48f43a7557cab5893f50c3d74 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 18 May 2013 13:07:20 -0400 Subject: fixed image uploading for virtual items --- MediaBrowser.Api/Images/ImageService.cs | 11 ++++++++--- MediaBrowser.Controller/Providers/BaseItemXmlParser.cs | 8 ++++---- MediaBrowser.Controller/Resolvers/ResolverPriority.cs | 3 ++- .../Providers/ProviderManager.cs | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 3f5b9da2a..51608a899 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -361,7 +361,7 @@ namespace MediaBrowser.Api.Images index++; } - + index = 0; foreach (var image in item.ScreenshotImagePaths) @@ -422,7 +422,7 @@ namespace MediaBrowser.Api.Images return list; } - + /// /// Gets the specified request. /// @@ -765,7 +765,7 @@ namespace MediaBrowser.Api.Images } // Don't save locally if there's no parent (special feature, trailer, etc) - var saveLocally = (!(entity is Audio) && entity.Parent != null && !string.IsNullOrEmpty(entity.MetaLocation)) || entity is User; + var saveLocally = !(entity is Audio) && entity.Parent != null && !string.IsNullOrEmpty(entity.MetaLocation) || entity is User; if (imageType != ImageType.Primary) { @@ -775,6 +775,11 @@ namespace MediaBrowser.Api.Images } } + if (entity.LocationType != LocationType.FileSystem) + { + saveLocally = false; + } + var imagePath = _providerManager.GetSavePath(entity, filename + "." + extension, saveLocally); // Save to file system diff --git a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs index 65ec6899f..60a2c19a7 100644 --- a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs +++ b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs @@ -325,7 +325,7 @@ namespace MediaBrowser.Controller.Providers if (!string.IsNullOrWhiteSpace(val)) { - item.AddTrailerUrl(val); + //item.AddTrailerUrl(val); } break; } @@ -336,10 +336,10 @@ namespace MediaBrowser.Controller.Providers if (!string.IsNullOrWhiteSpace(val)) { - int ProductionYear; - if (int.TryParse(val, out ProductionYear) && ProductionYear > 1850) + int productionYear; + if (int.TryParse(val, out productionYear) && productionYear > 1850) { - item.ProductionYear = ProductionYear; + item.ProductionYear = productionYear; } } diff --git a/MediaBrowser.Controller/Resolvers/ResolverPriority.cs b/MediaBrowser.Controller/Resolvers/ResolverPriority.cs index 63a107fda..df5edeb05 100644 --- a/MediaBrowser.Controller/Resolvers/ResolverPriority.cs +++ b/MediaBrowser.Controller/Resolvers/ResolverPriority.cs @@ -18,9 +18,10 @@ namespace MediaBrowser.Controller.Resolvers /// The third /// Third = 3, + Fourth = 4, /// /// The last /// - Last = 4 + Last = 5 } } diff --git a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs index b0a0f8760..cc586ccbf 100644 --- a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs +++ b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs @@ -408,7 +408,7 @@ namespace MediaBrowser.Server.Implementations.Providers { return (saveLocally && item.MetaLocation != null) ? Path.Combine(item.MetaLocation, targetFileName) : - _remoteImageCache.GetResourcePath(item.GetType().FullName + item.Path.ToLower(), targetFileName); + _remoteImageCache.GetResourcePath(item.GetType().FullName + item.Id.ToString(), targetFileName); } /// -- cgit v1.2.3 From 99959f5d10899167fea23d15ed9f858403053a2e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 18 May 2013 17:47:00 -0400 Subject: fixed image providers from running everytime against collection folders --- MediaBrowser.Controller/Entities/BaseItem.cs | 3 +-- MediaBrowser.Controller/Entities/CollectionFolder.cs | 2 +- MediaBrowser.Controller/Entities/Folder.cs | 2 +- MediaBrowser.Controller/Providers/ImagesByNameProvider.cs | 3 ++- MediaBrowser.Server.Implementations/Library/LibraryManager.cs | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index ca3ef7fac..1bc6b523e 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -905,7 +905,6 @@ namespace MediaBrowser.Controller.Entities if (changed || forceSave || themeSongsChanged || themeVideosChanged || localTrailersChanged) { cancellationToken.ThrowIfCancellationRequested(); - await LibraryManager.UpdateItem(this, cancellationToken).ConfigureAwait(false); } @@ -1506,7 +1505,7 @@ namespace MediaBrowser.Controller.Entities } // Refresh metadata - return RefreshMetadata(CancellationToken.None); + return RefreshMetadata(CancellationToken.None, forceSave: true); } } } diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index 67692273d..70f3548f3 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -15,7 +15,7 @@ namespace MediaBrowser.Controller.Entities /// Specialized Folder class that points to a subset of the physical folders in the system. /// It is created from the user-specific folders within the system root /// - public class CollectionFolder : Folder, ICollectionFolder, IByReferenceItem + public class CollectionFolder : Folder, ICollectionFolder { /// /// Gets a value indicating whether this instance is virtual folder. diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 472cc115e..66a4ca215 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -760,7 +760,7 @@ namespace MediaBrowser.Controller.Entities var child = currentTuple.Item1; //refresh it - await child.RefreshMetadata(cancellationToken, resetResolveArgs: child.IsFolder).ConfigureAwait(false); + await child.RefreshMetadata(cancellationToken, resetResolveArgs: child.IsFolder, forceSave: currentTuple.Item2).ConfigureAwait(false); // Refresh children if a folder and the item changed or recursive is set to true var refreshChildren = child.IsFolder && (currentTuple.Item2 || (recursive.HasValue && recursive.Value)); diff --git a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs index 64a988378..3611607c9 100644 --- a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs +++ b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs @@ -126,7 +126,8 @@ namespace MediaBrowser.Controller.Providers } data.Data = ConfigurationManager.ApplicationPaths.ItemsByNamePath.GetMD5(); - + SetLastRefreshed(item, DateTime.UtcNow); + return result; } diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 65905b082..b692e97f3 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -269,16 +269,16 @@ namespace MediaBrowser.Server.Implementations.Library // Need to use DistinctBy Id because there could be multiple instances with the same id // due to sharing the default library var userRootFolders = _userManager.Users.Select(i => i.RootFolder) - .DistinctBy(i => i.Id) + .Distinct() .ToList(); items.AddRange(userRootFolders); // Get all user collection folders + // Skip BasePluginFolders because we already got them from RootFolder.RecursiveChildren var userFolders = - _userManager.Users.SelectMany(i => i.RootFolder.Children) + userRootFolders.SelectMany(i => i.Children) .Where(i => !(i is BasePluginFolder)) - .DistinctBy(i => i.Id) .ToList(); items.AddRange(userFolders); -- cgit v1.2.3 From 3fc0b768d1ddc1e72cbeaaa83a0cc9f16930ed35 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 18 May 2013 17:47:50 -0400 Subject: shorten image task delay --- .../ScheduledTasks/AudioImagesTask.cs | 12 ++++++------ .../ScheduledTasks/ChapterImagesTask.cs | 4 ++-- .../ScheduledTasks/RefreshMediaLibraryTask.cs | 2 +- .../ScheduledTasks/VideoImagesTask.cs | 7 ++++--- 4 files changed, 13 insertions(+), 12 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/AudioImagesTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/AudioImagesTask.cs index d3ed270b8..c56a2b54a 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/AudioImagesTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/AudioImagesTask.cs @@ -46,14 +46,14 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks private readonly List