add option to merge metadata and IBN paths

This commit is contained in:
Luke Pulverenti
2015-01-26 11:47:15 -05:00
parent 91416cb8a8
commit 63f3cf97da
33 changed files with 411 additions and 379 deletions

View File

@@ -0,0 +1,10 @@
using MediaBrowser.Model.Devices;
namespace MediaBrowser.Controller.Devices
{
public class CameraImageUploadInfo
{
public LocalFileInfo FileInfo { get; set; }
public DeviceInfo Device { get; set; }
}
}

View File

@@ -3,7 +3,6 @@ using MediaBrowser.Model.Events;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Session;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
@@ -15,6 +14,10 @@ namespace MediaBrowser.Controller.Devices
/// Occurs when [device options updated].
/// </summary>
event EventHandler<GenericEventArgs<DeviceInfo>> DeviceOptionsUpdated;
/// <summary>
/// Occurs when [camera image uploaded].
/// </summary>
event EventHandler<GenericEventArgs<CameraImageUploadInfo>> CameraImageUploaded;
/// <summary>
/// Registers the device.

View File

@@ -1,19 +0,0 @@
using System;
using System.Collections.Generic;
namespace MediaBrowser.Controller.Entities
{
[Obsolete]
public class AdultVideo : Video, IHasProductionLocations, IHasTaglines
{
public List<string> ProductionLocations { get; set; }
public List<string> Taglines { get; set; }
public AdultVideo()
{
Taglines = new List<string>();
ProductionLocations = new List<string>();
}
}
}

View File

@@ -1,11 +1,11 @@
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Users;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using MediaBrowser.Model.Users;
namespace MediaBrowser.Controller.Entities.Audio
{
@@ -181,10 +181,4 @@ namespace MediaBrowser.Controller.Entities.Audio
return id;
}
}
[Obsolete]
public class MusicAlbumDisc : Folder
{
}
}

View File

@@ -129,44 +129,21 @@ namespace MediaBrowser.Controller.Entities.Audio
var others = items.Except(songs).ToList();
var totalItems = songs.Count + others.Count;
var percentages = new Dictionary<Guid, double>(totalItems);
var tasks = new List<Task>();
var numComplete = 0;
// Refresh songs
foreach (var item in songs)
{
if (tasks.Count >= 2)
{
await Task.WhenAll(tasks).ConfigureAwait(false);
tasks.Clear();
}
cancellationToken.ThrowIfCancellationRequested();
var innerProgress = new ActionableProgress<double>();
// Avoid implicitly captured closure
var currentChild = item;
innerProgress.RegisterAction(p =>
{
lock (percentages)
{
percentages[currentChild.Id] = p / 100;
await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
var percent = percentages.Values.Sum();
percent /= totalItems;
percent *= 100;
progress.Report(percent);
}
});
var taskChild = item;
tasks.Add(Task.Run(async () => await RefreshItem(taskChild, refreshOptions, innerProgress, cancellationToken).ConfigureAwait(false), cancellationToken));
numComplete++;
double percent = numComplete;
percent /= totalItems;
progress.Report(percent * 100);
}
await Task.WhenAll(tasks).ConfigureAwait(false);
tasks.Clear();
// Refresh current item
await RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
@@ -175,31 +152,17 @@ namespace MediaBrowser.Controller.Entities.Audio
{
cancellationToken.ThrowIfCancellationRequested();
// Avoid implicitly captured closure
var currentChild = item;
await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
lock (percentages)
{
percentages[currentChild.Id] = 1;
var percent = percentages.Values.Sum();
percent /= totalItems;
percent *= 100;
progress.Report(percent);
}
numComplete++;
double percent = numComplete;
percent /= totalItems;
progress.Report(percent * 100);
}
progress.Report(100);
}
private async Task RefreshItem(BaseItem item, MetadataRefreshOptions refreshOptions, IProgress<double> progress, CancellationToken cancellationToken)
{
await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
progress.Report(100);
}
public ArtistInfo GetLookupInfo()
{
var info = GetItemLookupInfo<ArtistInfo>();

View File

@@ -283,7 +283,17 @@ namespace MediaBrowser.Controller.Entities
{
get
{
return _children ?? (_children = LoadChildrenInternal());
if (_children == null)
{
lock (_childrenSyncLock)
{
if (_children == null)
{
_children = LoadChildrenInternal();
}
}
}
return _children;
}
}
@@ -749,28 +759,6 @@ namespace MediaBrowser.Controller.Entities
return childrenItems;
}
/// <summary>
/// Retrieves the child.
/// </summary>
/// <param name="child">The child.</param>
/// <returns>BaseItem.</returns>
private BaseItem RetrieveChild(Guid child)
{
var item = LibraryManager.GetItemById(child);
if (item != null)
{
if (item is IByReferenceItem)
{
return LibraryManager.GetOrAddByReferenceItem(item);
}
item.Parent = this;
}
return item;
}
private BaseItem RetrieveChild(BaseItem child)
{
if (child.Id == Guid.Empty)

View File

@@ -143,31 +143,19 @@ namespace MediaBrowser.Controller.Entities.Movies
var items = GetRecursiveChildren().ToList();
var totalItems = items.Count;
var percentages = new Dictionary<Guid, double>(totalItems);
var numComplete = 0;
// Refresh songs
foreach (var item in items)
{
cancellationToken.ThrowIfCancellationRequested();
var innerProgress = new ActionableProgress<double>();
// Avoid implicitly captured closure
var currentChild = item;
innerProgress.RegisterAction(p =>
{
lock (percentages)
{
percentages[currentChild.Id] = p / 100;
await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
var percent = percentages.Values.Sum();
percent /= totalItems;
percent *= 100;
progress.Report(percent);
}
});
// Avoid implicitly captured closure
await RefreshItem(item, refreshOptions, innerProgress, cancellationToken).ConfigureAwait(false);
numComplete++;
double percent = numComplete;
percent /= totalItems;
progress.Report(percent * 100);
}
// Refresh current item
@@ -176,13 +164,6 @@ namespace MediaBrowser.Controller.Entities.Movies
progress.Report(100);
}
private async Task RefreshItem(BaseItem item, MetadataRefreshOptions refreshOptions, IProgress<double> progress, CancellationToken cancellationToken)
{
await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
progress.Report(100);
}
public override bool IsVisible(User user)
{
if (base.IsVisible(user))

View File

@@ -64,8 +64,7 @@ namespace MediaBrowser.Controller.Entities
{
CollectionType.Books,
CollectionType.HomeVideos,
CollectionType.Photos,
string.Empty
CollectionType.Photos
};
var collectionFolder = folder as ICollectionFolder;

View File

@@ -409,12 +409,21 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetMusicLatest(Folder parent, User user, InternalItemsQuery query)
{
query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName };
query.SortOrder = SortOrder.Descending;
var items = _userViewManager.GetLatestItems(new LatestItemsQuery
{
UserId = user.Id.ToString("N"),
Limit = GetSpecialItemsLimit(),
IncludeItemTypes = new[] { typeof(Audio.Audio).Name },
ParentId = (parent == null ? null : parent.Id.ToString("N")),
GroupItems = true
var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }, i => i is MusicVideo || i is Audio.Audio && FilterItem(i, query));
}).Select(i => i.Item1);
return PostFilterAndSort(items, parent, GetSpecialItemsLimit(), query);
query.SortBy = new string[] { };
//var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }, i => i is MusicVideo || i is Audio.Audio && FilterItem(i, query));
return PostFilterAndSort(items, parent, null, query);
}
private async Task<QueryResult<BaseItem>> GetMovieFolders(Folder parent, User user, InternalItemsQuery query)
@@ -741,7 +750,7 @@ namespace MediaBrowser.Controller.Entities
private async Task<QueryResult<BaseItem>> GetGameGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query)
{
var items = GetRecursiveChildren(queryParent, user, new[] {CollectionType.Games},
var items = GetRecursiveChildren(queryParent, user, new[] { CollectionType.Games },
i => i is Game && i.Genres.Contains(displayParent.Name, StringComparer.OrdinalIgnoreCase));
return GetResult(items, queryParent, query);
@@ -1686,7 +1695,7 @@ namespace MediaBrowser.Controller.Entities
return parent.GetRecursiveChildren(user);
}
private IEnumerable<BaseItem> GetRecursiveChildren(Folder parent, User user, IEnumerable<string> viewTypes, Func<BaseItem,bool> filter)
private IEnumerable<BaseItem> GetRecursiveChildren(Folder parent, User user, IEnumerable<string> viewTypes, Func<BaseItem, bool> filter)
{
if (parent == null || parent is UserView)
{

View File

@@ -1,6 +1,5 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Playlists;
using System.Collections.Generic;
namespace MediaBrowser.Controller.Library
@@ -13,7 +12,7 @@ namespace MediaBrowser.Controller.Library
/// <param name="item">The item.</param>
/// <param name="user">The user.</param>
/// <returns>IEnumerable{Audio}.</returns>
IEnumerable<Audio> GetInstantMixFromSong(Audio item, User user);
IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user);
/// <summary>
/// Gets the instant mix from artist.
/// </summary>
@@ -22,20 +21,6 @@ namespace MediaBrowser.Controller.Library
/// <returns>IEnumerable{Audio}.</returns>
IEnumerable<Audio> GetInstantMixFromArtist(string name, User user);
/// <summary>
/// Gets the instant mix from album.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="user">The user.</param>
/// <returns>IEnumerable{Audio}.</returns>
IEnumerable<Audio> GetInstantMixFromAlbum(MusicAlbum item, User user);
/// <summary>
/// Gets the instant mix from playlist.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="user">The user.</param>
/// <returns>IEnumerable&lt;Audio&gt;.</returns>
IEnumerable<Audio> GetInstantMixFromPlaylist(Playlist item, User user);
/// <summary>
/// Gets the instant mix from genre.
/// </summary>
/// <param name="genres">The genres.</param>

View File

@@ -1,5 +1,7 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Library;
using MediaBrowser.Model.Querying;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
@@ -16,5 +18,7 @@ namespace MediaBrowser.Controller.Library
Task<UserView> GetUserView(string type, string sortName, CancellationToken cancellationToken);
Task<UserView> GetUserView(string category, string type, User user, string sortName, CancellationToken cancellationToken);
List<Tuple<BaseItem, List<BaseItem>>> GetLatestItems(LatestItemsQuery request);
}
}

View File

@@ -101,6 +101,7 @@
<Compile Include="Collections\ICollectionManager.cs" />
<Compile Include="Connect\IConnectManager.cs" />
<Compile Include="Connect\UserLinkResult.cs" />
<Compile Include="Devices\CameraImageUploadInfo.cs" />
<Compile Include="Devices\IDeviceManager.cs" />
<Compile Include="Devices\IDeviceRepository.cs" />
<Compile Include="Dlna\ControlRequest.cs" />
@@ -117,7 +118,6 @@
<Compile Include="Drawing\ImageStream.cs" />
<Compile Include="Dto\DtoOptions.cs" />
<Compile Include="Dto\IDtoService.cs" />
<Compile Include="Entities\AdultVideo.cs" />
<Compile Include="Entities\Audio\IHasAlbumArtist.cs" />
<Compile Include="Entities\Audio\IHasMusicGenres.cs" />
<Compile Include="Entities\Book.cs" />

View File

@@ -113,38 +113,17 @@ namespace MediaBrowser.Controller.Playlists
return LibraryManager.Sort(items, user, new[] { ItemSortBy.AlbumArtist, ItemSortBy.Album, ItemSortBy.SortName }, SortOrder.Ascending);
}
// Grab these explicitly to avoid the sorting that will happen below
var collection = item as BoxSet;
if (collection != null)
{
var items = user == null
? collection.Children
: collection.GetChildren(user, true);
return items
.Where(m => !m.IsFolder);
}
// Grab these explicitly to avoid the sorting that will happen below
var season = item as Season;
if (season != null)
{
var items = user == null
? season.Children
: season.GetChildren(user, true);
return items
.Where(m => !m.IsFolder);
}
var folder = item as Folder;
if (folder != null)
{
var items = user == null
? folder.GetRecursiveChildren(m => !m.IsFolder)
: folder.GetRecursiveChildren(user, m => !m.IsFolder);
if (folder.IsPreSorted)
{
return items;
}
return LibraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending);
}