55 lines
2.1 KiB
C#
55 lines
2.1 KiB
C#
#if !UNITY_2019_1_OR_NEWER
|
|
using System;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace SingularityGroup.HotReload.Editor {
|
|
class LegacyCompileChecker : ICompileChecker {
|
|
const string timestampFilePath = PackageConst.LibraryCachePath + "/lastCompileTimestamp.txt";
|
|
public bool hasCompileErrors { get; }
|
|
const string assemblyPath = "Library/ScriptAssemblies";
|
|
bool recompile;
|
|
public LegacyCompileChecker() {
|
|
Task.Run(() => {
|
|
var info = new DirectoryInfo(assemblyPath);
|
|
if(!info.Exists) {
|
|
return;
|
|
}
|
|
var currentCompileTimestamp = default(DateTime);
|
|
foreach (var file in info.GetFiles("*.dll")) {
|
|
var fileWriteDate = file.LastWriteTimeUtc;
|
|
if(fileWriteDate > currentCompileTimestamp) {
|
|
currentCompileTimestamp = fileWriteDate;
|
|
}
|
|
}
|
|
if(File.Exists(timestampFilePath)) {
|
|
var lastTimestampStr = File.ReadAllText(timestampFilePath);
|
|
var lastTimestamp = DateTime.ParseExact(lastTimestampStr, "o", CultureInfo.CurrentCulture).ToUniversalTime();
|
|
if(currentCompileTimestamp > lastTimestamp) {
|
|
ThreadUtility.RunOnMainThread(() => {
|
|
recompile = true;
|
|
_onCompilationFinished?.Invoke();
|
|
});
|
|
}
|
|
}
|
|
Directory.CreateDirectory(Path.GetDirectoryName(timestampFilePath));
|
|
File.WriteAllText(timestampFilePath, currentCompileTimestamp.ToString("o"));
|
|
});
|
|
}
|
|
|
|
Action _onCompilationFinished;
|
|
public event Action onCompilationFinished {
|
|
add {
|
|
if(recompile && value != null) {
|
|
value();
|
|
}
|
|
_onCompilationFinished += value;
|
|
}
|
|
remove {
|
|
_onCompilationFinished -= value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif |