ArchiveContextAction.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using MoonCore.Exceptions;
  2. using MoonCore.Helpers;
  3. using MoonCoreUI.Services;
  4. using Moonlight.Features.FileManager.Interfaces;
  5. using Moonlight.Features.FileManager.Models.Abstractions.FileAccess;
  6. namespace Moonlight.Features.FileManager.Implementations;
  7. public class ArchiveContextAction : IFileManagerContextAction
  8. {
  9. public string Name => "Archive";
  10. public string Icon => "bxs-archive-in";
  11. public string Color => "warning";
  12. public Func<FileEntry, bool> Filter => _ => true;
  13. public async Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, FileEntry entry,
  14. IServiceProvider provider)
  15. {
  16. var archiveAccess = access.Actions as IArchiveFileActions;
  17. if (archiveAccess == null)
  18. throw new DisplayException("This file access does not support archiving");
  19. var alertService = provider.GetRequiredService<AlertService>();
  20. var fileName = await alertService.Text("Enter the archive file name", "",
  21. Formatter.FormatDate(DateTime.UtcNow) + ".tar.gz");
  22. if (string.IsNullOrEmpty(fileName) || fileName.Contains("..")) // => canceled
  23. return;
  24. var toastService = provider.GetRequiredService<ToastService>();
  25. await toastService.CreateProgress("fileManagerArchive", "Archiving... Please be patient");
  26. try
  27. {
  28. await archiveAccess.Archive(
  29. access.CurrentDirectory + fileName,
  30. new[] { access.CurrentDirectory + entry.Name }
  31. );
  32. await toastService.Success("Successfully created archive");
  33. }
  34. catch (Exception e)
  35. {
  36. Logger.Warn($"An error occured while archiving item ({entry.Name}):");
  37. Logger.Warn(e);
  38. await toastService.Danger("An unknown error occured while creating archive");
  39. }
  40. finally
  41. {
  42. await toastService.RemoveProgress("fileManagerArchive");
  43. }
  44. await fileManager.View.Refresh();
  45. }
  46. }