Flow.Launcher/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml.cs
DB p dfc9d5b84f - Add SVG convert for firefox
- Add remove cache UI
2025-03-20 19:11:15 +09:00

184 lines
5.9 KiB
C#

using System.Windows;
using Flow.Launcher.Plugin.BrowserBookmark.Models;
using System.Windows.Input;
using System.ComponentModel;
using System.Threading.Tasks;
using System;
using System.IO;
using System.Windows;
using System.Windows.Input;
using System.ComponentModel;
using System.Threading.Tasks;
using Flow.Launcher.Plugin.BrowserBookmark.Models;
namespace Flow.Launcher.Plugin.BrowserBookmark.Views;
public partial class SettingsControl : INotifyPropertyChanged
{
public Settings Settings { get; }
private readonly PluginInitContext _context;
public SettingsControl(Settings settings)
{
// Settings 객체를 직접 받도록 수정
Settings = settings;
InitializeComponent();
DataContext = this;
}
public CustomBrowser SelectedCustomBrowser { get; set; }
public bool LoadChromeBookmark
{
get => Settings.LoadChromeBookmark;
set
{
Settings.LoadChromeBookmark = value;
_ = Task.Run(() => Main.ReloadAllBookmarks());
}
}
public bool LoadFirefoxBookmark
{
get => Settings.LoadFirefoxBookmark;
set
{
Settings.LoadFirefoxBookmark = value;
_ = Task.Run(() => Main.ReloadAllBookmarks());
}
}
public bool LoadEdgeBookmark
{
get => Settings.LoadEdgeBookmark;
set
{
Settings.LoadEdgeBookmark = value;
_ = Task.Run(() => Main.ReloadAllBookmarks());
}
}
public bool OpenInNewBrowserWindow
{
get => Settings.OpenInNewBrowserWindow;
set
{
Settings.OpenInNewBrowserWindow = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(OpenInNewBrowserWindow)));
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NewCustomBrowser(object sender, RoutedEventArgs e)
{
var newBrowser = new CustomBrowser();
var window = new CustomBrowserSettingWindow(newBrowser);
window.ShowDialog();
if (newBrowser is not
{
Name: null,
DataDirectoryPath: null
})
{
Settings.CustomChromiumBrowsers.Add(newBrowser);
_ = Task.Run(() => Main.ReloadAllBookmarks());
}
}
private void DeleteCustomBrowser(object sender, RoutedEventArgs e)
{
if (CustomBrowsers.SelectedItem is CustomBrowser selectedCustomBrowser)
{
Settings.CustomChromiumBrowsers.Remove(selectedCustomBrowser);
_ = Task.Run(() => Main.ReloadAllBookmarks());
}
}
private void MouseDoubleClickOnSelectedCustomBrowser(object sender, MouseButtonEventArgs e)
{
EditSelectedCustomBrowser();
}
private void Others_Click(object sender, RoutedEventArgs e)
{
CustomBrowsersList.Visibility = CustomBrowsersList.Visibility switch
{
Visibility.Collapsed => Visibility.Visible,
_ => Visibility.Collapsed
};
}
private void EditCustomBrowser(object sender, RoutedEventArgs e)
{
EditSelectedCustomBrowser();
}
private void EditSelectedCustomBrowser()
{
if (SelectedCustomBrowser is null)
return;
var window = new CustomBrowserSettingWindow(SelectedCustomBrowser);
var result = window.ShowDialog() ?? false;
if (result)
{
_ = Task.Run(() => Main.ReloadAllBookmarks());
}
}
private void RemoveFaviconCache_Click(object sender, RoutedEventArgs e)
{
try
{
// 플러그인 디렉토리 경로 가져오기
var pluginDir = Main.GetPluginDirectory();
if (string.IsNullOrEmpty(pluginDir))
{
MessageBox.Show("플러그인 디렉토리를 찾을 수 없습니다.", "오류", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
// 파비콘 캐시 디렉토리 경로 지정
string cacheDir = Path.Combine(pluginDir, "Images", "Favicons");
// 디렉토리 존재 확인 및 생성
if (!Directory.Exists(cacheDir))
{
MessageBox.Show("파비콘 캐시 디렉토리가 존재하지 않습니다. 캐시가 비어있거나 아직 생성되지 않았을 수 있습니다.", "알림", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
// 파일 수 확인
var files = Directory.GetFiles(cacheDir);
if (files.Length == 0)
{
MessageBox.Show("파비콘 캐시가 이미 비어 있습니다.", "알림", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
// 디렉토리 내 모든 파일 삭제
int deletedCount = 0;
foreach (var file in files)
{
try
{
File.Delete(file);
deletedCount++;
}
catch (Exception ex)
{
Flow.Launcher.Infrastructure.Logger.Log.Exception(
$"Failed to delete favicon cache file: {file}", ex);
}
}
// 북마크 다시 로드
Main.ReloadAllBookmarks();
// 완료 메시지 표시
MessageBox.Show($"{deletedCount}개의 파비콘 캐시 파일이 삭제되었습니다.", "캐시 삭제 완료", MessageBoxButton.OK, MessageBoxImage.Information);
}
catch (Exception ex)
{
Flow.Launcher.Infrastructure.Logger.Log.Exception("Failed to remove favicon cache", ex);
MessageBox.Show($"파비콘 캐시 삭제 중 오류가 발생했습니다: {ex.Message}", "오류", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}