Watches file changes in legacy resource manager in favor of manual refresh.
This commit is contained in:
@@ -15,11 +15,12 @@ using Logger = Cryville.Common.Logging.Logger;
|
|||||||
|
|
||||||
namespace Cryville.Crtr.Browsing {
|
namespace Cryville.Crtr.Browsing {
|
||||||
internal class LegacyResourceManager : IPathedResourceManager<ChartDetail> {
|
internal class LegacyResourceManager : IPathedResourceManager<ChartDetail> {
|
||||||
private readonly string _rootPath;
|
readonly string _rootPath;
|
||||||
private DirectoryInfo cd;
|
DirectoryInfo _cd;
|
||||||
private DirectoryInfo[] items = new DirectoryInfo[0];
|
readonly FileSystemWatcher _watcher = new FileSystemWatcher();
|
||||||
|
DirectoryInfo[] _items = new DirectoryInfo[0];
|
||||||
public string[] CurrentDirectory { get; private set; }
|
public string[] CurrentDirectory { get; private set; }
|
||||||
public int Count { get { return items.Length; } }
|
public int Count { get { return _items.Length; } }
|
||||||
|
|
||||||
static bool _init;
|
static bool _init;
|
||||||
|
|
||||||
@@ -32,20 +33,40 @@ namespace Cryville.Crtr.Browsing {
|
|||||||
_init = true;
|
_init = true;
|
||||||
ExtensionManager.Init(rootPath);
|
ExtensionManager.Init(rootPath);
|
||||||
}
|
}
|
||||||
|
_watcher.Changed += OnFileChanged;
|
||||||
|
_watcher.Created += OnFileChanged;
|
||||||
|
_watcher.Deleted += OnFileChanged;
|
||||||
|
_watcher.Renamed += OnFileChanged;
|
||||||
|
_watcher.Error += OnFileWatcherError;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnFileWatcherError(object sender, ErrorEventArgs e) {
|
||||||
|
Logger.Log("main", 4, "Data", "An error occurred while watching file changes: {0}", e.GetException());
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnFileChanged(object sender, FileSystemEventArgs e) {
|
||||||
|
ReloadFiles();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ReloadFiles() {
|
||||||
|
_items = _cd.GetDirectories();
|
||||||
|
_version++;
|
||||||
|
ItemChanged?.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ChangeDirectory(string[] dir) {
|
public void ChangeDirectory(string[] dir) {
|
||||||
CurrentDirectory = dir;
|
CurrentDirectory = dir;
|
||||||
cd = new DirectoryInfo(_rootPath + "/charts/" + string.Join("/", dir));
|
string path = Path.Combine(_rootPath, "charts", Path.Combine(dir));
|
||||||
items = cd.GetDirectories();
|
_cd = new DirectoryInfo(path);
|
||||||
ItemChanged?.Invoke();
|
_watcher.Path = path;
|
||||||
_version++;
|
_watcher.EnableRaisingEvents = true;
|
||||||
|
ReloadFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OpenDirectory(int id) {
|
public void OpenDirectory(int id) {
|
||||||
string[] nd = new string[CurrentDirectory.Length + 1];
|
string[] nd = new string[CurrentDirectory.Length + 1];
|
||||||
Array.Copy(CurrentDirectory, nd, CurrentDirectory.Length);
|
Array.Copy(CurrentDirectory, nd, CurrentDirectory.Length);
|
||||||
nd[CurrentDirectory.Length] = items[id].Name;
|
nd[CurrentDirectory.Length] = _items[id].Name;
|
||||||
ChangeDirectory(nd);
|
ChangeDirectory(nd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +78,7 @@ namespace Cryville.Crtr.Browsing {
|
|||||||
|
|
||||||
public ChartDetail this[int index] {
|
public ChartDetail this[int index] {
|
||||||
get {
|
get {
|
||||||
var item = items[index];
|
var item = _items[index];
|
||||||
ChartMeta meta = null;
|
ChartMeta meta = null;
|
||||||
AsyncDelivery<Texture2D> cover = null;
|
AsyncDelivery<Texture2D> cover = null;
|
||||||
var metaFile = new FileInfo(Path.Combine(item.FullName, ".umgc"));
|
var metaFile = new FileInfo(Path.Combine(item.FullName, ".umgc"));
|
||||||
@@ -83,13 +104,13 @@ namespace Cryville.Crtr.Browsing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Uri GetItemUri(int id) {
|
public Uri GetItemUri(int id) {
|
||||||
var item = items[id];
|
var item = _items[id];
|
||||||
var meta = new ChartMeta();
|
var meta = new ChartMeta();
|
||||||
var metaFile = new FileInfo(Path.Combine(item.FullName, ".umgc"));
|
var metaFile = new FileInfo(Path.Combine(item.FullName, ".umgc"));
|
||||||
using (var reader = new StreamReader(metaFile.FullName)) {
|
using (var reader = new StreamReader(metaFile.FullName)) {
|
||||||
meta = JsonConvert.DeserializeObject<ChartMeta>(reader.ReadToEnd());
|
meta = JsonConvert.DeserializeObject<ChartMeta>(reader.ReadToEnd());
|
||||||
}
|
}
|
||||||
return new Uri(Path.Combine(items[id].Name, string.Format("{0}.json", meta.data)));
|
return new Uri(Path.Combine(_items[id].Name, string.Format("{0}.json", meta.data)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ImportItemFrom(Uri uri) {
|
public bool ImportItemFrom(Uri uri) {
|
||||||
|
@@ -32,10 +32,15 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
_dialog.OnClose += OnAddDialogClosed;
|
_dialog.OnClose += OnAddDialogClosed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnItemChanged() {
|
bool _itemChanged;
|
||||||
ItemContainer.ItemCount = ResourceManager.Count;
|
void OnItemChanged() { _itemChanged = true; }
|
||||||
_selectedItems.Clear();
|
void Update() {
|
||||||
_items.Clear();
|
if (_itemChanged) {
|
||||||
|
_itemChanged = false;
|
||||||
|
_selectedItems.Clear();
|
||||||
|
_items.Clear();
|
||||||
|
ItemContainer.ItemCount = ResourceManager.Count;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool LoadItem(int id, GameObject obj) {
|
private bool LoadItem(int id, GameObject obj) {
|
||||||
@@ -77,7 +82,6 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
if (_dialog.FileName == null) return;
|
if (_dialog.FileName == null) return;
|
||||||
if (ResourceManager.ImportItemFrom(new Uri(_dialog.FileName))) {
|
if (ResourceManager.ImportItemFrom(new Uri(_dialog.FileName))) {
|
||||||
Popup.Create("Import succeeded");
|
Popup.Create("Import succeeded");
|
||||||
OnPathClicked(ResourceManager.CurrentDirectory.Length - 1);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Popup.Create("Import failed");
|
Popup.Create("Import failed");
|
||||||
|
Reference in New Issue
Block a user