TranslationJob_GET.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System.Collections.Generic;
  2. using System.Text;
  3. using UnityEngine.Networking;
  4. namespace I2.Loc
  5. {
  6. using TranslationDictionary = Dictionary<string, TranslationQuery>;
  7. public class TranslationJob_GET : TranslationJob_WWW
  8. {
  9. TranslationDictionary _requests;
  10. GoogleTranslation.fnOnTranslationReady _OnTranslationReady;
  11. List<string> mQueries;
  12. public string mErrorMessage;
  13. public TranslationJob_GET(TranslationDictionary requests, GoogleTranslation.fnOnTranslationReady OnTranslationReady)
  14. {
  15. _requests = requests;
  16. _OnTranslationReady = OnTranslationReady;
  17. mQueries = GoogleTranslation.ConvertTranslationRequest(requests, true);
  18. GetState();
  19. }
  20. void ExecuteNextQuery()
  21. {
  22. if (mQueries.Count == 0)
  23. {
  24. mJobState = eJobState.Succeeded;
  25. return;
  26. }
  27. int lastQuery = mQueries.Count - 1;
  28. var query = mQueries[lastQuery];
  29. mQueries.RemoveAt(lastQuery);
  30. string url = $"{LocalizationManager.GetWebServiceURL()}?action=Translate&list={query}";
  31. www = UnityWebRequest.Get(url);
  32. I2Utils.SendWebRequest(www);
  33. }
  34. public override eJobState GetState()
  35. {
  36. if (www != null && www.isDone)
  37. {
  38. ProcessResult(www.downloadHandler.data, www.error);
  39. www.Dispose();
  40. www = null;
  41. }
  42. if (www==null)
  43. {
  44. ExecuteNextQuery();
  45. }
  46. return mJobState;
  47. }
  48. public void ProcessResult(byte[] bytes, string errorMsg)
  49. {
  50. if (string.IsNullOrEmpty(errorMsg))
  51. {
  52. var wwwText = Encoding.UTF8.GetString(bytes, 0, bytes.Length); //www.text
  53. errorMsg = GoogleTranslation.ParseTranslationResult(wwwText, _requests);
  54. if (string.IsNullOrEmpty(errorMsg))
  55. {
  56. if (_OnTranslationReady!=null)
  57. _OnTranslationReady(_requests, null);
  58. return;
  59. }
  60. }
  61. mJobState = eJobState.Failed;
  62. mErrorMessage = errorMsg;
  63. }
  64. }
  65. }