No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LastWriteTracker.cs 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. namespace Packages.Rider.Editor.ProjectGeneration
  6. {
  7. internal static class LastWriteTracker
  8. {
  9. internal static bool HasLastWriteTimeChanged()
  10. {
  11. if (!IsUnityCompatible()) return false;
  12. // any external changes of sln/csproj should cause their regeneration
  13. // Directory.GetCurrentDirectory(), "*.csproj", "*.sln"
  14. var files = new List<FileInfo>();
  15. var directoryInfo = new DirectoryInfo(Directory.GetCurrentDirectory());
  16. files.AddRange(directoryInfo.GetFiles("*.csproj"));
  17. files.Add(new FileInfo(Path.Combine(directoryInfo.FullName, directoryInfo.Name + ".sln")));
  18. return files.Any(a => a.LastWriteTime > RiderScriptEditorPersistedState.instance.LastWrite);
  19. }
  20. internal static void UpdateLastWriteIfNeeded(string path)
  21. {
  22. if (!IsUnityCompatible()) return;
  23. var fileInfo = new FileInfo(path);
  24. if (fileInfo.Directory == null)
  25. return;
  26. var directoryInfo = new DirectoryInfo(Directory.GetCurrentDirectory());
  27. if (fileInfo.Directory.FullName.Equals(directoryInfo.FullName, StringComparison.OrdinalIgnoreCase) &&
  28. (fileInfo.Extension.Equals(".csproj", StringComparison.OrdinalIgnoreCase)
  29. || fileInfo.Name.Equals(directoryInfo.Name + ".sln", StringComparison.OrdinalIgnoreCase)))
  30. {
  31. RiderScriptEditorPersistedState.instance.LastWrite = fileInfo.LastWriteTime;
  32. }
  33. }
  34. internal static bool IsUnityCompatible()
  35. {
  36. #if UNITY_2020_1_OR_NEWER
  37. return true;
  38. #else
  39. return false;
  40. #endif
  41. }
  42. }
  43. }