diff --git a/Services/OneDrive.cs b/Services/OneDrive.cs index 8b0b2e0..b27b678 100644 --- a/Services/OneDrive.cs +++ b/Services/OneDrive.cs @@ -153,6 +153,11 @@ public async Task DeleteItem(string itemId) await graphClient.Drives[driveId].Items[itemId].DeleteAsync(); } + public async Task PermanentDeleteItem(string itemId) + { + await graphClient.Drives[driveId].Items[itemId].PermanentDelete.PostAsync(); + } + private class TokenProvider : IAccessTokenProvider { private readonly Func> getTokenDelegate; diff --git a/SimpleList.csproj b/SimpleList.csproj index fd949d1..afe73e5 100644 --- a/SimpleList.csproj +++ b/SimpleList.csproj @@ -50,6 +50,7 @@ + @@ -102,6 +103,9 @@ True \ + + MSBuild:Compile + MSBuild:Compile diff --git a/ViewModels/DeleteFileViewModel.cs b/ViewModels/DeleteFileViewModel.cs new file mode 100644 index 0000000..b9b568f --- /dev/null +++ b/ViewModels/DeleteFileViewModel.cs @@ -0,0 +1,40 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.DependencyInjection; +using CommunityToolkit.Mvvm.Input; +using SimpleList.Services; +using System.Threading.Tasks; + +namespace SimpleList.ViewModels +{ + public class DeleteFileViewModel : ObservableObject + { + public DeleteFileViewModel(FileViewModel file) + { + File = file; + DeleteFileCommand = new AsyncRelayCommand(DeleteFile); + } + + public async Task DeleteFile() + { + OneDrive drive = Ioc.Default.GetService(); + if (PermanentDelete) + { + await drive.PermanentDeleteItem(File.Id); + } else + { + await drive.DeleteItem(File.Id); + } + await File.Cloud.Refresh(); + } + + private bool _permanentDelete; + + public FileViewModel File; + public AsyncRelayCommand DeleteFileCommand { get; } + public bool PermanentDelete + { + get => _permanentDelete; + set => SetProperty(ref _permanentDelete, value); + } + } +} diff --git a/ViewModels/FileViewModel.cs b/ViewModels/FileViewModel.cs index a79aa3b..3839d29 100644 --- a/ViewModels/FileViewModel.cs +++ b/ViewModels/FileViewModel.cs @@ -22,7 +22,6 @@ public FileViewModel(CloudViewModel cloud, DriveItem file) _file = file; ItemType = IsFile ? "File" : "Folder"; DownloadFileCommand = new RelayCommand(DownloadFile); - DeleteFileCommand = new RelayCommand(DeleteFile); } private async void DownloadFile(string itemId) @@ -50,13 +49,6 @@ private async void DownloadFile(string itemId) await manager.AddDownloadTask(itemId, file); } } - private async void DeleteFile(string itemId) - { - string parrentId = Cloud.ParentItemId; - OneDrive drive = Ioc.Default.GetService(); - await drive.DeleteItem(itemId); - await Cloud.GetFiles(parrentId); - } private readonly DriveItem _file; @@ -70,6 +62,5 @@ private async void DeleteFile(string itemId) public CloudViewModel Cloud { get; } public string ItemType { get; } public RelayCommand DownloadFileCommand { get; } - public RelayCommand DeleteFileCommand { get; } } } diff --git a/Views/DeleteFileView.xaml b/Views/DeleteFileView.xaml new file mode 100644 index 0000000..e005e20 --- /dev/null +++ b/Views/DeleteFileView.xaml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + diff --git a/Views/DeleteFileView.xaml.cs b/Views/DeleteFileView.xaml.cs new file mode 100644 index 0000000..803c191 --- /dev/null +++ b/Views/DeleteFileView.xaml.cs @@ -0,0 +1,12 @@ +using Microsoft.UI.Xaml.Controls; + +namespace SimpleList.Views +{ + public sealed partial class DeleteFileView : ContentDialog + { + public DeleteFileView() + { + InitializeComponent(); + } + } +} diff --git a/Views/FileView.xaml b/Views/FileView.xaml index 9ff5b7e..363e154 100644 --- a/Views/FileView.xaml +++ b/Views/FileView.xaml @@ -23,7 +23,7 @@ - + diff --git a/Views/FileView.xaml.cs b/Views/FileView.xaml.cs index def70f5..59d8406 100644 --- a/Views/FileView.xaml.cs +++ b/Views/FileView.xaml.cs @@ -71,5 +71,16 @@ private async void ShowConverFiletDialogAsync(object sender, RoutedEventArgs e) await dialog.ShowAsync(); } } + + private async void ShowDeleteFileDialogAsync(object sender, RoutedEventArgs e) + { + FileViewModel viewModel = DataContext as FileViewModel; + DeleteFileView dialog = new() + { + XamlRoot = XamlRoot, + DataContext = new DeleteFileViewModel(viewModel) + }; + await dialog.ShowAsync(); + } } }