public async Task<IList<MLQueryResultGroup>> GroupValueGroupsAsync(MediaItemAspectMetadata.AttributeSpecification attributeType, IFilter selectAttributeFilter, ProjectionFunction projectionFunction, IEnumerable<Guid> necessaryMIATypes, IFilter filter, bool onlyOnline, GroupingFunction groupingFunction, bool includeVirtual) { CpAction action = GetAction("X_MediaPortal_GroupValueGroups"); string projectionFunctionStr = SerializeProjectionFunction(projectionFunction); string onlineStateStr = SerializeOnlineState(onlyOnline); string groupingFunctionStr; switch (groupingFunction) { case GroupingFunction.FirstCharacter: groupingFunctionStr = "FirstCharacter"; break; default: throw new NotImplementedException(string.Format("GroupingFunction '{0}' is not implemented", groupingFunction)); } IList<object> inParameters = new List<object> { MarshallingHelper.SerializeGuid(attributeType.ParentMIAM.AspectId), attributeType.AttributeName, selectAttributeFilter, projectionFunctionStr, MarshallingHelper.SerializeGuidEnumerationToCsv(necessaryMIATypes), filter, onlineStateStr, groupingFunctionStr, includeVirtual, }; IList<object> outParameters = await action.InvokeAsync(inParameters); return (IList<MLQueryResultGroup>) outParameters[0]; }
protected string SerializeProjectionFunction(ProjectionFunction projectionFunction) { switch (projectionFunction) { case ProjectionFunction.None: return "None"; case ProjectionFunction.DateToYear: return "DateToYear"; default: throw new NotImplementedException(string.Format("ProjectionFunction '{0}' is not implemented", projectionFunction)); } }
public HomogenousMap GetValueGroups(MediaItemAspectMetadata.AttributeSpecification attributeType, IFilter selectAttributeFilter, ProjectionFunction projectionFunction, IEnumerable <Guid> necessaryMIATypes, IFilter filter, bool onlyOnline) { CpAction action = GetAction("GetValueGroups"); string projectionFunctionStr = SerializeProjectionFunction(projectionFunction); string onlineStateStr = SerializeOnlineState(onlyOnline); IList <object> inParameters = new List <object> { MarshallingHelper.SerializeGuid(attributeType.ParentMIAM.AspectId), attributeType.AttributeName, selectAttributeFilter, projectionFunctionStr, MarshallingHelper.SerializeGuidEnumerationToCsv(necessaryMIATypes), filter, onlineStateStr }; IList <object> outParameters = action.InvokeAction(inParameters); return((HomogenousMap)outParameters[0]); }
public async Task<Tuple<HomogenousMap, HomogenousMap>> GetKeyValueGroupsAsync(MediaItemAspectMetadata.AttributeSpecification keyAttributeType, MediaItemAspectMetadata.AttributeSpecification valueAttributeType, IFilter selectAttributeFilter, ProjectionFunction projectionFunction, IEnumerable<Guid> necessaryMIATypes, IFilter filter, bool onlyOnline, bool includeVirtual) { CpAction action = GetAction("X_MediaPortal_GetKeyValueGroups"); string projectionFunctionStr = SerializeProjectionFunction(projectionFunction); string onlineStateStr = SerializeOnlineState(onlyOnline); IList<object> inParameters = new List<object> { MarshallingHelper.SerializeGuid(keyAttributeType.ParentMIAM.AspectId), keyAttributeType.AttributeName, MarshallingHelper.SerializeGuid(valueAttributeType.ParentMIAM.AspectId), valueAttributeType.AttributeName, selectAttributeFilter, projectionFunctionStr, MarshallingHelper.SerializeGuidEnumerationToCsv(necessaryMIATypes), filter, onlineStateStr, includeVirtual, }; IList<object> outParameters = await action.InvokeAsync(inParameters); return new Tuple<HomogenousMap, HomogenousMap>((HomogenousMap)outParameters[0], (HomogenousMap)outParameters[1]); }
public IList <MLQueryResultGroup> GroupValueGroups(MediaItemAspectMetadata.AttributeSpecification attributeType, IFilter selectAttributeFilter, ProjectionFunction projectionFunction, IEnumerable <Guid> necessaryMIATypeIDs, IFilter filter, bool filterOnlyOnline, GroupingFunction groupingFunction, bool includeVirtual) { throw new NotImplementedException(); }
public Tuple <HomogenousMap, HomogenousMap> GetKeyValueGroups(MediaItemAspectMetadata.AttributeSpecification keyAttributeType, MediaItemAspectMetadata.AttributeSpecification valueAttributeType, IFilter selectAttributeFilter, ProjectionFunction projectionFunction, IEnumerable <Guid> necessaryMIATypeIDs, IFilter filter, bool filterOnlyOnline, bool includeVirtual) { throw new NotImplementedException(); }
public HomogenousMap GetValueGroups(MediaItemAspectMetadata.AttributeSpecification attributeType, IFilter selectAttributeFilter, ProjectionFunction projectionFunction, IEnumerable <Guid> necessaryMIATypeIDs, IFilter filter, bool filterOnlyOnline) { throw new NotImplementedException(); }
static UPnPError ParseProjectionFunction(string argumentName, string projectionFunctionStr, out ProjectionFunction projectionFunction) { switch (projectionFunctionStr) { case "None": projectionFunction = ProjectionFunction.None; break; case "DateToYear": projectionFunction = ProjectionFunction.DateToYear; break; default: projectionFunction = ProjectionFunction.None; return new UPnPError(600, string.Format("Argument '{0}' must be of value 'DateToYear' or 'None'", argumentName)); } return null; }
public IList<MLQueryResultGroup> GroupValueGroups(MediaItemAspectMetadata.AttributeSpecification attributeType, IFilter selectAttributeFilter, ProjectionFunction projectionFunction, IEnumerable<Guid> necessaryMIATypes, IFilter filter, bool onlyOnline, GroupingFunction groupingFunction) { CpAction action = GetAction("GroupValueGroups"); string projectionFunctionStr = SerializeProjectionFunction(projectionFunction); string onlineStateStr = SerializeOnlineState(onlyOnline); string groupingFunctionStr; switch (groupingFunction) { case GroupingFunction.FirstCharacter: groupingFunctionStr = "FirstCharacter"; break; default: throw new NotImplementedException(string.Format("GroupingFunction '{0}' is not implemented", groupingFunction)); } IList<object> inParameters = new List<object> {MarshallingHelper.SerializeGuid(attributeType.ParentMIAM.AspectId), attributeType.AttributeName, selectAttributeFilter, projectionFunctionStr, MarshallingHelper.SerializeGuidEnumerationToCsv(necessaryMIATypes), filter, onlineStateStr, groupingFunctionStr}; IList<object> outParameters = action.InvokeAction(inParameters); return (IList<MLQueryResultGroup>) outParameters[0]; }
public HomogenousMap GetValueGroups(MediaItemAspectMetadata.AttributeSpecification attributeType, IFilter selectAttributeFilter, ProjectionFunction projectionFunction, IEnumerable<Guid> necessaryMIATypes, IFilter filter, bool onlyOnline) { CpAction action = GetAction("GetValueGroups"); string projectionFunctionStr = SerializeProjectionFunction(projectionFunction); string onlineStateStr = SerializeOnlineState(onlyOnline); IList<object> inParameters = new List<object> {MarshallingHelper.SerializeGuid(attributeType.ParentMIAM.AspectId), attributeType.AttributeName, selectAttributeFilter, projectionFunctionStr, MarshallingHelper.SerializeGuidEnumerationToCsv(necessaryMIATypes), filter, onlineStateStr}; IList<object> outParameters = action.InvokeAction(inParameters); return (HomogenousMap) outParameters[0]; }
public IList<MLQueryResultGroup> GroupValueGroups(MediaItemAspectMetadata.AttributeSpecification attributeType, IFilter selectAttributeFilter, ProjectionFunction projectionFunction, IEnumerable<Guid> necessaryMIATypeIDs, IFilter filter, bool filterOnlyOnline, GroupingFunction groupingFunction) { IDictionary<object, MLQueryResultGroup> groups = new Dictionary<object, MLQueryResultGroup>(); IGroupingFunctionImpl groupingFunctionImpl; switch (groupingFunction) { case GroupingFunction.FirstCharacter: groupingFunctionImpl = new FirstCharGroupingFunction(attributeType); break; default: groupingFunctionImpl = new FirstCharGroupingFunction(attributeType); break; } foreach (KeyValuePair<object, object> resultItem in GetValueGroups(attributeType, selectAttributeFilter, projectionFunction, necessaryMIATypeIDs, filter, filterOnlyOnline)) { object valueGroupKey = resultItem.Key; int resultGroupItemCount = (int) resultItem.Value; object groupKey; IFilter additionalFilter; groupingFunctionImpl.GetGroup(valueGroupKey, out groupKey, out additionalFilter); MLQueryResultGroup rg; if (groups.TryGetValue(groupKey, out rg)) rg.NumItemsInGroup += resultGroupItemCount; else groups[groupKey] = new MLQueryResultGroup(groupKey, resultGroupItemCount, additionalFilter); } List<MLQueryResultGroup> result = new List<MLQueryResultGroup>(groups.Values); result.Sort((a, b) => groupingFunctionImpl.Compare(a.GroupKey, b.GroupKey)); return result; }
public HomogenousMap GetValueGroups(MediaItemAspectMetadata.AttributeSpecification attributeType, IFilter selectAttributeFilter, ProjectionFunction projectionFunction, IEnumerable<Guid> necessaryMIATypeIDs, IFilter filter, bool filterOnlyOnline) { SelectProjectionFunction selectProjectionFunctionImpl; Type projectionValueType; switch (projectionFunction) { case ProjectionFunction.DateToYear: selectProjectionFunctionImpl = (string expr) => { ISQLDatabase database = ServiceRegistration.Get<ISQLDatabase>(); return database.CreateDateToYearProjectionExpression(expr); }; projectionValueType = typeof(int); break; default: selectProjectionFunctionImpl = null; projectionValueType = null; break; } IAttributeFilter saf = selectAttributeFilter as IAttributeFilter; if (saf == null && selectAttributeFilter != null) filter = BooleanCombinationFilter.CombineFilters(BooleanOperator.And, new IFilter[] {filter, selectAttributeFilter}); CompiledGroupedAttributeValueQuery cdavq = CompiledGroupedAttributeValueQuery.Compile(_miaManagement, filterOnlyOnline ? necessaryMIATypeIDs.Union(new Guid[] {ProviderResourceAspect.ASPECT_ID}) : necessaryMIATypeIDs, attributeType, saf, selectProjectionFunctionImpl, projectionValueType, filterOnlyOnline ? AddOnlyOnlineFilter(filter) : filter); return cdavq.Execute(); }