Support data URI as Icon

This commit is contained in:
Yeechan Lu
2014-03-23 04:22:57 +08:00
parent 0d95636b0f
commit 7dda2df54b
4 changed files with 80 additions and 1 deletions

View File

@@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
namespace Wox.Helper
{
public class DataWebRequestFactory : IWebRequestCreate
{
class DataWebRequest : WebRequest
{
private readonly Uri m_uri;
public DataWebRequest(Uri uri)
{
m_uri = uri;
}
public override WebResponse GetResponse()
{
return new DataWebResponse(m_uri);
}
}
class DataWebResponse : WebResponse
{
private readonly string m_contentType;
private readonly byte[] m_data;
public DataWebResponse(Uri uri)
{
string uriString = uri.AbsoluteUri;
int commaIndex = uriString.IndexOf(',');
var headers = uriString.Substring(0, commaIndex).Split(';');
m_contentType = headers[0];
string dataString = uriString.Substring(commaIndex + 1);
m_data = Convert.FromBase64String(dataString);
}
public override string ContentType
{
get { return m_contentType; }
set
{
throw new NotSupportedException();
}
}
public override long ContentLength
{
get { return m_data.Length; }
set
{
throw new NotSupportedException();
}
}
public override Stream GetResponseStream()
{
return new MemoryStream(m_data);
}
}
public WebRequest Create(Uri uri)
{
return new DataWebRequest(uri);
}
}
}

View File

@@ -8,6 +8,7 @@ using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
namespace Wox
{
@@ -40,6 +41,11 @@ namespace Wox
if (values[0] == null) return null;
string path = values[0].ToString();
if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase))
{
return new System.Windows.Media.Imaging.BitmapImage(new Uri(path));
}
string pluginDirectory = values[1].ToString();
string fullPath = Path.Combine(pluginDirectory, path);
string ext = Path.GetExtension(path).ToLower();

View File

@@ -50,7 +50,7 @@ namespace Wox
InitializeComponent();
initialized = true;
System.Net.WebRequest.RegisterPrefix("data", new DataWebRequestFactory());
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
progressBar.ToolTip = toolTip;

View File

@@ -107,6 +107,7 @@
<Compile Include="Commands\CommandFactory.cs" />
<Compile Include="Commands\PluginCommand.cs" />
<Compile Include="Commands\SystemCommand.cs" />
<Compile Include="Helper\DataWebRequestFactory.cs" />
<Compile Include="Helper\WindowIntelopHelper.cs" />
<Compile Include="ProgramSourceSetting.xaml.cs">
<DependentUpon>ProgramSourceSetting.xaml</DependentUpon>