/// <summary> /// Gets the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>System.Object.</returns> public object Get(GetAdditionalParts request) { var user = request.UserId.HasValue ? _userManager.GetUserById(request.UserId.Value) : null; var item = string.IsNullOrEmpty(request.Id) ? (request.UserId.HasValue ? user.RootFolder : _libraryManager.RootFolder) : _dtoService.GetItemByDtoId(request.Id, request.UserId); // Get everything var fields = Enum.GetNames(typeof(ItemFields)) .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) .ToList(); var video = (Video)item; var items = video.GetAdditionalParts() .Select(i => _dtoService.GetBaseItemDto(i, fields, user, video)) .ToArray(); var result = new ItemsResult { Items = items, TotalRecordCount = items.Length }; return(ToOptimizedSerializedResultUsingCache(result)); }
/// <summary> /// Reports the playback start. /// </summary> /// <param name="message">The message.</param> private void ReportPlaybackStart(WebSocketMessageInfo message) { _logger.Debug("Received PlaybackStart message"); var session = GetSessionFromMessage(message); if (session != null && session.User != null) { var vals = message.Data.Split('|'); var item = _dtoService.GetItemByDtoId(vals[0]); var queueableMediaTypes = string.Empty; var canSeek = true; if (vals.Length > 1) { canSeek = string.Equals(vals[1], "true", StringComparison.OrdinalIgnoreCase); } if (vals.Length > 2) { queueableMediaTypes = vals[2]; } var info = new PlaybackInfo { CanSeek = canSeek, Item = item, SessionId = session.Id, QueueableMediaTypes = queueableMediaTypes.Split(',').ToList() }; _sessionManager.OnPlaybackStart(info); } }
public object Get(GetInstantMixFromSong request) { var item = _dtoService.GetItemByDtoId(request.Id); var result = GetInstantMixResult(request, item.Genres).Result; return(ToOptimizedResult(result)); }
public object Get(GetRemoteImageProviders request) { var item = _dtoService.GetItemByDtoId(request.Id); var result = GetImageProviders(item); return(ToOptimizedSerializedResultUsingCache(result)); }
public object Get(GetInstantMixFromSong request) { var item = (Audio)_dtoService.GetItemByDtoId(request.Id); var user = _userManager.GetUserById(request.UserId.Value); var items = _musicManager.GetInstantMixFromSong(item, user); return(GetResult(items, user, request)); }
private Task <BaseItemDto[]> GetAsync(GetSpecialFeatures request) { var user = _userManager.GetUserById(request.UserId); var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : _dtoService.GetItemByDtoId(request.Id, user.Id); // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList(); var movie = item as Movie; // Get them from the db if (movie != null) { // Avoid implicitly captured closure var movie1 = movie; var tasks = movie.SpecialFeatureIds .Select(_itemRepo.RetrieveItem) .OrderBy(i => i.SortName) .Select(i => _dtoService.GetBaseItemDto(i, fields, user, movie1)); return(Task.WhenAll(tasks)); } var series = item as Series; // Get them from the child tree if (series != null) { var tasks = series .RecursiveChildren .OfType <Episode>() .Where(i => i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0) .OrderBy(i => { if (i.PremiereDate.HasValue) { return(i.PremiereDate.Value); } if (i.ProductionYear.HasValue) { return(new DateTime(i.ProductionYear.Value, 1, 1, 0, 0, 0, DateTimeKind.Utc)); } return(DateTime.MinValue); }) .ThenBy(i => i.SortName) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)); return(Task.WhenAll(tasks)); } throw new ArgumentException("The item does not support special features"); }
public object Get(GetFile request) { var item = _dtoService.GetItemByDtoId(request.Id); if (item.LocationType == LocationType.Remote || item.LocationType == LocationType.Virtual) { throw new ArgumentException("This command cannot be used for remote or virtual items."); } if (Directory.Exists(item.Path)) { throw new ArgumentException("This command cannot be used for directories."); } return(ToStaticFileResult(item.Path)); }
/// <summary> /// Refreshes the item. /// </summary> /// <param name="request">The request.</param> /// <returns>Task.</returns> private async Task RefreshItem(RefreshItem request) { var item = _dtoService.GetItemByDtoId(request.Id); var folder = item as Folder; try { await item.RefreshMetadata(CancellationToken.None, forceRefresh : request.Forced).ConfigureAwait(false); if (folder != null) { // Collection folders don't validate their children so we'll have to simulate that here var collectionFolder = folder as CollectionFolder; if (collectionFolder != null) { await RefreshCollectionFolderChildren(request, collectionFolder).ConfigureAwait(false); } else { await folder.ValidateChildren(new Progress <double>(), CancellationToken.None, request.Recursive, request.Forced).ConfigureAwait(false); } } } catch (Exception ex) { Logger.ErrorException("Error refreshing library", ex); } }
/// <summary> /// Gets the similar items. /// </summary> /// <param name="userManager">The user manager.</param> /// <param name="itemRepository">The item repository.</param> /// <param name="libraryManager">The library manager.</param> /// <param name="userDataRepository">The user data repository.</param> /// <param name="dtoService">The dto service.</param> /// <param name="logger">The logger.</param> /// <param name="request">The request.</param> /// <param name="includeInSearch">The include in search.</param> /// <param name="getSimilarityScore">The get similarity score.</param> /// <returns>ItemsResult.</returns> internal static ItemsResult GetSimilarItemsResult(IUserManager userManager, IItemRepository itemRepository, ILibraryManager libraryManager, IUserDataManager userDataRepository, IDtoService dtoService, ILogger logger, BaseGetSimilarItemsFromItem request, Func <BaseItem, bool> includeInSearch, Func <BaseItem, BaseItem, int> getSimilarityScore) { var user = request.UserId.HasValue ? userManager.GetUserById(request.UserId.Value) : null; var item = string.IsNullOrEmpty(request.Id) ? (request.UserId.HasValue ? user.RootFolder : (Folder)libraryManager.RootFolder) : dtoService.GetItemByDtoId(request.Id, request.UserId); var fields = request.GetItemFields().ToList(); var inputItems = user == null ? libraryManager.RootFolder.GetRecursiveChildren(i => i.Id != item.Id) : user.RootFolder.GetRecursiveChildren(user, i => i.Id != item.Id); var items = GetSimilaritems(item, inputItems, includeInSearch, getSimilarityScore) .ToList(); IEnumerable <BaseItem> returnItems = items; if (request.Limit.HasValue) { returnItems = returnItems.Take(request.Limit.Value); } var result = new ItemsResult { Items = returnItems.Select(i => dtoService.GetBaseItemDto(i, fields, user)).ToArray(), TotalRecordCount = items.Count }; return(result); }
/// <summary> /// Gets the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>System.Object.</returns> public object Get(GetItemImageInfos request) { var item = _dtoService.GetItemByDtoId(request.Id); var result = GetItemImageInfos(item); return(ToOptimizedResult(result)); }
public object Get(GetExternalIdInfos request) { var item = _dtoService.GetItemByDtoId(request.Id); var infos = _providerManager.GetExternalIdInfos(item).ToList(); return(ToOptimizedResult(infos)); }
private Task UpdateItem(UpdateItem request) { var item = _dtoService.GetItemByDtoId(request.ItemId); UpdateItem(request, item); return(_libraryManager.UpdateItem(item, ItemUpdateType.MetadataEdit, CancellationToken.None)); }
/// <summary> /// Gets the items to serialize. /// </summary> /// <param name="request">The request.</param> /// <param name="user">The user.</param> /// <returns>IEnumerable{BaseItem}.</returns> /// <exception cref="System.InvalidOperationException"></exception> private IEnumerable <BaseItem> GetItemsToSerialize(GetItems request, User user) { var item = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : _dtoService.GetItemByDtoId(request.ParentId, user.Id); // Default list type = children if (!string.IsNullOrEmpty(request.Ids)) { var idList = request.Ids.Split(',').ToList(); return(idList.Select(i => _dtoService.GetItemByDtoId(i, user.Id))); } if (request.Recursive) { return(((Folder)item).GetRecursiveChildren(user)); } return(((Folder)item).GetChildren(user, true, request.IndexBy)); }
/// <summary> /// Gets the items to serialize. /// </summary> /// <param name="request">The request.</param> /// <param name="user">The user.</param> /// <returns>IEnumerable{BaseItem}.</returns> /// <exception cref="System.InvalidOperationException"></exception> private IEnumerable <BaseItem> GetItemsToSerialize(GetItems request, User user) { var item = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : _dtoService.GetItemByDtoId(request.ParentId, user.Id); // Default list type = children IEnumerable <BaseItem> items; if (!string.IsNullOrEmpty(request.Ids)) { var idList = request.Ids.Split(',').ToList(); items = idList.Select(i => _dtoService.GetItemByDtoId(i, user.Id)); } else if (request.Recursive) { items = ((Folder)item).GetRecursiveChildren(user); } else { items = ((Folder)item).GetChildren(user, true, request.IndexBy); } if (request.IncludeIndexContainers) { var list = items.ToList(); var containers = list.Select(i => i.IndexContainer) .Where(i => i != null); list.AddRange(containers); return(list.Distinct()); } return(items); }
private async Task UpdateItem(UpdateItem request) { var item = _dtoService.GetItemByDtoId(request.ItemId); var newLockData = request.LockData ?? false; var dontFetchMetaChanged = item.DontFetchMeta != newLockData; UpdateItem(request, item); await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false); if (dontFetchMetaChanged && item.IsFolder) { var folder = (Folder)item; foreach (var child in folder.RecursiveChildren.ToList()) { child.DontFetchMeta = newLockData; await _libraryManager.UpdateItem(child, ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false); } } }
/// <summary> /// Processes the message. /// </summary> /// <param name="message">The message.</param> /// <returns>Task.</returns> public Task ProcessMessage(WebSocketMessageInfo message) { if (string.Equals(message.MessageType, "Identity", StringComparison.OrdinalIgnoreCase)) { _logger.Debug("Received Identity message"); var vals = message.Data.Split('|'); var client = vals[0]; var deviceId = vals[1]; var version = vals[2]; var session = _sessionManager.Sessions .FirstOrDefault(i => string.Equals(i.DeviceId, deviceId) && string.Equals(i.Client, client) && string.Equals(i.ApplicationVersion, version)); if (session != null) { var sockets = session.WebSockets.Where(i => i.State == WebSocketState.Open).ToList(); sockets.Add(message.Connection); session.WebSockets = sockets; } else { _logger.Warn("Unable to determine session based on identity message: {0}", message.Data); } } else if (string.Equals(message.MessageType, "Context", StringComparison.OrdinalIgnoreCase)) { var session = _sessionManager.Sessions.FirstOrDefault(i => i.WebSockets.Contains(message.Connection)); if (session != null) { var vals = message.Data.Split('|'); session.NowViewingItemType = vals[0]; session.NowViewingItemId = vals[1]; session.NowViewingItemName = vals[2]; session.NowViewingContext = vals.Length > 3 ? vals[3] : null; } else { _logger.Warn("Unable to determine session based on context message: {0}", message.Data); } } else if (string.Equals(message.MessageType, "PlaybackStart", StringComparison.OrdinalIgnoreCase)) { _logger.Debug("Received PlaybackStart message"); var session = _sessionManager.Sessions.FirstOrDefault(i => i.WebSockets.Contains(message.Connection)); if (session != null && session.User != null) { var item = _dtoService.GetItemByDtoId(message.Data); _sessionManager.OnPlaybackStart(item, session.Id); } } else if (string.Equals(message.MessageType, "PlaybackProgress", StringComparison.OrdinalIgnoreCase)) { var session = _sessionManager.Sessions.FirstOrDefault(i => i.WebSockets.Contains(message.Connection)); if (session != null && session.User != null) { var vals = message.Data.Split('|'); var item = _dtoService.GetItemByDtoId(vals[0]); long?positionTicks = null; if (vals.Length > 1) { long pos; if (long.TryParse(vals[1], out pos)) { positionTicks = pos; } } var isPaused = vals.Length > 2 && string.Equals(vals[2], "true", StringComparison.OrdinalIgnoreCase); var isMuted = vals.Length > 3 && string.Equals(vals[3], "true", StringComparison.OrdinalIgnoreCase); _sessionManager.OnPlaybackProgress(item, positionTicks, isPaused, isMuted, session.Id); } } else if (string.Equals(message.MessageType, "PlaybackStopped", StringComparison.OrdinalIgnoreCase)) { _logger.Debug("Received PlaybackStopped message"); var session = _sessionManager.Sessions.FirstOrDefault(i => i.WebSockets.Contains(message.Connection)); if (session != null && session.User != null) { var vals = message.Data.Split('|'); var item = _dtoService.GetItemByDtoId(vals[0]); long?positionTicks = null; if (vals.Length > 1) { long pos; if (long.TryParse(vals[1], out pos)) { positionTicks = pos; } } _sessionManager.OnPlaybackStopped(item, positionTicks, session.Id); } } return(_trueTaskResult); }