/// <summary>
        /// Look up the preview handler associated with the file extension
        /// </summary>
        /// <returns></returns>
        private PreviewHandlerInfo LookupPreviewHandler()
        {
            RegistrationData data = PreviewHandlerRegistryAccessor.LoadRegistrationInformation();
            var extension         = data.Extensions.FirstOrDefault(x => HasExtension(_filePath, x.Extension) && (x.Handler != null));

            return(extension?.Handler);
        }
Example #2
0
        /// <summary>
        /// 1) Look up the preview handler associated with the file extension
        /// 2) Create an instance of the handler using its CLSID and reflection
        /// 3) Check if it is a file or stream handler
        /// 4) Initialize with File or Stream using Initialize from the appropriate interface
        /// 5) Call SetWindow passing in a handle to this control and the bounds of the control
        /// 6) Call DoPreview
        /// </summary>
        private void GeneratePreview()
        {
            lblMessage.Visible = false;
            if (_comInstance != null)
            {
                ((IPreviewHandler)_comInstance).Unload();
            }

            RECT r;

            r.top    = 0;
            r.bottom = this.Height;
            r.left   = 0;
            r.right  = this.Width;

            RegistrationData   data    = PreviewHandlerRegistryAccessor.LoadRegistrationInformation();
            PreviewHandlerInfo handler = null;

            foreach (ExtensionInfo ei in data.Extensions)
            {
                if (_filePath.ToUpper().EndsWith(ei.Extension.ToUpper()))
                {
                    handler = ei.Handler;
                    if (handler != null)
                    {
                        break;
                    }
                }
            }
            if (handler == null)
            {
                lblMessage.Visible = true;
                lblMessage.Text    = "No Preview Available";
                return;
            }

            Type comType = Type.GetTypeFromCLSID(new Guid(handler.ID));

            try
            {
                // Create an instance of the preview handler
                _comInstance = Activator.CreateInstance(comType);

                // Check if it is a stream or file handler
                if (_comInstance is IInitializeWithFile)
                {
                    ((IInitializeWithFile)_comInstance).Initialize(_filePath, 0);
                }
                else if (_comInstance is IInitializeWithStream)
                {
                    if (File.Exists(_filePath))
                    {
                        StreamWrapper stream = new StreamWrapper(File.Open(_filePath, FileMode.Open));
                        ((C4F.DevKit.PreviewHandler.PreviewHandlerFramework.IInitializeWithStream)_comInstance).Initialize(stream, 0);
                    }
                    else
                    {
                        throw new Exception("File not found");
                    }
                }
                ((IPreviewHandler)_comInstance).SetWindow(this.Handle, ref r);
                ((IPreviewHandler)_comInstance).DoPreview();
            }
            catch (Exception ex)
            {
                _comInstance       = null;
                lblMessage.Visible = true;
                lblMessage.Text    = "Preview Generation Failed - " + ex.Message;
            }
        }