ServerApiFileActions.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using MoonCore.Helpers;
  2. using Moonlight.Features.FileManager.Models.Abstractions.FileAccess;
  3. using Moonlight.Features.Servers.Exceptions;
  4. namespace Moonlight.Features.Servers.Helpers;
  5. public class ServerApiFileActions : IFileActions, IArchiveFileActions
  6. {
  7. private readonly string Endpoint;
  8. private readonly string Token;
  9. private readonly int ServerId;
  10. private readonly HttpApiClient<NodeException> ApiClient;
  11. public ServerApiFileActions(string endpoint, string token, int serverId)
  12. {
  13. Endpoint = endpoint;
  14. Token = token;
  15. ServerId = serverId;
  16. ApiClient = new(endpoint + $"files/{ServerId}/", token);
  17. }
  18. public async Task<FileEntry[]> List(string path) => await ApiClient.Get<FileEntry[]>($"list?path={path}");
  19. public async Task DeleteFile(string path) => await ApiClient.DeleteAsString($"deleteFile?path={path}");
  20. public async Task DeleteDirectory(string path) => await ApiClient.DeleteAsString($"deleteDirectory?path={path}");
  21. public async Task Move(string from, string to) => await ApiClient.Post($"move?from={from}&to={to}");
  22. public async Task CreateDirectory(string path) => await ApiClient.Post($"createDirectory?path={path}");
  23. public async Task CreateFile(string path) => await ApiClient.Post($"createFile?path={path}");
  24. public async Task<string> ReadFile(string path) => await ApiClient.GetAsString($"readFile?path={path}");
  25. public async Task WriteFile(string path, string content) =>
  26. await ApiClient.PostAsString($"writeFile?path={path}", content);
  27. public async Task<Stream> ReadFileStream(string path) => await ApiClient.GetAsStream($"readFileStream?path={path}");
  28. public async Task WriteFileStream(string path, Stream dataStream) =>
  29. await ApiClient.PostFile($"writeFileStream?path={path}", dataStream, "upload");
  30. public async Task Archive(string path, string[] files)
  31. {
  32. await ApiClient.Post($"archive?path={path}&provider=tar.gz", files);
  33. }
  34. public IFileActions Clone() => new ServerApiFileActions(Endpoint, Token, ServerId);
  35. public void Dispose() => ApiClient.Dispose();
  36. }