Release.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using ReleaseHelper.Models;
  2. using ReleaseHelper.Utils;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Threading.Tasks;
  8. namespace ReleaseHelper.Services
  9. {
  10. public static class Release
  11. {
  12. /// <summary>
  13. /// 设置更新进度
  14. /// </summary>
  15. /// <param name="max"></param>
  16. /// <param name="now"></param>
  17. public delegate void DeleSetProgress(int max, int now);
  18. public static async Task<string> ReleaseApplication(string username, string password, double version,
  19. string objFilename, string targetOssPath, DeleSetProgress deleSetProgress)
  20. {
  21. string res = "";
  22. int max = 4, now=0;
  23. List<string> localFilenames = new List<string>() { objFilename, GetUpdateInfoFilename(objFilename) };
  24. // 生成版本信息文件
  25. await SaveLocalUpdateInfo(objFilename, version);
  26. deleSetProgress(max, ++now);
  27. // 登录
  28. await Login(username, password);
  29. deleSetProgress(max, ++now);
  30. // 上传相应文件到OSS服务器
  31. foreach (string f in localFilenames)
  32. {
  33. if (!AliyunOss.SimpleUpload($"{targetOssPath}/{Path.GetFileName(f)}", f))
  34. {
  35. res = $"{f} 更新失败!";
  36. }
  37. deleSetProgress(max, ++now);
  38. }
  39. // 退出登录
  40. Logout();
  41. return res;
  42. }
  43. //private static async Task
  44. public static async Task<Models.UpdateInfo> GetLatestVersionInfo(string ossUri)
  45. {
  46. return await Api.GetUpdateInfo(ossUri);
  47. }
  48. private static async Task SaveLocalUpdateInfo(string objFilename, double version)
  49. {
  50. await Task.Run(() =>
  51. {
  52. string f = GetUpdateInfoFilename(objFilename);
  53. UpdateInfo info = new UpdateInfo
  54. {
  55. MD5 = FileExtensions.FileMd5(objFilename),
  56. Version = version
  57. };
  58. FileExtensions.WriteAllText(f, Json.Encode(info), Encoding.UTF8);
  59. });
  60. }
  61. private static string GetUpdateInfoFilename(string ObjFilename)
  62. {
  63. return Regex.Replace(ObjFilename, "\\.[^.]{2,5}$", ".txt", RegexOptions.IgnoreCase);
  64. }
  65. private static async Task Login(string username, string password)
  66. {
  67. await Api.Login(username, password);
  68. //await Api.GetAliyunAccess();
  69. }
  70. private static void Logout()
  71. {
  72. Variables.Variables.RequestHeaders["Authorization"] = "";
  73. AliyunOss.ClearAccess();
  74. }
  75. }
  76. }