ApiClient.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. using FNZCM.BlazorWasm.UI;
  2. using FNZCM.BlazorWasm.UI.Components;
  3. using FNZCM.Shared.Helpers;
  4. using FNZCM.Shared.MediaModels;
  5. using FNZCM.Shared.MetadataModels;
  6. using Microsoft.AspNetCore.Components.WebAssembly.Http;
  7. using Newtonsoft.Json;
  8. using System.Net.Http.Json;
  9. namespace FNZCM.BlazorWasm.Helpers
  10. {
  11. public class ApiClient
  12. {
  13. private readonly HttpClient http;
  14. public Uri BaseAddress => http.BaseAddress;
  15. public ApiClient(HttpClient http) => this.http = http;
  16. public async Task<LoadingProgress> GetProgressAsync()
  17. {
  18. var url = $"metadata/progress.json";
  19. var response = await http.GetAsync(url);
  20. var obj = await response.Content.ReadFromJsonAsync<LoadingProgress>();
  21. return obj;
  22. }
  23. public async Task<Dictionary<string, Library>> GetLibrariesAsync(ProgressBar[] progress)
  24. {
  25. var url = $"metadata/file-set.json";
  26. var request = new HttpRequestMessage(HttpMethod.Get, url);
  27. request.SetBrowserResponseStreamingEnabled(true);
  28. request.SetBrowserRequestCache(BrowserRequestCache.Default);
  29. var response = await http.SendAsync(request);
  30. var jsonStream = await response.Content.ReadAsStreamAsync();
  31. using var streamReader = new StreamReader(jsonStream);
  32. using var jsonReader = new JsonTextReader(streamReader);
  33. var serializer = new JsonSerializer();
  34. if (!jsonReader.Read()) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  35. if (jsonReader.TokenType != JsonToken.StartObject) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  36. var obj = new Dictionary<string, Library>();
  37. while (true)
  38. {
  39. await progress[0].SetProgress((float)jsonStream.Position / jsonStream.Length, $"Loading fileset {jsonStream.Position.BytesToFileSize()}/{jsonStream.Length.BytesToFileSize()}");
  40. if (!jsonReader.Read()) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  41. if (jsonReader.TokenType == JsonToken.EndObject) break;
  42. if (jsonReader.TokenType != JsonToken.PropertyName) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  43. var key = (string)jsonReader.Value;
  44. if (!jsonReader.Read()) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  45. if (jsonReader.TokenType != JsonToken.StartObject) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  46. obj[key] = serializer.Deserialize<Library>(jsonReader);
  47. }
  48. await progress[0].ForceUpdate();
  49. return obj;
  50. }
  51. public async Task<Dictionary<string, MediaTag>> GetMediaTagsAsync(ProgressBar[] progress = null)
  52. {
  53. var url = $"metadata/tag-dict.json";
  54. var request = new HttpRequestMessage(HttpMethod.Get, url);
  55. request.SetBrowserResponseStreamingEnabled(true);
  56. request.SetBrowserRequestCache(BrowserRequestCache.Default);
  57. var response = await http.SendAsync(request);
  58. var jsonStream = await response.Content.ReadAsStreamAsync();
  59. using var streamReader = new StreamReader(jsonStream);
  60. using var jsonReader = new JsonTextReader(streamReader);
  61. var serializer = new JsonSerializer();
  62. if (!jsonReader.Read()) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  63. if (jsonReader.TokenType != JsonToken.StartObject) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  64. var obj = new Dictionary<string, MediaTag>();
  65. while (true)
  66. {
  67. await progress[1].SetProgress((float)jsonStream.Position / jsonStream.Length, $"Loading tags {jsonStream.Position.BytesToFileSize()}/{jsonStream.Length.BytesToFileSize()}");
  68. if (!jsonReader.Read()) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  69. if (jsonReader.TokenType == JsonToken.EndObject) break;
  70. if (jsonReader.TokenType != JsonToken.PropertyName) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  71. var key = (string)jsonReader.Value;
  72. if (!jsonReader.Read()) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  73. if (jsonReader.TokenType != JsonToken.StartObject) throw new JsonException($"Deserialization failed at line {jsonReader.LineNumber} position {jsonReader.LinePosition}.");
  74. obj[key] = serializer.Deserialize<MediaTag>(jsonReader);
  75. }
  76. await progress[1].ForceUpdate();
  77. return obj;
  78. }
  79. public async Task ReloadBackEnd(string password, bool? flag)
  80. {
  81. var url = flag switch
  82. {
  83. null => "admin/?action=ReloadModules&pass=" + password,
  84. true => "admin/?action=ReloadFully&pass=" + password,
  85. false => "admin/?action=Reload&pass=" + password,
  86. };
  87. var request = new HttpRequestMessage(HttpMethod.Get, url);
  88. request.SetBrowserRequestCache(BrowserRequestCache.Default);
  89. var response = await http.SendAsync(request);
  90. var text = await response.Content.ReadAsStringAsync();
  91. }
  92. }
  93. }