Skip to content

Commit

Permalink
Extended SeriesAspect with FirstAired, DvdEpisodes and custom string …
Browse files Browse the repository at this point in the history
…for Series/Season lookup
  • Loading branch information
morpheusxx committed Mar 17, 2013
1 parent 8d74056 commit 7bcb1cf
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 15 deletions.
Expand Up @@ -34,7 +34,7 @@ public static class SeriesAspect
/// <summary>
/// Media item aspect id of the series aspect.
/// </summary>
public static readonly Guid ASPECT_ID = new Guid("82AB8F33-D085-41E3-A193-7DB7CAC9D193");
public static readonly Guid ASPECT_ID = new Guid("88CFE0A8-DF0B-4E2F-AE26-17C9478AF703");

/// <summary>
/// Series name.
Expand All @@ -48,25 +48,48 @@ public static class SeriesAspect
public static readonly MediaItemAspectMetadata.AttributeSpecification ATTR_SEASON =
MediaItemAspectMetadata.CreateAttributeSpecification("Season", typeof(int), Cardinality.Inline, false);

/// <summary>
/// Contains a combination of <see cref="ATTR_SERIESNAME"/> and the <see cref="ATTR_SEASON"/> to allow filtering and retrieval of season banners.
/// This name must be built in form "{0} S{1}", using SeriesName and Season.
/// </summary>
public static readonly MediaItemAspectMetadata.AttributeSpecification ATTR_SERIES_SEASON =
MediaItemAspectMetadata.CreateStringAttributeSpecification("SeriesSeasonName", 200, Cardinality.Inline, false);

/// <summary>
/// Contains the number(s) of the episode(s). If a file contains multiple episodes, all episode numbers are added separately.
/// The numbers start at 1.
/// </summary>
public static readonly MediaItemAspectMetadata.AttributeSpecification ATTR_EPISODE =
MediaItemAspectMetadata.CreateAttributeSpecification("Episode", typeof(int), Cardinality.ManyToMany, false);

/// <summary>
/// Contains the number(s) of the episode(s) as they are published on DVD. The number can be different to <see cref="ATTR_EPISODE"/>.
/// If a file contains multiple episodes, all episode numbers are added separately. The numbers start at 1.
/// </summary>
public static readonly MediaItemAspectMetadata.AttributeSpecification ATTR_DVDEPISODE =
MediaItemAspectMetadata.CreateAttributeSpecification("DvdEpisode", typeof(double), Cardinality.ManyToMany, false);

/// <summary>
/// Name of the episode. We only store the first episode name (or combined name) if the file contains multiple episodes.
/// </summary>
public static readonly MediaItemAspectMetadata.AttributeSpecification ATTR_EPISODENAME =
MediaItemAspectMetadata.CreateStringAttributeSpecification("EpisodeName", 300, Cardinality.Inline, false);

/// <summary>
/// First aired date of episode.
/// </summary>
public static readonly MediaItemAspectMetadata.AttributeSpecification ATTR_FIRSTAIRED =
MediaItemAspectMetadata.CreateAttributeSpecification("FirstAired", typeof (DateTime), Cardinality.Inline, false);

public static readonly MediaItemAspectMetadata Metadata = new MediaItemAspectMetadata(
ASPECT_ID, "SeriesItem", new[] {
ATTR_SERIESNAME,
ATTR_SEASON,
ATTR_SERIES_SEASON,
ATTR_EPISODE,
ATTR_DVDEPISODE,
ATTR_EPISODENAME,
ATTR_FIRSTAIRED
});
}
}
Expand Up @@ -71,6 +71,10 @@ public class SeriesInfo
/// Short format string that holds season and episode numbers and episode name. Used for browsing episodes by series name.
/// </summary>
public static string SHORT_FORMAT_STR = "S{1}E{2} - {3}";
/// <summary>
/// Format string for constructing a "Series Season" name pattern.
/// </summary>
public static string SERIES_SEASON_FORMAT_STR = "{0} S{1}";

/// <summary>
/// Used to replace all "." and "_" that are not followed by a word character.
Expand Down Expand Up @@ -118,6 +122,16 @@ public string Episode
/// </summary>
public IList<int> EpisodeNumbers { get; internal set; }

/// <summary>
/// Gets a list of episode numbers as they are released on DVD.
/// </summary>
public IList<double> DvdEpisodeNumbers { get; internal set; }

/// <summary>
/// Gets or sets the first aired date of episode.
/// </summary>
public DateTime? FirstAired { get; set; }

/// <summary>
/// Gets or sets the episode summary.
/// </summary>
Expand All @@ -143,6 +157,7 @@ public string Episode
public SeriesInfo()
{
EpisodeNumbers = new List<int>();
DvdEpisodeNumbers = new List<double>();
Directors = new HashSet<string>();
Actors = new HashSet<string>();
Genres = new HashSet<string>();
Expand Down Expand Up @@ -173,7 +188,14 @@ public bool SetMetadata(IDictionary<Guid, MediaItemAspect> aspectData)
MediaItemAspect.SetAttribute(aspectData, SeriesAspect.ATTR_SERIESNAME, Series);
MediaItemAspect.SetAttribute(aspectData, SeriesAspect.ATTR_EPISODENAME, Episode);
if (SeasonNumber.HasValue) MediaItemAspect.SetAttribute(aspectData, SeriesAspect.ATTR_SEASON, SeasonNumber.Value);
if (FirstAired.HasValue) MediaItemAspect.SetAttribute(aspectData, SeriesAspect.ATTR_FIRSTAIRED, FirstAired.Value);
MediaItemAspect.SetCollectionAttribute(aspectData, SeriesAspect.ATTR_EPISODE, EpisodeNumbers);
MediaItemAspect.SetCollectionAttribute(aspectData, SeriesAspect.ATTR_DVDEPISODE, DvdEpisodeNumbers);

// Construct a "Series Season" string, which will be used for filtering and season banner retrieval.
int season = SeasonNumber ?? 0;
string seriesSeason = string.Format(SERIES_SEASON_FORMAT_STR, Series, season.ToString().PadLeft(2, '0'));
MediaItemAspect.SetAttribute(aspectData, SeriesAspect.ATTR_SERIES_SEASON, seriesSeason);

if (!string.IsNullOrEmpty(Summary)) MediaItemAspect.SetAttribute(aspectData, VideoAspect.ATTR_STORYPLOT, Summary);
if (Directors.Count > 0) MediaItemAspect.SetAttribute(aspectData, VideoAspect.ATTR_DIRECTOR, Directors.First());
Expand Down
Expand Up @@ -38,7 +38,6 @@
using MediaPortal.Extensions.OnlineLibraries.Matches;
using MediaPortal.Extensions.OnlineLibraries.TheTvDB;
using MediaPortal.Utilities;
using MediaPortal.Utilities.Network;

namespace MediaPortal.Extensions.OnlineLibraries
{
Expand Down Expand Up @@ -136,6 +135,9 @@ protected bool TryMatchEpisode(SeriesInfo seriesInfo, TvdbSeries seriesDetail)
seriesInfo.SeasonNumber = episode.SeasonNumber;
seriesInfo.EpisodeNumbers.Clear();
seriesInfo.EpisodeNumbers.Add(episode.EpisodeNumber);
seriesInfo.FirstAired = episode.FirstAired;
seriesInfo.DvdEpisodeNumbers.Clear();
seriesInfo.DvdEpisodeNumbers.Add(episode.DvdEpisodeNumber);
SetEpisodeDetails(seriesInfo, episode);
return true;
}
Expand Down
4 changes: 2 additions & 2 deletions MediaPortal/Source/UI/UiComponents/Media/Media.csproj
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
Expand Down Expand Up @@ -144,6 +144,7 @@
<Compile Include="Models\NavigationModel\MoviesNavigation.cs" />
<Compile Include="Models\NavigationModel\SeriesNavigation.cs" />
<Compile Include="Models\NavigationModel\VideosNavigation.cs" />
<Compile Include="Models\Navigation\SeasonFilterItem.cs" />
<Compile Include="Models\Navigation\MovieFilterItem.cs" />
<Compile Include="Models\Navigation\MovieItem.cs" />
<Compile Include="Models\Navigation\SeriesFilterItem.cs" />
Expand All @@ -156,7 +157,6 @@
<Compile Include="Models\ScreenData\MovieFilterByCollectionScreenData.cs" />
<Compile Include="Models\ScreenData\MovieShowItemsScreenData.cs" />
<Compile Include="Models\ScreenData\VideosFilterByLanguageScreenData.cs" />
<Compile Include="Models\ScreenData\AbstractSeriesFilterScreenData.cs" />
<Compile Include="Models\ScreenData\SeriesShowItemsScreenData.cs" />
<Compile Include="Models\ScreenData\SeriesFilterBySeasonScreenData.cs" />
<Compile Include="Models\ScreenData\SeriesFilterByNameScreenData.cs" />
Expand Down
Expand Up @@ -22,14 +22,12 @@

#endregion

using MediaPortal.UiComponents.Media.FilterCriteria;
using MediaPortal.UiComponents.Media.Models.Navigation;

namespace MediaPortal.UiComponents.Media.Models.ScreenData
namespace MediaPortal.UiComponents.Media.Models.Navigation
{
public abstract class AbstractSeriesFilterScreenData : AbstractFiltersScreenData<SeriesFilterItem>
/// <summary>
/// Holds a GUI item which represents a series season filter choice.
/// </summary>
public class SeasonFilterItem : FilterItem
{
protected AbstractSeriesFilterScreenData(string screen, string menuItemLabel, string navbarSubViewNavigationDisplayLabel,
MLFilterCriterion filterCriterion) : base(screen, menuItemLabel, navbarSubViewNavigationDisplayLabel, filterCriterion) { }
}
}
Expand Up @@ -29,7 +29,7 @@

namespace MediaPortal.UiComponents.Media.Models.ScreenData
{
public class SeriesFilterByNameScreenData : AbstractSeriesFilterScreenData
public class SeriesFilterByNameScreenData : AbstractFiltersScreenData<SeriesFilterItem>
{
public SeriesFilterByNameScreenData() :
base(Consts.SCREEN_SERIES_FILTER_BY_NAME, Consts.RES_FILTER_BY_SERIES_NAME_MENU_ITEM,
Expand Down
Expand Up @@ -29,15 +29,15 @@

namespace MediaPortal.UiComponents.Media.Models.ScreenData
{
public class SeriesFilterBySeasonScreenData : AbstractSeriesFilterScreenData
public class SeriesFilterBySeasonScreenData : AbstractFiltersScreenData<SeasonFilterItem>
{
public SeriesFilterBySeasonScreenData() :
base(Consts.SCREEN_SERIES_FILTER_BY_SEASON, Consts.RES_FILTER_BY_SERIES_SEASON_MENU_ITEM,
Consts.RES_FILTER_SERIES_SEASON_NAVBAR_DISPLAY_LABEL, new SimpleMLFilterCriterion(SeriesAspect.ATTR_SEASON))
Consts.RES_FILTER_SERIES_SEASON_NAVBAR_DISPLAY_LABEL, new SimpleMLFilterCriterion(SeriesAspect.ATTR_SERIES_SEASON))
{
}

public override AbstractFiltersScreenData<SeriesFilterItem> Derive()
public override AbstractFiltersScreenData<SeasonFilterItem> Derive()
{
return new SeriesFilterBySeasonScreenData();
}
Expand Down

0 comments on commit 7bcb1cf

Please sign in to comment.