Beispiel #1
0
        /// <summary>
        /// Adds a <see cref="RelationshipAspect"/> for the relation.
        /// </summary>
        /// <param name="roleExtractor">The <see cref="IRelationshipRoleExtractor"/> that extracted the relation.</param>
        /// <param name="linkedId">The media item id of the linked item.</param>
        /// <param name="aspects">The aspects of the media item.</param>
        /// <param name="extractedAspects">The aspects of the extracted item.</param>
        /// <param name="addToLinkedItem">Whether to to add the <see cref="RelationshipAspect"/> to the the linked item rather than the media item.</param>
        private static void AddRelationship(IRelationshipRoleExtractor roleExtractor, Guid linkedId, IDictionary <Guid, IList <MediaItemAspect> > aspects,
                                            IDictionary <Guid, IList <MediaItemAspect> > extractedAspects, bool addToLinkedItem)
        {
            int index;

            if (!roleExtractor.TryGetRelationshipIndex(aspects, extractedAspects, out index))
            {
                index = 0;
            }

            Guid role;
            Guid linkedRole;
            IDictionary <Guid, IList <MediaItemAspect> > roleAspects;

            //Reverse the role, linked role and aspects if adding to the linked item
            if (addToLinkedItem)
            {
                role        = roleExtractor.LinkedRole;
                linkedRole  = roleExtractor.Role;
                roleAspects = extractedAspects;
            }
            else
            {
                role        = roleExtractor.Role;
                linkedRole  = roleExtractor.LinkedRole;
                roleAspects = aspects;
            }

            //Get whether this relationship will update the parent's play percentage
            IRelationshipTypeRegistration rtr = ServiceRegistration.Get <IRelationshipTypeRegistration>();
            RelationshipType rt       = rtr.LocallyKnownRelationshipTypes.FirstOrDefault(r => r.ChildRole == role && r.ParentRole == linkedRole);
            bool             playable = rt != null ? rt.UpdatePlayPercentage : false;

            MediaItemAspect.AddOrUpdateRelationship(roleAspects, role, linkedRole, linkedId, playable, index);
        }
        /// <summary>
        /// Registers all relationships that are extracted by this relationship extractor.
        /// </summary>
        protected void RegisterRelationships()
        {
            IRelationshipTypeRegistration relationshipRegistration = ServiceRegistration.Get <IRelationshipTypeRegistration>();

            //Relationships must be registered in order from episodes up to all parent relationships

            //Hierarchical relationships
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Episode->Series", true,
                                                                                               EpisodeAspect.ROLE_EPISODE, SeriesAspect.ROLE_SERIES, EpisodeAspect.ASPECT_ID, SeriesAspect.ASPECT_ID,
                                                                                               EpisodeAspect.ATTR_EPISODE, SeriesAspect.ATTR_AVAILABLE_EPISODES, true), true);

            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Episode->Season", false,
                                                                                               EpisodeAspect.ROLE_EPISODE, SeasonAspect.ROLE_SEASON, EpisodeAspect.ASPECT_ID, SeasonAspect.ASPECT_ID,
                                                                                               EpisodeAspect.ATTR_EPISODE, SeasonAspect.ATTR_AVAILABLE_EPISODES, true), true);

            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Season->Series", false,
                                                                                               SeasonAspect.ROLE_SEASON, SeriesAspect.ROLE_SERIES, SeasonAspect.ASPECT_ID, SeriesAspect.ASPECT_ID,
                                                                                               SeasonAspect.ATTR_SEASON, SeriesAspect.ATTR_AVAILABLE_SEASONS, false), false);

            //Simple (non hierarchical) relationships
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Episode->Actor", EpisodeAspect.ROLE_EPISODE, PersonAspect.ROLE_ACTOR), true);
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Episode->Director", EpisodeAspect.ROLE_EPISODE, PersonAspect.ROLE_DIRECTOR), true);
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Episode->Writer", EpisodeAspect.ROLE_EPISODE, PersonAspect.ROLE_WRITER), true);
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Episode->Character", EpisodeAspect.ROLE_EPISODE, CharacterAspect.ROLE_CHARACTER), true);

            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Series->Actor", SeriesAspect.ROLE_SERIES, PersonAspect.ROLE_ACTOR), false);
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Series->Character", SeriesAspect.ROLE_SERIES, CharacterAspect.ROLE_CHARACTER), false);
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Series->TV Network", SeriesAspect.ROLE_SERIES, CompanyAspect.ROLE_TV_NETWORK), false);
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Series->Company", SeriesAspect.ROLE_SERIES, CompanyAspect.ROLE_COMPANY), false);
        }
        /// <summary>
        /// Registers all relationships that are extracted by this relationship extractor.
        /// </summary>
        protected void RegisterRelationships()
        {
            IRelationshipTypeRegistration relationshipRegistration = ServiceRegistration.Get <IRelationshipTypeRegistration>();

            //Relationships must be registered in order from tracks up to all parent relationships

            //Hierarchical relationships
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Track->Album", true,
                                                                                               AudioAspect.ROLE_TRACK, AudioAlbumAspect.ROLE_ALBUM, AudioAspect.ASPECT_ID, AudioAlbumAspect.ASPECT_ID,
                                                                                               AudioAspect.ATTR_TRACK, AudioAlbumAspect.ATTR_AVAILABLE_TRACKS, true), true);

            //Simple (non hierarchical) relationships
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Track->Album Artist", AudioAspect.ROLE_TRACK, PersonAspect.ROLE_ALBUMARTIST), true);
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Album->Artist", AudioAlbumAspect.ROLE_ALBUM, PersonAspect.ROLE_ALBUMARTIST), false);
        }
        /// <summary>
        /// Registers all relationships that are extracted by this relationship extractor.
        /// </summary>
        protected void RegisterRelationships()
        {
            IRelationshipTypeRegistration relationshipRegistration = ServiceRegistration.Get <IRelationshipTypeRegistration>();

            //Relationships must be registered in order from movies up to all parent relationships

            //Hierarchical relationships
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Movie->Collection", true,
                                                                                               MovieAspect.ROLE_MOVIE, MovieCollectionAspect.ROLE_MOVIE_COLLECTION, MovieAspect.ASPECT_ID, MovieCollectionAspect.ASPECT_ID,
                                                                                               MovieAspect.ATTR_MOVIE_NAME, MovieCollectionAspect.ATTR_AVAILABLE_MOVIES, true), true);

            //Simple (non hierarchical) relationships
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Movie->Actor", MovieAspect.ROLE_MOVIE, PersonAspect.ROLE_ACTOR), true);
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Movie->Director", MovieAspect.ROLE_MOVIE, PersonAspect.ROLE_DIRECTOR), true);
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Movie->Character", MovieAspect.ROLE_MOVIE, CharacterAspect.ROLE_CHARACTER), true);
        }
        /// <summary>
        /// Registers all relationships that are extracted by this relationship extractor.
        /// </summary>
        protected void RegisterRelationships()
        {
            IRelationshipTypeRegistration relationshipRegistration = ServiceRegistration.Get <IRelationshipTypeRegistration>();

            //Relationships must be registered in order from episodes up to all parent relationships

            //Hierarchical relationships
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Episode->Series", true,
                                                                                               EpisodeAspect.ROLE_EPISODE, SeriesAspect.ROLE_SERIES, EpisodeAspect.ASPECT_ID, SeriesAspect.ASPECT_ID,
                                                                                               EpisodeAspect.ATTR_EPISODE, SeriesAspect.ATTR_AVAILABLE_EPISODES, true), true);

            //Simple (non hierarchical) relationships
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Episode->Actor", EpisodeAspect.ROLE_EPISODE, PersonAspect.ROLE_ACTOR), true);
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Episode->Character", EpisodeAspect.ROLE_EPISODE, CharacterAspect.ROLE_CHARACTER), true);

            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Series->Actor", SeriesAspect.ROLE_SERIES, PersonAspect.ROLE_ACTOR), false);
            relationshipRegistration.RegisterLocallyKnownRelationshipType(new RelationshipType("Series->Character", SeriesAspect.ROLE_SERIES, CharacterAspect.ROLE_CHARACTER), false);
        }