180 lines
4.7 KiB
C#
180 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
namespace NBC.Asset.Editor
|
|
{
|
|
[Serializable]
|
|
public class HistoryData
|
|
{
|
|
public int Index;
|
|
public List<BuildBundle> Bundles = new List<BuildBundle>();
|
|
}
|
|
|
|
[Serializable]
|
|
public class HistoriesData
|
|
{
|
|
private int _historyCount = 5;
|
|
public List<HistoryData> Histories = new List<HistoryData>();
|
|
|
|
public HistoryData LastHistoryData => Histories.Last();
|
|
|
|
public int LastIndex
|
|
{
|
|
get
|
|
{
|
|
var index = 0;
|
|
if (Histories.Count > 0)
|
|
{
|
|
index = Histories[^1].Index;
|
|
}
|
|
|
|
return index;
|
|
}
|
|
}
|
|
|
|
public bool AddHistory(List<BuildBundle> bundles)
|
|
{
|
|
var data = new HistoryData();
|
|
|
|
foreach (var bundle in bundles)
|
|
{
|
|
var b = new BuildBundle
|
|
{
|
|
Name = bundle.Name,
|
|
Hash = bundle.Hash,
|
|
Size = bundle.Size
|
|
};
|
|
data.Bundles.Add(b);
|
|
}
|
|
|
|
if (CanAdd(data))
|
|
{
|
|
data.Index = LastIndex + 1;
|
|
Histories.Add(data);
|
|
}
|
|
|
|
if (Histories.Count > _historyCount)
|
|
{
|
|
var count = Histories.Count - _historyCount;
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
Histories.RemoveAt(0);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool CanAdd(HistoryData data)
|
|
{
|
|
var changes = new List<BuildBundle>();
|
|
|
|
if (Histories.Count > 0 && Histories.Last() != null)
|
|
{
|
|
var last = Histories.Last();
|
|
foreach (var bundle in data.Bundles)
|
|
{
|
|
var old = last.Bundles.Find(t => t.Name == bundle.Name);
|
|
if (old != null)
|
|
{
|
|
if (old.Size != bundle.Size || old.Hash != bundle.Hash)
|
|
{
|
|
changes.Add(bundle);
|
|
}
|
|
}
|
|
else changes.Add(bundle);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
changes.AddRange(data.Bundles);
|
|
}
|
|
|
|
return changes.Count > 0;
|
|
}
|
|
}
|
|
|
|
public static class Histories
|
|
{
|
|
private static readonly string FilePath = BuildSettings.GetCachePath("BuildHistories.json");
|
|
|
|
private static HistoriesData _data;
|
|
|
|
public static HistoryData LastHistoryData => _data != null ? _data.LastHistoryData : null;
|
|
|
|
public static void AddHistory(List<BuildBundle> bundles)
|
|
{
|
|
if (_data == null)
|
|
{
|
|
Reload();
|
|
}
|
|
|
|
if (_data != null && _data.AddHistory(bundles))
|
|
{
|
|
Save();
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("添加历史记录失败!");
|
|
}
|
|
}
|
|
|
|
public static void Reload()
|
|
{
|
|
_data = Util.ReadJson<HistoriesData>(FilePath) ?? new HistoriesData();
|
|
}
|
|
|
|
public static void Save()
|
|
{
|
|
if (_data != null)
|
|
{
|
|
Util.WriteJson(_data, FilePath);
|
|
}
|
|
}
|
|
|
|
public static VersionData GetLastVersion()
|
|
{
|
|
if (!Directory.Exists(BuildSettings.PlatformPath))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var files = Directory.GetFiles(BuildSettings.PlatformPath);
|
|
List<string> paths = new List<string>();
|
|
foreach (var file in files)
|
|
{
|
|
var name = Path.GetFileName(file);
|
|
if (name.StartsWith("version")) paths.Add(file);
|
|
}
|
|
|
|
var lastFilePath = string.Empty;
|
|
if (paths.Count > 0)
|
|
{
|
|
long lastCreationTime = 0;
|
|
foreach (var path in paths)
|
|
{
|
|
var file = new FileInfo(path);
|
|
if (file.Exists)
|
|
{
|
|
var t = file.CreationTime.ToFileTime();
|
|
if (t > lastCreationTime)
|
|
{
|
|
lastCreationTime = t;
|
|
lastFilePath = path;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(lastFilePath))
|
|
{
|
|
return Util.ReadJson<VersionData>(lastFilePath);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
} |