ApiClient.cs 5.7 KB

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