This commit is contained in:
Zhe Fang
2025-12-29 12:15:39 -05:00
parent 48bdffb2fe
commit 125bf1682e
28 changed files with 622 additions and 354 deletions

View File

@@ -75,6 +75,13 @@ namespace BetterLyrics.WinUI3
var settingsService = Ioc.Default.GetRequiredService<ISettingsService>(); var settingsService = Ioc.Default.GetRequiredService<ISettingsService>();
var fileSystemService = Ioc.Default.GetRequiredService<IFileSystemService>(); var fileSystemService = Ioc.Default.GetRequiredService<IFileSystemService>();
foreach (var item in settingsService.AppSettings.LocalMediaFolders)
{
if (item.LastSyncTime == null)
{
_ = Task.Run(async () => await fileSystemService.ScanMediaFolderAsync(item, CancellationToken.None));
}
}
fileSystemService.StartAllFolderTimers(); fileSystemService.StartAllFolderTimers();
WindowHook.OpenOrShowWindow<SystemTrayWindow>(); WindowHook.OpenOrShowWindow<SystemTrayWindow>();

View File

@@ -5,6 +5,7 @@
xmlns:controls="using:CommunityToolkit.WinUI.Controls" xmlns:controls="using:CommunityToolkit.WinUI.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dev="using:DevWinUI" xmlns:dev="using:DevWinUI"
xmlns:enums="using:BetterLyrics.WinUI3.Enums"
xmlns:interactivity="using:Microsoft.Xaml.Interactivity" xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:local="using:BetterLyrics.WinUI3.Controls" xmlns:local="using:BetterLyrics.WinUI3.Controls"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
@@ -88,14 +89,18 @@
</dev:SettingsCard> </dev:SettingsCard>
</dev:SettingsExpander.Items> </dev:SettingsExpander.Items>
<dev:SettingsExpander.ItemsFooter> <dev:SettingsExpander.ItemsHeader>
<StackPanel> <StackPanel>
<!-- Index info --> <!-- Index info -->
<InfoBar <InfoBar
IsClosable="False" IsClosable="False"
IsOpen="{x:Bind IsIndexing, Mode=OneWay}" IsOpen="True"
Message="{x:Bind IndexingStatusText, Mode=OneWay}" /> Message="{x:Bind StatusText, Mode=OneWay}"
<ProgressBar Visibility="{x:Bind IsIndexing, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}" Value="{x:Bind IndexingProgress, Mode=OneWay}"> Severity="{x:Bind StatusSeverity, Mode=OneWay}" />
<ProgressBar
Background="Transparent"
Visibility="{x:Bind IsProcessing, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"
Value="{x:Bind IndexingProgress, Mode=OneWay}">
<interactivity:Interaction.Behaviors> <interactivity:Interaction.Behaviors>
<interactivity:DataTriggerBehavior <interactivity:DataTriggerBehavior
Binding="{x:Bind IndexingProgress, Mode=OneWay}" Binding="{x:Bind IndexingProgress, Mode=OneWay}"
@@ -111,14 +116,8 @@
</interactivity:DataTriggerBehavior> </interactivity:DataTriggerBehavior>
</interactivity:Interaction.Behaviors> </interactivity:Interaction.Behaviors>
</ProgressBar> </ProgressBar>
<!-- Clean up info -->
<InfoBar
IsClosable="False"
IsOpen="{x:Bind IsCleaningUp, Mode=OneWay}"
Message="{x:Bind CleaningUpStatusText, Mode=OneWay}" />
<ProgressBar IsIndeterminate="True" Visibility="{x:Bind IsCleaningUp, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}" />
</StackPanel> </StackPanel>
</dev:SettingsExpander.ItemsFooter> </dev:SettingsExpander.ItemsHeader>
</dev:SettingsExpander> </dev:SettingsExpander>
</DataTemplate> </DataTemplate>

View File

@@ -12,13 +12,13 @@ namespace BetterLyrics.WinUI3.Controls
{ {
public sealed partial class RemoteServerConfigControl : UserControl public sealed partial class RemoteServerConfigControl : UserControl
{ {
private readonly string _protocolType; private readonly FileSourceType _fileSourceType;
private readonly ILocalizationService _localizationService = Ioc.Default.GetRequiredService<ILocalizationService>(); private readonly ILocalizationService _localizationService = Ioc.Default.GetRequiredService<ILocalizationService>();
public RemoteServerConfigControl(string protocolType) public RemoteServerConfigControl(FileSourceType fileSourceType)
{ {
this.InitializeComponent(); this.InitializeComponent();
_protocolType = protocolType; _fileSourceType = fileSourceType;
SetupDefaults(); SetupDefaults();
CheckPathForWarning(); CheckPathForWarning();
@@ -26,7 +26,7 @@ namespace BetterLyrics.WinUI3.Controls
private void SetupDefaults() private void SetupDefaults()
{ {
if (_protocolType.Equals("Local", StringComparison.OrdinalIgnoreCase)) if (_fileSourceType == FileSourceType.Local)
{ {
RemoteFieldsPanel.Visibility = Visibility.Collapsed; RemoteFieldsPanel.Visibility = Visibility.Collapsed;
AuthFieldsPanel.Visibility = Visibility.Collapsed; AuthFieldsPanel.Visibility = Visibility.Collapsed;
@@ -41,17 +41,17 @@ namespace BetterLyrics.WinUI3.Controls
RemoteFieldsPanel.Visibility = Visibility.Visible; RemoteFieldsPanel.Visibility = Visibility.Visible;
AuthFieldsPanel.Visibility = Visibility.Visible; AuthFieldsPanel.Visibility = Visibility.Visible;
switch (_protocolType.ToUpper()) switch (_fileSourceType)
{ {
case "SMB": case FileSourceType.SMB:
PortBox.Value = 445; PortBox.Value = 445;
PathBox.PlaceholderText = "SharedMusic"; PathBox.PlaceholderText = "SharedMusic";
break; break;
case "FTP": case FileSourceType.FTP:
PortBox.Value = 21; PortBox.Value = 21;
PathBox.PlaceholderText = "/pub/music"; PathBox.PlaceholderText = "/pub/music";
break; break;
case "WEBDAV": case FileSourceType.WebDAV:
PortBox.Value = 80; PortBox.Value = 80;
PathBox.PlaceholderText = "/dav/music"; PathBox.PlaceholderText = "/dav/music";
break; break;
@@ -62,15 +62,15 @@ namespace BetterLyrics.WinUI3.Controls
private string GetScheme() private string GetScheme()
{ {
string scheme = string.Empty; string scheme = string.Empty;
switch (_protocolType.ToUpper()) switch (_fileSourceType)
{ {
case "SMB": case FileSourceType.SMB:
scheme = "smb"; scheme = "smb";
break; break;
case "FTP": case FileSourceType.FTP:
scheme = "ftp"; scheme = "ftp";
break; break;
case "WEBDAV": case FileSourceType.WebDAV:
scheme = "https"; scheme = "https";
break; break;
} }
@@ -81,7 +81,7 @@ namespace BetterLyrics.WinUI3.Controls
{ {
string finalName = HostBox.Text.Trim(); string finalName = HostBox.Text.Trim();
if (_protocolType.Equals("Local", StringComparison.OrdinalIgnoreCase)) if (_fileSourceType == FileSourceType.Local)
{ {
if (string.IsNullOrWhiteSpace(PathBox.Text)) if (string.IsNullOrWhiteSpace(PathBox.Text))
throw new ArgumentException(_localizationService.GetLocalizedString("RemoteServerConfigControlPathRequired")); throw new ArgumentException(_localizationService.GetLocalizedString("RemoteServerConfigControlPathRequired"));
@@ -109,17 +109,15 @@ namespace BetterLyrics.WinUI3.Controls
} }
else else
{ {
finalName = $"{_protocolType} - {HostBox.Text}"; finalName = $"{_fileSourceType} - {HostBox.Text}";
} }
Enum.TryParse(_protocolType, true, out FileSourceType sourceType);
string scheme = GetScheme(); string scheme = GetScheme();
var folder = new MediaFolder var folder = new MediaFolder
{ {
Name = finalName, Name = finalName,
SourceType = sourceType, SourceType = _fileSourceType,
UriScheme = scheme, UriScheme = scheme,
UriHost = HostBox.Text.Trim(), // ȥ<><C8A5><EFBFBD><EFBFBD>β<EFBFBD>ո<EFBFBD> UriHost = HostBox.Text.Trim(), // ȥ<><C8A5><EFBFBD><EFBFBD>β<EFBFBD>ո<EFBFBD>
@@ -144,12 +142,7 @@ namespace BetterLyrics.WinUI3.Controls
{ {
ProgressBar.Visibility = visibility; ProgressBar.Visibility = visibility;
} }
private void PathBox_TextChanged(object sender, TextChangedEventArgs e)
{
CheckPathForWarning();
}
private void CheckPathForWarning() private void CheckPathForWarning()
{ {
string? path = PathBox.Text?.Trim(); string? path = PathBox.Text?.Trim();
@@ -178,6 +171,11 @@ namespace BetterLyrics.WinUI3.Controls
} }
} }
private void PathBox_TextChanged(object sender, TextChangedEventArgs e)
{
CheckPathForWarning();
}
private async void BrowseButton_Click(object sender, RoutedEventArgs e) private async void BrowseButton_Click(object sender, RoutedEventArgs e)
{ {
try try

View File

@@ -15,7 +15,7 @@ namespace BetterLyrics.WinUI3.Converter
FileSourceType.Local => "\uE8B7", // Folder FileSourceType.Local => "\uE8B7", // Folder
FileSourceType.SMB => "\uE839", // Network FileSourceType.SMB => "\uE839", // Network
FileSourceType.FTP => "\uE838", // Globe FileSourceType.FTP => "\uE838", // Globe
FileSourceType.WebDav => "\uE753", // Cloud FileSourceType.WebDAV => "\uE753", // Cloud
_ => "\uE8B7" _ => "\uE8B7"
}; };
} }

View File

@@ -5,6 +5,6 @@
Local, Local,
SMB, SMB,
FTP, FTP,
WebDav WebDAV
} }
} }

View File

@@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace BetterLyrics.WinUI3.Helper
{
public static class WebDavProbeHelper
{
/// <summary>
/// 自动检测目标主机是 HTTP 还是 HTTPS
/// </summary>
/// <returns>返回 "https" 或 "http",如果都连不上返回 null</returns>
public static async Task<string?> DetectSchemeAsync(string host, int port, string? path, string? user, string? pwd)
{
if (port == 443) return "https";
if (port == 80) return "http";
// 忽略 SSL 证书错误,因为很多 NAS 是自签名的
var handler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true,
UseProxy = false
};
// 设置认证
if (!string.IsNullOrEmpty(user) && !string.IsNullOrEmpty(pwd))
{
handler.Credentials = new NetworkCredential(user, pwd);
handler.PreAuthenticate = true;
}
using var client = new HttpClient(handler);
client.Timeout = TimeSpan.FromSeconds(3);
if (await ProbeUrlAsync(client, "https", host, port, path))
{
return "https";
}
if (await ProbeUrlAsync(client, "http", host, port, path))
{
return "http";
}
// 都失败
return null;
}
private static async Task<bool> ProbeUrlAsync(HttpClient client, string scheme, string host, int port, string? path)
{
try
{
var uriBuilder = new UriBuilder(scheme, host, port, path);
// 使用 PROPFIND 方法,且 Depth 为 0只检测根节点是否存在不拉取列表
var request = new HttpRequestMessage(new HttpMethod("PROPFIND"), uriBuilder.Uri);
request.Headers.Add("Depth", "0");
var response = await client.SendAsync(request);
return response.StatusCode != HttpStatusCode.BadRequest;
}
catch
{
return false;
}
}
}
}

View File

@@ -3,6 +3,7 @@ using BetterLyrics.WinUI3.Helper;
using BetterLyrics.WinUI3.Services.FileSystemService; using BetterLyrics.WinUI3.Services.FileSystemService;
using BetterLyrics.WinUI3.Services.FileSystemService.Providers; using BetterLyrics.WinUI3.Services.FileSystemService.Providers;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using Microsoft.UI.Xaml.Controls;
using System; using System;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using System.Threading; using System.Threading;
@@ -30,6 +31,7 @@ namespace BetterLyrics.WinUI3.Models
[ObservableProperty][NotifyPropertyChangedFor(nameof(UriString))] public partial string UriHost { get; set; } [ObservableProperty][NotifyPropertyChangedFor(nameof(UriString))] public partial string UriHost { get; set; }
[ObservableProperty][NotifyPropertyChangedFor(nameof(UriString))] public partial int UriPort { get; set; } = -1; [ObservableProperty][NotifyPropertyChangedFor(nameof(UriString))] public partial int UriPort { get; set; } = -1;
[JsonPropertyName("Path")]
[ObservableProperty] [ObservableProperty]
[NotifyPropertyChangedRecipients] [NotifyPropertyChangedRecipients]
[NotifyPropertyChangedFor(nameof(ConnectionSummary))] [NotifyPropertyChangedFor(nameof(ConnectionSummary))]
@@ -40,12 +42,10 @@ namespace BetterLyrics.WinUI3.Models
[JsonIgnore] public bool IsLocal => SourceType == FileSourceType.Local; [JsonIgnore] public bool IsLocal => SourceType == FileSourceType.Local;
[JsonIgnore][ObservableProperty] public partial bool IsIndexing { get; set; } = false; [ObservableProperty][NotifyPropertyChangedRecipients] public partial bool IsProcessing { get; set; } = false;
[JsonIgnore][ObservableProperty] public partial double IndexingProgress { get; set; } = 0; [ObservableProperty] public partial double IndexingProgress { get; set; } = 0;
[JsonIgnore][ObservableProperty] public partial string IndexingStatusText { get; set; } = ""; [ObservableProperty] public partial string StatusText { get; set; } = "";
[ObservableProperty] public partial InfoBarSeverity StatusSeverity { get; set; } = InfoBarSeverity.Informational;
[JsonIgnore][ObservableProperty] public partial bool IsCleaningUp { get; set; } = false;
[JsonIgnore][ObservableProperty] public partial string CleaningUpStatusText { get; set; } = "";
[ObservableProperty][NotifyPropertyChangedRecipients] public partial DateTime? LastSyncTime { get; set; } [ObservableProperty][NotifyPropertyChangedRecipients] public partial DateTime? LastSyncTime { get; set; }
[ObservableProperty][NotifyPropertyChangedRecipients] public partial AutoScanInterval ScanInterval { get; set; } = AutoScanInterval.Disabled; [ObservableProperty][NotifyPropertyChangedRecipients] public partial AutoScanInterval ScanInterval { get; set; } = AutoScanInterval.Disabled;
@@ -118,7 +118,7 @@ namespace BetterLyrics.WinUI3.Models
FileSourceType.Local => new LocalFileSystem(this), FileSourceType.Local => new LocalFileSystem(this),
FileSourceType.SMB => new SMBFileSystem(this), FileSourceType.SMB => new SMBFileSystem(this),
FileSourceType.FTP => new FTPFileSystem(this), FileSourceType.FTP => new FTPFileSystem(this),
FileSourceType.WebDav => new WebDavFileSystem(this), FileSourceType.WebDAV => new WebDavFileSystem(this),
_ => throw new NotImplementedException() _ => throw new NotImplementedException()
}; };
} }

View File

@@ -0,0 +1,26 @@
using SQLite;
using System;
using System.Collections.Generic;
using System.Text;
namespace BetterLyrics.WinUI3.Models
{
[Table("PlayHistory")]
public class PlayHistoryItem
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[Indexed] public string Title { get; set; }
[Indexed] public string Artist { get; set; }
public string Album { get; set; }
public string AlbumArtHash { get; set; } // 不同播放器来源的图可能不同
[Indexed] public DateTime StartedAt { get; set; }
public double DurationPlayedMs { get; set; }
public double TotalDurationMs { get; set; }
[Indexed]
public string PlayerID { get; set; } // "Spotify", "QQMusic", etc.
}
}

View File

@@ -8,6 +8,7 @@ using BetterLyrics.WinUI3.ViewModels;
using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.Mvvm.Messaging.Messages; using CommunityToolkit.Mvvm.Messaging.Messages;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.UI.Xaml.Controls;
using SQLite; using SQLite;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
@@ -241,8 +242,10 @@ namespace BetterLyrics.WinUI3.Services.FileSystemService
{ {
_dispatcherQueue.TryEnqueue(() => _dispatcherQueue.TryEnqueue(() =>
{ {
folder.CleaningUpStatusText = _localizationService.GetLocalizedString("FileSystemServicePrepareToClean"); folder.IndexingProgress = 0;
folder.IsCleaningUp = true; folder.StatusSeverity = InfoBarSeverity.Informational;
folder.StatusText = _localizationService.GetLocalizedString("FileSystemServicePrepareToClean");
folder.IsProcessing = true;
}); });
if (_folderTimerTokens.TryRemove(folder.Id, out var timerCts)) if (_folderTimerTokens.TryRemove(folder.Id, out var timerCts))
@@ -266,7 +269,7 @@ namespace BetterLyrics.WinUI3.Services.FileSystemService
{ {
_dispatcherQueue.TryEnqueue(() => _dispatcherQueue.TryEnqueue(() =>
{ {
folder.CleaningUpStatusText = _localizationService.GetLocalizedString("FileSystemServiceCleaningCache"); folder.StatusText = _localizationService.GetLocalizedString("FileSystemServiceCleaningCache");
}); });
await InitializeAsync(); await InitializeAsync();
@@ -295,8 +298,7 @@ namespace BetterLyrics.WinUI3.Services.FileSystemService
{ {
_dispatcherQueue.TryEnqueue(() => _dispatcherQueue.TryEnqueue(() =>
{ {
folder.CleaningUpStatusText = ""; folder.IsProcessing = false;
folder.IsCleaningUp = false;
folder.LastSyncTime = null; folder.LastSyncTime = null;
}); });
} }
@@ -311,27 +313,32 @@ namespace BetterLyrics.WinUI3.Services.FileSystemService
_dispatcherQueue.TryEnqueue(() => _dispatcherQueue.TryEnqueue(() =>
{ {
folder.IsIndexing = true; folder.StatusSeverity = InfoBarSeverity.Informational;
folder.IsProcessing = true;
folder.IndexingProgress = 0; folder.IndexingProgress = 0;
folder.IndexingStatusText = _localizationService.GetLocalizedString("FileSystemServiceWaitingForScan"); folder.StatusText = _localizationService.GetLocalizedString("FileSystemServiceWaitingForScan");
}); });
try try
{ {
await _folderScanLock.WaitAsync(scanCts.Token); await _folderScanLock.WaitAsync(scanCts.Token);
_dispatcherQueue.TryEnqueue(() => folder.IndexingStatusText = _localizationService.GetLocalizedString("FileSystemServiceConnecting")); _dispatcherQueue.TryEnqueue(() => folder.StatusText = _localizationService.GetLocalizedString("FileSystemServiceConnecting"));
await InitializeAsync(); await InitializeAsync();
using var fs = folder.CreateFileSystem(); using var fs = folder.CreateFileSystem();
if (fs == null || !await fs.ConnectAsync()) if (fs == null || !await fs.ConnectAsync())
{ {
_dispatcherQueue.TryEnqueue(() => folder.IndexingStatusText = _localizationService.GetLocalizedString("FileSystemServiceConnectFailed")); _dispatcherQueue.TryEnqueue(() =>
{
folder.StatusSeverity = InfoBarSeverity.Error;
folder.StatusText = _localizationService.GetLocalizedString("FileSystemServiceConnectFailed");
});
return; return;
} }
_dispatcherQueue.TryEnqueue(() => folder.IndexingStatusText = _localizationService.GetLocalizedString("FileSystemServiceFetchingFileList")); _dispatcherQueue.TryEnqueue(() => folder.StatusText = _localizationService.GetLocalizedString("FileSystemServiceFetchingFileList"));
var filesToProcess = new List<FileCacheEntity>(); var filesToProcess = new List<FileCacheEntity>();
var foldersToScan = new Queue<FileCacheEntity?>(); var foldersToScan = new Queue<FileCacheEntity?>();
@@ -374,10 +381,10 @@ namespace BetterLyrics.WinUI3.Services.FileSystemService
if (current % 10 == 0 || current == total) if (current % 10 == 0 || current == total)
{ {
double progress = (double)current / total * 100; double progress = (double)current / total * 100;
_dispatcherQueue.TryEnqueue(Microsoft.UI.Dispatching.DispatcherQueuePriority.Low, () => _dispatcherQueue.TryEnqueue(() =>
{ {
folder.IndexingProgress = progress; folder.IndexingProgress = progress;
folder.IndexingStatusText = $"{_localizationService.GetLocalizedString("FileSystemServiceParsing")} {current}/{total}"; folder.StatusText = $"{_localizationService.GetLocalizedString("FileSystemServiceParsing")} {current}/{total}";
}); });
} }
@@ -461,6 +468,8 @@ namespace BetterLyrics.WinUI3.Services.FileSystemService
_dispatcherQueue.TryEnqueue(() => _dispatcherQueue.TryEnqueue(() =>
{ {
folder.StatusSeverity = InfoBarSeverity.Success;
folder.StatusText = _localizationService.GetLocalizedString("FileSystemServiceReady");
folder.LastSyncTime = DateTime.Now; folder.LastSyncTime = DateTime.Now;
}); });
} }
@@ -470,7 +479,11 @@ namespace BetterLyrics.WinUI3.Services.FileSystemService
} }
catch (Exception ex) catch (Exception ex)
{ {
_dispatcherQueue.TryEnqueue(() => folder.IndexingStatusText = ex.Message); _dispatcherQueue.TryEnqueue(() =>
{
folder.StatusText = ex.Message;
folder.StatusSeverity = InfoBarSeverity.Error;
});
} }
finally finally
{ {
@@ -480,9 +493,8 @@ namespace BetterLyrics.WinUI3.Services.FileSystemService
_dispatcherQueue.TryEnqueue(() => _dispatcherQueue.TryEnqueue(() =>
{ {
folder.IsIndexing = false; folder.IsProcessing = false;
folder.IndexingStatusText = ""; folder.IndexingProgress = 0;
folder.IndexingProgress = 100;
}); });
} }
} }

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>الوضع المثبت (Docked)</value> <value>الوضع المثبت (Docked)</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>تم التصدير بنجاح</value> <value>تم التصدير بنجاح</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>التحضير لتنظيف ذاكرة التخزين المؤقت...</value> <value>التحضير لتنظيف ذاكرة التخزين المؤقت...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>تم اكتشاف مسار الدليل الجذر. قد يحتوي فهرس القرص الكامل على عدد كبير من الملفات غير الوسائط ويتسبب في استغراق الفحص وقتاً طويلاً جداً. يوصى بتحديد دليل فرعي محدد.</value> <value>تم اكتشاف مسار الدليل الجذر. قد يحتوي فهرس القرص الكامل على عدد كبير من الملفات غير الوسائط ويتسبب في استغراق الفحص وقتاً طويلاً جداً. يوصى بتحديد دليل فرعي محدد.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>كل الموسيقى</value> <value>كل الموسيقى</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>مسح قائمة الانتظار</value> <value>مسح قائمة الانتظار</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>Angedockter Modus</value> <value>Angedockter Modus</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>Export erfolgreich</value> <value>Export erfolgreich</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>Bereinigung des Caches vorbereiten...</value> <value>Bereinigung des Caches vorbereiten...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>Der Pfad zum Stammverzeichnis wurde erkannt. Ein vollständiger Festplattenindex kann eine große Anzahl von Nicht-Mediendateien enthalten und dazu führen, dass die Suche zu lange dauert. Es wird empfohlen, ein bestimmtes Unterverzeichnis anzugeben.</value> <value>Der Pfad zum Stammverzeichnis wurde erkannt. Ein vollständiger Festplattenindex kann eine große Anzahl von Nicht-Mediendateien enthalten und dazu führen, dass die Suche zu lange dauert. Es wird empfohlen, ein bestimmtes Unterverzeichnis anzugeben.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>Alle Musikstücke</value> <value>Alle Musikstücke</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>Warteschlange leeren</value> <value>Warteschlange leeren</value>
</data> </data>

View File

@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>Docked Mode</value> <value>Docked Mode</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value>Error</value>
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>Export successful</value> <value>Export successful</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>Preparing to clean cache...</value> <value>Preparing to clean cache...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value>Ready</value>
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>The root directory path has been detected. A full disk index may contain a large number of non-media files and cause the scan to take too long. It is recommended to specify a specific subdirectory.</value> <value>The root directory path has been detected. A full disk index may contain a large number of non-media files and cause the scan to take too long. It is recommended to specify a specific subdirectory.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>All Music</value> <value>All Music</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value>The data is being processed. You can check the detailed progress in the settings.</value>
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>Clear queue</value> <value>Clear queue</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>Modo Acoplado</value> <value>Modo Acoplado</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>Exportación exitosa</value> <value>Exportación exitosa</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>Preparando la limpieza de caché...</value> <value>Preparando la limpieza de caché...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>Se ha detectado la ruta del directorio raíz. Un índice de disco completo puede contener un gran número de archivos no multimedia y hacer que la exploración dure demasiado tiempo. Se recomienda especificar un subdirectorio concreto.</value> <value>Se ha detectado la ruta del directorio raíz. Un índice de disco completo puede contener un gran número de archivos no multimedia y hacer que la exploración dure demasiado tiempo. Se recomienda especificar un subdirectorio concreto.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>Toda la música</value> <value>Toda la música</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>Borrar cola</value> <value>Borrar cola</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>Mode Ancré</value> <value>Mode Ancré</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>Exportation réussie</value> <value>Exportation réussie</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>Préparation du nettoyage du cache...</value> <value>Préparation du nettoyage du cache...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>Le chemin du répertoire racine a été détecté. Un index de disque complet peut contenir un grand nombre de fichiers non multimédias et faire durer l'analyse trop longtemps. Il est recommandé de spécifier un sous-répertoire spécifique.</value> <value>Le chemin du répertoire racine a été détecté. Un index de disque complet peut contenir un grand nombre de fichiers non multimédias et faire durer l'analyse trop longtemps. Il est recommandé de spécifier un sous-répertoire spécifique.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>Toute la musique</value> <value>Toute la musique</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>Vider la file d'attente</value> <value>Vider la file d'attente</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>डॉक्ड मोड</value> <value>डॉक्ड मोड</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>निर्यात सफल रहा</value> <value>निर्यात सफल रहा</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>Preparing to clean cache...</value> <value>Preparing to clean cache...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>The root directory path has been detected. A full disk index may contain a large number of non-media files and cause the scan to take too long. It is recommended to specify a specific subdirectory.</value> <value>The root directory path has been detected. A full disk index may contain a large number of non-media files and cause the scan to take too long. It is recommended to specify a specific subdirectory.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>सभी गाने</value> <value>सभी गाने</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>प्लेइंग कतार साफ़ करें</value> <value>प्लेइंग कतार साफ़ करें</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>Mode Dok</value> <value>Mode Dok</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>Ekspor berhasil</value> <value>Ekspor berhasil</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>Bersiap untuk membersihkan cache...</value> <value>Bersiap untuk membersihkan cache...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>Jalur direktori root telah terdeteksi. Indeks disk penuh mungkin berisi sejumlah besar file non-media dan menyebabkan pemindaian memakan waktu terlalu lama. Disarankan untuk menentukan subdirektori tertentu.</value> <value>Jalur direktori root telah terdeteksi. Indeks disk penuh mungkin berisi sejumlah besar file non-media dan menyebabkan pemindaian memakan waktu terlalu lama. Disarankan untuk menentukan subdirektori tertentu.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>Semua Musik</value> <value>Semua Musik</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>Bersihkan antrean putar</value> <value>Bersihkan antrean putar</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>ドッキングモード</value> <value>ドッキングモード</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>エクスポートが成功しました</value> <value>エクスポートが成功しました</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>キャッシュ・クリーン準備中</value> <value>キャッシュ・クリーン準備中</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>ルートディレクトリのパスが検出された。フルディスクインデックスにはメディア以外のファイルが多数含まれている可能性があり、スキャンに時間がかかりすぎる。特定のサブディレクトリを指定することを推奨する。</value> <value>ルートディレクトリのパスが検出された。フルディスクインデックスにはメディア以外のファイルが多数含まれている可能性があり、スキャンに時間がかかりすぎる。特定のサブディレクトリを指定することを推奨する。</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>すべてのミュージック</value> <value>すべてのミュージック</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>キューをクリア</value> <value>キューをクリア</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>도킹 모드</value> <value>도킹 모드</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>내보내기 성공</value> <value>내보내기 성공</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>캐시 정리 준비 중...</value> <value>캐시 정리 준비 중...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>루트 디렉터리 경로가 감지되었습니다. 전체 디스크 인덱스에 미디어가 아닌 파일이 많이 포함되어 있어 스캔 시간이 너무 오래 걸릴 수 있습니다. 특정 하위 디렉터리를 지정하는 것이 좋습니다.</value> <value>루트 디렉터리 경로가 감지되었습니다. 전체 디스크 인덱스에 미디어가 아닌 파일이 많이 포함되어 있어 스캔 시간이 너무 오래 걸릴 수 있습니다. 특정 하위 디렉터리를 지정하는 것이 좋습니다.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>모든 음악</value> <value>모든 음악</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>재생 대기열 비우기</value> <value>재생 대기열 비우기</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>Mod Dok</value> <value>Mod Dok</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>Eksport berjaya</value> <value>Eksport berjaya</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>Preparing to clean cache...</value> <value>Preparing to clean cache...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>The root directory path has been detected. A full disk index may contain a large number of non-media files and cause the scan to take too long. It is recommended to specify a specific subdirectory.</value> <value>The root directory path has been detected. A full disk index may contain a large number of non-media files and cause the scan to take too long. It is recommended to specify a specific subdirectory.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>Semua Muzik</value> <value>Semua Muzik</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>Kosongkan baris gilir main</value> <value>Kosongkan baris gilir main</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>Modo Acoplado</value> <value>Modo Acoplado</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>Exportação bem-sucedida</value> <value>Exportação bem-sucedida</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>A preparar a limpeza da cache...</value> <value>A preparar a limpeza da cache...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>O caminho do diretório raiz foi detectado. Um índice de disco completo pode conter um grande número de ficheiros não multimédia e fazer com que a pesquisa demore demasiado tempo. Recomenda-se a especificação de um subdiretório específico.</value> <value>O caminho do diretório raiz foi detectado. Um índice de disco completo pode conter um grande número de ficheiros não multimédia e fazer com que a pesquisa demore demasiado tempo. Recomenda-se a especificação de um subdiretório específico.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>Todas as Músicas</value> <value>Todas as Músicas</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>Limpar fila de reprodução</value> <value>Limpar fila de reprodução</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>Закрепленный режим</value> <value>Закрепленный режим</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>Экспорт выполнен успешно</value> <value>Экспорт выполнен успешно</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>Подготовка к очистке кэша...</value> <value>Подготовка к очистке кэша...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>Обнаружен путь к корневому каталогу. Полный индекс диска может содержать большое количество файлов, не относящихся к мультимедиа, что приведет к слишком долгому сканированию. Рекомендуется указывать конкретный подкаталог.</value> <value>Обнаружен путь к корневому каталогу. Полный индекс диска может содержать большое количество файлов, не относящихся к мультимедиа, что приведет к слишком долгому сканированию. Рекомендуется указывать конкретный подкаталог.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>Вся музыка</value> <value>Вся музыка</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>Очистить очередь воспроизведения</value> <value>Очистить очередь воспроизведения</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>โหมดเชื่อมต่อ (Docked)</value> <value>โหมดเชื่อมต่อ (Docked)</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>ส่งออกสำเร็จ</value> <value>ส่งออกสำเร็จ</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>กำลังเตรียมล้างแคช...</value> <value>กำลังเตรียมล้างแคช...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>พบเส้นทางไดเรกทอรีรากแล้ว ดัชนีของดิสก์ทั้งหมดอาจมีไฟล์ที่ไม่ใช่สื่อจำนวนมากและทำให้การสแกนใช้เวลานานเกินไป ขอแนะนำให้ระบุไดเรกทอรีย่อยเฉพาะ</value> <value>พบเส้นทางไดเรกทอรีรากแล้ว ดัชนีของดิสก์ทั้งหมดอาจมีไฟล์ที่ไม่ใช่สื่อจำนวนมากและทำให้การสแกนใช้เวลานานเกินไป ขอแนะนำให้ระบุไดเรกทอรีย่อยเฉพาะ</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>เพลงทั้งหมด</value> <value>เพลงทั้งหมด</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>ล้างคิวการเล่น</value> <value>ล้างคิวการเล่น</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>Chế độ neo (Docked)</value> <value>Chế độ neo (Docked)</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>Xuất thành công</value> <value>Xuất thành công</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>Đang chuẩn bị xóa bộ nhớ cache...</value> <value>Đang chuẩn bị xóa bộ nhớ cache...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>Đường dẫn thư mục gốc đã được phát hiện. Chỉ mục đĩa đầy đủ có thể chứa một lượng lớn tệp không phải phương tiện và khiến quá trình quét mất quá nhiều thời gian. Khuyến nghị chỉ định một thư mục con cụ thể.</value> <value>Đường dẫn thư mục gốc đã được phát hiện. Chỉ mục đĩa đầy đủ có thể chứa một lượng lớn tệp không phải phương tiện và khiến quá trình quét mất quá nhiều thời gian. Khuyến nghị chỉ định một thư mục con cụ thể.</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>Tất cả bài hát</value> <value>Tất cả bài hát</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>Xóa hàng đợi phát</value> <value>Xóa hàng đợi phát</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>停靠模式</value> <value>停靠模式</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value>错误</value>
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>导出成功</value> <value>导出成功</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>正在准备清理缓存...</value> <value>正在准备清理缓存...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value>就绪</value>
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>已检测到根目录路径。全磁盘索引可能包含大量非媒体文件,导致扫描时间过长。建议指定一个特定的子目录。</value> <value>已检测到根目录路径。全磁盘索引可能包含大量非媒体文件,导致扫描时间过长。建议指定一个特定的子目录。</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>所有音乐</value> <value>所有音乐</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value>数据处理中,可前往设置查看详细进度</value>
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>清除播放队列</value> <value>清除播放队列</value>
</data> </data>

View File

@@ -59,46 +59,46 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string"/> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string"/> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string"/> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space"/> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
@@ -159,6 +159,9 @@
<data name="DockedMode" xml:space="preserve"> <data name="DockedMode" xml:space="preserve">
<value>停靠模式</value> <value>停靠模式</value>
</data> </data>
<data name="Error" xml:space="preserve">
<value />
</data>
<data name="ExportSettingsSuccess" xml:space="preserve"> <data name="ExportSettingsSuccess" xml:space="preserve">
<value>匯出成功</value> <value>匯出成功</value>
</data> </data>
@@ -183,6 +186,9 @@
<data name="FileSystemServicePrepareToClean" xml:space="preserve"> <data name="FileSystemServicePrepareToClean" xml:space="preserve">
<value>準備清除快取...</value> <value>準備清除快取...</value>
</data> </data>
<data name="FileSystemServiceReady" xml:space="preserve">
<value />
</data>
<data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve"> <data name="FileSystemServiceRootDirectoryWarning" xml:space="preserve">
<value>已偵測到根目錄路徑。全磁碟索引可能包含大量非媒體檔案,導致掃描時間過長。建議指定特定的子目錄。</value> <value>已偵測到根目錄路徑。全磁碟索引可能包含大量非媒體檔案,導致掃描時間過長。建議指定特定的子目錄。</value>
</data> </data>
@@ -408,6 +414,9 @@
<data name="MusicGalleryPageAllSongs" xml:space="preserve"> <data name="MusicGalleryPageAllSongs" xml:space="preserve">
<value>所有音樂</value> <value>所有音樂</value>
</data> </data>
<data name="MusicGalleryPageDataLoading.Message" xml:space="preserve">
<value />
</data>
<data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve"> <data name="MusicGalleryPageEmptyPlayingQueue.Text" xml:space="preserve">
<value>清除播放佇列</value> <value>清除播放佇列</value>
</data> </data>

View File

@@ -1,4 +1,5 @@
using BetterLyrics.WinUI3.Controls; using BetterLyrics.WinUI3.Controls;
using BetterLyrics.WinUI3.Enums;
using BetterLyrics.WinUI3.Helper; using BetterLyrics.WinUI3.Helper;
using BetterLyrics.WinUI3.Hooks; using BetterLyrics.WinUI3.Hooks;
using BetterLyrics.WinUI3.Models; using BetterLyrics.WinUI3.Models;
@@ -9,6 +10,7 @@ using BetterLyrics.WinUI3.Services.SettingsService;
using BetterLyrics.WinUI3.Views; using BetterLyrics.WinUI3.Views;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.WinUI.Animations;
using Microsoft.UI.Xaml; using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Controls;
using System; using System;
@@ -51,23 +53,25 @@ namespace BetterLyrics.WinUI3.ViewModels
public void SyncFolder(MediaFolder folder) public void SyncFolder(MediaFolder folder)
{ {
if (folder.IsIndexing) return; if (folder.IsProcessing) return;
_ = Task.Run(async () => await _fileSystemService.ScanMediaFolderAsync(folder, CancellationToken.None)); _ = Task.Run(async () => await _fileSystemService.ScanMediaFolderAsync(folder, CancellationToken.None));
} }
[RelayCommand] [RelayCommand]
private async Task AddMediaSourceAsync(string protocolType) private async Task AddMediaSourceAsync(string fileSourceTypeName)
{ {
FileSourceType fileSourceType = Enum.Parse<FileSourceType>(fileSourceTypeName);
var dialog = new ContentDialog var dialog = new ContentDialog
{ {
XamlRoot = WindowHook.GetWindow<SettingsWindow>()?.Content.XamlRoot, XamlRoot = WindowHook.GetWindow<SettingsWindow>()?.Content.XamlRoot,
Style = Application.Current.Resources["DefaultContentDialogStyle"] as Style, Style = Application.Current.Resources["DefaultContentDialogStyle"] as Style,
Title = protocolType == "Local" ? _localizationService.GetLocalizedString("MediaSettingsControlLocalFolder") : protocolType, Title = fileSourceType == FileSourceType.Local ? _localizationService.GetLocalizedString("MediaSettingsControlLocalFolder") : Enum.GetName(fileSourceType),
PrimaryButtonText = _localizationService.GetLocalizedString("Add"), PrimaryButtonText = _localizationService.GetLocalizedString("Add"),
CloseButtonText = _localizationService.GetLocalizedString("Cancel"), CloseButtonText = _localizationService.GetLocalizedString("Cancel"),
DefaultButton = ContentDialogButton.Primary, DefaultButton = ContentDialogButton.Primary,
Content = new RemoteServerConfigControl(protocolType) Content = new RemoteServerConfigControl(fileSourceType)
}; };
dialog.PrimaryButtonClick += async (s, e) => dialog.PrimaryButtonClick += async (s, e) =>
@@ -86,13 +90,13 @@ namespace BetterLyrics.WinUI3.ViewModels
{ {
var tempFolder = configControl.GetConfig(); var tempFolder = configControl.GetConfig();
if (protocolType == "Local") if (fileSourceType == FileSourceType.Local)
{ {
string path = tempFolder.UriPath; string path = tempFolder.UriPath;
if (!System.IO.Directory.Exists(path)) if (!Directory.Exists(path))
{ {
throw new System.IO.DirectoryNotFoundException(_localizationService.GetLocalizedString("RemoteServerConfigControlPathNotExisted")); throw new DirectoryNotFoundException(_localizationService.GetLocalizedString("RemoteServerConfigControlPathNotExisted"));
} }
var normalizedPath = Path.GetFullPath(path).TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar; var normalizedPath = Path.GetFullPath(path).TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar;
@@ -126,6 +130,29 @@ namespace BetterLyrics.WinUI3.ViewModels
} }
else else
{ {
if (fileSourceType == FileSourceType.WebDAV)
{
// 使用辅助类探测协议
string? detectedScheme = await WebDavProbeHelper.DetectSchemeAsync(
tempFolder.UriHost,
tempFolder.UriPort,
tempFolder.UriPath,
tempFolder.UserName,
tempFolder.Password
);
if (detectedScheme == null)
{
// 探测失败,直接报错返回
configControl.ShowError(_localizationService.GetLocalizedString("SettingsPageServerTestFailedInfo"));
deferral.Complete();
return;
}
// 将探测到的正确协议 (http 或 https) 写入配置对象
tempFolder.UriScheme = detectedScheme;
}
var newUriString = tempFolder.GetStandardUri().AbsoluteUri.TrimEnd('/') + "/"; var newUriString = tempFolder.GetStandardUri().AbsoluteUri.TrimEnd('/') + "/";
foreach (var existingFolder in AppSettings.LocalMediaFolders) foreach (var existingFolder in AppSettings.LocalMediaFolders)
@@ -208,10 +235,5 @@ namespace BetterLyrics.WinUI3.ViewModels
await dialog.ShowAsync(); await dialog.ShowAsync();
} }
private void ShowErrorTip(RemoteServerConfigControl control, string message)
{
control.ShowError(message);
}
} }
} }

View File

@@ -274,8 +274,6 @@ namespace BetterLyrics.WinUI3.ViewModels
{ {
_refreshSongsTimer.Debounce(() => _refreshSongsTimer.Debounce(() =>
{ {
IsDataLoading = true;
_ = Task.Run(async () => _ = Task.Run(async () =>
{ {
var enabledFolderIds = _settingsService.AppSettings.LocalMediaFolders var enabledFolderIds = _settingsService.AppSettings.LocalMediaFolders
@@ -304,8 +302,6 @@ namespace BetterLyrics.WinUI3.ViewModels
IsLocalMediaNotFound = !_filteredTracks.Any(); IsLocalMediaNotFound = !_filteredTracks.Any();
ApplySongOrderType(); ApplySongOrderType();
IsDataLoading = false;
}); });
}); });
}, Time.DebounceTimeout); }, Time.DebounceTimeout);
@@ -491,8 +487,7 @@ namespace BetterLyrics.WinUI3.ViewModels
if (targetFolder == null) if (targetFolder == null)
{ {
throw new FileNotFoundException(null, PlayingTrack.DecodedAbsoluteUri);
throw new Exception($"找不到文件 {PlayingTrack.FileName} 对应的存储配置。请检查服务器设置是否已启用。");
} }
_currentProvider = targetFolder.CreateFileSystem(); _currentProvider = targetFolder.CreateFileSystem();
@@ -509,7 +504,7 @@ namespace BetterLyrics.WinUI3.ViewModels
if (sourceStream == null) if (sourceStream == null)
{ {
throw new FileNotFoundException("无法打开文件流"); throw new FileNotFoundException(null, fileCacheStub.Uri);
} }
if (sourceStream.CanSeek) if (sourceStream.CanSeek)
@@ -561,7 +556,7 @@ namespace BetterLyrics.WinUI3.ViewModels
} }
catch (Exception ex) catch (Exception ex)
{ {
ToastHelper.ShowToast($"PlayTrackAsync: Error", ex.Message, InfoBarSeverity.Error); ToastHelper.ShowToast("Error", ex.Message, InfoBarSeverity.Error);
_timelineController.Pause(); _timelineController.Pause();
} }
} }
@@ -665,6 +660,10 @@ namespace BetterLyrics.WinUI3.ViewModels
{ {
RefreshSongs(); RefreshSongs();
} }
else if (message.PropertyName == nameof(MediaFolder.IsProcessing))
{
IsDataLoading = message.NewValue;
}
} }
} }

View File

@@ -194,6 +194,7 @@
<Grid x:Name="SongViewer" Grid.Column="1"> <Grid x:Name="SongViewer" Grid.Column="1">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="*" /> <RowDefinition Height="*" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
@@ -302,7 +303,13 @@
</StackPanel> </StackPanel>
<SemanticZoom Grid.Row="1"> <InfoBar
x:Uid="MusicGalleryPageDataLoading"
Grid.Row="1"
IsClosable="False"
IsOpen="{x:Bind ViewModel.IsDataLoading, Mode=OneWay}" />
<SemanticZoom Grid.Row="2">
<SemanticZoom.ZoomedInView> <SemanticZoom.ZoomedInView>
<ListView <ListView
x:Name="SongListView" x:Name="SongListView"
@@ -448,7 +455,7 @@
</SemanticZoom.ZoomedOutView> </SemanticZoom.ZoomedOutView>
</SemanticZoom> </SemanticZoom>
<Grid Grid.Row="1" Visibility="{x:Bind ViewModel.IsLocalMediaNotFound, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"> <Grid Grid.Row="2" Visibility="{x:Bind ViewModel.IsLocalMediaNotFound, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}">
<StackPanel <StackPanel
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
@@ -652,24 +659,6 @@
</Grid> </Grid>
<Grid Background="{ThemeResource SolidBackgroundFillColorBaseBrush}" Visibility="{x:Bind ViewModel.IsDataLoading, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}">
<Grid Margin="12">
<Grid.RowDefinitions>
<RowDefinition Height="48" />
<RowDefinition Height="12" />
<RowDefinition Height="*" />
<RowDefinition Height="12" />
<RowDefinition Height="*" />
<RowDefinition Height="12" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<labs:Shimmer Grid.Row="0" CornerRadius="6" />
<labs:Shimmer Grid.Row="2" CornerRadius="6" />
<labs:Shimmer Grid.Row="4" CornerRadius="6" />
<labs:Shimmer Grid.Row="6" CornerRadius="6" />
</Grid>
</Grid>
<VisualStateManager.VisualStateGroups> <VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="PlaybackOrderState"> <VisualStateGroup x:Name="PlaybackOrderState">
<VisualState x:Name="RepeatAll"> <VisualState x:Name="RepeatAll">