mirror of
https://github.com/jayfunc/BetterLyrics.git
synced 2026-01-13 03:34:55 +08:00
85 lines
3.4 KiB
C#
85 lines
3.4 KiB
C#
using BetterLyrics.WinUI3.Helper;
|
|
using BetterLyrics.WinUI3.Models;
|
|
using BetterLyrics.WinUI3.Models.Settings;
|
|
using BetterLyrics.WinUI3.Services.LibWatcherService;
|
|
using BetterLyrics.WinUI3.Services.SettingsService;
|
|
using BetterLyrics.WinUI3.Views;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using Microsoft.UI.Xaml;
|
|
using Microsoft.UI.Xaml.Controls;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using WinRT.Interop;
|
|
|
|
namespace BetterLyrics.WinUI3.ViewModels
|
|
{
|
|
public partial class MediaSettingsControlViewModel : BaseViewModel
|
|
{
|
|
private readonly ISettingsService _settingsService;
|
|
|
|
[ObservableProperty]
|
|
public partial AppSettings AppSettings { get; set; }
|
|
|
|
public MediaSettingsControlViewModel(ISettingsService settingsService)
|
|
{
|
|
_settingsService = settingsService;
|
|
AppSettings = _settingsService.AppSettings;
|
|
}
|
|
|
|
[RelayCommand]
|
|
private async Task SelectAndAddFolderAsync(UIElement sender)
|
|
{
|
|
var window = WindowHelper.GetWindowByWindowType<SettingsWindow>();
|
|
if (window == null) return;
|
|
|
|
var picker = new Windows.Storage.Pickers.FolderPicker();
|
|
picker.FileTypeFilter.Add("*");
|
|
|
|
var hwnd = WindowNative.GetWindowHandle(window);
|
|
InitializeWithWindow.Initialize(picker, hwnd);
|
|
|
|
var folder = await picker.PickSingleFolderAsync();
|
|
|
|
if (folder != null)
|
|
{
|
|
AddFolderAsync(folder.Path);
|
|
}
|
|
}
|
|
|
|
private void AddFolderAsync(string path)
|
|
{
|
|
var normalizedPath = Path.GetFullPath(path).TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar;
|
|
|
|
if (AppSettings.LocalMediaFolders.Any(x => Path.GetFullPath(x.Path).TrimEnd(Path.DirectorySeparatorChar).Equals(normalizedPath.TrimEnd(Path.DirectorySeparatorChar), StringComparison.OrdinalIgnoreCase)))
|
|
{
|
|
App.Current.SettingsWindowNotificationPanel?.Notify(App.ResourceLoader!.GetString("SettingsPagePathExistedInfo"), InfoBarSeverity.Warning);
|
|
}
|
|
else if (AppSettings.LocalMediaFolders.Any(item => normalizedPath.StartsWith(Path.GetFullPath(item.Path).TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase)))
|
|
{
|
|
// 添加的文件夹是现有文件夹的子文件夹
|
|
App.Current.SettingsWindowNotificationPanel?.Notify(App.ResourceLoader!.GetString("SettingsPagePathBeIncludedInfo"), InfoBarSeverity.Warning);
|
|
}
|
|
else if (AppSettings.LocalMediaFolders.Any(item => Path.GetFullPath(item.Path).TrimEnd(Path.DirectorySeparatorChar).StartsWith(normalizedPath, StringComparison.OrdinalIgnoreCase))
|
|
)
|
|
{
|
|
// 添加的文件夹是现有文件夹的父文件夹
|
|
App.Current.SettingsWindowNotificationPanel?.Notify(App.ResourceLoader!.GetString("SettingsPagePathIncludingOthersInfo"), InfoBarSeverity.Warning);
|
|
}
|
|
else
|
|
{
|
|
AppSettings.LocalMediaFolders.Add(new LocalMediaFolder(path));
|
|
}
|
|
}
|
|
|
|
public void RemoveFolderAsync(LocalMediaFolder folder)
|
|
{
|
|
AppSettings.LocalMediaFolders.Remove(folder);
|
|
}
|
|
}
|
|
}
|