Added album soundtrack links

This commit is contained in:
Luke Pulverenti 2013-07-16 12:03:28 -04:00
parent 682dea1d70
commit c1ad234b79
6 changed files with 211 additions and 49 deletions

View File

@ -31,7 +31,7 @@ namespace MediaBrowser.Common.Configuration
configuration = xmlSerializer.DeserializeFromBytes(type, buffer); configuration = xmlSerializer.DeserializeFromBytes(type, buffer);
} }
catch (FileNotFoundException) catch (Exception)
{ {
configuration = Activator.CreateInstance(type); configuration = Activator.CreateInstance(type);
} }

View File

@ -95,6 +95,37 @@ namespace MediaBrowser.Controller.Dto
AttachBasicFields(dto, item, fields); AttachBasicFields(dto, item, fields);
if (fields.Contains(ItemFields.SoundtrackIds))
{
var series = item as Series;
if (series != null)
{
AttachSoundtrackIds(dto, series, user);
}
var movie = item as Movie;
if (movie != null)
{
AttachSoundtrackIds(dto, movie, user);
}
var album = item as MusicAlbum;
if (album != null)
{
AttachSoundtrackIds(dto, album, user);
}
var game = item as Game;
if (game != null)
{
AttachSoundtrackIds(dto, game, user);
}
}
// Make sure all the tasks we kicked off have completed. // Make sure all the tasks we kicked off have completed.
if (tasks.Count > 0) if (tasks.Count > 0)
{ {
@ -104,6 +135,132 @@ namespace MediaBrowser.Controller.Dto
return dto; return dto;
} }
private void AttachSoundtrackIds(BaseItemDto dto, Movie item, User user)
{
var tmdb = item.GetProviderId(MetadataProviders.Tmdb);
if (string.IsNullOrEmpty(tmdb))
{
return;
}
var recursiveChildren = user == null
? _libraryManager.RootFolder.RecursiveChildren
: user.RootFolder.GetRecursiveChildren(user);
dto.SoundtrackIds = recursiveChildren
.Where(i =>
{
if (!string.IsNullOrEmpty(tmdb) &&
string.Equals(tmdb, i.GetProviderId(MetadataProviders.Tmdb), StringComparison.OrdinalIgnoreCase) &&
i is MusicAlbum)
{
return true;
}
return false;
})
.Select(GetClientItemId)
.ToArray();
}
private void AttachSoundtrackIds(BaseItemDto dto, Series item, User user)
{
var tvdb = item.GetProviderId(MetadataProviders.Tvdb);
if (string.IsNullOrEmpty(tvdb))
{
return;
}
var recursiveChildren = user == null
? _libraryManager.RootFolder.RecursiveChildren
: user.RootFolder.GetRecursiveChildren(user);
dto.SoundtrackIds = recursiveChildren
.Where(i =>
{
if (!string.IsNullOrEmpty(tvdb) &&
string.Equals(tvdb, i.GetProviderId(MetadataProviders.Tvdb), StringComparison.OrdinalIgnoreCase) &&
i is MusicAlbum)
{
return true;
}
return false;
})
.Select(GetClientItemId)
.ToArray();
}
private void AttachSoundtrackIds(BaseItemDto dto, Game item, User user)
{
var gamesdb = item.GetProviderId(MetadataProviders.Gamesdb);
if (string.IsNullOrEmpty(gamesdb))
{
return;
}
var recursiveChildren = user == null
? _libraryManager.RootFolder.RecursiveChildren
: user.RootFolder.GetRecursiveChildren(user);
dto.SoundtrackIds = recursiveChildren
.Where(i =>
{
if (!string.IsNullOrEmpty(gamesdb) &&
string.Equals(gamesdb, i.GetProviderId(MetadataProviders.Gamesdb), StringComparison.OrdinalIgnoreCase) &&
i is MusicAlbum)
{
return true;
}
return false;
})
.Select(GetClientItemId)
.ToArray();
}
private void AttachSoundtrackIds(BaseItemDto dto, MusicAlbum item, User user)
{
var tmdb = item.GetProviderId(MetadataProviders.Tmdb);
var tvdb = item.GetProviderId(MetadataProviders.Tvdb);
var gamesdb = item.GetProviderId(MetadataProviders.Gamesdb);
if (string.IsNullOrEmpty(tmdb) && string.IsNullOrEmpty(tvdb) && string.IsNullOrEmpty(gamesdb))
{
return;
}
var recursiveChildren = user == null
? _libraryManager.RootFolder.RecursiveChildren
: user.RootFolder.GetRecursiveChildren(user);
dto.SoundtrackIds = recursiveChildren
.Where(i =>
{
if (!string.IsNullOrEmpty(tmdb) &&
string.Equals(tmdb, i.GetProviderId(MetadataProviders.Tmdb), StringComparison.OrdinalIgnoreCase) &&
i is Movie)
{
return true;
}
if (!string.IsNullOrEmpty(tvdb) &&
string.Equals(tvdb, i.GetProviderId(MetadataProviders.Tvdb), StringComparison.OrdinalIgnoreCase) &&
i is Series)
{
return true;
}
if (!string.IsNullOrEmpty(gamesdb) &&
string.Equals(gamesdb, i.GetProviderId(MetadataProviders.Gamesdb), StringComparison.OrdinalIgnoreCase) &&
i is Game)
{
return true;
}
return false;
})
.Select(GetClientItemId)
.ToArray();
}
/// <summary> /// <summary>
/// Attaches the user specific info. /// Attaches the user specific info.
/// </summary> /// </summary>
@ -235,10 +392,7 @@ namespace MediaBrowser.Controller.Dto
dto.OriginalRunTimeTicks = item.OriginalRunTimeTicks; dto.OriginalRunTimeTicks = item.OriginalRunTimeTicks;
} }
if (fields.Contains(ItemFields.DisplayMediaType)) dto.DisplayMediaType = item.DisplayMediaType;
{
dto.DisplayMediaType = item.DisplayMediaType;
}
if (fields.Contains(ItemFields.MetadataSettings)) if (fields.Contains(ItemFields.MetadataSettings))
{ {
@ -436,30 +590,27 @@ namespace MediaBrowser.Controller.Dto
} }
// Add audio info // Add audio info
if (fields.Contains(ItemFields.AudioInfo)) var audio = item as Audio;
if (audio != null)
{ {
var audio = item as Audio; dto.Album = audio.Album;
if (audio != null) dto.AlbumArtist = audio.AlbumArtist;
{ dto.Artists = new[] { audio.Artist };
dto.Album = audio.Album; }
dto.AlbumArtist = audio.AlbumArtist;
dto.Artists = new[] { audio.Artist };
}
var album = item as MusicAlbum; var album = item as MusicAlbum;
if (album != null) if (album != null)
{ {
var songs = album.RecursiveChildren.OfType<Audio>().ToList(); var songs = album.RecursiveChildren.OfType<Audio>().ToList();
dto.AlbumArtist = songs.Select(i => i.AlbumArtist).FirstOrDefault(i => !string.IsNullOrEmpty(i)); dto.AlbumArtist = songs.Select(i => i.AlbumArtist).FirstOrDefault(i => !string.IsNullOrEmpty(i));
dto.Artists = dto.Artists =
songs.Select(i => i.Artist ?? string.Empty) songs.Select(i => i.Artist ?? string.Empty)
.Where(i => !string.IsNullOrEmpty(i)) .Where(i => !string.IsNullOrEmpty(i))
.Distinct(StringComparer.OrdinalIgnoreCase) .Distinct(StringComparer.OrdinalIgnoreCase)
.ToArray(); .ToArray();
}
} }
// Add video info // Add video info
@ -510,36 +661,33 @@ namespace MediaBrowser.Controller.Dto
dto.IndexNumberEnd = episode.IndexNumberEnd; dto.IndexNumberEnd = episode.IndexNumberEnd;
} }
if (fields.Contains(ItemFields.SeriesInfo)) // Add SeriesInfo
var series = item as Series;
if (series != null)
{ {
// Add SeriesInfo dto.AirDays = series.AirDays;
var series = item as Series; dto.AirTime = series.AirTime;
dto.Status = series.Status;
}
if (series != null) if (episode != null)
{ {
dto.AirDays = series.AirDays; series = item.FindParent<Series>();
dto.AirTime = series.AirTime;
dto.Status = series.Status;
}
if (episode != null) dto.SeriesId = GetClientItemId(series);
{ dto.SeriesName = series.Name;
series = item.FindParent<Series>(); }
dto.SeriesId = GetClientItemId(series); // Add SeasonInfo
dto.SeriesName = series.Name; var season = item as Season;
}
// Add SeasonInfo if (season != null)
var season = item as Season; {
series = item.FindParent<Series>();
if (season != null) dto.SeriesId = GetClientItemId(series);
{ dto.SeriesName = series.Name;
series = item.FindParent<Series>();
dto.SeriesId = GetClientItemId(series);
dto.SeriesName = series.Name;
}
} }
var game = item as Game; var game = item as Game;

View File

@ -162,6 +162,12 @@ namespace MediaBrowser.Model.Dto
/// <value>The trailer urls.</value> /// <value>The trailer urls.</value>
public List<MediaUrl> RemoteTrailers { get; set; } public List<MediaUrl> RemoteTrailers { get; set; }
/// <summary>
/// Gets or sets the soundtrack ids.
/// </summary>
/// <value>The soundtrack ids.</value>
public string[] SoundtrackIds { get; set; }
/// <summary> /// <summary>
/// Gets or sets the provider ids. /// Gets or sets the provider ids.
/// </summary> /// </summary>

View File

@ -6,6 +6,7 @@ namespace MediaBrowser.Model.Entities
/// </summary> /// </summary>
public enum MetadataProviders public enum MetadataProviders
{ {
Gamesdb,
/// <summary> /// <summary>
/// The imdb /// The imdb
/// </summary> /// </summary>

View File

@ -131,6 +131,11 @@ namespace MediaBrowser.Model.Querying
/// </summary> /// </summary>
SeriesInfo, SeriesInfo,
/// <summary>
/// The soundtrack ids
/// </summary>
SoundtrackIds,
/// <summary> /// <summary>
/// The sort name of the item /// The sort name of the item
/// </summary> /// </summary>

View File

@ -38,7 +38,9 @@ namespace MediaBrowser.ServerApplication
{ {
bool createdNew; bool createdNew;
_singleInstanceMutex = new Mutex(true, @"Local\" + typeof(App).Assembly.GetName().Name, out createdNew); var runningPath = Process.GetCurrentProcess().MainModule.FileName.Replace(Path.DirectorySeparatorChar.ToString(), string.Empty);
_singleInstanceMutex = new Mutex(true, @"Local\" + runningPath, out createdNew);
if (!createdNew) if (!createdNew)
{ {