public override IEnumerable <MediaItem> GetAllMediaItems() { IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory; if (cd == null) { return(new List <MediaItem>()); } MediaItemQuery query = new MediaItemQuery( _necessaryMIATypeIds, _optionalMIATypeIds, new BooleanCombinationFilter(BooleanOperator.And, new IFilter[] { new RelationalFilter(ProviderResourceAspect.ATTR_SYSTEM_ID, RelationalOperator.EQ, _systemId), new LikeFilter(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, SqlUtils.LikeEscape(_basePath.Serialize(), '\\') + "%", '\\', true) })); Guid? userProfile = null; IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>(); if (userProfileDataManagement != null && userProfileDataManagement.IsValidUser) { userProfile = userProfileDataManagement.CurrentUser.ProfileId; } return(cd.Search(query, false, userProfile, ShowVirtualSetting.ShowVirtualMedia(_necessaryMIATypeIds))); }
protected internal override void ReLoadItemsAndSubViewSpecifications(out IList <MediaItem> mediaItems, out IList <ViewSpecification> subViewSpecifications) { mediaItems = null; subViewSpecifications = new List <ViewSpecification>(); IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory; if (cd == null) { return; } Guid? userProfile = null; IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>(); if (userProfileDataManagement != null && userProfileDataManagement.IsValidUser) { userProfile = userProfileDataManagement.CurrentUser.ProfileId; } try { MediaItemQuery query = new MediaItemQuery(_necessaryMIATypeIds, _optionalMIATypeIds, _filter) { Limit = Consts.MAX_NUM_ITEMS_VISIBLE }; mediaItems = cd.Search(query, true, userProfile, ShowVirtualSetting.ShowVirtualMedia(_necessaryMIATypeIds)); } catch (UPnPRemoteException e) { ServiceRegistration.Get <ILogger>().Error("SimpleTextSearchViewSpecification.ReLoadItemsAndSubViewSpecifications: Error requesting server", e); mediaItems = new List <MediaItem>(); } }
protected static void FillList(IContentDirectory contentDirectory, Guid[] necessaryMIAs, ItemsList list, MediaItemToListItemAction converterAction) { MediaItemQuery query = new MediaItemQuery(necessaryMIAs, null) { Limit = QUERY_LIMIT, // Last 5 imported items SortInformation = new List <SortInformation> { new SortInformation(ImporterAspect.ATTR_DATEADDED, SortDirection.Descending) } }; Guid? userProfile = null; IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>(); if (userProfileDataManagement != null && userProfileDataManagement.IsValidUser) { userProfile = userProfileDataManagement.CurrentUser.ProfileId; } var items = contentDirectory.Search(query, false, userProfile, ShowVirtualSetting.ShowVirtualMedia(necessaryMIAs)); list.Clear(); foreach (MediaItem mediaItem in items) { PlayableMediaItem listItem = converterAction(mediaItem); listItem.Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(listItem.MediaItem)); list.Add(listItem); } list.FireChange(); }
protected internal override void ReLoadItemsAndSubViewSpecifications(out IList <MediaItem> mediaItems, out IList <ViewSpecification> subViewSpecifications) { mediaItems = null; subViewSpecifications = null; IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory; if (cd == null) { return; } bool showVirtual = ShowVirtualSetting.ShowVirtualMedia(_query.NecessaryRequestedMIATypeIDs); Guid? userProfile = null; IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>(); if (userProfileDataManagement != null && userProfileDataManagement.IsValidUser) { userProfile = userProfileDataManagement.CurrentUser.ProfileId; } 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 = cd.GroupValueGroups(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; } // Else: No grouping } // Else: No grouping mediaItems = cd.Search(_query, _onlyOnline, userProfile, showVirtual); subViewSpecifications = new List <ViewSpecification>(0); } catch (UPnPRemoteException e) { ServiceRegistration.Get <ILogger>().Error("SimpleTextSearchViewSpecification.ReLoadItemsAndSubViewSpecifications: Error requesting server", e); mediaItems = null; subViewSpecifications = null; } }
public override ICollection <FilterValue> GetAvailableValues(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 = ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds); IFilter queryFilter = new FilteredRelationshipFilter(_role, _linkedRole, filter); MediaItemQuery query = new MediaItemQuery(mias, optMias, queryFilter); if (_sortInformation != null) { query.SortInformation = new List <SortInformation> { _sortInformation } } ; IList <MediaItem> items = cd.Search(query, true, userProfile, showVirtual); 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); }
public override ICollection <FilterValue> GetAvailableValues(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; IFilter queryFilter; if (filter != null) { queryFilter = new FilteredRelationshipFilter(_role, filter); } else { queryFilter = new RelationshipFilter(_role, _linkedRole, Guid.Empty); } MediaItemQuery query = new MediaItemQuery(mias, optMias, queryFilter); if (_sortInformation != null) { query.SortInformation = new List <SortInformation> { _sortInformation } } ; IList <MediaItem> items = cd.Search(query, true, userProfile, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); 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 RelationshipFilter(_linkedRole, _role, item.MediaItemId), null, item, this)); } return(result); }
protected internal override void ReLoadItemsAndSubViewSpecifications(out IList <MediaItem> mediaItems, out IList <ViewSpecification> subViewSpecifications) { mediaItems = null; subViewSpecifications = null; IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory; if (cd == null) { return; } Guid? userProfile = null; IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>(); if (userProfileDataManagement != null && userProfileDataManagement.IsValidUser) { userProfile = userProfileDataManagement.CurrentUser.ProfileId; } try { bool showVirtual = ShowVirtualSetting.ShowVirtualMedia(_necessaryMIATypeIds); mediaItems = new List <MediaItem>(cd.Browse(_directoryId, _necessaryMIATypeIds, _optionalMIATypeIds, userProfile, showVirtual)); ICollection <MediaItem> childDirectories = cd.Browse(_directoryId, DIRECTORY_MIA_ID_ENUMERATION, EMPTY_ID_ENUMERATION, userProfile, showVirtual); subViewSpecifications = new List <ViewSpecification>(childDirectories.Count); foreach (MediaItem childDirectory in childDirectories) { SingleMediaItemAspect ma = null; MediaItemAspect.TryGetAspect(childDirectory.Aspects, MediaAspect.Metadata, out ma); IList <MultipleMediaItemAspect> pras = null; MediaItemAspect.TryGetAspects(childDirectory.Aspects, ProviderResourceAspect.Metadata, out pras); foreach (MultipleMediaItemAspect pra in pras) { MediaLibraryBrowseViewSpecification subViewSpecification = new MediaLibraryBrowseViewSpecification( (string)ma.GetAttributeValue(MediaAspect.ATTR_TITLE), childDirectory.MediaItemId, (string)pra.GetAttributeValue(ProviderResourceAspect.ATTR_SYSTEM_ID), ResourcePath.Deserialize((string)pra.GetAttributeValue(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH)), _necessaryMIATypeIds, _optionalMIATypeIds); subViewSpecifications.Add(subViewSpecification); } } } catch (UPnPRemoteException e) { ServiceRegistration.Get <ILogger>().Error("SimpleTextSearchViewSpecification.ReLoadItemsAndSubViewSpecifications: Error requesting server", e); mediaItems = null; subViewSpecifications = null; } }
public override 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; } return(cd.Search(_query, _onlyOnline, userProfile, ShowVirtualSetting.ShowVirtualMedia(_query.NecessaryRequestedMIATypeIDs))); }
public override ICollection <FilterValue> GetAvailableValues(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 = new[] { MediaAspect.ASPECT_ID, ProviderResourceAspect.ASPECT_ID, EpisodeAspect.ASPECT_ID }.Concat(necessaryMIATypeIds); MediaItemQuery query = new MediaItemQuery(mias, filter) { SortInformation = new List <SortInformation> { new SortInformation(EpisodeAspect.ATTR_EPISODE, SortDirection.Ascending) } }; var items = cd.Search(query, true, userProfile, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); IList <FilterValue> result = new List <FilterValue>(items.Count); foreach (var item in items) { string title; MediaItemAspect.TryGetAttribute(item.Aspects, MediaAspect.ATTR_TITLE, out title); // TODO: Now what? There's no values for an episode result.Add(new FilterValue(title, null, null, item, null)); } return(result); }
public override ICollection <FilterValue> GetAvailableValues(IEnumerable <Guid> necessaryMIATypeIds, IFilter selectAttributeFilter, IFilter filter) { IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory; if (cd == null) { throw new NotConnectedException("The MediaLibrary is not connected"); } IFilter emptyFilter = BooleanCombinationFilter.CombineFilters(BooleanOperator.Or, new EmptyFilter(ImageAspect.ATTR_WIDTH), new RelationalFilter(ImageAspect.ATTR_WIDTH, RelationalOperator.EQ, 0), new EmptyFilter(ImageAspect.ATTR_HEIGHT), new RelationalFilter(ImageAspect.ATTR_HEIGHT, RelationalOperator.EQ, 0)); IFilter simpleSmallFilter = BooleanCombinationFilter.CombineFilters(BooleanOperator.And, new RelationalFilter(ImageAspect.ATTR_WIDTH, RelationalOperator.LT, Consts.SMALL_SIZE_THRESHOLD), new RelationalFilter(ImageAspect.ATTR_HEIGHT, RelationalOperator.LT, Consts.SMALL_SIZE_THRESHOLD)); IFilter smallFilter = BooleanCombinationFilter.CombineFilters(BooleanOperator.And, simpleSmallFilter, new NotFilter(BooleanCombinationFilter.CombineFilters(BooleanOperator.Or, new RelationalFilter(ImageAspect.ATTR_WIDTH, RelationalOperator.EQ, 0), new RelationalFilter(ImageAspect.ATTR_HEIGHT, RelationalOperator.EQ, 0)))); IFilter bigFilter = BooleanCombinationFilter.CombineFilters(BooleanOperator.Or, new RelationalFilter(ImageAspect.ATTR_WIDTH, RelationalOperator.GT, Consts.BIG_SIZE_THRESHOLD), new RelationalFilter(ImageAspect.ATTR_HEIGHT, RelationalOperator.GT, Consts.BIG_SIZE_THRESHOLD)); IFilter mediumFilter = BooleanCombinationFilter.CombineFilters(BooleanOperator.And, new NotFilter(simpleSmallFilter), new NotFilter(bigFilter)); int numEmptyItems = cd.CountMediaItems(necessaryMIATypeIds, emptyFilter, true, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); int numSmallItems = cd.CountMediaItems(necessaryMIATypeIds, smallFilter, true, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); int numMediumItems = cd.CountMediaItems(necessaryMIATypeIds, mediumFilter, true, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); int numBigItems = cd.CountMediaItems(necessaryMIATypeIds, bigFilter, true, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); return(new List <FilterValue>(new FilterValue[] { new FilterValue(Consts.RES_VALUE_EMPTY_TITLE, emptyFilter, null, numEmptyItems, this), new FilterValue(Consts.RES_IMAGE_FILTER_SMALL, smallFilter, null, numSmallItems, this), new FilterValue(Consts.RES_IMAGE_FILTER_MEDIUM, mediumFilter, null, numMediumItems, this), new FilterValue(Consts.RES_IMAGE_FILTER_BIG, bigFilter, null, numBigItems, this), }.Where(fv => !fv.NumItems.HasValue || fv.NumItems.Value > 0))); }
public override ICollection <FilterValue> GetAvailableValues(IEnumerable <Guid> necessaryMIATypeIds, IFilter selectAttributeFilter, IFilter filter) { IServerConnectionManager serverConnectionManager = ServiceRegistration.Get <IServerConnectionManager>(); IServerController serverController = serverConnectionManager.ServerController; if (serverController == null) { throw new NotConnectedException("The MediaLibrary is not connected"); } IDictionary <string, string> systemNames = new Dictionary <string, string>(); foreach (MPClientMetadata client in serverController.GetAttachedClients()) { systemNames.Add(client.SystemId, client.LastClientName); } systemNames.Add(serverConnectionManager.HomeServerSystemId, serverConnectionManager.LastHomeServerName); IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory; if (cd == null) { return(new List <FilterValue>()); } HomogenousMap valueGroups = cd.GetValueGroups(ProviderResourceAspect.ATTR_SYSTEM_ID, null, ProjectionFunction.None, necessaryMIATypeIds, filter, true, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); IList <FilterValue> result = new List <FilterValue>(valueGroups.Count); int numEmptyEntries = 0; foreach (KeyValuePair <object, object> group in valueGroups) { string name = group.Key as string ?? string.Empty; name = name.Trim(); if (name == string.Empty) { numEmptyEntries += (int)group.Value; } else { string systemName; if (systemNames.TryGetValue(name, out systemName) && !string.IsNullOrEmpty(systemName)) { name = systemName; } result.Add(new FilterValue(name, new RelationalFilter(ProviderResourceAspect.ATTR_SYSTEM_ID, RelationalOperator.EQ, group.Key), null, (int)group.Value, this)); } } if (numEmptyEntries > 0) { result.Insert(0, new FilterValue(Consts.RES_VALUE_EMPTY_TITLE, new EmptyFilter(ProviderResourceAspect.ATTR_SYSTEM_ID), null, numEmptyEntries, this)); } return(result); }
public override ICollection <FilterValue> GetAvailableValues(IEnumerable <Guid> necessaryMIATypeIds, IFilter selectAttributeFilter, IFilter filter) { IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory; if (cd == null) { throw new NotConnectedException("The MediaLibrary is not connected"); } if (_necessaryMIATypeIds != null) { necessaryMIATypeIds = _necessaryMIATypeIds; } HomogenousMap valueGroups = null; HomogenousMap valueKeys = null; if (_keyAttributeType != null) { Tuple <HomogenousMap, HomogenousMap> values = cd.GetKeyValueGroups(_keyAttributeType, _valueAttributeType, selectAttributeFilter, ProjectionFunction.None, necessaryMIATypeIds, filter, true, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); valueGroups = values.Item1; valueKeys = values.Item2; } else { valueGroups = cd.GetValueGroups(_valueAttributeType, selectAttributeFilter, ProjectionFunction.None, necessaryMIATypeIds, filter, true, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); } IList <FilterValue> result = new List <FilterValue>(valueGroups.Count); int numEmptyEntries = 0; foreach (KeyValuePair <object, object> group in valueGroups) { if (_keyAttributeType != null) { string name = GetDisplayName(group.Key); if (name == string.Empty) { numEmptyEntries += (int)group.Value; } else { IFilter queryFilter = new RelationalFilter(_valueAttributeType, RelationalOperator.EQ, group.Key); if (filter != null) { queryFilter = BooleanCombinationFilter.CombineFilters(BooleanOperator.And, queryFilter, filter); } result.Add(new FilterValue(valueKeys[group.Key], name, new FilteredRelationshipFilter(Guid.Empty, queryFilter), null, (int)group.Value, this)); } } else { string name = GetDisplayName(group.Key); if (name == string.Empty) { numEmptyEntries += (int)group.Value; } else { IFilter queryFilter = new RelationalFilter(_valueAttributeType, RelationalOperator.EQ, group.Key); if (filter != null) { queryFilter = BooleanCombinationFilter.CombineFilters(BooleanOperator.And, queryFilter, filter); } result.Add(new FilterValue(name, new FilteredRelationshipFilter(Guid.Empty, queryFilter), null, (int)group.Value, this)); } } } if (numEmptyEntries > 0) { IFilter queryFilter = new EmptyFilter(_valueAttributeType); if (filter != null) { queryFilter = BooleanCombinationFilter.CombineFilters(BooleanOperator.And, queryFilter, filter); } result.Insert(0, new FilterValue(Consts.RES_VALUE_EMPTY_TITLE, new FilteredRelationshipFilter(Guid.Empty, queryFilter), null, numEmptyEntries, this)); } return(result); }
public override ICollection <FilterValue> GroupValues(ICollection <Guid> necessaryMIATypeIds, IFilter selectAttributeFilter, IFilter filter) { IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory; if (cd == null) { throw new NotConnectedException("The MediaLibrary is not connected"); } if (_necessaryMIATypeIds != null) { necessaryMIATypeIds = _necessaryMIATypeIds.ToList(); } IList <MLQueryResultGroup> valueGroups = cd.GroupValueGroups(_valueAttributeType, selectAttributeFilter, ProjectionFunction.None, necessaryMIATypeIds, filter, true, GroupingFunction.FirstCharacter, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); IList <FilterValue> result = new List <FilterValue>(valueGroups.Count); int numEmptyEntries = 0; foreach (MLQueryResultGroup group in valueGroups) { string name = string.Format("{0}", group.GroupKey); name = name.Trim(); if (name == string.Empty) { numEmptyEntries += group.NumItemsInGroup; } else { result.Add(new FilterValue(name, null, group.AdditionalFilter, group.NumItemsInGroup, this)); } } if (numEmptyEntries > 0) { result.Insert(0, new FilterValue(Consts.RES_VALUE_EMPTY_TITLE, new EmptyFilter(_valueAttributeType), null, numEmptyEntries, this)); } return(result); }
// We produce hardcoded titles for this filter criterion like "< 1950", "1950-1960", ... Should we use language // resources for them? #region Base overrides public override ICollection <FilterValue> GetAvailableValues(IEnumerable <Guid> necessaryMIATypeIds, IFilter selectAttributeFilter, IFilter filter) { // We'll do the grouping here at the client. We could also implement a grouping function for decades at the server, // but that seems to be not better since it increases the server code size, the server workload, it complicates the // call structure and it doesn't bring us an advantage IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory; if (cd == null) { throw new NotConnectedException("The MediaLibrary is not connected"); } HomogenousMap valueGroups = cd.GetValueGroups(MediaAspect.ATTR_RECORDINGTIME, null, ProjectionFunction.DateToYear, necessaryMIATypeIds, filter, true, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); IList <FilterValue> result = new List <FilterValue>(valueGroups.Count); int numEmptyEntries = 0; IDictionary <int, int> decadesToNumItems = new Dictionary <int, int>(); foreach (KeyValuePair <object, object> group in valueGroups) { int?year = (int?)group.Key; if (year.HasValue) { int yearVal = year.Value; int decade = yearVal / 10; int numItems; if (!decadesToNumItems.TryGetValue(decade, out numItems)) { numItems = 0; } decadesToNumItems[decade] = numItems + (int)group.Value; } else { numEmptyEntries += (int)group.Value; } } if (numEmptyEntries > 0) { result.Insert(0, new FilterValue(Consts.RES_VALUE_EMPTY_TITLE, new EmptyFilter(MediaAspect.ATTR_RECORDINGTIME), null, numEmptyEntries, this)); } for (int decade = 0; decade < 300; decade++) { int year = decade * 10; int numItems; if (!decadesToNumItems.TryGetValue(decade, out numItems)) { continue; } result.Add(new FilterValue(year.ToString(), new BooleanCombinationFilter(BooleanOperator.And, new IFilter[] { new RelationalFilter(MediaAspect.ATTR_RECORDINGTIME, RelationalOperator.GE, new DateTime(year, 1, 1)), new RelationalFilter(MediaAspect.ATTR_RECORDINGTIME, RelationalOperator.LT, new DateTime(year + 10, 1, 1)), }), null, numItems, this)); } return(result); }
public override ICollection <FilterValue> GetAvailableValues(IEnumerable <Guid> necessaryMIATypeIds, IFilter selectAttributeFilter, IFilter filter) { IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory; if (cd == null) { throw new NotConnectedException("The MediaLibrary is not connected"); } HomogenousMap valueGroups = cd.GetValueGroups(MediaAspect.ATTR_RECORDINGTIME, null, ProjectionFunction.DateToYear, necessaryMIATypeIds, filter, true, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); IList <FilterValue> result = new List <FilterValue>(valueGroups.Count); int numEmptyEntries = 0; foreach (KeyValuePair <object, object> group in valueGroups) { int?year = (int?)group.Key; if (year.HasValue) { result.Add(new FilterValue(year.Value.ToString(), new BooleanCombinationFilter(BooleanOperator.And, new IFilter[] { new RelationalFilter(MediaAspect.ATTR_RECORDINGTIME, RelationalOperator.GE, new DateTime(year.Value, 1, 1)), new RelationalFilter(MediaAspect.ATTR_RECORDINGTIME, RelationalOperator.LT, new DateTime(year.Value + 1, 1, 1)), }), null, (int)group.Value, this)); } else { numEmptyEntries += (int)group.Value; } } if (numEmptyEntries > 0) { result.Insert(0, new FilterValue(Consts.RES_VALUE_EMPTY_TITLE, new EmptyFilter(MediaAspect.ATTR_RECORDINGTIME), null, numEmptyEntries, this)); } return(result); }
public override ICollection <FilterValue> GetAvailableValues(IEnumerable <Guid> necessaryMIATypeIds, IFilter selectAttributeFilter, IFilter filter) { IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory; if (cd == null) { throw new NotConnectedException("The MediaLibrary is not connected"); } IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>(); if (!userProfileDataManagement.IsValidUser) { return(new List <FilterValue>()); } IFilter unwatchedFilter = BooleanCombinationFilter.CombineFilters(BooleanOperator.Or, new EmptyUserDataFilter(userProfileDataManagement.CurrentUser.ProfileId, UserDataKeysKnown.KEY_PLAY_COUNT), new RelationalUserDataFilter(userProfileDataManagement.CurrentUser.ProfileId, UserDataKeysKnown.KEY_PLAY_COUNT, RelationalOperator.EQ, "0")); IFilter watchedFilter = new RelationalUserDataFilter(userProfileDataManagement.CurrentUser.ProfileId, UserDataKeysKnown.KEY_PLAY_COUNT, RelationalOperator.GT, "0"); int numUnwatchedItems = cd.CountMediaItems(necessaryMIATypeIds, BooleanCombinationFilter.CombineFilters(BooleanOperator.And, filter, unwatchedFilter), true, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); int numWatchedItems = cd.CountMediaItems(necessaryMIATypeIds, BooleanCombinationFilter.CombineFilters(BooleanOperator.And, filter, watchedFilter), true, ShowVirtualSetting.ShowVirtualMedia(necessaryMIATypeIds)); return(new List <FilterValue>(new FilterValue[] { new FilterValue(Consts.RES_VALUE_UNWATCHED, unwatchedFilter, null, numUnwatchedItems, this), new FilterValue(Consts.RES_VALUE_WATCHED, watchedFilter, null, numWatchedItems, this), }.Where(fv => !fv.NumItems.HasValue || fv.NumItems.Value > 0))); }