XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEToolBox

【WPF】XFE工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.IO;
using System.Windows;
using XFEToolBox.Client.Model;
using XFEToolBox.Client.Views.Pages.Popups;
using XFEToolBox.Client.Views.Windows;

namespace XFEToolBox.Client.Utilities;

internal static class ToolWorkshopService
{
    public static void ShowProjectLauncher(Window? owner = null)
    {
        var launcher = new ToolProjectLauncherPopupPage();
        var result = PopupHelper.ShowDialog(launcher, new PopupWindowOptions
        {
            Title = "工具项目",
            Subtitle = "选择历史项目或浏览本地项目",
            Width = 700,
            Height = 520,
            ContentMargin = new Thickness(0)
        });
        if (launcher.CreateProjectRequested)
        {
            ShowNewProjectDialog(owner);
            return;
        }

        if (result == MessageBoxResult.OK && launcher.SelectedProjectPath is not null)
            _ = OpenProjectAsync(launcher.SelectedProjectPath);
    }

    public static void ShowNewProjectDialog(Window? owner = null)
    {
        var creator = new NewToolProjectPopupPage();
        var result = PopupHelper.ShowDialog(creator, new PopupWindowOptions
        {
            Title = "新建工具",
            Subtitle = "创建标准 XFEToolBox 工具工程",
            Width = 620,
            Height = 430,
            ContentMargin = new Thickness(0)
        });
        if (result == MessageBoxResult.OK && creator.CreatedProjectPath is not null)
            _ = OpenProjectAsync(creator.CreatedProjectPath);
    }

    public static async Task<bool> OpenProjectAsync(string projectPath)
    {
        if (string.IsNullOrWhiteSpace(projectPath) || !Directory.Exists(projectPath)) return false;
        var fullPath = Path.GetFullPath(projectPath);
        await ToolProjectWorkspaceService.RememberProjectAsync(fullPath);
        var history = (await ToolProjectWorkspaceService.LoadHistoryAsync())
            .FirstOrDefault(item => item.ProjectPath.Equals(fullPath, StringComparison.OrdinalIgnoreCase));
        if (history is not null) RecentUsageService.RecordProject(history);

        var editor = new ToolCodeEditorWindow(fullPath);
        editor.Show();
        editor.Activate();
        return true;
    }

    public static async Task<bool> ContinueLastProjectAsync()
    {
        var project = (await ToolProjectWorkspaceService.LoadHistoryAsync()).FirstOrDefault(item => item.Exists);
        return project is not null && await OpenProjectAsync(project.ProjectPath);
    }
}