mirror of
https://github.com/real-zony/ZonyLrcToolsX.git
synced 2026-03-17 14:52:57 +00:00
feat: Implement lyrics download feature.
This commit is contained in:
39
src/ZonyLrcTools.Desktop/Views/Dialogs/ConfirmDialog.axaml
Normal file
39
src/ZonyLrcTools.Desktop/Views/Dialogs/ConfirmDialog.axaml
Normal file
@@ -0,0 +1,39 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Class="ZonyLrcTools.Desktop.Views.Dialogs.ConfirmDialog"
|
||||
Title=""
|
||||
Width="400"
|
||||
Height="200"
|
||||
CanResize="False"
|
||||
WindowStartupLocation="CenterOwner"
|
||||
SizeToContent="Height">
|
||||
|
||||
<Grid Margin="24" RowDefinitions="Auto,*,Auto">
|
||||
<!-- Title -->
|
||||
<TextBlock Grid.Row="0"
|
||||
x:Name="TitleText"
|
||||
FontSize="16"
|
||||
FontWeight="SemiBold"
|
||||
Margin="0,0,0,12" />
|
||||
|
||||
<!-- Message -->
|
||||
<TextBlock Grid.Row="1"
|
||||
x:Name="MessageText"
|
||||
TextWrapping="Wrap"
|
||||
Margin="0,0,0,20" />
|
||||
|
||||
<!-- Buttons -->
|
||||
<StackPanel Grid.Row="2"
|
||||
Orientation="Horizontal"
|
||||
HorizontalAlignment="Right"
|
||||
Spacing="8">
|
||||
<Button x:Name="CancelButton"
|
||||
MinWidth="80"
|
||||
Click="OnCancelClick" />
|
||||
<Button x:Name="ConfirmButton"
|
||||
MinWidth="80"
|
||||
Classes="accent"
|
||||
Click="OnConfirmClick" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,35 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using ZonyLrcTools.Desktop.Infrastructure.Localization;
|
||||
|
||||
namespace ZonyLrcTools.Desktop.Views.Dialogs;
|
||||
|
||||
public partial class ConfirmDialog : Window
|
||||
{
|
||||
public ConfirmDialog()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public ConfirmDialog(string title, string message) : this()
|
||||
{
|
||||
TitleText.Text = title;
|
||||
MessageText.Text = message;
|
||||
Title = title;
|
||||
|
||||
var localization = App.Services?.GetService<IUILocalizationService>();
|
||||
ConfirmButton.Content = localization?["Common_OK"] ?? "OK";
|
||||
CancelButton.Content = localization?["Common_Cancel"] ?? "Cancel";
|
||||
}
|
||||
|
||||
private void OnConfirmClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
Close(true);
|
||||
}
|
||||
|
||||
private void OnCancelClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
Close(false);
|
||||
}
|
||||
}
|
||||
32
src/ZonyLrcTools.Desktop/Views/Dialogs/MessageDialog.axaml
Normal file
32
src/ZonyLrcTools.Desktop/Views/Dialogs/MessageDialog.axaml
Normal file
@@ -0,0 +1,32 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Class="ZonyLrcTools.Desktop.Views.Dialogs.MessageDialog"
|
||||
Title=""
|
||||
Width="400"
|
||||
Height="200"
|
||||
CanResize="False"
|
||||
WindowStartupLocation="CenterOwner"
|
||||
SizeToContent="Height">
|
||||
|
||||
<Grid Margin="24" RowDefinitions="Auto,*,Auto">
|
||||
<!-- Title -->
|
||||
<TextBlock Grid.Row="0"
|
||||
x:Name="TitleText"
|
||||
FontSize="16"
|
||||
FontWeight="SemiBold"
|
||||
Margin="0,0,0,12" />
|
||||
|
||||
<!-- Message -->
|
||||
<TextBlock Grid.Row="1"
|
||||
x:Name="MessageText"
|
||||
TextWrapping="Wrap"
|
||||
Margin="0,0,0,20" />
|
||||
|
||||
<!-- OK Button -->
|
||||
<Button Grid.Row="2"
|
||||
x:Name="OkButton"
|
||||
HorizontalAlignment="Right"
|
||||
MinWidth="80"
|
||||
Click="OnOkClick" />
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,29 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using ZonyLrcTools.Desktop.Infrastructure.Localization;
|
||||
|
||||
namespace ZonyLrcTools.Desktop.Views.Dialogs;
|
||||
|
||||
public partial class MessageDialog : Window
|
||||
{
|
||||
public MessageDialog()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public MessageDialog(string title, string message) : this()
|
||||
{
|
||||
TitleText.Text = title;
|
||||
MessageText.Text = message;
|
||||
Title = title;
|
||||
|
||||
var localization = App.Services?.GetService<IUILocalizationService>();
|
||||
OkButton.Content = localization?["Common_OK"] ?? "OK";
|
||||
}
|
||||
|
||||
private void OnOkClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ZonyLrcTools.Desktop.ViewModels"
|
||||
xmlns:loc="using:ZonyLrcTools.Desktop.Infrastructure.Localization"
|
||||
x:Class="ZonyLrcTools.Desktop.Views.Pages.LyricsDownloadPage"
|
||||
x:DataType="vm:LyricsDownloadViewModel">
|
||||
|
||||
@@ -56,6 +57,7 @@
|
||||
<Button Command="{Binding StartDownloadCommand}"
|
||||
Content="{Binding LyricsStartDownload}"
|
||||
IsVisible="{Binding !IsDownloading}"
|
||||
IsEnabled="{Binding CanStartDownload}"
|
||||
Classes="accent"
|
||||
MinWidth="100" />
|
||||
<Button Command="{Binding CancelDownloadCommand}"
|
||||
@@ -65,7 +67,21 @@
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<!-- Progress Bar (visible during download) -->
|
||||
<!-- Progress Bar: Scanning phase -->
|
||||
<StackPanel IsVisible="{Binding IsScanning}" Spacing="8">
|
||||
<ProgressBar Value="{Binding ScanProgressPercentage}"
|
||||
Maximum="100"
|
||||
Height="6" />
|
||||
<TextBlock HorizontalAlignment="Center" FontSize="12" Opacity="0.8">
|
||||
<Run Text="{Binding LyricsScanning}" />
|
||||
<Run Text=" " />
|
||||
<Run Text="{Binding ScanProgressCount}" />
|
||||
<Run Text=" / " />
|
||||
<Run Text="{Binding ScanTotalCount}" />
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Progress Bar: Download phase -->
|
||||
<StackPanel IsVisible="{Binding IsDownloading}" Spacing="8">
|
||||
<ProgressBar Value="{Binding ProgressPercentage}"
|
||||
Maximum="100"
|
||||
@@ -90,20 +106,25 @@
|
||||
GridLinesVisibility="Horizontal"
|
||||
BorderThickness="0">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="{Binding ColumnSongName}"
|
||||
<DataGridTextColumn x:DataType="vm:MusicFileViewModel"
|
||||
Header="{loc:Localize Column_SongName}"
|
||||
Binding="{Binding Name}"
|
||||
Width="*" />
|
||||
<DataGridTextColumn Header="{Binding ColumnArtist}"
|
||||
<DataGridTextColumn x:DataType="vm:MusicFileViewModel"
|
||||
Header="{loc:Localize Column_Artist}"
|
||||
Binding="{Binding Artist}"
|
||||
Width="150" />
|
||||
<DataGridTextColumn Header="{Binding ColumnFilePath}"
|
||||
<DataGridTextColumn x:DataType="vm:MusicFileViewModel"
|
||||
Header="{loc:Localize Column_FilePath}"
|
||||
Binding="{Binding FilePath}"
|
||||
Width="250" />
|
||||
<DataGridTextColumn Header="{Binding ColumnStatus}"
|
||||
<DataGridTextColumn x:DataType="vm:MusicFileViewModel"
|
||||
Header="{loc:Localize Column_Status}"
|
||||
Binding="{Binding StatusMessage}"
|
||||
Width="100" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
</Border>
|
||||
|
||||
<!-- Status Bar -->
|
||||
|
||||
Reference in New Issue
Block a user