chores: plug-in system has been initially completed.

This commit is contained in:
Zhe Fang
2026-01-11 18:58:18 -05:00
parent 2cac55b55e
commit a82f1bdb53
41 changed files with 1139 additions and 771 deletions

View File

@@ -143,7 +143,7 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.7175" />
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.7463" />
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.8.251106002" />
</ItemGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.targets" />

View File

@@ -12,7 +12,7 @@
<Identity
Name="37412.BetterLyrics"
Publisher="CN=E1428B0E-DC1D-4EA4-ACB1-4556569D5BA9"
Version="1.2.265.0" />
Version="1.2.260.0" />
<mp:PhoneIdentity PhoneProductId="ca4a4830-fc19-40d9-b823-53e2bff3d816" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>

View File

@@ -23,7 +23,7 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.UI.Xaml;
using Microsoft.Windows.AppLifecycle; // 关键App生命周期管理
using Microsoft.Windows.AppLifecycle;
using Serilog;
using System;
using System.Linq;

View File

@@ -83,7 +83,7 @@
<PackageReference Include="CommunityToolkit.WinUI.Triggers" Version="8.2.251219" />
<PackageReference Include="ComputeSharp.D2D1.WinUI" Version="3.2.0" />
<PackageReference Include="csharp-pinyin" Version="1.0.1" />
<PackageReference Include="DevWinUI.Controls" Version="9.8.1" />
<PackageReference Include="DevWinUI.Controls" Version="9.9.2" />
<PackageReference Include="Dubya.WindowsMediaController" Version="2.5.6" />
<PackageReference Include="F23.StringSimilarity" Version="7.0.1" />
<PackageReference Include="FlaUI.UIA3" Version="5.0.0" />
@@ -98,13 +98,13 @@
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.1" />
<PackageReference Include="Microsoft.Graphics.Win2D" Version="1.3.2" />
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.7175" />
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.7463" />
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.8.251106002" />
<PackageReference Include="NAudio.Wasapi" Version="2.2.1" />
<PackageReference Include="NTextCat" Version="0.3.65" />
@@ -123,12 +123,12 @@
<PackageReference Include="VCollab.DiscordRichPresence" Version="1.7.0" />
<PackageReference Include="WebDav.Client" Version="2.9.0" />
<PackageReference Include="WinUIEx" Version="2.9.0" />
<PackageReference Include="z440.atl.core" Version="7.9.0" />
<PackageReference Include="z440.atl.core" Version="7.10.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\BetterLyrics.Core\BetterLyrics.Core.csproj" />
<ProjectReference Include="..\..\ColorThief.WinUI3\ColorThief.WinUI3.csproj" />
<ProjectReference Include="..\..\Impressionist\Impressionist\Impressionist.csproj" />
<ProjectReference Include="..\..\BetterLyrics.Core\BetterLyrics.Core.csproj" />
<ProjectReference Include="..\..\ColorThief.WinUI3\ColorThief.WinUI3.csproj" />
<ProjectReference Include="..\..\Impressionist\Impressionist\Impressionist.csproj" />
</ItemGroup>
<ItemGroup>
<Page Update="Rendering\InAppLyricsRenderer.xaml">
@@ -140,257 +140,245 @@
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<!--Disable Trimming for Specific Packages-->
<ItemGroup>
<TrimmerRootAssembly Include="FlaUI.UIA3" />
<TrimmerRootAssembly Include="Interop.UIAutomationClient" />
<TrimmerRootAssembly Include="Microsoft.EntityFrameworkCore" />
<TrimmerRootAssembly Include="Microsoft.EntityFrameworkCore.Abstractions" />
<TrimmerRootAssembly Include="Microsoft.EntityFrameworkCore.Relational" />
<TrimmerRootAssembly Include="Microsoft.EntityFrameworkCore.Sqlite" />
<TrimmerRootAssembly Include="NAudio.Wasapi" />
<TrimmerRootAssembly Include="TagLibSharp" />
<TrimmerRootAssembly Include="Vanara.PInvoke.DwmApi" />
<TrimmerRootAssembly Include="Vanara.PInvoke.Gdi32" />
<TrimmerRootAssembly Include="Vanara.PInvoke.Shell32" />
<TrimmerRootAssembly Include="Vanara.PInvoke.User32" />
<TrimmerRootAssembly Include="Vanara.Windows.Shell" />
<TrimmerRootDescriptor Include="PluginConfigs\**\*_TrimmerRoots.xml" />
<TrimmerRootDescriptor Include="Core_TrimmerRoots.xml" />
</ItemGroup>
<ItemGroup>
<Content Update="Assets\AIMP.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\AlbumArtPlaceholder.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Alipay.jpg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\AMLLPlayer.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\AppleMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Chrome.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Edge.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\FluidEffect.bin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Empty.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\EmptyBox.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\EmptyState.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Folder.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\foobar2000.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\HyPlayer.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\iTunes.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\KugouMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\LastFM.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Leaf.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Listen1.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Logo.ico">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Logo.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\LXMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\MediaPlayerWindows11.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\MoeKoeMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\MusicBee.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\NetEaseCloudMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\OriginalSoundHQPlayer.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Page.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\PlanetMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\PotPlayer.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\QQMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Question.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\RevolvingHearts.gif">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SaltPlayerForWindows.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Segoe Fluent Icons.ttf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Spotify.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\WeChatReward.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Wiki82.profile.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\AIMP.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\AlbumArtPlaceholder.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Alipay.jpg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\AMLLPlayer.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\AppleMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Chrome.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Edge.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\FluidEffect.bin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Empty.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\EmptyBox.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\EmptyState.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Folder.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\foobar2000.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\HyPlayer.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\iTunes.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\KugouMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\LastFM.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Leaf.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Listen1.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Logo.ico">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Logo.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\LXMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\MediaPlayerWindows11.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\MoeKoeMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\MusicBee.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\NetEaseCloudMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\OriginalSoundHQPlayer.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Page.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\PlanetMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\PotPlayer.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\QQMusic.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Question.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\RevolvingHearts.gif">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SaltPlayerForWindows.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Segoe Fluent Icons.ttf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Spotify.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\WeChatReward.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Wiki82.profile.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\PluginManagerControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\PluginManagerControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\PatronControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\PatronControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Styles\GhostSliderStyle.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Styles\GhostSliderStyle.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Styles\Converters.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Styles\Converters.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\PlayQueue.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\PlayQueue.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\StatsDashboardControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\StatsDashboardControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\FontFamilyAutoSuggestBox.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\FontFamilyAutoSuggestBox.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\LyricsStyleSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\LyricsStyleSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Views\LyricsWindowSwitchWindow.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Views\LyricsWindowSwitchWindow.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\LyricsWindowSwitchControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\LyricsWindowSwitchControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\DemoWindowGrid.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\DemoWindowGrid.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\LyricsWindowSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\LyricsWindowSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Views\LyricsSearchWindow.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Views\LyricsSearchWindow.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\LyricsSearchControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\LyricsSearchControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\ShortcutTextBox.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\ShortcutTextBox.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\ExtendedSlider.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\ExtendedSlider.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\LyricsEffectSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\LyricsEffectSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\MediaSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\MediaSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\PlaybackSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\PlaybackSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\AlbumArtAreaStyleSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\AlbumArtAreaStyleSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\LyricsBackgroundSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\LyricsBackgroundSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\AppSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\AppSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Views\MusicGalleryWindow.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Views\MusicGalleryWindow.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Views\MusicGalleryPage.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Views\MusicGalleryPage.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Views\SettingsWindow.xaml">
@@ -403,54 +391,57 @@
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\RemoteServerConfigControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\RemoteServerConfigControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\NowPlayingBar.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\NowPlayingBar.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Views\SystemTrayWindow.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Views\SystemTrayWindow.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\WindowSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\WindowSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\AlbumArtAreaEffectSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\AlbumArtAreaEffectSettingsControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\ImageSwitcher.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\ImageSwitcher.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\ShadowImage.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\ShadowImage.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\PropertyRow.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\PropertyRow.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Controls\AboutControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Controls\AboutControl.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Styles\InteractiveListViewHeaderStyle.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Styles\InteractiveListViewHeaderStyle.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Folder Include="PluginConfigs\" />
</ItemGroup>
<!-- Publish Properties -->
<PropertyGroup>

View File

@@ -196,23 +196,23 @@
<ComboBox SelectedIndex="{x:Bind LyricsEffectSettings.LyricsScrollEasingType, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
<ComboBoxItem x:Uid="SettingsPageEasingTypeLinear" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeSmoothStep" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseInOutSine" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseInOutQuad" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseInOutCubic" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseInOutQuart" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseInOutQuint" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseInOutExpo" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseInOutCirc" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseInOutBack" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseInOutElastic" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseInOutBounce" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseSine" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseQuad" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseCubic" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseQuart" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseQuint" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseExpo" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseCirc" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseBack" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseElastic" />
<ComboBoxItem x:Uid="SettingsPageEasingTypeEaseBounce" />
</ComboBox>
<dev:SettingsExpander.Items>
<dev:SettingsCard Header="Easing Mode">
<dev:SettingsCard x:Uid="SettingsPageEasingMode">
<ComboBox SelectedIndex="{x:Bind LyricsEffectSettings.LyricsScrollEasingMode, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
<ComboBoxItem Content="EaseIn" />
<ComboBoxItem Content="EaseOut" />
<ComboBoxItem Content="EaseInOut" />
<ComboBoxItem x:Uid="SettingsPageEasingModeIn" />
<ComboBoxItem x:Uid="SettingsPageEasingModeOut" />
<ComboBoxItem x:Uid="SettingsPageEasingModeInOut" />
</ComboBox>
</dev:SettingsCard>
<dev:SettingsCard x:Uid="SettingsPageScrollTopDuration">

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<assembly fullname="FlaUI.UIA3" preserve="all" />
<assembly fullname="Interop.UIAutomationClient" preserve="all" />
<assembly fullname="Microsoft.EntityFrameworkCore" preserve="all" />
<assembly fullname="Microsoft.EntityFrameworkCore.Abstractions" preserve="all" />
<assembly fullname="Microsoft.EntityFrameworkCore.Relational" preserve="all" />
<assembly fullname="Microsoft.EntityFrameworkCore.Sqlite" preserve="all" />
<assembly fullname="NAudio.Wasapi" preserve="all" />
<assembly fullname="TagLibSharp" preserve="all" />
<assembly fullname="Vanara.PInvoke.DwmApi" preserve="all" />
<assembly fullname="Vanara.PInvoke.Gdi32" preserve="all" />
<assembly fullname="Vanara.PInvoke.Shell32" preserve="all" />
<assembly fullname="Vanara.PInvoke.User32" preserve="all" />
<assembly fullname="Vanara.Windows.Shell" preserve="all" />
</linker>

View File

@@ -129,7 +129,7 @@ namespace BetterLyrics.WinUI3.Parsers.LyricsParser
{
romaji = await transliterationService.TransliterateText(main.WrappedOriginalText, PhoneticHelper.RomanCode, token);
_lyricsDataArr.FirstOrDefault()?.SetTransliteration(romaji);
transliterationSearchProvider = TransliterationSearchProvider.CutletDocker;
transliterationSearchProvider = TransliterationSearchProvider.Plugin;
}
catch (TaskCanceledException) { }
catch (Exception)

View File

@@ -0,0 +1,15 @@
<linker>
<assembly fullname="System.Collections" preserve="all" />
<assembly fullname="System.IO.MemoryMappedFiles" preserve="all" />
<assembly fullname="System.Linq" preserve="all" />
<assembly fullname="System.Memory" preserve="all" />
<assembly fullname="System.ObjectModel" preserve="all" />
<assembly fullname="System.Runtime" preserve="all" />
<assembly fullname="System.Runtime.InteropServices" preserve="all" />
<assembly fullname="System.Text.RegularExpressions" preserve="all" />
<assembly fullname="System.Threading" preserve="all" />
<assembly fullname="BetterLyrics.WinUI3">
<type fullname="BetterLyrics.WinUI3.PluginConfigs.BetterLyrics_Plugins_Romaji_Config" preserve="all" />
</assembly>
</linker>

View File

@@ -0,0 +1,137 @@
// Auto-Generated by PluginAnalyzer
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
namespace BetterLyrics.WinUI3.PluginConfigs;
internal static class BetterLyrics_Plugins_Romaji_Config
{
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.AppContext))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.AppDomain))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ArgumentException))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ArgumentNullException))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ArgumentOutOfRangeException))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Array))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.AsyncCallback))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Boolean))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Buffer))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Byte))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Char))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Collections.Generic.Dictionary<,>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Collections.Generic.IEnumerable<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Collections.Generic.IEnumerator<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Collections.Generic.LinkedList<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Collections.Generic.LinkedListNode<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Collections.Generic.List<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Collections.IEnumerable))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Collections.IEnumerator))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Collections.ObjectModel.Collection<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Collections.ObjectModel.ObservableCollection<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ComponentModel.INotifyPropertyChanged))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ComponentModel.PropertyChangedEventArgs))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ComponentModel.PropertyChangedEventHandler))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Delegate))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Diagnostics.DebuggableAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Diagnostics.DebuggableAttribute.DebuggingModes))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Diagnostics.DebuggerBrowsableAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Diagnostics.DebuggerBrowsableState))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Diagnostics.DebuggerHiddenAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Enum))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Environment))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Exception))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Func<,>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.GC))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IAsyncResult))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IComparable<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IDisposable))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Int16))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Int32))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Int64))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.InvalidOperationException))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.BinaryReader))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.File))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.FileAccess))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.FileMode))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.FileShare))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.FileStream))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.HandleInheritability))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.MemoryMappedFiles.MemoryMappedFile))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.MemoryMappedFiles.MemoryMappedFileAccess))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.MemoryMappedFiles.MemoryMappedViewAccessor))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.MemoryMappedFiles.MemoryMappedViewStream))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.Path))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.Stream))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.StreamReader))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.TextReader))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.IO.UnmanagedMemoryAccessor))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Linq.Enumerable))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Linq.IGrouping<,>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Math))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.MemoryExtensions))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.MulticastDelegate))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.NotImplementedException))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.NotSupportedException))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Nullable<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Object))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ObjectDisposedException))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ObsoleteAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ParamArrayAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ReadOnlySpan<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.Assembly))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.AssemblyCompanyAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.AssemblyConfigurationAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.AssemblyCopyrightAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.AssemblyDescriptionAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.AssemblyFileVersionAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.AssemblyInformationalVersionAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.AssemblyMetadataAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.AssemblyProductAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.AssemblyTitleAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.AssemblyTrademarkAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Reflection.DefaultMemberAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.CompilerServices.CallerMemberNameAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.CompilerServices.CompilationRelaxationsAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.CompilerServices.ExtensionAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.CompilerServices.IsReadOnlyAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.CompilerServices.IteratorStateMachineAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.CompilerServices.NullableAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.CompilerServices.NullableContextAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.CompilerServices.RefSafetyRulesAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.CompilerServices.RuntimeCompatibilityAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.CompilerServices.TupleElementNamesAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.InteropServices.InAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.Serialization.SerializationInfo))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.Serialization.StreamingContext))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.Versioning.SupportedOSPlatformAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.Versioning.TargetFrameworkAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Runtime.Versioning.TargetPlatformAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Security.Permissions.SecurityAction))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Security.Permissions.SecurityPermissionAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Security.UnverifiableCodeAttribute))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Single))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.String))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.StringSplitOptions))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.Encoding))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.RegularExpressions.Capture))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.RegularExpressions.Group))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.RegularExpressions.GroupCollection))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.RegularExpressions.Match))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.RegularExpressions.MatchCollection))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.RegularExpressions.Regex))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.RegularExpressions.RegexOptions))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.StringBuilder))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Threading.Interlocked))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Threading.Tasks.Task))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Threading.Tasks.Task<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.TimeSpan))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Type))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.UInt16))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.UInt32))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ValueTuple<,>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.ValueType))]
[ModuleInitializer]
internal static void Initialize()
{
// This method runs automatically on startup.
}
}

View File

@@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Reflection;
using Windows.Storage;
namespace BetterLyrics.WinUI3.Services.PluginService
@@ -45,58 +46,91 @@ namespace BetterLyrics.WinUI3.Services.PluginService
private void TryLoadPlugin(string dllPath)
{
// 1. Create Context
var loadContext = new PluginLoadContext(dllPath);
try
{
var loadContext = new PluginLoadContext(dllPath);
var assembly = loadContext.LoadFromAssemblyPath(dllPath);
bool isPluginFound = false;
int loadedCount = 0; // Track successfully loaded plugins
foreach (var type in assembly.GetExportedTypes())
// 2. [Safety Check] Safely retrieve types
IEnumerable<Type> types;
try
{
if (typeof(IPlugin).IsAssignableFrom(type) && !type.IsAbstract)
types = assembly.GetExportedTypes();
}
catch (ReflectionTypeLoadException ex)
{
// If some types fail to load, only keep the usable ones!
types = ex.Types.Where(t => t != null)!;
foreach (var loaderEx in ex.LoaderExceptions)
{
var plugin = (IPlugin?)Activator.CreateInstance(type);
if (plugin == null) continue;
if (_plugins.Any(p => p.Id == plugin.Id))
{
// 遇到重复 ID我们选择跳过新的保留旧的
// (或者你也可以设计成卸载旧的加载新的,这取决于策略)
// 由于我们已经加载了 assembly现在决定不用它必须卸载 context
loadContext.Unload();
return;
}
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);
isPluginFound = true;
_logger.LogWarning("Partial type loading failure in DLL {path}: {msg}", dllPath, loaderEx?.Message);
}
}
if (isPluginFound)
foreach (var type in types)
{
// 3. Check if it is a valid plugin class
if (typeof(IPlugin).IsAssignableFrom(type) && !type.IsAbstract)
{
IPlugin? plugin = null;
try
{
// 4. [Instantiation Guard] Prevent plugin constructor errors from crashing the main app
plugin = (IPlugin?)Activator.CreateInstance(type);
if (plugin == null) continue;
// 5. Check for duplicate IDs
if (_plugins.Any(p => p.Id == plugin.Id))
{
_logger.LogWarning("Skipping duplicate plugin: {id} ({path})", plugin.Id, dllPath);
// Explicitly break reference to aid Unload
plugin = null;
continue;
}
// 6. Initialize
plugin.Initialize();
// 7. Add to collection
_plugins.Add(plugin);
_pluginContexts.Add(plugin.Id, loadContext);
loadedCount++;
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to initialize/instantiate plugin {type}", type.FullName);
// If plugin initialization fails, explicitly dispose if possible
if (plugin is IDisposable disposable)
{
try { disposable.Dispose(); } catch { }
}
plugin = null; // Break reference
}
}
}
// 8. Finalize: If no usable plugins were found in this DLL, unload Context
if (loadedCount > 0)
{
_loadedDllPaths.Add(dllPath);
_logger.LogInformation("Successfully loaded {count} plugin(s) from {path}", loadedCount, dllPath);
}
else
{
_logger.LogWarning("No valid plugin types found in assembly {path}", dllPath);
_logger.LogWarning("No valid plugins found in {path}. Unloading context.", dllPath);
// No plugin instances remain alive at this point, safe to unload
loadContext.Unload();
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to load plugin from {path}", dllPath);
_logger.LogError(ex, "Failed to load assembly: {path}", dllPath);
// Only unload here if the loading process completely crashed
try { loadContext.Unload(); } catch { }
}
}

View File

@@ -26,31 +26,6 @@ namespace BetterLyrics.WinUI3.Services.TransliterationService
_httpClient = new HttpClient();
}
//public async Task<string> TransliterateText(string text, string targetLangCode, CancellationToken token)
//{
// if (string.IsNullOrWhiteSpace(text))
// {
// throw new Exception(text + " is empty or null.");
// }
// if (string.IsNullOrEmpty(_settingsService.AppSettings.TranslationSettings.CutletDockerServer))
// {
// throw new Exception("cutlet-docker server URL is not set in settings.");
// }
// var request = new CutletDockerRequest { Text = text };
// var reqJson = System.Text.Json.JsonSerializer.Serialize(request, SourceGenerationContext.Default.CutletDockerRequest);
// var url = $"{_settingsService.AppSettings.TranslationSettings.CutletDockerServer}/convert";
// var response = await _httpClient.PostAsync(url, new StringContent(reqJson, Encoding.UTF8, "application/json"));
// response.EnsureSuccessStatusCode();
// var resJson = await response.Content.ReadAsStringAsync(token);
// var result = System.Text.Json.JsonSerializer.Deserialize(resJson, SourceGenerationContext.Default.CutletDockerResponse);
// return result?.RomajiText ?? string.Empty;
//}
public async Task<string> TransliterateText(string text, string targetLangCode, CancellationToken token)
{
string? result = null;

View File

@@ -810,34 +810,37 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>منطقة قابلة للسحب</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>EaseInOutBack</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>EaseInOutBounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>EaseInOutCirc</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>EaseInOutCubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>EaseInOutElastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>EaseInOutExpo</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>EaseInOutQuad</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>EaseInOutQuart</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>EaseInOutQuint</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>EaseInOutSine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">

View File

@@ -810,35 +810,38 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>Ziehbereich</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<value>Back Ease In-Out</value>
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<value>Bounce Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>Back</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<value>Circular Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>Bounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<value>Cubic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>Circular</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<value>Elastic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>Cubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<value>Exponential Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>Elastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<value>Quadratic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>Exponential</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<value>Quartic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>Quadratic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<value>Quintic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>Quartic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<value>Sine Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>Quintic</value>
</data>
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>Sine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">
<value>Linear</value>

View File

@@ -810,35 +810,47 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>Draggable Area</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<value>Back Ease In-Out</value>
<data name="SettingsPageEasingMode.Header" xml:space="preserve">
<value>Easing Mode</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<value>Bounce Ease In-Out</value>
<data name="SettingsPageEasingModeIn.Content" xml:space="preserve">
<value>In</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<value>Circular Ease In-Out</value>
<data name="SettingsPageEasingModeInOut.Content" xml:space="preserve">
<value>In-Out</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<value>Cubic Ease In-Out</value>
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value>Out</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<value>Elastic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>Back</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<value>Exponential Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>Bounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<value>Quadratic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>Circular</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<value>Quartic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>Cubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<value>Quintic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>Elastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<value>Sine Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>Exponential</value>
</data>
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>Quadratic</value>
</data>
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>Quartic</value>
</data>
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>Quintic</value>
</data>
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>Sine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">
<value>Linear</value>

View File

@@ -810,35 +810,41 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>Área arrastrable</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<value>Back Ease In-Out</value>
<data name="SettingsPageEasingMode.Header" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<value>Bounce Ease In-Out</value>
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<value>Circular Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>Back</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<value>Cubic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>Bounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<value>Elastic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>Circular</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<value>Exponential Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>Cubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<value>Quadratic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>Elastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<value>Quartic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>Exponential</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<value>Quintic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>Quadratic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<value>Sine Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>Quartic</value>
</data>
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>Quintic</value>
</data>
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>Sine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">
<value>Lineal</value>

View File

@@ -810,35 +810,38 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>Zone déplaçable</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<value>Back Ease In-Out</value>
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<value>Bounce Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>Back</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<value>Circular Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>Bounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<value>Cubic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>Circular</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<value>Elastic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>Cubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<value>Exponential Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>Elastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<value>Quadratic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>Exponential</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<value>Quartic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>Quadratic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<value>Quintic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>Quartic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<value>Sine Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>Quintic</value>
</data>
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>Sine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">
<value>Linéaire</value>

View File

@@ -810,34 +810,37 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>खींचने योग्य क्षेत्र</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>EaseInOutBack</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>EaseInOutBounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>EaseInOutCirc</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>EaseInOutCubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>EaseInOutElastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>EaseInOutExpo</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>EaseInOutQuad</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>EaseInOutQuart</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>EaseInOutQuint</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>EaseInOutSine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">

View File

@@ -810,34 +810,37 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>Area yang Dapat Diseret</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>EaseInOutBack</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>EaseInOutBounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>EaseInOutCirc</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>EaseInOutCubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>EaseInOutElastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>EaseInOutExpo</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>EaseInOutQuad</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>EaseInOutQuart</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>EaseInOutQuint</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>EaseInOutSine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">

View File

@@ -810,34 +810,37 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>ドラッグ可能エリア</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>バックイーズ イン アウト</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>バウンスイーズ イン アウト</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>サーキュラーイーズ イン アウト</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>キュービックイーズ イン アウト</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>エラスティックイーズ イン アウト</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>エキスポネンシャルイーズ イン アウト</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>クアドラティックイーズ イン アウト</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>クオートイーズ イン アウト</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>クイントイーズ イン アウト</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>サインイーズ イン アウト</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">

View File

@@ -810,35 +810,38 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>드래그 가능 영역</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<value>Back Ease In-Out</value>
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<value>Bounce Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>Back</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<value>Circular Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>Bounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<value>Cubic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>Circular</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<value>Elastic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>Cubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<value>Exponential Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>Elastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<value>Quadratic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>Exponential</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<value>Quartic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>Quadratic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<value>Quintic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>Quartic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<value>Sine Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>Quintic</value>
</data>
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>Sine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">
<value>Linear (선형)</value>

View File

@@ -810,34 +810,37 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>Kawasan Boleh Diseret</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>EaseInOutBack</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>EaseInOutBounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>EaseInOutCirc</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>EaseInOutCubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>EaseInOutElastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>EaseInOutExpo</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>EaseInOutQuad</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>EaseInOutQuart</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>EaseInOutQuint</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>EaseInOutSine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">

View File

@@ -810,34 +810,37 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>Área de Arrastar</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>EaseInOutBack</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>EaseInOutBounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>EaseInOutCirc</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>EaseInOutCubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>EaseInOutElastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>EaseInOutExpo</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>EaseInOutQuad</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>EaseInOutQuart</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>EaseInOutQuint</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>EaseInOutSine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">

View File

@@ -810,35 +810,38 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>Перетаскиваемая область</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<value>Back Ease In-Out</value>
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<value>Bounce Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>Back</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<value>Circular Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>Bounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<value>Cubic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>Circular</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<value>Elastic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>Cubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<value>Exponential Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>Elastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<value>Quadratic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>Exponential</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<value>Quartic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>Quadratic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<value>Quintic Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>Quartic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<value>Sine Ease In-Out</value>
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>Quintic</value>
</data>
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>Sine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">
<value>Linear</value>

View File

@@ -810,34 +810,37 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>พื้นที่ลาก</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>EaseInOutBack</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>EaseInOutBounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>EaseInOutCirc</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>EaseInOutCubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>EaseInOutElastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>EaseInOutExpo</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>EaseInOutQuad</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>EaseInOutQuart</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>EaseInOutQuint</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>EaseInOutSine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">

View File

@@ -810,34 +810,37 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>Vùng có thể kéo</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>EaseInOutBack</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>EaseInOutBounce</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>EaseInOutCirc</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>EaseInOutCubic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>EaseInOutElastic</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>EaseInOutExpo</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>EaseInOutQuad</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>EaseInOutQuart</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>EaseInOutQuint</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>EaseInOutSine</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">

View File

@@ -810,35 +810,47 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>可拖动区域</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<value>回弹缓入缓出</value>
<data name="SettingsPageEasingMode.Header" xml:space="preserve">
<value>缓动类型</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<value>弹跳缓入缓出</value>
<data name="SettingsPageEasingModeIn.Content" xml:space="preserve">
<value>缓入</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<value>圆形缓入缓出</value>
<data name="SettingsPageEasingModeInOut.Content" xml:space="preserve">
<value>缓出</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<value>三次缓入缓出</value>
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value>缓入缓出</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<value>弹性缓入缓出</value>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>弹</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<value>指数缓入缓出</value>
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>弹跳</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<value>二次缓入缓出</value>
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>圆形</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<value>四次缓入缓出</value>
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>三次</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<value>五次缓入缓出</value>
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>弹性</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<value>正弦缓入缓出</value>
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>指数</value>
</data>
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>二次</value>
</data>
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>四次</value>
</data>
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>五次</value>
</data>
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>正弦</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">
<value>线性</value>

View File

@@ -810,34 +810,37 @@
<data name="SettingsPageDragArea.Header" xml:space="preserve">
<value>可拖曳區域</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBack.Content" xml:space="preserve">
<data name="SettingsPageEasingModeOut.Content" xml:space="preserve">
<value />
</data>
<data name="SettingsPageEasingTypeEaseBack.Content" xml:space="preserve">
<value>回彈緩入緩出</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutBounce.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseBounce.Content" xml:space="preserve">
<value>彈跳緩入緩出</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCirc.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCirc.Content" xml:space="preserve">
<value>圓形緩入緩出</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutCubic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseCubic.Content" xml:space="preserve">
<value>三次緩入緩出</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutElastic.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseElastic.Content" xml:space="preserve">
<value>彈性緩入緩出</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutExpo.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseExpo.Content" xml:space="preserve">
<value>指數緩入緩出</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuad.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuad.Content" xml:space="preserve">
<value>二次緩入緩出</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuart.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuart.Content" xml:space="preserve">
<value>四次緩入緩出</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutQuint.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseQuint.Content" xml:space="preserve">
<value>五次緩入緩出</value>
</data>
<data name="SettingsPageEasingTypeEaseInOutSine.Content" xml:space="preserve">
<data name="SettingsPageEasingTypeEaseSine.Content" xml:space="preserve">
<value>正弦緩入緩出</value>
</data>
<data name="SettingsPageEasingTypeLinear.Content" xml:space="preserve">