mirror of
https://github.com/microsoft/PowerToys.git
synced 2024-12-14 11:39:16 +08:00
Merge branch 'dev' of https://github.com/qianlifeng/Wox.git
This commit is contained in:
commit
cecd4aa36a
@ -8,6 +8,6 @@ Write-Host "Setting .nuspec version tag to $versionStr"
|
||||
$content = (Get-Content $root\Deploy\NuGet\wox.plugin.nuspec)
|
||||
$content = $content -replace '\$version\$',$versionStr
|
||||
|
||||
$content | Out-File $root\wox.plugin.nuspec
|
||||
$content | Out-File $root\deploy\nuget\wox.plugin.nuspec
|
||||
|
||||
& $root\.nuget\NuGet.exe pack $root\deploy\nuget\wox.plugin.nuspec
|
||||
|
Binary file not shown.
@ -10,30 +10,21 @@ using Newtonsoft.Json;
|
||||
|
||||
namespace Wox.Plugin.PluginManagement
|
||||
{
|
||||
public class WoxPlugin
|
||||
{
|
||||
public int apiVersion { get; set; }
|
||||
public List<WoxPluginResult> result { get; set; }
|
||||
}
|
||||
|
||||
public class WoxPluginResult
|
||||
{
|
||||
public string actionkeyword;
|
||||
public string download;
|
||||
public string author;
|
||||
public string plugin_file;
|
||||
public string description;
|
||||
public string id;
|
||||
public int star;
|
||||
public int liked_count;
|
||||
public string name;
|
||||
public string version;
|
||||
public string website;
|
||||
}
|
||||
|
||||
public class Main : IPlugin
|
||||
{
|
||||
private static string APIBASE = "https://api.getwox.com";
|
||||
private static string PluginPath = AppDomain.CurrentDomain.BaseDirectory + "Plugins";
|
||||
private static string PluginConfigName = "plugin.json";
|
||||
private static string pluginSearchUrl = "http://www.getwox.com/api/plugin/search/";
|
||||
private static string pluginSearchUrl = APIBASE +"/plugin/search/";
|
||||
private PluginInitContext context;
|
||||
|
||||
public List<Result> Query(Query query)
|
||||
@ -142,8 +133,18 @@ namespace Wox.Plugin.PluginManagement
|
||||
{
|
||||
StreamReader reader = new StreamReader(s, Encoding.UTF8);
|
||||
string json = reader.ReadToEnd();
|
||||
WoxPlugin o = JsonConvert.DeserializeObject<WoxPlugin>(json);
|
||||
foreach (WoxPluginResult r in o.result)
|
||||
List<WoxPluginResult> searchedPlugins = null;
|
||||
try
|
||||
{
|
||||
searchedPlugins = JsonConvert.DeserializeObject<List<WoxPluginResult>>(json);
|
||||
}
|
||||
catch
|
||||
{
|
||||
context.API.ShowMsg("Coundn't parse api search results", "Please update your Wox!",string.Empty);
|
||||
return results;
|
||||
}
|
||||
|
||||
foreach (WoxPluginResult r in searchedPlugins)
|
||||
{
|
||||
WoxPluginResult r1 = r;
|
||||
results.Add(new Result()
|
||||
@ -169,7 +170,8 @@ namespace Wox.Plugin.PluginManagement
|
||||
{
|
||||
try
|
||||
{
|
||||
Client.DownloadFile(r1.download, filePath);
|
||||
string pluginUrl = APIBASE + "/media/" + r1.plugin_file;
|
||||
Client.DownloadFile(pluginUrl, filePath);
|
||||
context.API.InstallPlugin(filePath);
|
||||
context.API.ReloadPlugins();
|
||||
}
|
||||
|
@ -9,6 +9,8 @@ using System.Security.Cryptography.X509Certificates;
|
||||
using System.Text;
|
||||
|
||||
//From:http://blog.csdn.net/zhoufoxcn/article/details/6404236
|
||||
using Wox.Plugin;
|
||||
|
||||
namespace Wox.Infrastructure
|
||||
{
|
||||
public class HttpRequest
|
||||
@ -16,6 +18,30 @@ namespace Wox.Infrastructure
|
||||
private static readonly string DefaultUserAgent = "Wox/" + Assembly.GetEntryAssembly().GetName().Version.ToString() + " (+https://github.com/qianlifeng/Wox)";
|
||||
|
||||
|
||||
public static HttpWebResponse CreateGetHttpResponse(string url, IHttpProxy proxy)
|
||||
{
|
||||
if (string.IsNullOrEmpty(url))
|
||||
{
|
||||
throw new ArgumentNullException("url");
|
||||
}
|
||||
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
|
||||
if (proxy != null && proxy.Enabled && !string.IsNullOrEmpty(proxy.Server))
|
||||
{
|
||||
if (string.IsNullOrEmpty(proxy.UserName) || string.IsNullOrEmpty(proxy.Password))
|
||||
{
|
||||
request.Proxy = new WebProxy(proxy.Server, proxy.Port);
|
||||
}
|
||||
else
|
||||
{
|
||||
request.Proxy = new WebProxy(proxy.Server, proxy.Port);
|
||||
request.Proxy.Credentials = new NetworkCredential(proxy.UserName, proxy.Password);
|
||||
}
|
||||
}
|
||||
request.Method = "GET";
|
||||
request.UserAgent = DefaultUserAgent;
|
||||
return request.GetResponse() as HttpWebResponse;
|
||||
}
|
||||
|
||||
public static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent, CookieCollection cookies)
|
||||
{
|
||||
if (string.IsNullOrEmpty(url))
|
||||
|
@ -8,6 +8,9 @@ namespace Wox.Infrastructure.Storage.UserSettings
|
||||
{
|
||||
public class UserSettingStorage : BaseStorage<UserSettingStorage>
|
||||
{
|
||||
[JsonProperty]
|
||||
public bool DontPromptUpdateMsg { get; set; }
|
||||
|
||||
[JsonProperty]
|
||||
public string Hotkey { get; set; }
|
||||
|
||||
@ -145,6 +148,7 @@ namespace Wox.Infrastructure.Storage.UserSettings
|
||||
|
||||
protected override UserSettingStorage LoadDefaultConfig()
|
||||
{
|
||||
DontPromptUpdateMsg = false;
|
||||
Theme = "Dark";
|
||||
ReplaceWinR = true;
|
||||
WebSearches = LoadDefaultWebSearches();
|
||||
|
@ -21,6 +21,7 @@ using Wox.Infrastructure.Storage;
|
||||
using Wox.Infrastructure.Storage.UserSettings;
|
||||
using Wox.Plugin;
|
||||
using Wox.PluginLoader;
|
||||
using Wox.Update;
|
||||
using Application = System.Windows.Application;
|
||||
using Brushes = System.Windows.Media.Brushes;
|
||||
using Color = System.Windows.Media.Color;
|
||||
@ -188,6 +189,8 @@ namespace Wox
|
||||
//since MainWIndow implement IPublicAPI, so we need to finish ctor MainWindow object before
|
||||
//PublicAPI invoke in plugin init methods. E.g FolderPlugin
|
||||
ThreadPool.QueueUserWorkItem(o => Plugins.Init());
|
||||
|
||||
ThreadPool.QueueUserWorkItem(o => checkUpdate());
|
||||
}
|
||||
|
||||
void pnlResult_RightMouseClickEvent(Result result)
|
||||
@ -195,6 +198,15 @@ namespace Wox
|
||||
ShowContextMenu(result);
|
||||
}
|
||||
|
||||
void checkUpdate()
|
||||
{
|
||||
Release release = new UpdateChecker().CheckUpgrade();
|
||||
if (release != null && !UserSettingStorage.Instance.DontPromptUpdateMsg)
|
||||
{
|
||||
ShowMsg(string.Format("New version {0} available!",release.version),string.Empty,string.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
UserSettingStorage.Instance.WindowLeft = Left;
|
||||
|
@ -28,6 +28,9 @@
|
||||
<CheckBox x:Name="cbHideWhenDeactive" Margin="10">
|
||||
Hide Wox when loses focus
|
||||
</CheckBox>
|
||||
<CheckBox x:Name="cbDontPromptUpdateMsg" Margin="10">
|
||||
Don't show upgrade msg if new version available
|
||||
</CheckBox>
|
||||
</StackPanel>
|
||||
</TabItem>
|
||||
<TabItem Header="Plugin">
|
||||
|
@ -38,8 +38,7 @@ namespace Wox
|
||||
|
||||
private void Setting_Loaded(object sender, RoutedEventArgs ev)
|
||||
{
|
||||
ctlHotkey.OnHotkeyChanged += ctlHotkey_OnHotkeyChanged;
|
||||
ctlHotkey.SetHotkey(UserSettingStorage.Instance.Hotkey, false);
|
||||
#region General
|
||||
|
||||
cbHideWhenDeactive.Checked += (o, e) =>
|
||||
{
|
||||
@ -53,11 +52,25 @@ namespace Wox
|
||||
UserSettingStorage.Instance.Save();
|
||||
};
|
||||
|
||||
lvCustomHotkey.ItemsSource = UserSettingStorage.Instance.CustomPluginHotkeys;
|
||||
cbDontPromptUpdateMsg.Checked += (o, e) =>
|
||||
{
|
||||
UserSettingStorage.Instance.DontPromptUpdateMsg = true;
|
||||
UserSettingStorage.Instance.Save();
|
||||
};
|
||||
|
||||
cbDontPromptUpdateMsg.Unchecked += (o, e) =>
|
||||
{
|
||||
UserSettingStorage.Instance.DontPromptUpdateMsg = false;
|
||||
UserSettingStorage.Instance.Save();
|
||||
};
|
||||
|
||||
cbStartWithWindows.IsChecked = File.Exists(woxLinkPath);
|
||||
cbHideWhenDeactive.IsChecked = UserSettingStorage.Instance.HideWhenDeactive;
|
||||
cbDontPromptUpdateMsg.IsChecked = UserSettingStorage.Instance.DontPromptUpdateMsg;
|
||||
|
||||
#region Load Theme
|
||||
#endregion
|
||||
|
||||
#region Theme
|
||||
|
||||
if (!string.IsNullOrEmpty(UserSettingStorage.Instance.QueryBoxFont) &&
|
||||
Fonts.SystemFontFamilies.Count(o => o.FamilyNames.Values.Contains(UserSettingStorage.Instance.QueryBoxFont)) > 0)
|
||||
@ -155,9 +168,17 @@ namespace Wox
|
||||
var wallpaperColor = WallpaperPathRetrieval.GetWallpaperColor();
|
||||
PreviewPanel.Background = new SolidColorBrush(wallpaperColor);
|
||||
}
|
||||
|
||||
//PreviewPanel
|
||||
App.Window.SetTheme(UserSettingStorage.Instance.Theme);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Load Plugin
|
||||
#region Plugin
|
||||
|
||||
ctlHotkey.OnHotkeyChanged += ctlHotkey_OnHotkeyChanged;
|
||||
ctlHotkey.SetHotkey(UserSettingStorage.Instance.Hotkey, false);
|
||||
lvCustomHotkey.ItemsSource = UserSettingStorage.Instance.CustomPluginHotkeys;
|
||||
|
||||
var plugins = new CompositeCollection
|
||||
{
|
||||
@ -200,9 +221,7 @@ namespace Wox
|
||||
|
||||
#endregion
|
||||
|
||||
//PreviewPanel
|
||||
settingsLoaded = true;
|
||||
App.Window.SetTheme(UserSettingStorage.Instance.Theme);
|
||||
}
|
||||
|
||||
private void EnableProxy()
|
||||
|
16
Wox/Update/Release.cs
Normal file
16
Wox/Update/Release.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Wox.Update
|
||||
{
|
||||
public class Release
|
||||
{
|
||||
public string version { get; set; }
|
||||
public string download_link { get; set; }
|
||||
public string download_link1 { get; set; }
|
||||
public string download_link2 { get; set; }
|
||||
public string description { get; set; }
|
||||
}
|
||||
}
|
96
Wox/Update/UpdateChecker.cs
Normal file
96
Wox/Update/UpdateChecker.cs
Normal file
@ -0,0 +1,96 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json;
|
||||
using Wox.Helper;
|
||||
using Wox.Infrastructure;
|
||||
|
||||
namespace Wox.Update
|
||||
{
|
||||
public class UpdateChecker
|
||||
{
|
||||
private string updateURL = "https://api.getwox.com/release/latest/";
|
||||
|
||||
/// <summary>
|
||||
/// If new release is available, then return the new release
|
||||
/// otherwise, return null
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Release CheckUpgrade()
|
||||
{
|
||||
Release release = null;
|
||||
HttpWebResponse response = HttpRequest.CreateGetHttpResponse(updateURL, HttpProxy.Instance);
|
||||
Stream s = response.GetResponseStream();
|
||||
if (s != null)
|
||||
{
|
||||
StreamReader reader = new StreamReader(s, Encoding.UTF8);
|
||||
string json = reader.ReadToEnd();
|
||||
try
|
||||
{
|
||||
release = JsonConvert.DeserializeObject<Release>(json);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (!IsNewerThanCurrent(release))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return release;
|
||||
}
|
||||
|
||||
private bool IsNewerThanCurrent(Release release)
|
||||
{
|
||||
if (release == null) return false;
|
||||
|
||||
string currentVersion = ConfigurationManager.AppSettings["version"];
|
||||
return CompareVersion(release.version, currentVersion) > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// if version1 > version2 return 1
|
||||
/// else -1
|
||||
/// </summary>
|
||||
/// <param name="version1"></param>
|
||||
/// <param name="version2"></param>
|
||||
/// <returns></returns>
|
||||
private int CompareVersion(string version1, string version2)
|
||||
{
|
||||
if (version1 == version2) return 0;
|
||||
if (string.IsNullOrEmpty(version1) || string.IsNullOrEmpty(version2)) return 0;
|
||||
|
||||
//semantic version, e.g. 1.1.0
|
||||
List<int> version1List = version1.Split('.').Select(int.Parse).ToList();
|
||||
List<int> version2List = version2.Split('.').Select(int.Parse).ToList();
|
||||
|
||||
if (version1List[0] > version2List[0])
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if (version1List[0] == version2List[0])
|
||||
{
|
||||
if (version1List[1] > version2List[1])
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if (version1List[1] == version2List[1])
|
||||
{
|
||||
if (version1List[2] > version2List[2])
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
@ -82,6 +82,7 @@
|
||||
<Reference Include="PresentationUI, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
|
||||
<Reference Include="ReachFramework" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
@ -103,6 +104,8 @@
|
||||
<Reference Include="WPFToolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Update\Release.cs" />
|
||||
<Compile Include="Update\UpdateChecker.cs" />
|
||||
<Page Include="App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
|
11
appveyor.yml
11
appveyor.yml
@ -20,4 +20,13 @@ deploy:
|
||||
provider: NuGet
|
||||
api_key:
|
||||
secure: yybUOFgBuGVpbmOVZxsurC8OpkClzt9dR+/54WpMWcq6b6oyMatciaelRPnXsjRn
|
||||
artifact: /.*\.nupkg/
|
||||
artifact: nugetpackage
|
||||
on:
|
||||
branch: master
|
||||
|
||||
artifacts:
|
||||
- path: Output\Release
|
||||
name: release-binary
|
||||
|
||||
- path: '*.nupkg'
|
||||
name: nugetpackage
|
||||
|
Loading…
Reference in New Issue
Block a user