using Oreo.VersionUpdate.Commons;
using Oreo.VersionUpdate.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using Y.Utils.DataUtils.Collections;
using Y.Utils.DataUtils.JsonUtils;
using Y.Utils.IOUtils.PathUtils;
using Y.Utils.IOUtils.TxtUtils;
using Y.Utils.NetUtils.HttpUtils;
using Y.Utils.WindowsUtils.InfoUtils;
namespace Oreo.VersionUpdate.Helpers
{
public class DataHelper
{
///
/// 获取要更新的插件列表
///
///
public static List GetPluginList()
{
#region 本地插件列表是否存在
if (!File.Exists(R.Files.Plugins))
{
DirTool.Create(DirTool.GetFilePath(R.Files.Plugins));
//如果文件不存在 创建新的插件xml
XElement xe = new XElement("Plugins");
xe.Save(R.Files.Plugins);
}
#endregion
#region 读取本地插件列表
List localPluginList = new List();
try
{
XElement xe = XElement.Load(R.Files.Plugins);
IEnumerable elements = xe.Elements("Item");
if (ListTool.HasElements(elements))
{
foreach (var ele in elements)
{
PluginModel plug = new PluginModel()
{
Name = ele.Attribute("Name").Value,
Version = ele.Attribute("Version").Value
};
localPluginList.Add(plug);
}
}
}
catch (Exception e) { }
#endregion
#region 读取服务器插件列表
List serverPluginList = HttpTool.Get>(R.Settings.Url.WebService + "getPluginsList");
#endregion
#region 整理需要更新的插件列表
List rs = new List();
if (ListTool.HasElements(serverPluginList))
{
serverPluginList.ForEach(p =>
{
var tmp = localPluginList.FirstOrDefault(x => x.Name == p.Name);
if (tmp == null)
{
//如果服务器有的插件,本地没有,则添加至需要更新的列表
rs.Add(p);
}
else
{
if (tmp.Version != p.Version)
{
//如果服务器插件版本和本机插件版本不同,则添加至需要更新列表
rs.Add(p);
}
}
});
}
#endregion
return rs;
}
///
/// 联网获取插件的最新版本
///
///
///
public static VersionModel GetPluginNewVersion(PluginModel pm)
{
VersionModel rs = HttpTool.Get(R.Settings.Url.WebService + string.Format("getPluginsConfig?name={0}&version={1}", pm.Name, pm.Version));
//VersionModel rs = JsonTool.ToObjFromFile(@"D:\CoCo\GitHub\Fork\Fork.Net\Oreo.VersionBuilder\bin\Debug\VersionFile\0602104746.version");
return rs;
}
///
/// 写入 Whatsnew
///
///
public static void UpdateWhatsnew(VersionModel vm)
{
TxtTool.Append(R.Files.Whatsnew, string.Format("{0} {1} {2}",
vm.CodeName, vm.VersionNumber, (vm.PluginName == "" ? "" : "For:" + vm.PluginName)));
TxtTool.Append(R.Files.Whatsnew, vm.VersionDesc);
TxtTool.Append(R.Files.Whatsnew, new string('=', 50));
}
///
/// 写入更新配置文件
///
///
public static void UpdatePluginConfig(VersionModel vm)
{
try
{
if (!string.IsNullOrWhiteSpace(vm.PluginName) && !string.IsNullOrWhiteSpace(vm.PluginEntry))
{
XElement xe = XElement.Load(R.Files.Plugins);
XElement record = xe.Elements("Item").FirstOrDefault(x => x.Attribute("Name").Value == vm.PluginName);
if (record != null)
{
//如果xml包含改插件,则更新
string entryFile = DirTool.IsDriver(vm.PluginEntry) ? vm.PluginEntry : DirTool.Combine(R.Paths.ProjectRoot, vm.PluginEntry);
record.Attribute("Entry").Value = entryFile;
record.Attribute("Version").Value = vm.VersionNumber;
}
else
{
//如果xml不包含插件,则添加插件
string entryFile = DirTool.IsDriver(vm.PluginEntry) ? vm.PluginEntry : DirTool.Combine(R.Paths.ProjectRoot, vm.PluginEntry);
XElement insertRec = new XElement("Item", new XAttribute("Name", vm.PluginName), new XAttribute("Entry", entryFile), new XAttribute("Version", vm.VersionNumber));
xe.Add(insertRec);
}
xe.Save(R.Files.Plugins);
}
}
catch (Exception e)
{
R.Log.e("修改插件配置信息出错:" + e.Message);
}
}
///
/// 更新注册表项
///
///
[Obsolete]
private static void UpdateRegister(List vr)
{
if (ListTool.HasElements(vr))
{
foreach (var r in vr)
{
if (r.IsClean)
{
//删除该注册表项
RegisterTool.DeleteValue(r.Key, r.Name);
}
else
{
//添加或修改该注册表项
RegisterTool.SetValue(r.Key, r.Name, r.Value);
}
}
}
}
}
}