private MarkerResource(MarkerResource markerResource)
 {
     Source = markerResource.Source;
     Format = markerResource.Format;
     PollingInterval = markerResource.PollingInterval;
 }
 private MarkerResource(MarkerResource markerResource)
 {
     Source          = markerResource.Source;
     Format          = markerResource.Format;
     PollingInterval = markerResource.PollingInterval;
 }
        /// <summary>
        /// Selects an IMarkerProvider plugin that supports the type of specified Marker.
        /// </summary>
        /// <remarks>
        /// The MarkerResource passed to this method is used to determine which type of MarkerProvider to return.
        /// If more than one plugin supports the MarkerResource (based on the required capabilities in its attributes), the first plugin found that matches the requirements in used.
        /// If more than one plugin matches the requirements, a plugin already instantiated will take precedence over other plugins.
        /// </remarks>
        /// <returns>
        /// An IMarkerProvider that supports the type of marker passed as a parameter.
        /// </returns>
        protected virtual IMarkerProvider SelectMarkerProvider(MarkerResource markerResource)
        {
            IEnumerable<LooseMetadataLazy<IMarkerProvider, IMarkerProviderMetadata>> results = PluginsManager.
                MarkerProviderPlugins
                .Where(
                    i =>
                    (i.Metadata.SupportedFormat == markerResource.Format)
                    && (i.Metadata.SupportsPolling || !markerResource.PollingInterval.HasValue));

            //Favor Plugins that have already been instantiated
            LooseMetadataLazy<IMarkerProvider, IMarkerProviderMetadata> result = results.Any(i => i.IsValueCreated)
                                                                                     ? results.First(
                                                                                         i => i.IsValueCreated)
                                                                                     : results.FirstOrDefault();

            return result != null ? result.Value : null;
        }
        protected virtual IMarkerProvider SelectMarkerProvider(MarkerResource markerResource)
        {
            var results = new List<LooseMetadataLazy<IMarkerProvider, IMarkerProviderMetadata>>();

            foreach (var markerProviderPlugin in PluginsManager.MarkerProviderPlugins)
            {
                if (markerProviderPlugin.LooseMetadata.ContainsKeyIgnoreCase("supportedformat")
                    && markerProviderPlugin.LooseMetadata.GetEntryIgnoreCase("supportedformat").Equals(markerResource.Format))
                {
                    bool supportsPolling;

                    if (!markerResource.PollingInterval.HasValue ||
                        (markerProviderPlugin.LooseMetadata.ContainsKeyIgnoreCase("supportspolling")
                        && bool.TryParse(markerProviderPlugin.LooseMetadata.GetEntryIgnoreCase("supportspolling").ToString(), out supportsPolling)
                        && supportsPolling))
                    {
                        results.Add(markerProviderPlugin);
                    }
                }
            }

            //Favor Plugins that have already been instantiated
            LooseMetadataLazy<IMarkerProvider, IMarkerProviderMetadata> result = results.Any(i => i.IsValueCreated)
                                                                                     ? results.First(
                                                                                         i => i.IsValueCreated)
                                                                                     : results.FirstOrDefault();

            return result != null ? result.Value : null;
        }
 private IMarkerProvider InitializeMarkerProvider(MarkerResource resource)
 {
     var markerProvider = SelectMarkerProvider(resource);
     if (markerProvider != null)
     {
         markerProvider.Source = resource.Source;
         markerProvider.PollingInterval = resource.PollingInterval;
     }
     else
     {
         SendLogEntry(KnownLogEntryTypes.UnableToLocateMarkerProvider, LogLevel.Warning,
             SilverlightMediaFrameworkResources.UnableToLocateMarkerProviderLogMessage);
     }
     return markerProvider;
 }