DataHelper.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using Oreo.VersionUpdate.Commons;
  2. using Oreo.VersionUpdate.Models;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Xml.Linq;
  10. using Y.Utils.DataUtils.Collections;
  11. using Y.Utils.DataUtils.JsonUtils;
  12. using Y.Utils.IOUtils.PathUtils;
  13. using Y.Utils.IOUtils.TxtUtils;
  14. using Y.Utils.NetUtils.HttpUtils;
  15. using Y.Utils.WindowsUtils.InfoUtils;
  16. namespace Oreo.VersionUpdate.Helpers
  17. {
  18. public class DataHelper
  19. {
  20. /// <summary>
  21. /// 获取要更新的插件列表
  22. /// </summary>
  23. /// <returns></returns>
  24. public static List<PluginModel> GetPluginList()
  25. {
  26. #region 本地插件列表是否存在
  27. if (!File.Exists(R.Files.Plugins))
  28. {
  29. DirTool.Create(DirTool.GetFilePath(R.Files.Plugins));
  30. //如果文件不存在 创建新的插件xml
  31. XElement xe = new XElement("Plugins");
  32. xe.Save(R.Files.Plugins);
  33. }
  34. #endregion
  35. #region 读取本地插件列表
  36. List<PluginModel> localPluginList = new List<PluginModel>();
  37. try
  38. {
  39. XElement xe = XElement.Load(R.Files.Plugins);
  40. IEnumerable<XElement> elements = xe.Elements("Item");
  41. if (ListTool.HasElements(elements))
  42. {
  43. foreach (var ele in elements)
  44. {
  45. PluginModel plug = new PluginModel()
  46. {
  47. Name = ele.Attribute("Name").Value,
  48. Version = ele.Attribute("Version").Value
  49. };
  50. localPluginList.Add(plug);
  51. }
  52. }
  53. }
  54. catch (Exception e) { }
  55. #endregion
  56. #region 读取服务器插件列表
  57. List<PluginModel> serverPluginList = HttpTool.Get<List<PluginModel>>(R.Settings.Url.WebService + "getPluginsList");
  58. #endregion
  59. #region 整理需要更新的插件列表
  60. List<PluginModel> rs = new List<PluginModel>();
  61. if (ListTool.HasElements(serverPluginList))
  62. {
  63. serverPluginList.ForEach(p =>
  64. {
  65. var tmp = localPluginList.FirstOrDefault(x => x.Name == p.Name);
  66. if (tmp == null)
  67. {
  68. //如果服务器有的插件,本地没有,则添加至需要更新的列表
  69. rs.Add(p);
  70. }
  71. else
  72. {
  73. if (tmp.Version != p.Version)
  74. {
  75. //如果服务器插件版本和本机插件版本不同,则添加至需要更新列表
  76. rs.Add(p);
  77. }
  78. }
  79. });
  80. }
  81. #endregion
  82. return rs;
  83. }
  84. /// <summary>
  85. /// 联网获取插件的最新版本
  86. /// </summary>
  87. /// <param name="pm"></param>
  88. /// <returns></returns>
  89. public static VersionModel GetPluginNewVersion(PluginModel pm)
  90. {
  91. VersionModel rs = HttpTool.Get<VersionModel>(R.Settings.Url.WebService + string.Format("getPluginsConfig?name={0}&version={1}", pm.Name, pm.Version));
  92. //VersionModel rs = JsonTool.ToObjFromFile<VersionModel>(@"D:\CoCo\GitHub\Fork\Fork.Net\Oreo.VersionBuilder\bin\Debug\VersionFile\0602104746.version");
  93. return rs;
  94. }
  95. /// <summary>
  96. /// 写入 Whatsnew
  97. /// </summary>
  98. /// <param name="vm"></param>
  99. public static void UpdateWhatsnew(VersionModel vm)
  100. {
  101. TxtTool.Append(R.Files.Whatsnew, string.Format("{0} {1} {2}",
  102. vm.CodeName, vm.VersionNumber, (vm.PluginName == "" ? "" : "For:" + vm.PluginName)));
  103. TxtTool.Append(R.Files.Whatsnew, vm.VersionDesc);
  104. TxtTool.Append(R.Files.Whatsnew, new string('=', 50));
  105. }
  106. /// <summary>
  107. /// 写入更新配置文件
  108. /// </summary>
  109. /// <param name="vm"></param>
  110. public static void UpdatePluginConfig(VersionModel vm)
  111. {
  112. try
  113. {
  114. if (!string.IsNullOrWhiteSpace(vm.PluginName) && !string.IsNullOrWhiteSpace(vm.PluginEntry))
  115. {
  116. XElement xe = XElement.Load(R.Files.Plugins);
  117. XElement record = xe.Elements("Item").FirstOrDefault(x => x.Attribute("Name").Value == vm.PluginName);
  118. if (record != null)
  119. {
  120. //如果xml包含改插件,则更新
  121. string entryFile = DirTool.IsDriver(vm.PluginEntry) ? vm.PluginEntry : DirTool.Combine(R.Paths.ProjectRoot, vm.PluginEntry);
  122. record.Attribute("Entry").Value = entryFile;
  123. record.Attribute("Version").Value = vm.VersionNumber;
  124. }
  125. else
  126. {
  127. //如果xml不包含插件,则添加插件
  128. string entryFile = DirTool.IsDriver(vm.PluginEntry) ? vm.PluginEntry : DirTool.Combine(R.Paths.ProjectRoot, vm.PluginEntry);
  129. XElement insertRec = new XElement("Item", new XAttribute("Name", vm.PluginName), new XAttribute("Entry", entryFile), new XAttribute("Version", vm.VersionNumber));
  130. xe.Add(insertRec);
  131. }
  132. xe.Save(R.Files.Plugins);
  133. }
  134. }
  135. catch (Exception e)
  136. {
  137. R.Log.e("修改插件配置信息出错:" + e.Message);
  138. }
  139. }
  140. /// <summary>
  141. /// 更新注册表项
  142. /// </summary>
  143. /// <param name="vm"></param>
  144. [Obsolete]
  145. private static void UpdateRegister(List<VersionRegister> vr)
  146. {
  147. if (ListTool.HasElements(vr))
  148. {
  149. foreach (var r in vr)
  150. {
  151. if (r.IsClean)
  152. {
  153. //删除该注册表项
  154. RegisterTool.DeleteValue(r.Key, r.Name);
  155. }
  156. else
  157. {
  158. //添加或修改该注册表项
  159. RegisterTool.SetValue(r.Key, r.Name, r.Value);
  160. }
  161. }
  162. }
  163. }
  164. }
  165. }