diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml new file mode 100644 index 0000000..6a67878 --- /dev/null +++ b/.github/workflows/build_test.yml @@ -0,0 +1,43 @@ +name: Build on release +on: + release: + types: created + +jobs: + build: + runs-on: windows-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Net + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + cache: true + + - name: Dowmload Powertoys + run: | + curl -L https://github.com/microsoft/PowerToys/releases/download/v0.84.0/PowerToysUserSetup-0.84.0-x64.exe -o powertoys.exe + run powertoys.exe -install -quiet -norestart + timeout /t 15 + mkdir lib + copy "%LOCALAPPDATA%\PowerToys\PowerToys.Common.UI.dll" "lib\PowerToys.Common.UI.dll" + copy "%LOCALAPPDATA%\PowerToys\PowerToys.ManagedCommon.dll" "lib\PowerToys.ManagedCommon.dll" + copy "%LOCALAPPDATA%\PowerToys\PowerToys.Settings.UI.Lib.dll" "lib\PowerToys.Settings.UI.Lib.dll" + copy "%LOCALAPPDATA%\PowerToys\Wox.Infrastructure.dll" "lib\Wox.Infrastructure.dll" + copy "%LOCALAPPDATA%\PowerToys\Wox.Plugin.dll" "lib\Wox.Plugin.dll" + + - name: Package + run: dotnet pack + + - name: Upload + uses: actions/upload-artifact@v4 + with: + # Artifact name + name: Translator_x64 + # A file, directory or wildcard pattern that describes what to upload + path: "bin/out" diff --git a/.gitignore b/.gitignore index c003b4b..1fb58d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ obj bin *.dll -lib .vs/ -src/lib \ No newline at end of file +src/lib +.idea diff --git a/readme.md b/README.md similarity index 100% rename from readme.md rename to README.md diff --git a/Translater.csproj b/Translater.csproj index 1111d94..fe42675 100644 --- a/Translater.csproj +++ b/Translater.csproj @@ -5,6 +5,7 @@ enable enable true + true false false true diff --git a/lib.bat b/lib.bat index 8f14bb8..8920887 100644 --- a/lib.bat +++ b/lib.bat @@ -1,5 +1,11 @@ -copy "C:\Program Files\PowerToys\PowerToys.Common.UI.dll" "lib\PowerToys.Common.UI.dll" -copy "C:\Program Files\PowerToys\PowerToys.ManagedCommon.dll" "lib\PowerToys.ManagedCommon.dll" -copy "C:\Program Files\PowerToys\PowerToys.Settings.UI.Lib.dll" "lib\PowerToys.Settings.UI.Lib.dll" -copy "C:\Program Files\PowerToys\Wox.Infrastructure.dll" "lib\Wox.Infrastructure.dll" -copy "C:\Program Files\PowerToys\Wox.Plugin.dll" "lib\Wox.Plugin.dll" \ No newline at end of file +mkdir -p -e lib +copy "C:\Program Files\PowerToys\PowerToys.Common.UI.dll" "lib\PowerToys.Common.UI.dll" /y +copy "C:\Program Files\PowerToys\PowerToys.ManagedCommon.dll" "lib\PowerToys.ManagedCommon.dll" /y +copy "C:\Program Files\PowerToys\PowerToys.Settings.UI.Lib.dll" "lib\PowerToys.Settings.UI.Lib.dll" /y +copy "C:\Program Files\PowerToys\Wox.Infrastructure.dll" "lib\Wox.Infrastructure.dll" /y +copy "C:\Program Files\PowerToys\Wox.Plugin.dll" "lib\Wox.Plugin.dll" /y +copy "%LOCALAPPDATA%\PowerToys.Common.UI.dll" "lib\PowerToys.Common.UI.dll" /y +copy "%LOCALAPPDATA%\PowerToys.ManagedCommon.dll" "lib\PowerToys.ManagedCommon.dll" /y +copy "%LOCALAPPDATA%\PowerToys.Settings.UI.Lib.dll" "lib\PowerToys.Settings.UI.Lib.dll" /y +copy "%LOCALAPPDATA%\Wox.Infrastructure.dll" "lib\Wox.Infrastructure.dll" /y +copy "%LOCALAPPDATA%\Wox.Plugin.dll" "lib\Wox.Plugin.dll" /y \ No newline at end of file diff --git a/lib/.gitignore b/lib/.gitignore new file mode 100644 index 0000000..5fb03d0 --- /dev/null +++ b/lib/.gitignore @@ -0,0 +1 @@ +./* \ No newline at end of file diff --git a/packages.lock.json b/packages.lock.json new file mode 100644 index 0000000..f9ae177 --- /dev/null +++ b/packages.lock.json @@ -0,0 +1,6 @@ +{ + "version": 1, + "dependencies": { + "net8.0-windows7.0": {} + } +} \ No newline at end of file diff --git a/src/SettingHelper.cs b/src/SettingHelper.cs index 6b08f24..963f9c3 100644 --- a/src/SettingHelper.cs +++ b/src/SettingHelper.cs @@ -4,27 +4,62 @@ namespace Translator { public class SettingHelper { - public static readonly List languagesKeys = new List { "auto", "zh-CHS", "zh-CHT", "en", "ja", "ko", "ru", "fr", "es", "ar", "de", "it", "he" }; - public static readonly List languagesOptions = new List { "auto", "Chinese (Simplified)", "Chinese (Traditional)", "English", "Japanese", "Korean", "Russian", "French", "Spanish", "Arabic", "German", "Italian", "Hebrew" }; - public static readonly List dictUrlPatternKeys = new List { "Youdao", "Oxford", "Cambridge" }; - public static readonly List dictUrlPatternValues = new List { "https://www.youdao.com/result?word={0}&lang=en", "https://www.oed.com/search/dictionary/?scope=Entries&q={0}", "https://dictionary.cambridge.org/us/dictionary/english/{0}" }; - public static readonly List pluginAdditionalOptions = GetAdditionalOptions(); - public string defaultLanguageKey = "auto"; - public bool enableSuggest = true; - public bool enableAutoRead = false; - public bool enableSecondLanuage = false; - public string secondLanuageKey = "auto"; - public bool showOriginalQuery = false; - public bool enableJumpToDict = false; - public string dictUtlPattern = dictUrlPatternValues[0]; + public static readonly List DictUrlPatternKeys = new List { "Youdao", "Oxford", "Cambridge" }; + public static readonly List DictUrlPatternValues = new List { "https://www.youdao.com/result?word={0}&lang=en", "https://www.oed.com/search/dictionary/?scope=Entries&q={0}", "https://dictionary.cambridge.org/us/dictionary/english/{0}" }; + public static readonly List PluginAdditionalOptions = GetAdditionalOptions(); + public string DefaultLanguageKey = "auto"; + public bool EnableSuggest = true; + public bool EnableAutoRead = false; + public bool EnableSecondLanuage = false; + public string SecondLanuageKey = "auto"; + public bool ShowOriginalQuery = false; + public bool EnableJumpToDict = false; + public string DictUtlPattern = DictUrlPatternValues[0]; - public static List GetAdditionalOptions() + public abstract class Languages { - var lanuageItems = languagesOptions.Select((val, idx) => + private static readonly Dictionary LanguageContrast = new Dictionary { - return new KeyValuePair(val, idx.ToString()); - }).ToList(); - var dictItems = dictUrlPatternKeys.Select((val, idx) => + { "auto", "auto" }, + { "zh-CHS", "Chinese (Simplified)" }, + { "zh-CHT", "Chinese (Traditional)" }, + { "en", "English" }, + { "ja", "Japanese" }, + { "ko", "Korean" }, + { "ru", "Russian" }, + { "fr", "French" }, + { "es", "Spanish" }, + { "ar", "Arabic" }, + { "de", "German" }, + { "it", "Italian" }, + { "he", "Hebrew" }, + }; + + private static readonly Dictionary LanguageAbbreviation = new Dictionary + { + { "zhs", "zh-CHS" }, + { "zht", "zh-CHT" }, + }; + + public static string MatchLanguageCode(string languageKey) + { + string defaultLanguageCode = "auto"; + languageKey = languageKey is null ? defaultLanguageCode : languageKey; + LanguageAbbreviation.TryGetValue(languageKey, out languageKey); + LanguageContrast.TryGetValue(languageKey, out defaultLanguageCode); + return defaultLanguageCode; + } + + public static List> ContrastList() + { + return LanguageContrast.ToList(); + } + } + + public static List GetAdditionalOptions() + { + var lanuageItems = Languages.ContrastList(); + var dictItems = DictUrlPatternKeys.Select((val, idx) => { return new KeyValuePair(val, idx.ToString()); }).ToList(); diff --git a/src/TranslateHelper.cs b/src/TranslateHelper.cs index 54031a3..47d5174 100644 --- a/src/TranslateHelper.cs +++ b/src/TranslateHelper.cs @@ -2,6 +2,8 @@ using Wox.Plugin.Logger; using Translator.Utils; using System.Windows.Media; +using Translator.Youdao; + namespace Translator; public class TranslateFailedException : Exception @@ -16,6 +18,11 @@ public class TranslateHelper { public struct TranslateTarget { + public TranslateTarget(string source, string target) + { + src = source; + target = SettingHelper.Languages.MatchLanguageCode(target); + } public string src; public string toLan; } @@ -24,7 +31,7 @@ public struct TranslateTarget private object initLock = new Object(); private long lastInitTime = 0; private IPublicAPI publicAPI; - private List translators; + private List translators; private List translatorTypes; private bool isSpeaking = false; private bool isIniting = false; @@ -35,7 +42,7 @@ public TranslateHelper(IPublicAPI publicAPI, string defaultLanguageKey = "auto") null, null, null }; translatorTypes = new List{ - typeof(Youdao.V2.YoudaoTranslator), + typeof(Translator), typeof(Youdao.old.YoudaoTranslator), typeof(Youdao.Backup.BackUpTranslator) }; @@ -72,7 +79,7 @@ public List QueryTranslate(string raw, string translateFrom = "user var target = ParseRawSrc(raw); string src = target.src; string toLan = toLanuage ?? target.toLan; - Youdao.ITranslateResult? translateResult = null; + Translator.Youdao.ITranslateResult? translateResult = null; int idx = 0; translateResult = this.translators.FirstNotNoneCast((it) => { @@ -199,7 +206,7 @@ public bool InitTranslater() try { var tran = tp.GetConstructor(Type.EmptyTypes)?.Invoke(null); - this.translators[idx] = tran as Youdao.ITranslator; + this.translators[idx] = tran as Translator.Youdao.ITranslator; } catch (Exception ex) { diff --git a/src/Translator.cs b/src/Translator.cs index 6c50034..5ac3edb 100644 --- a/src/Translator.cs +++ b/src/Translator.cs @@ -25,7 +25,7 @@ public class Translator : IPlugin, IDisposable, IDelayedExecutionPlugin, ISettin public string Name => "Translator"; public static string PluginID => "EY1EBAMTNIWIVLYM039DSOS5MWITDJOD"; public string Description => "A simple translation plugin, based on Youdao Translation"; - public IEnumerable AdditionalOptions => SettingHelper.pluginAdditionalOptions; + public IEnumerable AdditionalOptions => SettingHelper.PluginAdditionalOptions; public PluginMetadata? queryMetaData = null; public IPublicAPI? publicAPI = null; public const int delayQueryMillSecond = 500; @@ -186,7 +186,7 @@ public List Query(Query query, bool delayedExecution) // get suggest in other thread Task>? suggestTask = null; - if (settingHelper.enableSuggest) + if (settingHelper.EnableSuggest) { suggestTask = Task.Run(() => { @@ -196,11 +196,11 @@ public List Query(Query query, bool delayedExecution) // get second translate result in other thread Task>? secondTranslateTask = null; - if (settingHelper.enableSecondLanuage && settingHelper.secondLanuageKey != null) + if (settingHelper.EnableSecondLanuage && settingHelper.SecondLanuageKey != null) { secondTranslateTask = Task.Run(() => { - return translateHelper!.QueryTranslate(querySearch, toLanuage: settingHelper.secondLanuageKey); + return translateHelper!.QueryTranslate(querySearch, toLanuage: settingHelper.SecondLanuageKey); }); } @@ -220,7 +220,7 @@ public List Query(Query query, bool delayedExecution) res.AddRange(suggest); } - if (settingHelper.showOriginalQuery) + if (settingHelper.ShowOriginalQuery) { res.Add(new ResultItem { @@ -243,7 +243,7 @@ public List Query(Query query, bool delayedExecution) }); } - if (settingHelper.enableAutoRead) + if (settingHelper.EnableAutoRead) { this.translateHelper?.Read(res.FirstOrDefault()?.Title); } @@ -273,7 +273,7 @@ public void Init(PluginInitContext context) publicAPI = context.API; var translaTask = Task.Factory.StartNew(() => { - translateHelper = new TranslateHelper(publicAPI, this.settingHelper.defaultLanguageKey); + translateHelper = new TranslateHelper(publicAPI, this.settingHelper.DefaultLanguageKey); }); suggestHelper = new Suggest.SuggestHelper(publicAPI); historyHelper = new History.HistoryHelper(); @@ -306,7 +306,7 @@ public void UpdateSettings(PowerLauncherPluginSettings settings) this.settingHelper.UpdateSettings(settings); if (this.translateHelper != null) - this.translateHelper.defaultLanguageKey = this.settingHelper.defaultLanguageKey; + this.translateHelper.defaultLanguageKey = this.settingHelper.DefaultLanguageKey; } public List LoadContextMenus(Result selectedResult) { @@ -340,7 +340,7 @@ public List LoadContextMenus(Result selectedResult) } }; - if (settingHelper.enableJumpToDict) + if (settingHelper.EnableJumpToDict) { contextMenu.Add( new ContextMenuResult @@ -348,7 +348,7 @@ public List LoadContextMenus(Result selectedResult) Title = "Go to dictionary", Action = context => { - Helper.OpenInShell(string.Format(settingHelper.dictUtlPattern, selectedResult.Title)); + Helper.OpenInShell(string.Format(settingHelper.DictUtlPattern, selectedResult.Title)); return false; }, Glyph = "\xE721", diff --git a/src/Youdao/YoudaoTranslatorV2.cs b/src/Youdao/YoudaoTranslatorV2.cs index 79920a7..0eba714 100644 --- a/src/Youdao/YoudaoTranslatorV2.cs +++ b/src/Youdao/YoudaoTranslatorV2.cs @@ -8,7 +8,7 @@ using Translator.Utils; using Wox.Plugin.Logger; -namespace Translator.Youdao.V2; +namespace Translator.Youdao; public class KeyResponse {