コード例 #1
0
        protected VideoDriveHandler(DriveInfo driveInfo, IEnumerable <Guid> extractedMIATypeIds) : base(driveInfo)
        {
            IMediaAccessor    mediaAccessor = ServiceRegistration.Get <IMediaAccessor>();
            ResourcePath      rp            = LocalFsResourceProviderBase.ToResourcePath(driveInfo.Name);
            IResourceAccessor ra;

            if (!rp.TryCreateLocalResourceAccessor(out ra))
            {
                throw new ArgumentException(string.Format("Unable to access drive '{0}'", driveInfo.Name));
            }
            using (ra)
                _mediaItem = mediaAccessor.CreateLocalMediaItem(ra, mediaAccessor.GetMetadataExtractorsForMIATypes(extractedMIATypeIds));
            if (_mediaItem == null)
            {
                throw new Exception(string.Format("Could not create media item for drive '{0}'", driveInfo.Name));
            }

            MatchWithStubs(driveInfo, new MediaItem[] { _mediaItem });
            IEnumerable <MediaItem> processedItems = CertificationHelper.ProcessMediaItems(new MediaItem[] { _mediaItem });

            if (processedItems.Count() == 0)
            {
                _mediaItem = null;
                return;
            }
            _mediaItem = processedItems.First();
            SingleMediaItemAspect mia = null;

            MediaItemAspect.TryGetAspect(_mediaItem.Aspects, MediaAspect.Metadata, out mia);
            mia.SetAttribute(MediaAspect.ATTR_TITLE, mia.GetAttributeValue(MediaAspect.ATTR_TITLE) +
                             " (" + DriveUtils.GetDriveNameWithoutRootDirectory(driveInfo) + ")");
        }
コード例 #2
0
        public override async Task <ICollection <FilterValue> > GetAvailableValuesAsync(IEnumerable <Guid> necessaryMIATypeIds, IFilter selectAttributeFilter, IFilter filter)
        {
            IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory;

            if (cd == null)
            {
                throw new NotConnectedException("The MediaLibrary is not connected");
            }

            Guid?           userProfile = null;
            IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>();

            if (userProfileDataManagement != null && userProfileDataManagement.IsValidUser)
            {
                userProfile = userProfileDataManagement.CurrentUser.ProfileId;
            }

            IEnumerable <Guid> mias    = _necessaryMIATypeIds ?? necessaryMIATypeIds;
            IEnumerable <Guid> optMias = _optionalMIATypeIds != null?_optionalMIATypeIds.Except(mias) : null;

            bool    showVirtual = VirtualMediaHelper.ShowVirtualMedia(necessaryMIATypeIds);
            IFilter queryFilter = new FilteredRelationshipFilter(_role, _linkedRole, filter);

            MediaItemQuery query = new MediaItemQuery(mias, optMias, queryFilter);

            if (_sortInformation != null)
            {
                query.SortInformation = new List <ISortInformation> {
                    _sortInformation
                }
            }
            ;

            IList <MediaItem> items = await cd.SearchAsync(query, true, userProfile, showVirtual);

            CertificationHelper.ConvertCertifications(items);
            IList <FilterValue> result = new List <FilterValue>(items.Count);

            foreach (MediaItem item in items)
            {
                string name;
                MediaItemAspect.TryGetAttribute(item.Aspects, MediaAspect.ATTR_TITLE, out name);
                result.Add(new FilterValue(name,
                                           new FilterTreePath(_role),
                                           null,
                                           item,
                                           this));
            }

            //ToDo: Add support for an empty entry for all filtered items that don't have this relationship
            //The below works OK in simple cases but results in an extra, relatively long running query. Maybe this should be handled
            //at the server for all relationship queries...
            //IFilter emptyRelationshipFilter = new NotFilter(new RelationshipFilter(_linkedRole, _role, Guid.Empty));
            //queryFilter = filter != null ? BooleanCombinationFilter.CombineFilters(BooleanOperator.And, filter, emptyRelationshipFilter) : emptyRelationshipFilter;
            //int numEmptyEntries = cd.CountMediaItems(necessaryMIATypeIds, queryFilter, true, showVirtual);
            //if(numEmptyEntries > 0)
            //  result.Insert(0, new FilterValue(Consts.RES_VALUE_EMPTY_TITLE, emptyRelationshipFilter, null, this));

            return(result);
        }
コード例 #3
0
 public void TestGetCertificate()
 {
     using (StreamReader reader = new StreamReader(new FileStream(@"D:\andyzone\WSEEverywhere2\AzureRestAdapter\data\Windows Azure MSDN - Visual Studio Ultimate-5-28-2013-credentials.publishsettings", FileMode.Open, FileAccess.Read)))
     {
         string           publishSettings = reader.ReadToEnd();
         X509Certificate2 certi           = CertificationHelper.GetCertificate(publishSettings);
         Assert.IsTrue(certi != null);
     }
 }
コード例 #4
0
        public async Task <IFilter> AppendUserFilterAsync(IFilter filter, IEnumerable <Guid> filterMias)
        {
            IFilter userFilter = await CertificationHelper.GetUserCertificateFilter(filterMias);

            if (userFilter != null)
            {
                return(filter != null?BooleanCombinationFilter.CombineFilters(BooleanOperator.And, filter, userFilter) : userFilter);
            }
            return(filter);
        }
コード例 #5
0
        protected virtual async Task PrepareFilterTree()
        {
            if (!_rootRole.HasValue)
            {
                return;
            }

            _customFilterTree = new RelationshipFilterTree(_rootRole.Value);

            //Update filter by adding the user filter to the already loaded filters
            IFilter userFilter = await CertificationHelper.GetUserCertificateFilter(_necessaryMias);

            if (userFilter != null)
            {
                _customFilterTree.AddFilter(userFilter);
            }

            userFilter = await CertificationHelper.GetUserCertificateFilter(new[] { SeriesAspect.ASPECT_ID });

            if (userFilter != null)
            {
                _customFilterTree.AddFilter(userFilter, new FilterTreePath(SeriesAspect.ROLE_SERIES));
            }
        }
コード例 #6
0
        public override async Task <IEnumerable <MediaItem> > GetAllMediaItems()
        {
            IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory;

            if (cd == null)
            {
                return(new List <MediaItem>());
            }

            Guid?           userProfile = null;
            IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>();

            if (userProfileDataManagement != null && userProfileDataManagement.IsValidUser)
            {
                userProfile = userProfileDataManagement.CurrentUser.ProfileId;
            }

            bool showVirtual = VirtualMediaHelper.ShowVirtualMedia(_query.NecessaryRequestedMIATypeIDs);

            IList <MediaItem> mediaItems = await cd.SearchAsync(_query, _onlyOnline, userProfile, showVirtual);

            CertificationHelper.ConvertCertifications(mediaItems);
            return(mediaItems);
        }
コード例 #7
0
        protected override async Task PrepareAsync()
        {
            await base.PrepareAsync();

            //Update filter by adding the user filter to the already loaded filters
            IFilter userFilter = await CertificationHelper.GetUserCertificateFilter(_necessaryMias);

            if (userFilter != null)
            {
                _filter = BooleanCombinationFilter.CombineFilters(BooleanOperator.And, userFilter,
                                                                  BooleanCombinationFilter.CombineFilters(BooleanOperator.And, _filters));
            }
            else
            {
                _filter = BooleanCombinationFilter.CombineFilters(BooleanOperator.And, _filters);
            }

            _defaultScreen    = new MoviesShowItemsScreenData(_genericPlayableItemCreatorDelegate);
            _availableScreens = new List <AbstractScreenData>
            {
                _defaultScreen,
                new MovieFilterByGenreScreenData(),
                new MovieFilterByCollectionScreenData(),
                new VideosFilterByPlayCountScreenData(),
                new MovieFilterByCertificationScreenData(),
                new MovieFilterByActorScreenData(),
                new MovieFilterByCharacterScreenData(),
                new MovieFilterByDirectorScreenData(),
                new MovieFilterByWriterScreenData(),
                new MovieFilterByCompanyScreenData(),
                new VideosFilterByYearScreenData(),
                new VideosFilterBySystemScreenData(),
                new VideosSimpleSearchScreenData(_genericPlayableItemCreatorDelegate),
            };

            _defaultSorting    = new SortByTitle();
            _availableSortings = new List <Sorting.Sorting>
            {
                _defaultSorting,
                new SortBySortTitle(),
                new SortByName(),
                new SortByYear(),
                new VideoSortByFirstGenre(),
                new MovieSortByCertification(),
                new VideoSortByDuration(),
                new VideoSortByFirstActor(),
                new VideoSortByFirstDirector(),
                new VideoSortByFirstWriter(),
                new VideoSortBySize(),
                new VideoSortByAspectRatio(),
                new SortByAddedDate(),
                new SortBySystem(),
            };

            _defaultGrouping    = null;
            _availableGroupings = new List <Sorting.Sorting>
            {
                //_defaultGrouping,
                new SortByTitle(),
                new SortBySortTitle(),
                new SortByName(),
                new SortByYear(),
                new VideoSortByFirstGenre(),
                new MovieSortByCertification(),
                new VideoSortByDuration(),
                new VideoSortByFirstActor(),
                new VideoSortByFirstDirector(),
                new VideoSortByFirstWriter(),
                new VideoSortBySize(),
                new VideoSortByAspectRatio(),
                new SortByAddedDate(),
                new SortBySystem(),
            };
        }
コード例 #8
0
        protected internal async Task <Tuple <IList <MediaItem>, IList <ViewSpecification> > > ReLoadItemsAndSubViewSpecificationsAsync()
        {
            IList <MediaItem>         mediaItems            = null;
            IList <ViewSpecification> subViewSpecifications = null;
            IContentDirectory         cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory;

            if (cd == null)
            {
                return(new Tuple <IList <MediaItem>, IList <ViewSpecification> >(null, null));
            }

            Guid?           userProfile = null;
            IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>();

            if (userProfileDataManagement != null && userProfileDataManagement.IsValidUser)
            {
                userProfile = userProfileDataManagement.CurrentUser.ProfileId;
            }
            bool showVirtual = VirtualMediaHelper.ShowVirtualMedia(_query.NecessaryRequestedMIATypeIDs);

            try
            {
                if (MaxNumItems.HasValue)
                {
                    // First request value groups. That is a performance consideration:
                    // If we have many items, we need groups. If we have few items, we don't need the groups but simply do a search.
                    // We request the groups first to make it faster for the many items case. In the case of few items, both groups and items
                    // are requested which doesn't take so long because there are only few items.
                    IList <MLQueryResultGroup> groups = await cd.GroupValueGroupsAsync(MediaAspect.ATTR_TITLE, null, ProjectionFunction.None,
                                                                                       _query.NecessaryRequestedMIATypeIDs, _query.Filter, _onlyOnline, GroupingFunction.FirstCharacter, showVirtual);

                    long numItems = groups.Aggregate <MLQueryResultGroup, long>(0, (current, group) => current + group.NumItemsInGroup);
                    if (numItems > MaxNumItems.Value)
                    { // Group items
                        mediaItems            = new List <MediaItem>(0);
                        subViewSpecifications = new List <ViewSpecification>(groups.Count);
                        foreach (MLQueryResultGroup group in groups)
                        {
                            MediaLibraryQueryViewSpecification subViewSpecification =
                                CreateSubViewSpecification(string.Format("{0}", group.GroupKey), _filterPath, group.AdditionalFilter, null);
                            subViewSpecification.MaxNumItems  = null;
                            subViewSpecification._absNumItems = group.NumItemsInGroup;
                            subViewSpecifications.Add(subViewSpecification);
                        }
                        return(new Tuple <IList <MediaItem>, IList <ViewSpecification> >(mediaItems, subViewSpecifications));
                    }
                    // Else: No grouping
                }
                // Else: No grouping
                mediaItems = await cd.SearchAsync(_query, _onlyOnline, userProfile, showVirtual);

                CertificationHelper.ConvertCertifications(mediaItems);
                subViewSpecifications = new List <ViewSpecification>(0);
                return(new Tuple <IList <MediaItem>, IList <ViewSpecification> >(mediaItems, subViewSpecifications));
            }
            catch (UPnPRemoteException e)
            {
                ServiceRegistration.Get <ILogger>().Error("SimpleTextSearchViewSpecification.ReLoadItemsAndSubViewSpecifications: Error requesting server", e);
                return(new Tuple <IList <MediaItem>, IList <ViewSpecification> >(null, null));
            }
        }