diff --git a/Flawless.Client/Service/RepositoryService.cs b/Flawless.Client/Service/RepositoryService.cs index 5ddabcf..4180192 100644 --- a/Flawless.Client/Service/RepositoryService.cs +++ b/Flawless.Client/Service/RepositoryService.cs @@ -43,8 +43,7 @@ public class RepositoryService : BaseService return true; } - - + public bool SaveRepositoryLocalDatabaseChanges(RepositoryModel repo) { var localRepo = GetRepositoryLocalDatabase(repo); @@ -188,6 +187,29 @@ public class RepositoryService : BaseService return true; } + + public async ValueTask DeleteRepositoryOnServerAsync(RepositoryModel repo) + { + var api = Api.C; + try + { + if (api.RequireRefreshToken() && !(await api.TryRefreshTokenAsync())) + { + api.ClearGateway(); + return false; + } + + await api.Gateway.DeleteRepo(repo.Name, repo.OwnerName); + return true; + } + catch (Exception e) + { + UIHelper.NotifyError(e); + Console.WriteLine(e); + return false; + } + } + public async ValueTask DeleteMemberFromServerAsync(RepositoryModel repo, RepositoryModel.Member member) { var api = Api.C; diff --git a/Flawless.Client/ViewModels/RepositoryViewModel.cs b/Flawless.Client/ViewModels/RepositoryViewModel.cs index cdccd5a..de4e554 100644 --- a/Flawless.Client/ViewModels/RepositoryViewModel.cs +++ b/Flawless.Client/ViewModels/RepositoryViewModel.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Diagnostics; using System.IO; using System.Linq; using System.Reactive.Linq; @@ -305,6 +306,7 @@ public partial class RepositoryViewModel : RoutableViewModelBase if (role >= RepositoryModel.RepositoryRole.Reporter) IsReporterRole = true; if (role >= RepositoryModel.RepositoryRole.Guest) IsGuestRole = true; } + [ReactiveCommand] private async Task CommitSelectedChangesAsync() @@ -334,6 +336,23 @@ public partial class RepositoryViewModel : RoutableViewModelBase await RendererFileTreeAsync(); } + [ReactiveCommand] + private async Task DeleteRepositoryBothServerAndLocalAsync() + { + var msg = "THIS IS AN UNREVERT ACTION, YOU SHOULD AWARE THAT THIS MAY CAUSE DATA LOSS. DO YOU CONTINUE DELETE THIS REPOSITORY?"; + var confirm = await UIHelper.SimpleAskAsync(msg, DialogMode.Error) == DialogResult.Yes; + if (confirm) + { + using var l = UIHelper.MakeLoading("Delete repository..."); + if (!await RepositoryService.C.DeleteRepositoryOnServerAsync(Repository)) return; + await HostScreen.Router.NavigateBack.Execute(); + await RepositoryService.C.CloseRepositoryAsync(Repository); + await RepositoryService.C.DeleteFromDiskAsync(Repository); + await RepositoryService.C.UpdateRepositoriesFromServerAsync(); + await RepositoryService.C.UpdateRepositoriesDownloadedStatusFromDiskAsync(); + } + } + [ReactiveCommand] private async Task PullLatestRepositoryAsync() { diff --git a/Flawless.Client/Views/RepositoryPage/RepoSettingPageView.axaml b/Flawless.Client/Views/RepositoryPage/RepoSettingPageView.axaml index 919ac84..c1519b0 100644 --- a/Flawless.Client/Views/RepositoryPage/RepoSettingPageView.axaml +++ b/Flawless.Client/Views/RepositoryPage/RepoSettingPageView.axaml @@ -9,7 +9,7 @@ x:Class="Flawless.Client.Views.RepositoryPage.RepoSettingPageView"> - + - - - - - + + + +