diff --git a/BetterLyrics.Core/BetterLyrics.Core.csproj b/BetterLyrics.Core/BetterLyrics.Core.csproj
index b760144..49579d5 100644
--- a/BetterLyrics.Core/BetterLyrics.Core.csproj
+++ b/BetterLyrics.Core/BetterLyrics.Core.csproj
@@ -1,9 +1,12 @@
-
- net10.0
- enable
- enable
-
+
+ net10.0-windows10.0.26100.0
+ enable
+ enable
+ win-x86;win-x64;win-arm64
+ false
+ runtime
+
diff --git a/BetterLyrics.Plugins.Demo/BetterLyrics.Plugins.Demo.csproj b/BetterLyrics.Plugins.Demo/BetterLyrics.Plugins.Demo.csproj
index 7a7889d..0af2f6d 100644
--- a/BetterLyrics.Plugins.Demo/BetterLyrics.Plugins.Demo.csproj
+++ b/BetterLyrics.Plugins.Demo/BetterLyrics.Plugins.Demo.csproj
@@ -1,13 +1,13 @@
-
- net10.0
- enable
- enable
-
+
+ net10.0-windows10.0.26100.0
+ enable
+ enable
+
-
-
-
+
+
+
diff --git a/BetterLyrics.Plugins.Romaji/BetterLyrics.Plugins.Romaji.csproj b/BetterLyrics.Plugins.Romaji/BetterLyrics.Plugins.Romaji.csproj
index 7e8c132..de13f63 100644
--- a/BetterLyrics.Plugins.Romaji/BetterLyrics.Plugins.Romaji.csproj
+++ b/BetterLyrics.Plugins.Romaji/BetterLyrics.Plugins.Romaji.csproj
@@ -1,101 +1,108 @@
-
- net10.0
- enable
- enable
-
+
+ net10.0-windows10.0.26100.0
+ enable
+ enable
+ 10.0.19041.0
+ win-x86;win-x64;win-arm64
+ true
+ true
+
-
-
- contentFiles\any\any\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
- contentFiles\any\any\unidic\
- Always
- true
- true
-
-
+
+
+ contentFiles\any\any\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
+ contentFiles\any\any\unidic\
+ Always
+ true
+ true
+
+
-
-
-
-
+
+
+ false
+ runtime
+
+
+
diff --git a/BetterLyrics.Plugins.Romaji/RomajiPlugin.cs b/BetterLyrics.Plugins.Romaji/RomajiPlugin.cs
index 6b7ed9b..7402ca2 100644
--- a/BetterLyrics.Plugins.Romaji/RomajiPlugin.cs
+++ b/BetterLyrics.Plugins.Romaji/RomajiPlugin.cs
@@ -26,7 +26,7 @@ namespace BetterLyrics.Plugins.Romaji
if (targetLangCode == "ja-latin")
{
var lines = RomajiHelper.ToRomaji(text);
- result = string.Join("\r\n", lines.Select(p => string.Join(" ", p.Units.Select(q => q.Romaji))));
+ result = string.Join("\n", lines.Select(p => string.Join(" ", p.Units.Select(q => q.Romaji))));
}
return Task.FromResult(result);
}
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest b/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest
index f995fdb..6a29d09 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest
@@ -12,7 +12,7 @@
+ Version="1.2.265.0" />
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PlaybackSettingsControl.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PlaybackSettingsControl.xaml
index 8003fce..0426cbc 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PlaybackSettingsControl.xaml
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PlaybackSettingsControl.xaml
@@ -424,30 +424,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PluginManagerControl.xaml.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PluginManagerControl.xaml.cs
index 61a8890..2a6f8b1 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PluginManagerControl.xaml.cs
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PluginManagerControl.xaml.cs
@@ -95,7 +95,7 @@ namespace BetterLyrics.WinUI3.Controls
ContentDialog deleteDialog = new ContentDialog
{
XamlRoot = this.XamlRoot,
- Title = "卸载插件?",
+ Title = "卸载插件",
Content = $"确定要删除 \"{plugin.Name}\" 吗?此操作无法撤销。",
PrimaryButtonText = "删除",
CloseButtonText = "取消",
@@ -108,9 +108,7 @@ namespace BetterLyrics.WinUI3.Controls
{
try
{
- // TODO: 在 PluginService 里加一个 UninstallPlugin 方法
- // 逻辑:找到插件对应文件夹,Directory.Delete(path, true)
- // _pluginService.UninstallPlugin(plugin.Id);
+ _pluginService.UninstallPlugin(plugin.Id);
// 暂时我们只能刷新列表演示
RefreshPluginList();
@@ -131,7 +129,7 @@ namespace BetterLyrics.WinUI3.Controls
XamlRoot = this.XamlRoot,
Title = title,
Content = content,
- CloseButtonText = "好"
+ CloseButtonText = "关闭"
};
await dialog.ShowAsync();
}
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/Settings/TranslationSettings.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/Settings/TranslationSettings.cs
index 2231a7e..2a92cae 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/Settings/TranslationSettings.cs
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/Settings/TranslationSettings.cs
@@ -13,7 +13,6 @@ namespace BetterLyrics.WinUI3.Models.Settings
[ObservableProperty][NotifyPropertyChangedRecipients] public partial ChineseRomanization ChineseRomanization { get; set; }
[ObservableProperty][NotifyPropertyChangedRecipients] public partial bool IsChineseRomanizationEnabled { get; set; } = false;
[ObservableProperty][NotifyPropertyChangedRecipients] public partial bool IsJapaneseRomanizationEnabled { get; set; } = false;
- [ObservableProperty][NotifyPropertyChangedRecipients] public partial string CutletDockerServer { get; set; } = string.Empty;
[ObservableProperty][NotifyPropertyChangedRecipients] public partial bool IsTraditionalChineseEnabled { get; set; } = false;
public TranslationSettings() { }
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/GSMTCService/GSMTCService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/GSMTCService/GSMTCService.cs
index 9f04232..116c617 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/GSMTCService/GSMTCService.cs
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/GSMTCService/GSMTCService.cs
@@ -697,10 +697,6 @@ namespace BetterLyrics.WinUI3.Services.GSMTCService
_logger.LogInformation("Target LibreTranslate language code changed: {code}", _settingsService.AppSettings.TranslationSettings.SelectedTargetLanguageCode);
UpdateLyrics();
}
- else if (message.PropertyName == nameof(TranslationSettings.CutletDockerServer))
- {
- UpdateLyrics();
- }
else if (message.PropertyName == nameof(TranslationSettings.LibreTranslateServer))
{
UpdateLyrics();
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PluginService/PluginLoadContext.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PluginService/PluginLoadContext.cs
index 655974c..42349f5 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PluginService/PluginLoadContext.cs
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PluginService/PluginLoadContext.cs
@@ -18,37 +18,25 @@ namespace BetterLyrics.WinUI3.Services.PluginService
protected override Assembly? Load(AssemblyName assemblyName)
{
- var sharedAssemblies = new HashSet
- {
- "BetterLyrics.Core",
- "Microsoft.WindowsAppSDK",
- "Microsoft.UI",
- "Microsoft.UI.Xaml",
- "Microsoft.Graphics",
- "System.Runtime",
- "Newtonsoft.Json"
- };
-
- if (assemblyName.Name == null || sharedAssemblies.Contains(assemblyName.Name))
- {
- return null;
- }
-
- string? assemblyPath = _resolver.ResolveAssemblyToPath(assemblyName);
+ var assemblyPath = _resolver.ResolveAssemblyToPath(assemblyName);
if (assemblyPath != null)
{
return LoadFromAssemblyPath(assemblyPath);
}
+
+ // return null to use the default AssemblyLoadContext
return null;
}
protected override IntPtr LoadUnmanagedDll(string unmanagedDllName)
{
- string? libraryPath = _resolver.ResolveUnmanagedDllToPath(unmanagedDllName);
+ var libraryPath = _resolver.ResolveUnmanagedDllToPath(unmanagedDllName);
if (libraryPath != null)
{
return LoadUnmanagedDllFromPath(libraryPath);
}
+
+ // return IntPtr.Zero to use the default AssemblyLoadContext
return IntPtr.Zero;
}
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PluginService/PluginService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PluginService/PluginService.cs
index 90e7b31..1e3a76d 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PluginService/PluginService.cs
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/PluginService/PluginService.cs
@@ -1,28 +1,28 @@
using BetterLyrics.Core.Interfaces;
+using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
-using System.Reflection;
-using System.Runtime.Loader; // 必须引用
using Windows.Storage;
namespace BetterLyrics.WinUI3.Services.PluginService
{
public class PluginService : IPluginService
{
- // 1. 核心插件列表
private List _plugins = new();
public IReadOnlyList Plugins => _plugins;
-
- // 2. 新增:上下文管理字典 (Key: 插件ID, Value: 加载上下文)
- // 我们需要存着它,以便将来执行 Unload
private Dictionary _pluginContexts = new();
-
- // 3. 新增:已加载的文件路径缓存 (防止同一个 DLL 被扫两遍)
private HashSet _loadedDllPaths = new();
+ private readonly ILogger _logger;
+
+ public PluginService(ILogger logger)
+ {
+ _logger = logger;
+ }
+
public void LoadPlugins()
{
string pluginsRoot = Path.Combine(ApplicationData.Current.LocalFolder.Path, "plugins");
@@ -36,8 +36,6 @@ namespace BetterLyrics.WinUI3.Services.PluginService
foreach (var dllPath in dllFiles)
{
- // 🔥 防御 1:基于路径的检查
- // 如果这个文件已经在内存里了,绝对不要再 Load 一次
if (_loadedDllPaths.Contains(dllPath)) continue;
TryLoadPlugin(dllPath);
@@ -49,24 +47,17 @@ namespace BetterLyrics.WinUI3.Services.PluginService
{
try
{
- // 创建上下文
var loadContext = new PluginLoadContext(dllPath);
-
- // 加载程序集
var assembly = loadContext.LoadFromAssemblyPath(dllPath);
-
bool isPluginFound = false;
foreach (var type in assembly.GetExportedTypes())
{
if (typeof(IPlugin).IsAssignableFrom(type) && !type.IsAbstract)
{
- // 实例化
var plugin = (IPlugin?)Activator.CreateInstance(type);
if (plugin == null) continue;
- // 🔥 防御 2:基于 ID 的检查
- // 防止 "不同 DLL 或者是新版本" 导致 ID 冲突
if (_plugins.Any(p => p.Id == plugin.Id))
{
// 遇到重复 ID,我们选择跳过新的,保留旧的
@@ -76,43 +67,36 @@ namespace BetterLyrics.WinUI3.Services.PluginService
return;
}
- // 初始化插件 (如果有 Initialize 方法)
try
{
plugin.Initialize();
}
catch (Exception initEx)
{
- // 如果初始化失败(比如缺字典文件),就不应该把它加到列表里
- // 记录日志...
+ _logger.LogError(initEx, "Failed to initialize plugin {id} from {path}", plugin.Id, dllPath);
loadContext.Unload();
return;
}
- // ✅ 成功入库
_plugins.Add(plugin);
- _pluginContexts.Add(plugin.Id, loadContext); // 记录上下文
+ _pluginContexts.Add(plugin.Id, loadContext);
isPluginFound = true;
}
}
- // 如果这个 DLL 里找到了插件,标记路径为已加载
if (isPluginFound)
{
_loadedDllPaths.Add(dllPath);
}
else
{
- // 如果这个 DLL 里一个插件都没找到 (可能是依赖库),
- // 为了节省内存,我们可以把这个 Context 卸载掉
- // (前提是其他插件不依赖它,这块比较复杂,简单起见可以先卸载)
+ _logger.LogWarning("No valid plugin types found in assembly {path}", dllPath);
loadContext.Unload();
}
}
catch (Exception ex)
{
- // 记录日志...
- // throw new Exception($"Failed to load plugin from {dllPath}: {ex.Message}", ex);
+ _logger.LogError(ex, "Failed to load plugin from {path}", dllPath);
}
}
@@ -121,39 +105,30 @@ namespace BetterLyrics.WinUI3.Services.PluginService
var plugin = _plugins.FirstOrDefault(p => p.Id == pluginId);
if (plugin == null) return;
- // 1. 获取相关信息
var dllPath = plugin.GetType().Assembly.Location;
var folderPath = Path.GetDirectoryName(dllPath);
- // 2. 从列表中移除插件对象
_plugins.Remove(plugin);
- _loadedDllPaths.Remove(dllPath); // 允许下次重新加载这个路径
+ _loadedDllPaths.Remove(dllPath);
- // 3. 💥 核心:卸载上下文 (释放文件锁的关键)
if (_pluginContexts.TryGetValue(pluginId, out var context))
{
context.Unload();
_pluginContexts.Remove(pluginId);
}
- // 4. 强制 GC (垃圾回收)
- // 上下文卸载是“软卸载”,必须等 GC 跑过之后,文件锁才会真正释放
- // 这几行代码对于“热删除”非常重要
GC.Collect();
GC.WaitForPendingFinalizers();
- // 5. 物理删除文件
if (Directory.Exists(folderPath))
{
try
{
Directory.Delete(folderPath, true);
}
- catch (IOException)
+ catch (IOException ex)
{
- // 如果 GC 还没来得及释放锁,可能会报错
- // 实际生产中,通常是标记为“待删除”,下次重启时删
- // 或者提示用户重启
+ _logger.LogError(ex, "Failed to delete plugin folder {}", folderPath);
}
}
}
@@ -164,9 +139,6 @@ namespace BetterLyrics.WinUI3.Services.PluginService
string folderName = Path.GetFileNameWithoutExtension(zipPath);
string installDir = Path.Combine(pluginsRoot, folderName);
- // 如果已经存在,说明是更新或者重装
- // 我们需要先根据文件夹找到旧插件的 ID,然后执行标准的卸载流程
- // (这里简化处理:直接尝试删文件夹,如果删不掉说明被占用)
if (Directory.Exists(installDir))
{
// TODO: 最好是先 Find plugin by path -> UninstallPlugin(id)
@@ -175,14 +147,15 @@ namespace BetterLyrics.WinUI3.Services.PluginService
{
Directory.Delete(installDir, true);
}
- catch { /* 忽略或报错 */ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Failed to delete existing plugin folder {}", installDir);
+ throw;
+ }
}
+
Directory.CreateDirectory(installDir);
-
ZipFile.ExtractToDirectory(zipPath, installDir);
-
- // 安装完后,如果不重启软件,你想立即生效的话:
- // LoadPlugins(); // 因为加了路径去重,这里重新调一次是安全的
}
}
}
\ No newline at end of file
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ar/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ar/Resources.resw
index c1d19bf..a1bdc5e 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ar/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ar/Resources.resw
@@ -936,9 +936,6 @@
بعد الاستيراد الناجح، سيقوم البرنامج بإعادة التشغيل تلقائياً
-
- ستعطى الأولوية لقراءة النقل الصوتي داخل ملف الكلمات، وإذا لم يوجد تطابق، سيتم طلب نقل صوتي آلي من خادم cutlet-docker
-
الصوتيات اليابانية
@@ -1266,6 +1263,9 @@
اختصار التشغيل والإيقاف المؤقت
+
+
+
اختصار الأغنية السابقة
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/de/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/de/Resources.resw
index 446d613..4736e60 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/de/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/de/Resources.resw
@@ -936,9 +936,6 @@
Die App startet nach erfolgreichem Import automatisch neu
-
- Priorisiere Transliterationen innerhalb des Songtextes; falls keine Übereinstimmung gefunden wird, fordere maschinelle Transliteration vom cutlet-docker-Server an
-
Japanische Lautschrift
@@ -1266,6 +1263,9 @@
Tastenkürzel für Wiedergabe/Pause
+
+
+
Tastenkürzel für vorherigen Titel
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en/Resources.resw
index 5c8a61e..c0fddd9 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en/Resources.resw
@@ -936,9 +936,6 @@
The app will restart automatically after successful import
-
- Prioritize reading transliteration within lyrics; if no match, request machine transliteration from cutlet-docker server
-
Japanese Phonetic
@@ -1266,6 +1263,9 @@
Play/Pause Shortcut
+
+ Plugins
+
Previous Track Shortcut
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/es/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/es/Resources.resw
index de88221..e6ad843 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/es/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/es/Resources.resw
@@ -936,9 +936,6 @@
La aplicación se reiniciará automáticamente después de una importación exitosa
-
- Priorizar la lectura de transliteración dentro de la letra; si no hay coincidencia, solicitar transliteración automática al servidor cutlet-docker
-
Fonética japonesa
@@ -1266,6 +1263,9 @@
Atajo de Reproducir/Pausar
+
+
+
Atajo de pista anterior
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/fr/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/fr/Resources.resw
index 1c0b754..5548217 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/fr/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/fr/Resources.resw
@@ -936,9 +936,6 @@
L'application redémarrera automatiquement après une importation réussie
-
- Prioriser la lecture de la translittération dans les paroles ; si aucune correspondance, demander une translittération automatique au serveur cutlet-docker
-
Phonétique japonaise
@@ -1266,6 +1263,9 @@
Raccourci Lecture/Pause
+
+
+
Raccourci piste précédente
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/hi/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/hi/Resources.resw
index 469446c..c3ca7cc 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/hi/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/hi/Resources.resw
@@ -936,9 +936,6 @@
सफल आयात के बाद, प्रोग्राम स्वचालित रूप से पुनरारंभ हो जाएगा
-
- बोल के भीतर लिप्यंतरण पढ़ने को प्राथमिकता दी जाएगी, यदि कोई मेल नहीं मिलता है तो cutlet-docker सर्वर से मशीनी लिप्यंतरण का अनुरोध किया जाएगा
-
जापानी ध्वन्यात्मकता
@@ -1266,6 +1263,9 @@
प्ले और पॉज़ शॉर्टकट
+
+
+
पिछला ट्रैक शॉर्टकट
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/id/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/id/Resources.resw
index 6ca5967..4cc5e65 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/id/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/id/Resources.resw
@@ -936,9 +936,6 @@
Setelah impor berhasil, program akan dimuat ulang secara otomatis
-
- Akan memprioritaskan membaca transliterasi di dalam lirik, jika tidak ada kecocokan maka akan meminta transliterasi mesin dari server cutlet-docker
-
Fonetik Bahasa Jepang
@@ -1266,6 +1263,9 @@
Pintasan Putar dan Jeda
+
+
+
Pintasan Lagu Sebelumnya
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja/Resources.resw
index 2da5dd8..81782f6 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja/Resources.resw
@@ -936,9 +936,6 @@
インポートが成功すると、アプリは自動的に再起動します
-
- 歌詞内の音訳を優先します。一致しない場合は、cutlet-docker サーバーからマシンの音訳を要求します
-
ローマ字ルビ
@@ -1266,6 +1263,9 @@
再生/一時停止のショートカットキー
+
+
+
次のトラックのショートカットキー
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko/Resources.resw
index 758ebf8..95dafcb 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko/Resources.resw
@@ -936,9 +936,6 @@
가져오기가 성공하면 프로그램이 자동으로 다시 시작됩니다
-
- 가사 내의 발음 표기를 우선적으로 읽습니다. 일치하는 항목이 없으면 cutlet-docker 서버에 기계 음역을 요청합니다
-
일본어 발음 표기
@@ -1266,6 +1263,9 @@
재생 및 일시정지 단축키
+
+
+
이전 곡 단축키
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ms/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ms/Resources.resw
index 196a23c..1405f98 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ms/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ms/Resources.resw
@@ -936,9 +936,6 @@
Selepas import berjaya, program akan dimulakan semula secara automatik
-
- Akan mengutamakan pembacaan transliterasi dalam lirik, jika tiada padanan maka akan meminta transliterasi mesin daripada pelayan cutlet-docker
-
Fonetik Bahasa Jepun
@@ -1266,6 +1263,9 @@
Pintasan Main dan Jeda
+
+
+
Pintasan Lagu Sebelumnya
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/pt/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/pt/Resources.resw
index 968a4e8..9567629 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/pt/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/pt/Resources.resw
@@ -936,9 +936,6 @@
Após a importação bem-sucedida, o programa será reiniciado automaticamente
-
- Dará prioridade à leitura da transliteração dentro da letra; se não houver correspondência, solicitará transliteração automática ao servidor cutlet-docker
-
Fonética Japonesa
@@ -1266,6 +1263,9 @@
Atalho para Reproduzir e Pausar
+
+
+
Atalho para Faixa Anterior
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ru/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ru/Resources.resw
index 6e8b8b2..258b53e 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ru/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ru/Resources.resw
@@ -936,9 +936,6 @@
После успешного импорта приложение перезапустится автоматически
-
- Приоритет отдается чтению транслитерации внутри текста; если совпадений нет, запрашивается машинная транслитерация у сервера cutlet-docker
-
Японская фонетика
@@ -1266,6 +1263,9 @@
Горячая клавиша Воспроизведение/Пауза
+
+
+
Горячая клавиша предыдущего трека
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/th/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/th/Resources.resw
index f74d6d3..39c484a 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/th/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/th/Resources.resw
@@ -936,9 +936,6 @@
หลังจากนำเข้าสำเร็จ โปรแกรมจะรีสตาร์ทอัตโนมัติ
-
- จะให้ความสำคัญกับการอ่านคำอ่านในเนื้อเพลงก่อน หากไม่พบจะขอคำอ่านจากเครื่องผ่านเซิร์ฟเวอร์ cutlet-docker
-
คำอ่านภาษาญี่ปุ่น
@@ -1266,6 +1263,9 @@
ทางลัดเล่นและหยุดชั่วคราว
+
+
+
ทางลัดเพลงก่อนหน้า
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/vi/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/vi/Resources.resw
index dd98eb8..c6da49d 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/vi/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/vi/Resources.resw
@@ -936,9 +936,6 @@
Sau khi nhập thành công, chương trình sẽ tự động khởi động lại
-
- Sẽ ưu tiên đọc phiên âm trong lời bài hát, nếu không khớp sẽ yêu cầu phiên âm máy từ máy chủ cutlet-docker
-
Phiên âm tiếng Nhật
@@ -1266,6 +1263,9 @@
Phím tắt phát và tạm dừng
+
+
+
Phím tắt bài hát trước
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-Hans/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-Hans/Resources.resw
index 7f8e242..028bf97 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-Hans/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-Hans/Resources.resw
@@ -936,9 +936,6 @@
导入成功后,该程序将自动重新启动
-
- 将优先读取歌词内音译,若无匹配则向 cutlet-docker 服务器请求机器音译
-
日语注音
@@ -1266,6 +1263,9 @@
播放与暂停快捷键
+
+ 插件
+
上一曲目快捷键
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-Hant/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-Hant/Resources.resw
index 2a81db3..566d867 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-Hant/Resources.resw
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-Hant/Resources.resw
@@ -936,9 +936,6 @@
匯入成功後,該程式將自動重新啟動
-
- 將優先讀取歌詞內音譯,若無符合則向 cutlet-docker 伺服器請求機器音譯
-
日語注音
@@ -1266,6 +1263,9 @@
播放與暫停快速鍵
+
+
+
上一曲目快速鍵
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/PlaybackSettingsControlViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/PlaybackSettingsControlViewModel.cs
index a182d7f..4d5bd57 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/PlaybackSettingsControlViewModel.cs
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/PlaybackSettingsControlViewModel.cs
@@ -39,9 +39,6 @@ namespace BetterLyrics.WinUI3.ViewModels
[ObservableProperty]
public partial bool IsLibreTranslateServerTesting { get; set; } = false;
- [ObservableProperty]
- public partial bool IsCutletDockerServerTesting { get; set; } = false;
-
[ObservableProperty]
public partial bool IsLXMusicServerTesting { get; set; } = false;
@@ -125,35 +122,6 @@ namespace BetterLyrics.WinUI3.ViewModels
});
}
- [RelayCommand]
- private void CutletDockerServerTest()
- {
- IsCutletDockerServerTesting = true;
- Task.Run(async () =>
- {
- try
- {
- string result = await _transliterationService.TransliterateText(
- "こんにちは", PhoneticHelper.RomanCode, new System.Threading.CancellationToken());
- _dispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, () =>
- {
- ToastHelper.ShowToast("SettingsPageServerTestSuccessInfo", null, InfoBarSeverity.Success);
- });
- }
- catch (Exception)
- {
- _dispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, () =>
- {
- ToastHelper.ShowToast("SettingsPageServerTestFailedInfo", null, InfoBarSeverity.Error);
- });
- }
- _dispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, () =>
- {
- IsCutletDockerServerTesting = false;
- });
- });
- }
-
[RelayCommand]
private async Task LastFMAuthAsync()
{
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/SettingsPage.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/SettingsPage.xaml
index f6f043d..9b061e8 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/SettingsPage.xaml
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/SettingsPage.xaml
@@ -57,7 +57,7 @@
Tag="Stats" />
diff --git a/BetterLyrics.sln b/BetterLyrics.sln
index a75fea7..2e14916 100644
--- a/BetterLyrics.sln
+++ b/BetterLyrics.sln
@@ -13,8 +13,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColorThief.WinUI3", "ColorT
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BetterLyrics.Core", "BetterLyrics.Core\BetterLyrics.Core.csproj", "{0F47FE6F-D0AA-49E5-8F33-78DFDEB1F810}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BetterLyrics.Plugins.Demo", "BetterLyrics.Plugins.Demo\BetterLyrics.Plugins.Demo.csproj", "{87D235CA-4311-4766-8186-AD9B193DFABC}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BetterLyrics.Plugins.Romaji", "BetterLyrics.Plugins.Romaji\BetterLyrics.Plugins.Romaji.csproj", "{DD2D477F-94CD-4D4B-8B59-C127F2850E34}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RomajiConverter.Core", "RomajiConverter.Core\RomajiConverter.Core.csproj", "{351807DB-CD63-B939-8071-B1FBFF969569}"
@@ -95,18 +93,6 @@ Global
{0F47FE6F-D0AA-49E5-8F33-78DFDEB1F810}.Release|x64.Build.0 = Release|Any CPU
{0F47FE6F-D0AA-49E5-8F33-78DFDEB1F810}.Release|x86.ActiveCfg = Release|Any CPU
{0F47FE6F-D0AA-49E5-8F33-78DFDEB1F810}.Release|x86.Build.0 = Release|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Debug|ARM64.ActiveCfg = Debug|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Debug|ARM64.Build.0 = Debug|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Debug|x64.ActiveCfg = Debug|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Debug|x64.Build.0 = Debug|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Debug|x86.ActiveCfg = Debug|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Debug|x86.Build.0 = Debug|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Release|ARM64.ActiveCfg = Release|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Release|ARM64.Build.0 = Release|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Release|x64.ActiveCfg = Release|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Release|x64.Build.0 = Release|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Release|x86.ActiveCfg = Release|Any CPU
- {87D235CA-4311-4766-8186-AD9B193DFABC}.Release|x86.Build.0 = Release|Any CPU
{DD2D477F-94CD-4D4B-8B59-C127F2850E34}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{DD2D477F-94CD-4D4B-8B59-C127F2850E34}.Debug|ARM64.Build.0 = Debug|Any CPU
{DD2D477F-94CD-4D4B-8B59-C127F2850E34}.Debug|x64.ActiveCfg = Debug|Any CPU
diff --git a/RomajiConverter.Core/Helpers/RomajiAIHelper.cs b/RomajiConverter.Core/Helpers/RomajiAIHelper.cs
deleted file mode 100644
index b91c88e..0000000
--- a/RomajiConverter.Core/Helpers/RomajiAIHelper.cs
+++ /dev/null
@@ -1,239 +0,0 @@
-using OpenAI;
-using OpenAI.Chat;
-using RomajiConverter.Core.Models;
-using RomajiConverter.Core.Options;
-using System;
-using System.ClientModel;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace RomajiConverter.Core.Helpers
-{
- public static class RomajiAIHelper
- {
- public const string Prompt = @"用户将输入一段日文歌词,你需要逐词转换为以下格式:
-- 每行输出必须严格对应每行输入,禁止额外添加换行,禁止输出空行,不能因为遇到标点符号而换行,换行符必须使用单个\n
-- 对每行日文进行分词处理,分词应以现代日语常规形态(助词、助动词、词尾变化)为最小单位
-- 如果一个分词是日文且包含汉字,则需要给出平假名,用小括号在原文后标注,格式为:日文分词(平假名)。禁止在分词中间标注假名(例:x(xx)xx),要么标注整个分词的假名,要么将标注之后的部分拆分为新的分词
-- 纯假名分词不添加任何假名标注
-- 遇到仅当 は/へ/を 作为独立分词并起语法助词作用时,在后面添加“|”以及它的口语化假名,非助词情况下只输出原文
-- 遇到英文单词/字母、数字、标点符号、特殊符号、等非日文的unicode字符时,必须保留且单独作为一个分词,必须只输出原文,不能给出平假名
-- 每个分词之间必须用半角空格分隔
-- 如果无法确定某分词是否为助词或其读音,请优先保持原文不转换
-- 不要包含任何解释、注释、Markdown、额外字段或文本
-- 示例仅供参考,不能直接输出,任何时候都需要根据上面给出的文本进行转换
-示例:
-输入:昨日はColdな夜へ行を歌った
-输出:昨日(きのう) は|わ Cold な 夜(よる) へ|え 行(い) を|お 歌った(うたった)";
-
- private static Regex _formatRegex = new Regex(@"^(.*?)(\((.*?)\))*?(\|(.*?))*?$", RegexOptions.Compiled);
-
- private static ChatCompletionOptions _chatCompletionOptions = new ChatCompletionOptions
- {
- Temperature = 0.2f
- };
-
- public static async Task LoadRomajiAsync(ICollection convertedLines, string text, ToRomajiAIOptions options, CancellationToken cancellationToken = default)
- {
- //预处理为ConvertedLine列表, 其中会包含空行
- var cacheList = GetCacheList(options, text);
-
- if (cacheList.Count == 0) return;
-
- //获取ai结果
- var client = new ChatClient(
- model: options.Model,
- credential: new ApiKeyCredential(options.ApiKey),
- options: new OpenAIClientOptions
- {
- Endpoint = new Uri(options.BaseUrl)
- }
- );
-
- var prompt = string.IsNullOrEmpty(options.Prompt) ? Prompt : options.Prompt;
- //发送的内容不包含空行
- var content = string.Join("\n", cacheList.Where(p => !string.IsNullOrWhiteSpace(p.Japanese)).Select(p => p.Japanese));
-
- var messages = new List
- {
- new SystemChatMessage(prompt),
- new UserChatMessage(content)
- };
-
- Debug.WriteLine(prompt);
- Debug.WriteLine(content);
-
- var completionUpdates = client.CompleteChatStreamingAsync(messages, _chatCompletionOptions, cancellationToken: cancellationToken);
-
- var stringBuilder = new StringBuilder();
- ushort lineIndex = 0;
- var l = 0;
- var r = 0;
-
- //插入直到下一个非空行
- AddNextNotEmptyLine();
-
- //处理流式返回
- var enumerator = completionUpdates.GetAsyncEnumerator(cancellationToken);
- try
- {
- while (await enumerator.MoveNextAsync())
- {
- var completionUpdate = enumerator.Current;
- if (completionUpdate.ContentUpdate.Count > 0)
- {
- var delta = FixFormat(completionUpdate.ContentUpdate[0].Text);
- if (string.IsNullOrEmpty(delta)) continue;
- stringBuilder.Append(delta);
- Debug.Write(completionUpdate.ContentUpdate[0].Text);
-
- while (r < stringBuilder.Length)
- {
- if (stringBuilder[r] == '\n')
- {
- InsertUnit();
- //插入直到下一个非空行
- AddNextNotEmptyLine();
- r++;
- l = r;
- }
- else if (stringBuilder[r] == ' ')
- {
- InsertUnit();
- r++;
- l = r;
- }
- else
- {
- r++;
- }
- }
- }
- }
- }
- finally
- {
- await enumerator.DisposeAsync();
- }
-
- //处理完成,手动插入最后一个分词
- if (l != r)
- {
- InsertUnit();
- }
-
- return;
-
- void AddNextNotEmptyLine()
- {
- do
- {
- var newLine = new ConvertedLine
- {
- Time = lineIndex >= cacheList.Count ? (TimeSpan?)null : cacheList[lineIndex].Time,
- Chinese = lineIndex >= cacheList.Count ? string.Empty : cacheList[lineIndex].Chinese,
- Index = lineIndex,
- Japanese = lineIndex >= cacheList.Count ? string.Empty : cacheList[lineIndex].Japanese
- };
- convertedLines.Add(newLine);
- lineIndex++;
- } while (string.IsNullOrWhiteSpace(convertedLines.Last().Japanese) && lineIndex < cacheList.Count);
- }
-
- void InsertUnit()
- {
- var lastLine = convertedLines.Last();
- var lastUnitStr = stringBuilder.ToString(l, r - l);
- if (!string.IsNullOrEmpty(lastUnitStr))
- lastLine.Units.Add(GetUnit(lastLine.Index, lastUnitStr, options.IsParticleAsPronunciation));
- }
- }
-
- private static List GetCacheList(ToRomajiAIOptions options, string text)
- {
- var timeSpans = new List();
- var lineTextList = text.Split(Environment.NewLine.ToArray()).Where(p => !string.IsNullOrWhiteSpace(p)).ToList();
-
- for (var i = 0; i < lineTextList.Count; i++)
- {
- if (LrcParser.LrcLineRegex.IsMatch(lineTextList[i]))
- {
- var lyrics = LrcParser.Parse(lineTextList[i]);
- timeSpans.Add(lyrics.Count > 0 ? lyrics[0].Time : (TimeSpan?)null);
- lineTextList[i] = lyrics.Count > 0 ? lyrics[0].Text : lineTextList[i];
- }
- else
- {
- timeSpans.Add(null);
- }
- }
-
- var cacheList = new List();
- for (var index = 0; index < lineTextList.Count; index++)
- {
- var line = lineTextList[index];
-
- if (RomajiHelper.IsChinese(line, options.ChineseRate)) continue;
-
- var convertedLine = new ConvertedLine
- {
- Time = index < timeSpans.Count ? timeSpans[index] : null,
- Japanese = line.Replace("\0", "")
- };
-
- if (index + 1 < lineTextList.Count &&
- RomajiHelper.IsChinese(lineTextList[index + 1], options.ChineseRate))
- convertedLine.Chinese = lineTextList[index + 1];
-
- convertedLine.Index = (ushort)cacheList.Count;
- cacheList.Add(convertedLine);
- }
-
- return cacheList;
- }
-
- private static string FixFormat(string content)
- {
- content = content.Replace("\r", "");
- content = content.Replace("\\n", "\n");
-
- return content;
- }
-
- private static ConvertedUnit GetUnit(ushort lineIndex, string unitString, bool isParticleAsPronunciation)
- {
- var match = _formatRegex.Match(unitString);
-
- if (!match.Success)
- {
- return new ConvertedUnit(lineIndex, unitString, KanaHelper.ToHiragana(unitString),
- KanaHelper.KatakanaToRomaji(unitString), false);
- }
-
- var origin = match.Groups[1].Value;
- var kanji_gana = match.Groups[3].Value;
- var particle_gana = match.Groups[5].Value;
-
- if (!string.IsNullOrEmpty(kanji_gana))
- {
- return new ConvertedUnit(lineIndex, origin, kanji_gana,
- KanaHelper.KatakanaToRomaji(kanji_gana), true);
- }
- else if (isParticleAsPronunciation && !string.IsNullOrEmpty(particle_gana))
- {
- return new ConvertedUnit(lineIndex, origin, particle_gana,
- KanaHelper.KatakanaToRomaji(particle_gana), false);
- }
- else
- {
- return new ConvertedUnit(lineIndex, origin, KanaHelper.ToHiragana(origin),
- KanaHelper.KatakanaToRomaji(origin), false);
- }
- }
- }
-}
diff --git a/RomajiConverter.Core/Options/ToRomajiAIOptions.cs b/RomajiConverter.Core/Options/ToRomajiAIOptions.cs
deleted file mode 100644
index 37a6638..0000000
--- a/RomajiConverter.Core/Options/ToRomajiAIOptions.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-namespace RomajiConverter.Core.Options
-{
- public class ToRomajiAIOptions : ToRomajiOptions
- {
- public string BaseUrl { get; set; }
-
- public string Model { get; set; }
-
- public string ApiKey { get; set; }
-
- ///
- /// 提示词,可以不传,使用默认提示词
- ///
- public string Prompt { get; set; }
- }
-}
\ No newline at end of file
diff --git a/RomajiConverter.Core/RomajiConverter.Core.csproj b/RomajiConverter.Core/RomajiConverter.Core.csproj
index 89384e3..d268c03 100644
--- a/RomajiConverter.Core/RomajiConverter.Core.csproj
+++ b/RomajiConverter.Core/RomajiConverter.Core.csproj
@@ -1,7 +1,8 @@
- netstandard2.0;net8.0
+ net10.0-windows10.0.26100.0
+ win-x86;win-x64;win-arm64
RomajiConverter.Core
2.1.0
WL
@@ -15,7 +16,6 @@
-