Repositories / GSConfigTool / GsConfigTool / ViewModels / ProjectsViewModel.cs
ProjectsViewModel.cs 2.4 KB
git clone https://rl-dev.de/git/gsconfigtool Raw Download
using GsConfigTool.Helpers;
using GsConfigTool.Models;
using GsConfigTool.Services;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Input;

namespace GsConfigTool.ViewModels;

public class ProjectsViewModel : BaseViewModel
{
    private readonly DatabaseService _db;
    private readonly MainViewModel _main;
    private ObservableCollection<ServerProject> _projects = new();
    private ServerProject? _selectedProject;
    private bool _isLoading;

    public ProjectsViewModel(DatabaseService db, MainViewModel main)
    {
        _db = db;
        _main = main;

        OpenCommand = new RelayCommand(() => _main.OpenProject(SelectedProject), () => SelectedProject != null);
        DeleteCommand = new RelayCommand(DeleteSelected, () => SelectedProject != null);
        RefreshCommand = new RelayCommand(async () => await LoadAsync());
        NewArkSECommand = new RelayCommand(() => _main.NavigateTo("ArkSE"));
        NewArkSACommand = new RelayCommand(() => _main.NavigateTo("ArkSA"));
        NewPalworldCommand = new RelayCommand(() => _main.NavigateTo("Palworld"));

        _ = LoadAsync();
    }

    public ObservableCollection<ServerProject> Projects
    {
        get => _projects;
        set => SetField(ref _projects, value);
    }

    public ServerProject? SelectedProject
    {
        get => _selectedProject;
        set => SetField(ref _selectedProject, value);
    }

    public bool IsLoading
    {
        get => _isLoading;
        set => SetField(ref _isLoading, value);
    }

    public ICommand OpenCommand { get; }
    public ICommand DeleteCommand { get; }
    public ICommand RefreshCommand { get; }
    public ICommand NewArkSECommand { get; }
    public ICommand NewArkSACommand { get; }
    public ICommand NewPalworldCommand { get; }

    private async Task LoadAsync()
    {
        IsLoading = true;
        var list = await _db.GetAllProjectsAsync();
        Projects = new ObservableCollection<ServerProject>(list);
        IsLoading = false;
    }

    private async void DeleteSelected()
    {
        if (SelectedProject == null) return;
        var result = MessageBox.Show(
            $"Projekt \"{SelectedProject.Name}\" wirklich löschen?",
            "Löschen bestätigen",
            MessageBoxButton.YesNo,
            MessageBoxImage.Warning);
        if (result != MessageBoxResult.Yes) return;
        await _db.DeleteProjectAsync(SelectedProject.Id);
        await LoadAsync();
    }
}
24Fire Wuppertaler Tafel Romeo