update guide

This commit is contained in:
Luke Pulverenti 2015-08-19 19:57:27 -04:00
parent 8c32aefb53
commit 3787af4c9c
9 changed files with 76 additions and 72 deletions

View File

@ -138,8 +138,9 @@ namespace MediaBrowser.Api.Music
public object Get(GetInstantMixFromArtist request) public object Get(GetInstantMixFromArtist request)
{ {
var user = _userManager.GetUserById(request.UserId); var user = _userManager.GetUserById(request.UserId);
var artist = _libraryManager.GetArtist(request.Name);
var items = _musicManager.GetInstantMixFromArtist(request.Name, user); var items = _musicManager.GetInstantMixFromArtist(artist, user);
return GetResult(items, user, request); return GetResult(items, user, request);
} }

View File

@ -502,5 +502,12 @@ namespace MediaBrowser.Controller.Library
/// <param name="query">The query.</param> /// <param name="query">The query.</param>
/// <returns>List&lt;System.String&gt;.</returns> /// <returns>List&lt;System.String&gt;.</returns>
List<string> GetPeopleNames(InternalPeopleQuery query); List<string> GetPeopleNames(InternalPeopleQuery query);
/// <summary>
/// Queries the items.
/// </summary>
/// <param name="query">The query.</param>
/// <returns>QueryResult&lt;BaseItem&gt;.</returns>
QueryResult<BaseItem> QueryItems(InternalItemsQuery query);
} }
} }

View File

@ -16,10 +16,10 @@ namespace MediaBrowser.Controller.Library
/// <summary> /// <summary>
/// Gets the instant mix from artist. /// Gets the instant mix from artist.
/// </summary> /// </summary>
/// <param name="name">The name.</param> /// <param name="artist">The artist.</param>
/// <param name="user">The user.</param> /// <param name="user">The user.</param>
/// <returns>IEnumerable{Audio}.</returns> /// <returns>IEnumerable{Audio}.</returns>
IEnumerable<Audio> GetInstantMixFromArtist(string name, User user); IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist artist, User user);
/// <summary> /// <summary>
/// Gets the instant mix from genre. /// Gets the instant mix from genre.
/// </summary> /// </summary>

View File

@ -3,12 +3,14 @@ using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Progress; using MediaBrowser.Common.Progress;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Resolvers;
@ -243,10 +245,6 @@ namespace MediaBrowser.Server.Implementations.Library
} }
} }
/// <summary>
/// The _items by name path
/// </summary>
private string _itemsByNamePath;
/// <summary> /// <summary>
/// The _season zero display name /// The _season zero display name
/// </summary> /// </summary>
@ -260,7 +258,6 @@ namespace MediaBrowser.Server.Implementations.Library
private void RecordConfigurationValues(ServerConfiguration configuration) private void RecordConfigurationValues(ServerConfiguration configuration)
{ {
_seasonZeroDisplayName = configuration.SeasonZeroDisplayName; _seasonZeroDisplayName = configuration.SeasonZeroDisplayName;
_itemsByNamePath = ConfigurationManager.ApplicationPaths.ItemsByNamePath;
_wizardCompleted = configuration.IsStartupWizardCompleted; _wizardCompleted = configuration.IsStartupWizardCompleted;
} }
@ -273,56 +270,24 @@ namespace MediaBrowser.Server.Implementations.Library
{ {
var config = ConfigurationManager.Configuration; var config = ConfigurationManager.Configuration;
var ibnPathChanged = !string.Equals(_itemsByNamePath, ConfigurationManager.ApplicationPaths.ItemsByNamePath, StringComparison.Ordinal);
if (ibnPathChanged)
{
RemoveItemsByNameFromCache();
}
var newSeasonZeroName = ConfigurationManager.Configuration.SeasonZeroDisplayName; var newSeasonZeroName = ConfigurationManager.Configuration.SeasonZeroDisplayName;
var seasonZeroNameChanged = !string.Equals(_seasonZeroDisplayName, newSeasonZeroName, StringComparison.Ordinal); var seasonZeroNameChanged = !string.Equals(_seasonZeroDisplayName, newSeasonZeroName, StringComparison.Ordinal);
var wizardChanged = config.IsStartupWizardCompleted != _wizardCompleted; var wizardChanged = config.IsStartupWizardCompleted != _wizardCompleted;
RecordConfigurationValues(config); RecordConfigurationValues(config);
Task.Run(async () => if (seasonZeroNameChanged || wizardChanged)
{ {
if (seasonZeroNameChanged) _taskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>();
}
if (seasonZeroNameChanged)
{
Task.Run(async () =>
{ {
await UpdateSeasonZeroNames(newSeasonZeroName, CancellationToken.None).ConfigureAwait(false); await UpdateSeasonZeroNames(newSeasonZeroName, CancellationToken.None).ConfigureAwait(false);
}
if (seasonZeroNameChanged || ibnPathChanged || wizardChanged) });
{
_taskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>();
}
});
}
private void RemoveItemsByNameFromCache()
{
RemoveItemsFromCache(i => i is Person);
RemoveItemsFromCache(i => i is Year);
RemoveItemsFromCache(i => i is Genre);
RemoveItemsFromCache(i => i is MusicGenre);
RemoveItemsFromCache(i => i is GameGenre);
RemoveItemsFromCache(i => i is Studio);
RemoveItemsFromCache(i =>
{
var artist = i as MusicArtist;
return artist != null && artist.IsAccessedByName;
});
}
private void RemoveItemsFromCache(Func<BaseItem, bool> remove)
{
var items = _libraryItemsCache.ToList().Where(i => remove(i.Value)).ToList();
foreach (var item in items)
{
BaseItem value;
_libraryItemsCache.TryRemove(item.Key, out value);
} }
} }
@ -374,6 +339,21 @@ namespace MediaBrowser.Server.Implementations.Library
private void RegisterItem(Guid id, BaseItem item) private void RegisterItem(Guid id, BaseItem item)
{ {
if (item is LiveTvProgram)
{
return;
}
if (item is IChannelItem)
{
return;
}
if (item is IItemByName)
{
if (!(item is MusicArtist))
{
return;
}
}
LibraryItemsCache.AddOrUpdate(id, item, delegate { return item; }); LibraryItemsCache.AddOrUpdate(id, item, delegate { return item; });
} }
@ -951,11 +931,14 @@ namespace MediaBrowser.Server.Implementations.Library
DateModified = DateTime.UtcNow, DateModified = DateTime.UtcNow,
Path = path Path = path
}; };
}
if (isArtist) if (isArtist)
{ {
(item as MusicArtist).IsAccessedByName = true; (item as MusicArtist).IsAccessedByName = true;
}
var task = item.UpdateToRepository(ItemUpdateType.None, CancellationToken.None);
Task.WaitAll(task);
} }
return item; return item;
@ -1259,6 +1242,11 @@ namespace MediaBrowser.Server.Implementations.Library
}; };
} }
public QueryResult<BaseItem> QueryItems(InternalItemsQuery query)
{
return ItemRepository.GetItems(query);
}
public List<Guid> GetItemIds(InternalItemsQuery query) public List<Guid> GetItemIds(InternalItemsQuery query)
{ {
return ItemRepository.GetItemIdsList(query); return ItemRepository.GetItemIdsList(query);

View File

@ -27,10 +27,8 @@ namespace MediaBrowser.Server.Implementations.Library
return list.Concat(GetInstantMixFromGenres(item.Genres, user)); return list.Concat(GetInstantMixFromGenres(item.Genres, user));
} }
public IEnumerable<Audio> GetInstantMixFromArtist(string name, User user) public IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist artist, User user)
{ {
var artist = _libraryManager.GetArtist(name);
var genres = user.RootFolder var genres = user.RootFolder
.GetRecursiveChildren(user, i => i is Audio) .GetRecursiveChildren(user, i => i is Audio)
.Cast<Audio>() .Cast<Audio>()
@ -107,7 +105,7 @@ namespace MediaBrowser.Server.Implementations.Library
var artist = item as MusicArtist; var artist = item as MusicArtist;
if (artist != null) if (artist != null)
{ {
return GetInstantMixFromArtist(artist.Name, user); return GetInstantMixFromArtist(artist, user);
} }
var song = item as Audio; var song = item as Audio;

View File

@ -1,5 +1,4 @@
using System.IO; using MediaBrowser.Common;
using MediaBrowser.Common;
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
@ -26,6 +25,7 @@ using MoreLinq;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -59,8 +59,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv
private readonly SemaphoreSlim _refreshRecordingsLock = new SemaphoreSlim(1, 1); private readonly SemaphoreSlim _refreshRecordingsLock = new SemaphoreSlim(1, 1);
private readonly ConcurrentDictionary<Guid, Guid> _refreshedPrograms = new ConcurrentDictionary<Guid, Guid>();
private readonly List<ITunerHost> _tunerHosts = new List<ITunerHost>(); private readonly List<ITunerHost> _tunerHosts = new List<ITunerHost>();
private readonly List<IListingsProvider> _listingProviders = new List<IListingsProvider>(); private readonly List<IListingsProvider> _listingProviders = new List<IListingsProvider>();
private readonly IFileSystem _fileSystem; private readonly IFileSystem _fileSystem;
@ -253,7 +251,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var now = DateTime.UtcNow; var now = DateTime.UtcNow;
var programs = _libraryManager.GetItems(new InternalItemsQuery var programs = _libraryManager.QueryItems(new InternalItemsQuery
{ {
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
MaxStartDate = now, MaxStartDate = now,
@ -799,7 +797,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
} }
} }
IEnumerable<LiveTvProgram> programs = _libraryManager.GetItems(internalQuery).Items.Cast<LiveTvProgram>(); IEnumerable<LiveTvProgram> programs = _libraryManager.QueryItems(internalQuery).Items.Cast<LiveTvProgram>();
programs = _libraryManager.Sort(programs, user, query.SortBy, query.SortOrder ?? SortOrder.Ascending) programs = _libraryManager.Sort(programs, user, query.SortBy, query.SortOrder ?? SortOrder.Ascending)
.Cast<LiveTvProgram>(); .Cast<LiveTvProgram>();
@ -869,7 +867,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
} }
} }
IEnumerable<LiveTvProgram> programs = _libraryManager.GetItems(internalQuery).Items.Cast<LiveTvProgram>(); IEnumerable<LiveTvProgram> programs = _libraryManager.QueryItems(internalQuery).Items.Cast<LiveTvProgram>();
var programList = programs.ToList(); var programList = programs.ToList();
@ -1081,8 +1079,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv
await CleanDatabaseInternal(newChannelIdList, new[] { typeof(LiveTvChannel).Name }, progress, cancellationToken).ConfigureAwait(false); await CleanDatabaseInternal(newChannelIdList, new[] { typeof(LiveTvChannel).Name }, progress, cancellationToken).ConfigureAwait(false);
await CleanDatabaseInternal(newProgramIdList, new[] { typeof(LiveTvProgram).Name }, progress, cancellationToken).ConfigureAwait(false); await CleanDatabaseInternal(newProgramIdList, new[] { typeof(LiveTvProgram).Name }, progress, cancellationToken).ConfigureAwait(false);
_refreshedPrograms.Clear();
// Load these now which will prefetch metadata // Load these now which will prefetch metadata
var dtoOptions = new DtoOptions(); var dtoOptions = new DtoOptions();
dtoOptions.Fields.Remove(ItemFields.SyncInfo); dtoOptions.Fields.Remove(ItemFields.SyncInfo);

View File

@ -176,7 +176,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts
if (stream != null) if (stream != null)
{ {
return null; return stream;
} }
} }
} }
@ -184,7 +184,20 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts
throw new LiveTvConflictException(); throw new LiveTvConflictException();
} }
protected abstract Task<bool> IsAvailable(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken); protected async Task<bool> IsAvailable(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken)
{
try
{
return await IsAvailableInternal(tuner, channelId, cancellationToken).ConfigureAwait(false);
}
catch (Exception ex)
{
Logger.ErrorException("Error checking tuner availability", ex);
return false;
}
}
protected abstract Task<bool> IsAvailableInternal(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken);
protected abstract bool IsValidChannelId(string channelId); protected abstract bool IsValidChannelId(string channelId);

View File

@ -128,7 +128,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
var name = line.Substring(0, index - 1); var name = line.Substring(0, index - 1);
var currentChannel = line.Substring(index + 7); var currentChannel = line.Substring(index + 7);
if (currentChannel != "none") { status = LiveTvTunerStatus.LiveTv; } else { status = LiveTvTunerStatus.Available; } if (currentChannel != "none") { status = LiveTvTunerStatus.LiveTv; } else { status = LiveTvTunerStatus.Available; }
tuners.Add(new LiveTvTunerInfo() tuners.Add(new LiveTvTunerInfo
{ {
Name = name, Name = name,
SourceType = string.IsNullOrWhiteSpace(model) ? Name : model, SourceType = string.IsNullOrWhiteSpace(model) ? Name : model,
@ -385,10 +385,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
await GetChannels(info, false, CancellationToken.None).ConfigureAwait(false); await GetChannels(info, false, CancellationToken.None).ConfigureAwait(false);
} }
protected override async Task<bool> IsAvailable(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken) protected override async Task<bool> IsAvailableInternal(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken)
{ {
// TODO var info = await GetTunerInfos(tuner, cancellationToken).ConfigureAwait(false);
return true;
return info.Any(i => i.Status == LiveTvTunerStatus.Available);
} }
} }
} }

View File

@ -210,7 +210,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts
throw new NotImplementedException(); throw new NotImplementedException();
} }
protected override Task<bool> IsAvailable(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken) protected override Task<bool> IsAvailableInternal(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken)
{ {
return Task.FromResult(true); return Task.FromResult(true);
} }