public IViewContent CreateContentForFile(OpenedFile file)
        {
            var codons = SD.DisplayBindingService.GetCodonsPerFileName(file.FileName);
            DisplayBindingDescriptor bestMatch = null;
            double    max           = double.NegativeInfinity;
            const int BUFFER_LENGTH = 4 * 1024;

            using (var stream = file.OpenRead()) {
                string mime = "text/plain";
                if (stream.Length > 0)
                {
                    stream.Position = 0;
                    mime            = MimeTypeDetection.FindMimeType(new BinaryReader(stream).ReadBytes(BUFFER_LENGTH));
                }
                foreach (var codon in codons)
                {
                    stream.Position = 0;
                    double value = codon.Binding.AutoDetectFileContent(file.FileName, stream, mime);
                    if (value > max)
                    {
                        max       = value;
                        bestMatch = codon;
                    }
                }
            }

            if (bestMatch == null)
            {
                throw new InvalidOperationException();
            }

            return(bestMatch.Binding.CreateContentForFile(file));
        }
		DisplayBindingDescriptor AddExternalProcessDisplayBindingInternal(ExternalProcessDisplayBinding binding)
		{
			externalProcessDisplayBindings.Add(binding);
			DisplayBindingDescriptor descriptor = new DisplayBindingDescriptor(binding) {
				Id = binding.Id,
				Title = binding.Title
			};
			bindings.Add(descriptor);
			return descriptor;
		}
Beispiel #3
0
 static bool IsPrimaryBindingValidForFileName(DisplayBindingDescriptor binding, FileName filename)
 {
     if (!binding.IsSecondary && binding.CanOpenFile(filename))
     {
         if (binding.Binding != null && binding.Binding.CanCreateContentForFile(filename))
         {
             return(true);
         }
     }
     return(false);
 }
Beispiel #4
0
        DisplayBindingDescriptor AddExternalProcessDisplayBindingInternal(ExternalProcessDisplayBinding binding)
        {
            externalProcessDisplayBindings.Add(binding);
            DisplayBindingDescriptor descriptor = new DisplayBindingDescriptor(binding)
            {
                Id    = binding.Id,
                Title = binding.Title
            };

            bindings.Add(descriptor);
            return(descriptor);
        }
Beispiel #5
0
        public DisplayBindingDescriptor AddExternalProcessDisplayBinding(ExternalProcessDisplayBinding binding)
        {
            SD.MainThread.VerifyAccess();
            if (binding == null)
            {
                throw new ArgumentNullException("binding");
            }
            DisplayBindingDescriptor descriptor = AddExternalProcessDisplayBindingInternal(binding);

            SaveExternalProcessDisplayBindings();
            return(descriptor);
        }
Beispiel #6
0
        /// <summary>
        /// Gets the primary display binding for the specified file name.
        /// </summary>
        public IDisplayBinding GetBindingPerFileName(FileName filename)
        {
            SD.MainThread.VerifyAccess();
            if (FileUtility.IsUrl(filename))
            {
                // The normal display binding dispatching code can't handle URLs (e.g. because it uses Path.GetExtension),
                // so we'll directly return the browser display binding.
                return(GetBindingForUrl(filename));
            }
            DisplayBindingDescriptor codon = GetDefaultCodonPerFileName(filename);

            return(codon == null ? null : codon.Binding);
        }
        void ProgramListBoxSelectedIndexChanged(object sender, EventArgs e)
        {
            DisplayBindingDescriptor binding = SelectedBinding;

            if (binding != null)
            {
                okButton.Enabled           = true;
                setAsDefaultButton.Enabled = true;
                removeButton.Enabled       = binding.GetLoadedBinding() is ExternalProcessDisplayBinding;
            }
            else
            {
                okButton.Enabled           = false;
                setAsDefaultButton.Enabled = false;
                removeButton.Enabled       = false;
            }
        }
Beispiel #8
0
        public void SetDefaultCodon(string extension, DisplayBindingDescriptor bindingDescriptor)
        {
            SD.MainThread.VerifyAccess();
            if (bindingDescriptor == null)
            {
                throw new ArgumentNullException("bindingDescriptor");
            }
            if (extension == null)
            {
                throw new ArgumentNullException("extension");
            }
            if (!extension.StartsWith(".", StringComparison.Ordinal))
            {
                throw new ArgumentException("extension must start with '.'");
            }

            displayBindingServiceProperties.Set("Default" + extension.ToLowerInvariant(), bindingDescriptor.Id);
        }
        /// <summary>
        /// Gets the default primary display binding for the specified file name.
        /// </summary>
        public DisplayBindingDescriptor GetDefaultCodonPerFileName(FileName filename)
        {
            SD.MainThread.VerifyAccess();

            if (filename == null)
            {
                return(null);
            }
            string defaultCommandID = displayBindingServiceProperties.Get("Default" + Path.GetExtension(filename).ToLowerInvariant(), string.Empty);

            if (!string.IsNullOrEmpty(defaultCommandID))
            {
                foreach (DisplayBindingDescriptor binding in bindings)
                {
                    if (binding.Id == defaultCommandID)
                    {
                        if (IsPrimaryBindingValidForFileName(binding, filename))
                        {
                            return(binding);
                        }
                    }
                }
            }
            DisplayBindingDescriptor autoDetectDescriptor = null;

            foreach (DisplayBindingDescriptor binding in bindings)
            {
                if (IsPrimaryBindingValidForFileName(binding, filename))
                {
                    if (binding.Binding.IsPreferredBindingForFile(filename))
                    {
                        return(binding);
                    }
                    if (binding.Binding is AutoDetectDisplayBinding)
                    {
                        autoDetectDescriptor = binding;
                    }
                }
            }
            return(autoDetectDescriptor);
        }
 public ListEntry(DisplayBindingDescriptor desc, bool isDefault)
 {
     this.desc      = desc;
     this.IsDefault = isDefault;
 }
		static bool IsPrimaryBindingValidForFileName(DisplayBindingDescriptor binding, FileName filename)
		{
			if (!binding.IsSecondary && binding.CanOpenFile(filename)) {
				if (binding.Binding != null && binding.Binding.CanCreateContentForFile(filename)) {
					return true;
				}
			}
			return false;
		}
		public void SetDefaultCodon(string extension, DisplayBindingDescriptor bindingDescriptor)
		{
			SD.MainThread.VerifyAccess();
			if (bindingDescriptor == null)
				throw new ArgumentNullException("bindingDescriptor");
			if (extension == null)
				throw new ArgumentNullException("extension");
			if (!extension.StartsWith(".", StringComparison.Ordinal))
				throw new ArgumentException("extension must start with '.'");
			
			displayBindingServiceProperties.Set("Default" + extension.ToLowerInvariant(), bindingDescriptor.Id);
		}
Beispiel #13
0
			public ListEntry(DisplayBindingDescriptor desc, bool isDefault)
			{
				this.desc = desc;
				this.IsDefault = isDefault;
			}