mirror of
https://fastgit.cc/github.com/sourcegit-scm/sourcegit
synced 2026-04-21 13:20:30 +08:00
123 lines
2.9 KiB
C#
123 lines
2.9 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using Avalonia.Collections;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
|
|
namespace SourceGit.ViewModels
|
|
{
|
|
public class LauncherPage : ObservableObject
|
|
{
|
|
public RepositoryNode Node
|
|
{
|
|
get => _node;
|
|
set => SetProperty(ref _node, value);
|
|
}
|
|
|
|
public object Data
|
|
{
|
|
get => _data;
|
|
set => SetProperty(ref _data, value);
|
|
}
|
|
|
|
public Models.DirtyState DirtyState
|
|
{
|
|
get => _dirtyState;
|
|
private set => SetProperty(ref _dirtyState, value);
|
|
}
|
|
|
|
public Popup Popup
|
|
{
|
|
get => _popup;
|
|
set => SetProperty(ref _popup, value);
|
|
}
|
|
|
|
public AvaloniaList<Models.Notification> Notifications
|
|
{
|
|
get;
|
|
set;
|
|
} = new AvaloniaList<Models.Notification>();
|
|
|
|
public LauncherPage()
|
|
{
|
|
_node = new RepositoryNode() { Id = Guid.NewGuid().ToString() };
|
|
_data = Welcome.Instance;
|
|
|
|
// New welcome page will clear the search filter before.
|
|
Welcome.Instance.ClearSearchFilter();
|
|
}
|
|
|
|
public LauncherPage(RepositoryNode node, Repository repo)
|
|
{
|
|
_node = node;
|
|
_data = repo;
|
|
}
|
|
|
|
public void ClearNotifications()
|
|
{
|
|
Notifications.Clear();
|
|
}
|
|
|
|
public void ChangeDirtyState(Models.DirtyState flag, bool remove)
|
|
{
|
|
var state = _dirtyState;
|
|
if (remove)
|
|
{
|
|
if (state.HasFlag(flag))
|
|
state -= flag;
|
|
}
|
|
else
|
|
{
|
|
state |= flag;
|
|
}
|
|
|
|
DirtyState = state;
|
|
}
|
|
|
|
public bool CanCreatePopup()
|
|
{
|
|
return _popup is not { InProgress: true };
|
|
}
|
|
|
|
public async Task ProcessPopupAsync()
|
|
{
|
|
if (_popup is { InProgress: false } dump)
|
|
{
|
|
if (!dump.Check())
|
|
return;
|
|
|
|
dump.InProgress = true;
|
|
|
|
try
|
|
{
|
|
var finished = await dump.Sure();
|
|
if (finished)
|
|
{
|
|
dump.Cleanup();
|
|
Popup = null;
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Native.OS.LogException(e);
|
|
}
|
|
|
|
dump.InProgress = false;
|
|
}
|
|
}
|
|
|
|
public void CancelPopup()
|
|
{
|
|
if (_popup == null || _popup.InProgress)
|
|
return;
|
|
|
|
_popup?.Cleanup();
|
|
Popup = null;
|
|
}
|
|
|
|
private RepositoryNode _node = null;
|
|
private object _data = null;
|
|
private Models.DirtyState _dirtyState = Models.DirtyState.None;
|
|
private Popup _popup = null;
|
|
}
|
|
}
|