using System;
using System.Collections.Generic;
using System.Linq;
namespace NBC.Editor
{
[Serializable]
public class VersionHistoryData
{
public string ShowName; // => $"version_{Index}_{VersionData?.BuildTime}";
public string FileName;
public VersionData VersionData;
///
/// 版本包
///
public readonly List Packages = new List();
}
[Serializable]
public class PackageChangeData
{
public string PackageName;
///
/// 变化的bundle
///
public List ChangeBundles = new List();
///
/// 新增的bundle
///
public List AddBundles = new List();
///
/// 减少的bundle
///
public List RemoveBundles = new List();
}
///
/// 版本变化简略信息
///
[Serializable]
public class VersionSimpleChangeData
{
///
/// 需要下载总数
///
public long DownloadSize;
///
/// 每个资源包需要下载总数
///
public Dictionary PackageDownloadSize = new Dictionary();
///
/// 每个资源包新增bundle
///
public Dictionary> PackageAddBundle = new Dictionary>();
///
/// 每个资源包移除bundle
///
public Dictionary> PackageRemoveBundle = new Dictionary>();
///
/// 每个资源包变化的bundle
///
public Dictionary> PackageChangeBundle = new Dictionary>();
}
[Serializable]
public class VersionChangeData
{
public string NewVersionName;
public string OldVersionName;
public VersionSimpleChangeData SimpleChangeData = new VersionSimpleChangeData();
///
/// 变化的package
///
public List ChangePackage = new List();
public enum TypeEnum
{
Add,
Change,
Remove
}
public void Change(BundleData bundleData, TypeEnum typeEnum)
{
var packageChangeData = ChangePackage.Find(p => p.PackageName == bundleData.PackageName);
if (packageChangeData == null)
{
packageChangeData = new PackageChangeData();
packageChangeData.PackageName = bundleData.PackageName;
ChangePackage.Add(packageChangeData);
}
switch (typeEnum)
{
case TypeEnum.Add:
packageChangeData.AddBundles.Add(bundleData);
break;
case TypeEnum.Remove:
packageChangeData.RemoveBundles.Add(bundleData);
break;
case TypeEnum.Change:
packageChangeData.ChangeBundles.Add(bundleData);
break;
}
}
public void Processing()
{
SimpleChangeData = new VersionSimpleChangeData();
long allSize = 0;
foreach (var package in ChangePackage)
{
var name = package.PackageName;
var size = package.AddBundles.Sum(b => b.Size) + package.ChangeBundles.Sum(b => b.Size);
allSize += size;
SimpleChangeData.PackageDownloadSize[name] = size;
SimpleChangeData.PackageAddBundle[name] = package.AddBundles.Select(bundle => bundle.Name).ToList();
SimpleChangeData.PackageRemoveBundle[name] =
package.RemoveBundles.Select(bundle => bundle.Name).ToList();
SimpleChangeData.PackageChangeBundle[name] =
package.ChangeBundles.Select(bundle => bundle.Name).ToList();
}
SimpleChangeData.DownloadSize = allSize;
}
}
}