From 25736b259a56ff11ca3b7298be023b87eb3fda99 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 31 May 2015 14:22:51 -0400 Subject: normalize tv recording objects --- MediaBrowser.Server.Implementations/Dto/DtoService.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Dto') diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 1b55f47d5e..cf56fc9ced 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -46,8 +46,9 @@ namespace MediaBrowser.Server.Implementations.Dto private readonly IApplicationHost _appHost; private readonly Func _deviceManager; private readonly Func _mediaSourceManager; + private readonly Func _livetvManager; - public DtoService(ILogger logger, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IImageProcessor imageProcessor, IServerConfigurationManager config, IFileSystem fileSystem, IProviderManager providerManager, Func channelManagerFactory, ISyncManager syncManager, IApplicationHost appHost, Func deviceManager, Func mediaSourceManager) + public DtoService(ILogger logger, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepo, IImageProcessor imageProcessor, IServerConfigurationManager config, IFileSystem fileSystem, IProviderManager providerManager, Func channelManagerFactory, ISyncManager syncManager, IApplicationHost appHost, Func deviceManager, Func mediaSourceManager, Func livetvManager) { _logger = logger; _libraryManager = libraryManager; @@ -62,6 +63,7 @@ namespace MediaBrowser.Server.Implementations.Dto _appHost = appHost; _deviceManager = deviceManager; _mediaSourceManager = mediaSourceManager; + _livetvManager = livetvManager; } /// @@ -350,6 +352,11 @@ namespace MediaBrowser.Server.Implementations.Dto dto.Etag = item.GetEtag(user); } + if (item is ILiveTvRecording) + { + _livetvManager().AddInfoToRecordingDto(item, dto, user); + } + return dto; } @@ -1384,7 +1391,7 @@ namespace MediaBrowser.Server.Implementations.Dto { dto.AirDays = series.AirDays; dto.AirTime = series.AirTime; - dto.Status = series.Status; + dto.SeriesStatus = series.Status; dto.SeasonCount = series.SeasonCount; -- cgit v1.2.3 From ef8a1ccecbacab4ef535bb3e74bcb285a9f583fd Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 31 May 2015 15:12:58 -0400 Subject: normalize program object --- MediaBrowser.Api/LiveTv/LiveTvService.cs | 6 +- MediaBrowser.Controller/LiveTv/ILiveTvManager.cs | 14 +- .../MediaBrowser.Model.Portable.csproj | 3 - .../MediaBrowser.Model.net35.csproj | 3 - MediaBrowser.Model/ApiClient/IApiClient.cs | 14 +- MediaBrowser.Model/Dto/BaseItemDto.cs | 6 + MediaBrowser.Model/LiveTv/ChannelInfoDto.cs | 2 +- MediaBrowser.Model/LiveTv/ProgramInfoDto.cs | 250 --------------------- MediaBrowser.Model/LiveTv/TimerInfoDto.cs | 6 +- MediaBrowser.Model/MediaBrowser.Model.csproj | 1 - .../Dto/DtoService.cs | 5 + .../LiveTv/LiveTvDtoService.cs | 82 +------ .../LiveTv/LiveTvManager.cs | 89 +++++--- 13 files changed, 97 insertions(+), 384 deletions(-) delete mode 100644 MediaBrowser.Model/LiveTv/ProgramInfoDto.cs (limited to 'MediaBrowser.Server.Implementations/Dto') diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs index 86d8b9f99a..c474642d5d 100644 --- a/MediaBrowser.Api/LiveTv/LiveTvService.cs +++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs @@ -161,7 +161,7 @@ namespace MediaBrowser.Api.LiveTv [Route("/LiveTv/Programs", "GET,POST", Summary = "Gets available live tv epgs..")] [Authenticated] - public class GetPrograms : IReturn> + public class GetPrograms : IReturn> { [ApiMember(Name = "ChannelIds", Description = "The channels to return guide information for.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET,POST")] public string ChannelIds { get; set; } @@ -208,7 +208,7 @@ namespace MediaBrowser.Api.LiveTv [Route("/LiveTv/Programs/Recommended", "GET", Summary = "Gets available live tv epgs..")] [Authenticated] - public class GetRecommendedPrograms : IReturn> + public class GetRecommendedPrograms : IReturn> { [ApiMember(Name = "UserId", Description = "Optional filter by user id.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET,POST")] public string UserId { get; set; } @@ -231,7 +231,7 @@ namespace MediaBrowser.Api.LiveTv [Route("/LiveTv/Programs/{Id}", "GET", Summary = "Gets a live tv program")] [Authenticated] - public class GetProgram : IReturn + public class GetProgram : IReturn { [ApiMember(Name = "Id", Description = "Program Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string Id { get; set; } diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs index e84fe902d6..3aa1f66efb 100644 --- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs +++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs @@ -170,7 +170,7 @@ namespace MediaBrowser.Controller.LiveTv /// The cancellation token. /// The user. /// Task{ProgramInfoDto}. - Task GetProgram(string id, CancellationToken cancellationToken, User user = null); + Task GetProgram(string id, CancellationToken cancellationToken, User user = null); /// /// Gets the programs. @@ -178,7 +178,7 @@ namespace MediaBrowser.Controller.LiveTv /// The query. /// The cancellation token. /// IEnumerable{ProgramInfo}. - Task> GetPrograms(ProgramQuery query, CancellationToken cancellationToken); + Task> GetPrograms(ProgramQuery query, CancellationToken cancellationToken); /// /// Updates the timer. @@ -240,7 +240,7 @@ namespace MediaBrowser.Controller.LiveTv /// The query. /// The cancellation token. /// Task{QueryResult{ProgramInfoDto}}. - Task> GetRecommendedPrograms(RecommendedProgramQuery query, + Task> GetRecommendedPrograms(RecommendedProgramQuery query, CancellationToken cancellationToken); /// @@ -329,5 +329,13 @@ namespace MediaBrowser.Controller.LiveTv /// The dto. /// The user. void AddInfoToRecordingDto(BaseItem item, BaseItemDto dto, User user = null); + + /// + /// Adds the information to program dto. + /// + /// The item. + /// The dto. + /// The user. + void AddInfoToProgramDto(BaseItem item, BaseItemDto dto, User user = null); } } diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index a63b0a7c6f..de9360e40c 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -743,9 +743,6 @@ LiveTv\ProgramAudio.cs - - LiveTv\ProgramInfoDto.cs - LiveTv\ProgramQuery.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 036064238c..ec7c3be5c1 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -699,9 +699,6 @@ LiveTv\ProgramAudio.cs - - LiveTv\ProgramInfoDto.cs - LiveTv\ProgramQuery.cs diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 71ac0b14eb..e52e7535b6 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -929,14 +929,6 @@ namespace MediaBrowser.Model.ApiClient /// System.String. string GetImageUrl(ChannelInfoDto item, ImageOptions options); - /// - /// Gets the image URL. - /// - /// The item. - /// The options. - /// System.String. - string GetImageUrl(ProgramInfoDto item, ImageOptions options); - /// /// Gets the subtitle URL. /// @@ -1111,7 +1103,7 @@ namespace MediaBrowser.Model.ApiClient /// The query. /// The cancellation token. /// Task{QueryResult{ProgramInfoDto}}. - Task> GetLiveTvProgramsAsync(ProgramQuery query, CancellationToken cancellationToken = default(CancellationToken)); + Task> GetLiveTvProgramsAsync(ProgramQuery query, CancellationToken cancellationToken = default(CancellationToken)); /// /// Gets the live tv program asynchronous. @@ -1120,7 +1112,7 @@ namespace MediaBrowser.Model.ApiClient /// The user identifier. /// The cancellation token. /// Task{ProgramInfoDto}. - Task GetLiveTvProgramAsync(string id, string userId, CancellationToken cancellationToken = default(CancellationToken)); + Task GetLiveTvProgramAsync(string id, string userId, CancellationToken cancellationToken = default(CancellationToken)); /// /// Gets the recommended live tv programs asynchronous. @@ -1128,7 +1120,7 @@ namespace MediaBrowser.Model.ApiClient /// The query. /// The cancellation token. /// Task{QueryResult{ProgramInfoDto}}. - Task> GetRecommendedLiveTvProgramsAsync(RecommendedProgramQuery query, CancellationToken cancellationToken = default(CancellationToken)); + Task> GetRecommendedLiveTvProgramsAsync(RecommendedProgramQuery query, CancellationToken cancellationToken = default(CancellationToken)); /// /// Creates the live tv timer asynchronous. diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index 0f6ce43348..fb157e9ae7 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -1175,5 +1175,11 @@ namespace MediaBrowser.Model.Dto /// true if this instance is premiere; otherwise, false. public bool? IsPremiere { get; set; } + /// + /// Gets or sets the timer identifier. + /// + /// The timer identifier. + public string TimerId { get; set; } + } } diff --git a/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs b/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs index 667ad4f14a..fd901f29e8 100644 --- a/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs +++ b/MediaBrowser.Model/LiveTv/ChannelInfoDto.cs @@ -97,7 +97,7 @@ namespace MediaBrowser.Model.LiveTv /// Gets or sets the now playing program. /// /// The now playing program. - public ProgramInfoDto CurrentProgram { get; set; } + public BaseItemDto CurrentProgram { get; set; } /// /// Gets or sets the primary image aspect ratio, after image enhancements. diff --git a/MediaBrowser.Model/LiveTv/ProgramInfoDto.cs b/MediaBrowser.Model/LiveTv/ProgramInfoDto.cs deleted file mode 100644 index 06136459ff..0000000000 --- a/MediaBrowser.Model/LiveTv/ProgramInfoDto.cs +++ /dev/null @@ -1,250 +0,0 @@ -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Extensions; -using MediaBrowser.Model.Library; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Runtime.Serialization; - -namespace MediaBrowser.Model.LiveTv -{ - [DebuggerDisplay("Name = {Name}, StartTime = {StartDate}, EndTime = {EndDate}")] - public class ProgramInfoDto : IHasPropertyChangedEvent, IItemDto, IHasServerId - { - /// - /// Id of the program. - /// - public string Id { get; set; } - - /// - /// Gets or sets the primary image aspect ratio. - /// - /// The primary image aspect ratio. - public double? PrimaryImageAspectRatio { get; set; } - - /// - /// Gets or sets the server identifier. - /// - /// The server identifier. - public string ServerId { get; set; } - - /// - /// Gets or sets the original primary image aspect ratio. - /// - /// The original primary image aspect ratio. - public double? OriginalPrimaryImageAspectRatio { get; set; } - - /// - /// Gets or sets the type of the media. - /// - /// The type of the media. - public string MediaType { get; set; } - - /// - /// Gets or sets the timer identifier. - /// - /// The timer identifier. - public string TimerId { get; set; } - - /// - /// Gets or sets the series timer identifier. - /// - /// The series timer identifier. - public string SeriesTimerId { get; set; } - - /// - /// Gets or sets the external identifier. - /// - /// The external identifier. - public string ExternalId { get; set; } - - /// - /// Gets or sets the channel identifier. - /// - /// The channel identifier. - public string ChannelId { get; set; } - - /// - /// Gets or sets the channel primary image tag. - /// - /// The channel primary image tag. - public string ChannelPrimaryImageTag { get; set; } - - /// - /// Gets or sets the play access. - /// - /// The play access. - public PlayAccess PlayAccess { get; set; } - - /// - /// Gets or sets the name of the channel. - /// - /// The name of the channel. - public string ChannelName { get; set; } - - /// - /// Gets or sets the community rating. - /// - /// The community rating. - public float? CommunityRating { get; set; } - - /// - /// Gets or sets the official rating. - /// - /// The official rating. - public string OfficialRating { get; set; } - - /// - /// Gets or sets the production year. - /// - /// The production year. - public int? ProductionYear { get; set; } - - /// - /// Gets or sets the name of the service. - /// - /// The name of the service. - public string ServiceName { get; set; } - - /// - /// Name of the program - /// - public string Name { get; set; } - - /// - /// Overview of the recording. - /// - public string Overview { get; set; } - - /// - /// The start date of the program, in UTC. - /// - public DateTime StartDate { get; set; } - - /// - /// The end date of the program, in UTC. - /// - public DateTime EndDate { get; set; } - - /// - /// Genre of the program. - /// - public List Genres { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is hd. - /// - /// true if this instance is hd; otherwise, false. - public bool? IsHD { get; set; } - - /// - /// Gets or sets the audio. - /// - /// The audio. - public ProgramAudio? Audio { get; set; } - - /// - /// Gets or sets the original air date. - /// - /// The original air date. - public DateTime? OriginalAirDate { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is repeat. - /// - /// true if this instance is repeat; otherwise, false. - public bool IsRepeat { get; set; } - - /// - /// Gets or sets the episode title. - /// - /// The episode title. - public string EpisodeTitle { get; set; } - - /// - /// Gets or sets the image tags. - /// - /// The image tags. - public Dictionary ImageTags { get; set; } - - /// - /// Gets or sets the user data. - /// - /// The user data. - public UserItemDataDto UserData { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is movie. - /// - /// true if this instance is movie; otherwise, false. - public bool IsMovie { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is sports. - /// - /// true if this instance is sports; otherwise, false. - public bool IsSports { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is series. - /// - /// true if this instance is series; otherwise, false. - public bool IsSeries { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is live. - /// - /// true if this instance is live; otherwise, false. - public bool IsLive { get; set; } - - /// - /// Gets or sets the type. - /// - /// The type. - public string Type { get; set; } - - /// - /// Gets or sets the run time ticks. - /// - /// The run time ticks. - public long? RunTimeTicks { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is news. - /// - /// true if this instance is news; otherwise, false. - public bool IsNews { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is kids. - /// - /// true if this instance is kids; otherwise, false. - public bool IsKids { get; set; } - - /// - /// Gets or sets a value indicating whether this instance is premiere. - /// - /// true if this instance is premiere; otherwise, false. - public bool IsPremiere { get; set; } - - /// - /// Gets a value indicating whether this instance has primary image. - /// - /// true if this instance has primary image; otherwise, false. - [IgnoreDataMember] - public bool HasPrimaryImage - { - get { return ImageTags != null && ImageTags.ContainsKey(ImageType.Primary); } - } - - public ProgramInfoDto() - { - Genres = new List(); - ImageTags = new Dictionary(); - } - - public event PropertyChangedEventHandler PropertyChanged; - } -} \ No newline at end of file diff --git a/MediaBrowser.Model/LiveTv/TimerInfoDto.cs b/MediaBrowser.Model/LiveTv/TimerInfoDto.cs index 16cac945fa..c33535a3de 100644 --- a/MediaBrowser.Model/LiveTv/TimerInfoDto.cs +++ b/MediaBrowser.Model/LiveTv/TimerInfoDto.cs @@ -1,4 +1,6 @@ -namespace MediaBrowser.Model.LiveTv +using MediaBrowser.Model.Dto; + +namespace MediaBrowser.Model.LiveTv { public class TimerInfoDto : BaseTimerInfoDto { @@ -30,7 +32,7 @@ /// Gets or sets the program information. /// /// The program information. - public ProgramInfoDto ProgramInfo { get; set; } + public BaseItemDto ProgramInfo { get; set; } } } diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index c567c1f6af..d134cb2e32 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -259,7 +259,6 @@ - diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index cf56fc9ced..5853b5b750 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -357,6 +357,11 @@ namespace MediaBrowser.Server.Implementations.Dto _livetvManager().AddInfoToRecordingDto(item, dto, user); } + else if (item is LiveTvProgram) + { + _livetvManager().AddInfoToProgramDto(item, dto, user); + } + return dto; } diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs index 939d057cb3..f24fe00196 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs @@ -68,7 +68,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (program != null) { - dto.ProgramInfo = GetProgramInfoDto(program, channel); + dto.ProgramInfo = _dtoService.GetBaseItemDto(program, new DtoOptions()); dto.ProgramInfo.TimerId = dto.Id; dto.ProgramInfo.SeriesTimerId = dto.SeriesTimerId; @@ -238,77 +238,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (currentProgram != null) { - dto.CurrentProgram = GetProgramInfoDto(currentProgram, info, user); - } - - return dto; - } - - public ProgramInfoDto GetProgramInfoDto(LiveTvProgram item, LiveTvChannel channel, User user = null) - { - var dto = new ProgramInfoDto - { - Id = GetInternalProgramId(item.ServiceName, item.ExternalId).ToString("N"), - ChannelId = GetInternalChannelId(item.ServiceName, item.ExternalChannelId).ToString("N"), - Overview = item.Overview, - Genres = item.Genres, - ExternalId = item.ExternalId, - Name = item.Name, - ServiceName = item.ServiceName, - StartDate = item.StartDate, - OfficialRating = item.OfficialRating, - IsHD = item.IsHD, - OriginalAirDate = item.OriginalAirDate, - Audio = item.Audio, - CommunityRating = GetClientCommunityRating(item.CommunityRating), - IsRepeat = item.IsRepeat, - EpisodeTitle = item.EpisodeTitle, - IsMovie = item.IsMovie, - IsSeries = item.IsSeries, - IsSports = item.IsSports, - IsLive = item.IsLive, - IsNews = item.IsNews, - IsKids = item.IsKids, - IsPremiere = item.IsPremiere, - Type = "Program", - MediaType = item.MediaType, - ServerId = _appHost.SystemId, - ProductionYear = item.ProductionYear - }; - - if (item.EndDate.HasValue) - { - dto.EndDate = item.EndDate.Value; - - dto.RunTimeTicks = (item.EndDate.Value - item.StartDate).Ticks; - } - - if (channel != null) - { - dto.ChannelName = channel.Name; - - if (!string.IsNullOrEmpty(channel.PrimaryImagePath)) - { - dto.ChannelPrimaryImageTag = GetImageTag(channel); - } - } - - var imageTag = GetImageTag(item); - - if (imageTag != null) - { - dto.ImageTags[ImageType.Primary] = imageTag; - _dtoService.AttachPrimaryImageAspectRatio(dto, item, new List - { - ItemFields.PrimaryImageAspectRatio - }); - } - - if (user != null) - { - dto.UserData = _userDataManager.GetUserDataDto(item, user); - - dto.PlayAccess = item.GetPlayAccess(user); + dto.CurrentProgram = _dtoService.GetBaseItemDto(currentProgram, new DtoOptions(), user); } return dto; @@ -365,7 +295,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv return name.ToLower().GetMBId(typeof(ILiveTvRecording)); } - public async Task GetTimerInfo(TimerInfoDto dto, bool isNew, ILiveTvManager liveTv, CancellationToken cancellationToken) + public async Task GetTimerInfo(TimerInfoDto dto, bool isNew, LiveTvManager liveTv, CancellationToken cancellationToken) { var info = new TimerInfo { @@ -405,7 +335,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (!string.IsNullOrEmpty(dto.ProgramId) && string.IsNullOrEmpty(info.ProgramId)) { - var program = await liveTv.GetProgram(dto.ProgramId, cancellationToken).ConfigureAwait(false); + var program = liveTv.GetInternalProgram(dto.ProgramId); if (program != null) { @@ -426,7 +356,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv return info; } - public async Task GetSeriesTimerInfo(SeriesTimerInfoDto dto, bool isNew, ILiveTvManager liveTv, CancellationToken cancellationToken) + public async Task GetSeriesTimerInfo(SeriesTimerInfoDto dto, bool isNew, LiveTvManager liveTv, CancellationToken cancellationToken) { var info = new SeriesTimerInfo { @@ -468,7 +398,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (!string.IsNullOrEmpty(dto.ProgramId) && string.IsNullOrEmpty(info.ProgramId)) { - var program = await liveTv.GetProgram(dto.ProgramId, cancellationToken).ConfigureAwait(false); + var program = liveTv.GetInternalProgram(dto.ProgramId); if (program != null) { diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index 52c96bca69..dbae6d03e8 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -284,7 +284,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv return _libraryManager.GetItemById(id) as LiveTvChannel; } - private LiveTvProgram GetInternalProgram(string id) + internal LiveTvProgram GetInternalProgram(string id) { var guid = new Guid(id); @@ -732,20 +732,18 @@ namespace MediaBrowser.Server.Implementations.LiveTv return GetInternalChannel(internalProgramChannelId); } - public async Task GetProgram(string id, CancellationToken cancellationToken, User user = null) + public async Task GetProgram(string id, CancellationToken cancellationToken, User user = null) { var program = GetInternalProgram(id); - var channel = GetChannel(program); - - var dto = _tvDtoService.GetProgramInfoDto(program, channel, user); + var dto = _dtoService.GetBaseItemDto(program, new DtoOptions(), user); await AddRecordingInfo(new[] { dto }, cancellationToken).ConfigureAwait(false); return dto; } - public async Task> GetPrograms(ProgramQuery query, CancellationToken cancellationToken) + public async Task> GetPrograms(ProgramQuery query, CancellationToken cancellationToken) { IEnumerable programs = GetPrograms(); @@ -839,19 +837,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv } var returnArray = returnPrograms - .Select(i => - { - var channel = GetChannel(i); - - return _tvDtoService.GetProgramInfoDto(i, channel, user); - }) + .Select(i => _dtoService.GetBaseItemDto(i, new DtoOptions(), user)) .ToArray(); RefreshIfNeeded(programList); await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false); - var result = new QueryResult + var result = new QueryResult { Items = returnArray, TotalRecordCount = programList.Count @@ -924,24 +917,19 @@ namespace MediaBrowser.Server.Implementations.LiveTv return result; } - public async Task> GetRecommendedPrograms(RecommendedProgramQuery query, CancellationToken cancellationToken) + public async Task> GetRecommendedPrograms(RecommendedProgramQuery query, CancellationToken cancellationToken) { var internalResult = await GetRecommendedProgramsInternal(query, cancellationToken).ConfigureAwait(false); var user = _userManager.GetUserById(query.UserId); var returnArray = internalResult.Items - .Select(i => - { - var channel = GetChannel(i); - - return _tvDtoService.GetProgramInfoDto(i, channel, user); - }) + .Select(i => _dtoService.GetBaseItemDto(i, new DtoOptions(), user)) .ToArray(); await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false); - var result = new QueryResult + var result = new QueryResult { Items = returnArray, TotalRecordCount = internalResult.TotalRecordCount @@ -1020,37 +1008,40 @@ namespace MediaBrowser.Server.Implementations.LiveTv }).Sum(); } - private async Task AddRecordingInfo(IEnumerable programs, CancellationToken cancellationToken) + private async Task AddRecordingInfo(IEnumerable programs, CancellationToken cancellationToken) { var timers = new Dictionary>(); foreach (var program in programs) { + var internalProgram = GetInternalProgram(program.Id); + List timerList; - if (!timers.TryGetValue(program.ServiceName, out timerList)) + if (!timers.TryGetValue(internalProgram.ServiceName, out timerList)) { try { - var tempTimers = await GetService(program.ServiceName).GetTimersAsync(cancellationToken).ConfigureAwait(false); - timers[program.ServiceName] = timerList = tempTimers.ToList(); + var tempTimers = await GetService(internalProgram.ServiceName).GetTimersAsync(cancellationToken).ConfigureAwait(false); + timers[internalProgram.ServiceName] = timerList = tempTimers.ToList(); } catch (Exception ex) { _logger.ErrorException("Error getting timer infos", ex); - timers[program.ServiceName] = timerList = new List(); + timers[internalProgram.ServiceName] = timerList = new List(); } } - var timer = timerList.FirstOrDefault(i => string.Equals(i.ProgramId, program.ExternalId, StringComparison.OrdinalIgnoreCase)); + + var timer = timerList.FirstOrDefault(i => string.Equals(i.ProgramId, internalProgram.ExternalId, StringComparison.OrdinalIgnoreCase)); if (timer != null) { - program.TimerId = _tvDtoService.GetInternalTimerId(program.ServiceName, timer.Id) + program.TimerId = _tvDtoService.GetInternalTimerId(internalProgram.ServiceName, timer.Id) .ToString("N"); if (!string.IsNullOrEmpty(timer.SeriesTimerId)) { - program.SeriesTimerId = _tvDtoService.GetInternalSeriesTimerId(program.ServiceName, timer.SeriesTimerId) + program.SeriesTimerId = _tvDtoService.GetInternalSeriesTimerId(internalProgram.ServiceName, timer.SeriesTimerId) .ToString("N"); } } @@ -1362,6 +1353,43 @@ namespace MediaBrowser.Server.Implementations.LiveTv }; } + public void AddInfoToProgramDto(BaseItem item, BaseItemDto dto, User user = null) + { + var program = (LiveTvProgram)item; + var service = GetService(program); + + var channel = string.IsNullOrEmpty(program.ExternalChannelId) ? null : GetInternalChannel(_tvDtoService.GetInternalChannelId(service.Name, program.ExternalChannelId)); + + dto.Id = _tvDtoService.GetInternalProgramId(service.Name, program.ExternalId).ToString("N"); + + dto.ChannelId = _tvDtoService.GetInternalChannelId(service.Name, program.ExternalChannelId).ToString("N"); + + dto.StartDate = program.StartDate; + dto.IsRepeat = program.IsRepeat; + dto.EpisodeTitle = program.EpisodeTitle; + dto.ChannelType = program.ChannelType; + dto.Audio = program.Audio; + dto.IsHD = program.IsHD; + dto.IsMovie = program.IsMovie; + dto.IsSeries = program.IsSeries; + dto.IsSports = program.IsSports; + dto.IsLive = program.IsLive; + dto.IsNews = program.IsNews; + dto.IsKids = program.IsKids; + dto.IsPremiere = program.IsPremiere; + dto.OriginalAirDate = program.OriginalAirDate; + + if (channel != null) + { + dto.ChannelName = channel.Name; + + if (!string.IsNullOrEmpty(channel.PrimaryImagePath)) + { + dto.ChannelPrimaryImageTag = _tvDtoService.GetImageTag(channel); + } + } + } + public void AddInfoToRecordingDto(BaseItem item, BaseItemDto dto, User user = null) { var recording = (ILiveTvRecording)item; @@ -1392,7 +1420,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv dto.IsNews = info.IsNews; dto.IsKids = info.IsKids; dto.IsPremiere = info.IsPremiere; - dto.RunTimeTicks = (info.EndDate - info.StartDate).Ticks; dto.OriginalAirDate = info.OriginalAirDate; dto.CanDelete = user == null @@ -1751,7 +1778,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv info.Name = program.Name; info.Overview = program.Overview; info.ProgramId = programDto.Id; - info.ExternalProgramId = programDto.ExternalId; + info.ExternalProgramId = program.ExternalId; if (program.EndDate.HasValue) { -- cgit v1.2.3 From cf0fd249406f0a1434a47140bb929cfd346578ef Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 2 Jun 2015 13:46:44 -0400 Subject: update voice script --- .../MediaBrowser.Controller.csproj | 1 + MediaBrowser.Controller/Sync/ISyncManager.cs | 2 +- MediaBrowser.Controller/Sync/ISyncRepository.cs | 2 +- MediaBrowser.Controller/Sync/SyncedItemProgress.cs | 10 ++ MediaBrowser.Model/Dto/BaseItemDto.cs | 5 + .../Dto/DtoService.cs | 103 +++++++++++++-------- .../Sync/SyncManager.cs | 4 +- .../Sync/SyncRepository.cs | 17 +++- .../MediaBrowser.WebDashboard.csproj | 4 +- 9 files changed, 98 insertions(+), 50 deletions(-) create mode 100644 MediaBrowser.Controller/Sync/SyncedItemProgress.cs (limited to 'MediaBrowser.Server.Implementations/Dto') diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 216f1cf81f..bf86c049f2 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -411,6 +411,7 @@ + diff --git a/MediaBrowser.Controller/Sync/ISyncManager.cs b/MediaBrowser.Controller/Sync/ISyncManager.cs index 97591551c1..fd373050f0 100644 --- a/MediaBrowser.Controller/Sync/ISyncManager.cs +++ b/MediaBrowser.Controller/Sync/ISyncManager.cs @@ -152,7 +152,7 @@ namespace MediaBrowser.Controller.Sync /// /// The query. /// QueryResult<System.String>. - QueryResult GetLibraryItemIds(SyncJobItemQuery query); + QueryResult GetSyncedItemProgresses(SyncJobItemQuery query); /// /// Reports the synchronize job item transfer beginning. diff --git a/MediaBrowser.Controller/Sync/ISyncRepository.cs b/MediaBrowser.Controller/Sync/ISyncRepository.cs index 315f5f5414..2af09dbaad 100644 --- a/MediaBrowser.Controller/Sync/ISyncRepository.cs +++ b/MediaBrowser.Controller/Sync/ISyncRepository.cs @@ -74,6 +74,6 @@ namespace MediaBrowser.Controller.Sync /// /// The query. /// QueryResult<System.String>. - QueryResult GetLibraryItemIds(SyncJobItemQuery query); + QueryResult GetSyncedItemProgresses(SyncJobItemQuery query); } } diff --git a/MediaBrowser.Controller/Sync/SyncedItemProgress.cs b/MediaBrowser.Controller/Sync/SyncedItemProgress.cs new file mode 100644 index 0000000000..edb42eb0f1 --- /dev/null +++ b/MediaBrowser.Controller/Sync/SyncedItemProgress.cs @@ -0,0 +1,10 @@ +using MediaBrowser.Model.Sync; + +namespace MediaBrowser.Controller.Sync +{ + public class SyncedItemProgress + { + public string ItemId { get; set; } + public SyncJobItemStatus Status { get; set; } + } +} diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index fb157e9ae7..7c5d9e9a11 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -100,6 +100,11 @@ namespace MediaBrowser.Model.Dto /// /// The synchronize status. public SyncJobItemStatus? SyncStatus { get; set; } + /// + /// Gets or sets the synchronize percent. + /// + /// The synchronize percent. + public double? SyncPercent { get; set; } /// /// Gets or sets the DVD season number. diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 5853b5b750..f9dfb13508 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -87,13 +87,14 @@ namespace MediaBrowser.Server.Implementations.Dto public IEnumerable GetBaseItemDtos(IEnumerable items, DtoOptions options, User user = null, BaseItem owner = null) { - var tuple = GetItemIdsWithSyncJobs(options); + var syncJobItems = GetSyncedItemProgress(options); + var syncDictionary = syncJobItems.ToDictionary(i => i.ItemId); var list = new List(); foreach (var item in items) { - var dto = GetBaseItemDtoInternal(item, options, user, owner); + var dto = GetBaseItemDtoInternal(item, options, syncDictionary, user, owner); var byName = item as IItemByName; @@ -111,7 +112,7 @@ namespace MediaBrowser.Server.Implementations.Dto } } - FillSyncInfo(dto, item, tuple.Item1, tuple.Item2, options, user); + FillSyncInfo(dto, item, syncJobItems, options, user); list.Add(dto); } @@ -121,7 +122,9 @@ namespace MediaBrowser.Server.Implementations.Dto public BaseItemDto GetBaseItemDto(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null) { - var dto = GetBaseItemDtoInternal(item, options, user, owner); + var syncProgress = GetSyncedItemProgress(options); + + var dto = GetBaseItemDtoInternal(item, options, syncProgress.ToDictionary(i => i.ItemId), user, owner); var byName = item as IItemByName; @@ -138,35 +141,35 @@ namespace MediaBrowser.Server.Implementations.Dto SetItemByNameInfo(item, dto, libraryItems.ToList(), user); } - FillSyncInfo(dto, item, options, user); + FillSyncInfo(dto, item, options, user, syncProgress); return dto; } - FillSyncInfo(dto, item, options, user); + FillSyncInfo(dto, item, options, user, syncProgress); return dto; } - private Tuple, IEnumerable> GetItemIdsWithSyncJobs(DtoOptions options) + private SyncedItemProgress[] GetSyncedItemProgress(DtoOptions options) { if (!options.Fields.Contains(ItemFields.SyncInfo)) { - return new Tuple, IEnumerable>(new List(), new List()); + return new SyncedItemProgress[]{}; } var deviceId = options.DeviceId; if (string.IsNullOrWhiteSpace(deviceId)) { - return new Tuple, IEnumerable>(new List(), new List()); + return new SyncedItemProgress[] { }; } var caps = _deviceManager().GetCapabilities(deviceId); if (caps == null || !caps.SupportsSync) { - return new Tuple, IEnumerable>(new List(), new List()); + return new SyncedItemProgress[] { }; } - var result1 = _syncManager.GetLibraryItemIds(new SyncJobItemQuery + return _syncManager.GetSyncedItemProgresses(new SyncJobItemQuery { TargetId = deviceId, Statuses = new[] @@ -174,38 +177,28 @@ namespace MediaBrowser.Server.Implementations.Dto SyncJobItemStatus.Converting, SyncJobItemStatus.Queued, SyncJobItemStatus.Transferring, - SyncJobItemStatus.ReadyToTransfer - } - }); - - var result2 = _syncManager.GetLibraryItemIds(new SyncJobItemQuery - { - TargetId = deviceId, - Statuses = new[] - { + SyncJobItemStatus.ReadyToTransfer, SyncJobItemStatus.Synced } - }); - - return new Tuple, IEnumerable>(result1.Items, result2.Items); + }).Items; } public void FillSyncInfo(IEnumerable dtos, DtoOptions options, User user) { if (options.Fields.Contains(ItemFields.SyncInfo)) { - var tuple = GetItemIdsWithSyncJobs(options); + var syncProgress = GetSyncedItemProgress(options); foreach (var dto in dtos) { var item = _libraryManager.GetItemById(dto.Id); - FillSyncInfo(dto, item, tuple.Item1, tuple.Item2, options, user); + FillSyncInfo(dto, item, syncProgress, options, user); } } } - private void FillSyncInfo(IHasSyncInfo dto, BaseItem item, DtoOptions options, User user) + private void FillSyncInfo(IHasSyncInfo dto, BaseItem item, DtoOptions options, User user, SyncedItemProgress[] syncProgress) { if (options.Fields.Contains(ItemFields.SyncInfo)) { @@ -215,10 +208,8 @@ namespace MediaBrowser.Server.Implementations.Dto if (dto.SupportsSync ?? false) { - var tuple = GetItemIdsWithSyncJobs(options); - - dto.HasSyncJob = tuple.Item1.Contains(dto.Id, StringComparer.OrdinalIgnoreCase); - dto.IsSynced = tuple.Item2.Contains(dto.Id, StringComparer.OrdinalIgnoreCase); + dto.HasSyncJob = syncProgress.Any(i => i.Status != SyncJobItemStatus.Synced && string.Equals(i.ItemId, dto.Id, StringComparison.OrdinalIgnoreCase)); + dto.IsSynced = syncProgress.Any(i => i.Status == SyncJobItemStatus.Synced && string.Equals(i.ItemId, dto.Id, StringComparison.OrdinalIgnoreCase)); if (dto.IsSynced.Value) { @@ -232,7 +223,7 @@ namespace MediaBrowser.Server.Implementations.Dto } } - private void FillSyncInfo(IHasSyncInfo dto, BaseItem item, IEnumerable itemIdsWithPendingSyncJobs, IEnumerable syncedItemIds, DtoOptions options, User user) + private void FillSyncInfo(IHasSyncInfo dto, BaseItem item, SyncedItemProgress[] syncProgress, DtoOptions options, User user) { if (options.Fields.Contains(ItemFields.SyncInfo)) { @@ -242,8 +233,8 @@ namespace MediaBrowser.Server.Implementations.Dto if (dto.SupportsSync ?? false) { - dto.HasSyncJob = itemIdsWithPendingSyncJobs.Contains(dto.Id, StringComparer.OrdinalIgnoreCase); - dto.IsSynced = syncedItemIds.Contains(dto.Id, StringComparer.OrdinalIgnoreCase); + dto.HasSyncJob = syncProgress.Any(i => i.Status != SyncJobItemStatus.Synced && string.Equals(i.ItemId, dto.Id, StringComparison.OrdinalIgnoreCase)); + dto.IsSynced = syncProgress.Any(i => i.Status == SyncJobItemStatus.Synced && string.Equals(i.ItemId, dto.Id, StringComparison.OrdinalIgnoreCase)); if (dto.IsSynced.Value) { @@ -257,7 +248,7 @@ namespace MediaBrowser.Server.Implementations.Dto } } - private BaseItemDto GetBaseItemDtoInternal(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null) + private BaseItemDto GetBaseItemDtoInternal(BaseItem item, DtoOptions options, Dictionary syncProgress, User user = null, BaseItem owner = null) { var fields = options.Fields; @@ -301,7 +292,7 @@ namespace MediaBrowser.Server.Implementations.Dto if (user != null) { - AttachUserSpecificInfo(dto, item, user, fields); + AttachUserSpecificInfo(dto, item, user, fields, syncProgress); } var hasMediaSources = item as IHasMediaSources; @@ -368,14 +359,16 @@ namespace MediaBrowser.Server.Implementations.Dto public BaseItemDto GetItemByNameDto(T item, DtoOptions options, List taggedItems, User user = null) where T : BaseItem, IItemByName { - var dto = GetBaseItemDtoInternal(item, options, user); + var syncProgress = GetSyncedItemProgress(options); + + var dto = GetBaseItemDtoInternal(item, options, syncProgress.ToDictionary(i => i.ItemId), user); if (options.Fields.Contains(ItemFields.ItemCounts)) { SetItemByNameInfo(item, dto, taggedItems, user); } - FillSyncInfo(dto, item, options, user); + FillSyncInfo(dto, item, options, user, syncProgress); return dto; } @@ -415,7 +408,8 @@ namespace MediaBrowser.Server.Implementations.Dto /// The item. /// The user. /// The fields. - private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List fields) + /// The synchronize progress. + private void AttachUserSpecificInfo(BaseItemDto dto, BaseItem item, User user, List fields, Dictionary syncProgress) { if (item.IsFolder) { @@ -433,7 +427,7 @@ namespace MediaBrowser.Server.Implementations.Dto // TODO: Disable for CollectionFolder if (!(folder is UserRootFolder) && !(folder is UserView)) { - SetSpecialCounts(folder, user, dto, fields); + SetSpecialCounts(folder, user, dto, fields, syncProgress); } dto.UserData.Played = dto.UserData.PlayedPercentage.HasValue && dto.UserData.PlayedPercentage.Value >= 100; @@ -1599,8 +1593,9 @@ namespace MediaBrowser.Server.Implementations.Dto /// The user. /// The dto. /// The fields. + /// The synchronize progress. /// Task. - private void SetSpecialCounts(Folder folder, User user, BaseItemDto dto, List fields) + private void SetSpecialCounts(Folder folder, User user, BaseItemDto dto, List fields, Dictionary syncProgress) { var recursiveItemCount = 0; var unplayed = 0; @@ -1608,6 +1603,8 @@ namespace MediaBrowser.Server.Implementations.Dto DateTime? dateLastMediaAdded = null; double totalPercentPlayed = 0; + double totalSyncPercent = 0; + var addSyncInfo = fields.Contains(ItemFields.SyncInfo); IEnumerable children; @@ -1666,6 +1663,27 @@ namespace MediaBrowser.Server.Implementations.Dto } runtime += child.RunTimeTicks ?? 0; + + if (addSyncInfo) + { + double percent = 0; + SyncedItemProgress syncItemProgress; + if (syncProgress.TryGetValue(dto.Id, out syncItemProgress)) + { + switch (syncItemProgress.Status) + { + case SyncJobItemStatus.Synced: + percent = 100; + break; + case SyncJobItemStatus.Converting: + case SyncJobItemStatus.ReadyToTransfer: + case SyncJobItemStatus.Transferring: + percent = 50; + break; + } + } + totalSyncPercent += percent; + } } dto.RecursiveItemCount = recursiveItemCount; @@ -1674,6 +1692,11 @@ namespace MediaBrowser.Server.Implementations.Dto if (recursiveItemCount > 0) { dto.UserData.PlayedPercentage = totalPercentPlayed / recursiveItemCount; + + if (addSyncInfo) + { + dto.SyncPercent = totalSyncPercent / recursiveItemCount; + } } if (runtime > 0 && fields.Contains(ItemFields.CumulativeRunTimeTicks)) diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index d47135c65c..8461176b4d 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -1131,9 +1131,9 @@ namespace MediaBrowser.Server.Implementations.Sync await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false); } - public QueryResult GetLibraryItemIds(SyncJobItemQuery query) + public QueryResult GetSyncedItemProgresses(SyncJobItemQuery query) { - return _repo.GetLibraryItemIds(query); + return _repo.GetSyncedItemProgresses(query); } public SyncJobOptions GetAudioOptions(SyncJobItem jobItem, SyncJob job) diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs index 5ad351af52..75c9290164 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs @@ -627,9 +627,9 @@ namespace MediaBrowser.Server.Implementations.Sync } } - public QueryResult GetLibraryItemIds(SyncJobItemQuery query) + public QueryResult GetSyncedItemProgresses(SyncJobItemQuery query) { - return GetJobItemReader(query, "select ItemId from SyncJobItems", GetItemId); + return GetJobItemReader(query, "select ItemId,Status from SyncJobItems", GetSyncedItemProgress); } public QueryResult GetJobItems(SyncJobItemQuery query) @@ -788,9 +788,18 @@ namespace MediaBrowser.Server.Implementations.Sync return info; } - private string GetItemId(IDataReader reader) + private SyncedItemProgress GetSyncedItemProgress(IDataReader reader) { - return reader.GetString(0); + var item = new SyncedItemProgress(); + + item.ItemId = reader.GetString(0); + + if (!reader.IsDBNull(1)) + { + item.Status = (SyncJobItemStatus)Enum.Parse(typeof(SyncJobItemStatus), reader.GetString(1), true); + } + + return item; } /// diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 84b0d2d851..a4a5b672e1 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -117,7 +117,7 @@ PreserveNewest - + PreserveNewest @@ -201,7 +201,7 @@ PreserveNewest - + PreserveNewest -- cgit v1.2.3 From 9c9ca620bc8ca180e9038a6b0e61a7fac2714f63 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 2 Jun 2015 13:50:50 -0400 Subject: update sync value --- MediaBrowser.Server.Implementations/Dto/DtoService.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Dto') diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index f9dfb13508..68d9a5e9b5 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -1668,7 +1668,7 @@ namespace MediaBrowser.Server.Implementations.Dto { double percent = 0; SyncedItemProgress syncItemProgress; - if (syncProgress.TryGetValue(dto.Id, out syncItemProgress)) + if (syncProgress.TryGetValue(child.Id.ToString("N"), out syncItemProgress)) { switch (syncItemProgress.Status) { @@ -1695,7 +1695,11 @@ namespace MediaBrowser.Server.Implementations.Dto if (addSyncInfo) { - dto.SyncPercent = totalSyncPercent / recursiveItemCount; + var pct = totalSyncPercent / recursiveItemCount; + if (pct > 0) + { + dto.SyncPercent = pct; + } } } -- cgit v1.2.3