diff --git a/.vs/OpenSaveCloudClient/DesignTimeBuild/.dtbcache.v2 b/.vs/OpenSaveCloudClient/DesignTimeBuild/.dtbcache.v2 index 37cbed8..409ed5f 100644 Binary files a/.vs/OpenSaveCloudClient/DesignTimeBuild/.dtbcache.v2 and b/.vs/OpenSaveCloudClient/DesignTimeBuild/.dtbcache.v2 differ diff --git a/.vs/OpenSaveCloudClient/FileContentIndex/b83358e6-2ee9-4aca-9051-804fb12eac4b.vsidx b/.vs/OpenSaveCloudClient/FileContentIndex/41143b23-351a-425a-86b8-aa03805a4cf8.vsidx similarity index 70% rename from .vs/OpenSaveCloudClient/FileContentIndex/b83358e6-2ee9-4aca-9051-804fb12eac4b.vsidx rename to .vs/OpenSaveCloudClient/FileContentIndex/41143b23-351a-425a-86b8-aa03805a4cf8.vsidx index c1969a3..86cb0c9 100644 Binary files a/.vs/OpenSaveCloudClient/FileContentIndex/b83358e6-2ee9-4aca-9051-804fb12eac4b.vsidx and b/.vs/OpenSaveCloudClient/FileContentIndex/41143b23-351a-425a-86b8-aa03805a4cf8.vsidx differ diff --git a/.vs/OpenSaveCloudClient/FileContentIndex/6f47e642-c41c-4a66-ab0d-e4dff58f96b9.vsidx b/.vs/OpenSaveCloudClient/FileContentIndex/6f47e642-c41c-4a66-ab0d-e4dff58f96b9.vsidx deleted file mode 100644 index 86539c6..0000000 Binary files a/.vs/OpenSaveCloudClient/FileContentIndex/6f47e642-c41c-4a66-ab0d-e4dff58f96b9.vsidx and /dev/null differ diff --git a/.vs/OpenSaveCloudClient/FileContentIndex/cb06d074-5d85-47f6-b43d-ed354393a5cb.vsidx b/.vs/OpenSaveCloudClient/FileContentIndex/cb06d074-5d85-47f6-b43d-ed354393a5cb.vsidx deleted file mode 100644 index dfbb0dc..0000000 Binary files a/.vs/OpenSaveCloudClient/FileContentIndex/cb06d074-5d85-47f6-b43d-ed354393a5cb.vsidx and /dev/null differ diff --git a/.vs/OpenSaveCloudClient/FileContentIndex/ed9033bb-e5bc-4ee1-a50b-2fcf3ef8fe8e.vsidx b/.vs/OpenSaveCloudClient/FileContentIndex/ed9033bb-e5bc-4ee1-a50b-2fcf3ef8fe8e.vsidx new file mode 100644 index 0000000..4aafcc1 Binary files /dev/null and b/.vs/OpenSaveCloudClient/FileContentIndex/ed9033bb-e5bc-4ee1-a50b-2fcf3ef8fe8e.vsidx differ diff --git a/.vs/OpenSaveCloudClient/v17/.futdcache.v1 b/.vs/OpenSaveCloudClient/v17/.futdcache.v1 index b0c5d5d..f9530b4 100644 Binary files a/.vs/OpenSaveCloudClient/v17/.futdcache.v1 and b/.vs/OpenSaveCloudClient/v17/.futdcache.v1 differ diff --git a/.vs/ProjectEvaluation/opensavecloudclient.metadata.v2 b/.vs/ProjectEvaluation/opensavecloudclient.metadata.v2 index dcd44d2..a6a96fa 100644 Binary files a/.vs/ProjectEvaluation/opensavecloudclient.metadata.v2 and b/.vs/ProjectEvaluation/opensavecloudclient.metadata.v2 differ diff --git a/.vs/ProjectEvaluation/opensavecloudclient.projects.v2 b/.vs/ProjectEvaluation/opensavecloudclient.projects.v2 index edc678b..cd3b3b7 100644 Binary files a/.vs/ProjectEvaluation/opensavecloudclient.projects.v2 and b/.vs/ProjectEvaluation/opensavecloudclient.projects.v2 differ diff --git a/OpenSaveCloudClient/GameLibraryForm.cs b/OpenSaveCloudClient/GameLibraryForm.cs index 3f95190..83e1efd 100644 --- a/OpenSaveCloudClient/GameLibraryForm.cs +++ b/OpenSaveCloudClient/GameLibraryForm.cs @@ -39,6 +39,9 @@ namespace OpenSaveCloudClient logManager.NewMessage += LogManager_NewMessage; new Thread(() => { + this.Invoke((MethodInvoker)delegate { + CheckPaths(); + }); serverConnector.Reconnect(); if (!serverConnector.Connected) { @@ -48,7 +51,14 @@ namespace OpenSaveCloudClient } else { - saveManager.DetectChanges(); + try + { + saveManager.DetectChanges(); + } + catch (Exception e) + { + logManager.AddError(e); + } this.Invoke((MethodInvoker)delegate { SetAdminControls(); AboutButton.Enabled = true; @@ -62,6 +72,36 @@ namespace OpenSaveCloudClient }); } }).Start(); + } + + private void CheckPaths() + { + List toDelete = new(); + foreach (GameSave save in saveManager.Saves) + { + if (!save.PathExist()) + { + string message = String.Format("The path of '{0}' is not found\n\n{1}\n\nDo you want to locate the new path?", save.Name, save.FolderPath); + DialogResult res = MessageBox.Show(message, "Missing path", MessageBoxButtons.YesNo, MessageBoxIcon.Error); + if (res == DialogResult.Yes) + { + FolderBrowserDialog dialog = new(); + if (dialog.ShowDialog() == DialogResult.OK) + { + save.FolderPath = dialog.SelectedPath; + } + } + else + { + toDelete.Add(save); + } + } + } + foreach (GameSave save in toDelete) + { + saveManager.Saves.Remove(save); + } + saveManager.Save(); RefreshList(); } @@ -82,7 +122,14 @@ namespace OpenSaveCloudClient { new Thread(() => { - saveManager.DetectChanges(); + try + { + saveManager.DetectChanges(); + } + catch (Exception e) + { + logManager.AddError(e); + } }).Start(); SetAdminControls(); Enabled = true; diff --git a/OpenSaveCloudClient/Models/GameSave.cs b/OpenSaveCloudClient/Models/GameSave.cs index c078ed7..e55927c 100644 --- a/OpenSaveCloudClient/Models/GameSave.cs +++ b/OpenSaveCloudClient/Models/GameSave.cs @@ -16,7 +16,7 @@ namespace OpenSaveCloudClient.Models private long id; private string uuid; private readonly string name; - private readonly string folderPath; + private string folderPath; private readonly string description; private string hash; private string currentHash; @@ -28,7 +28,7 @@ namespace OpenSaveCloudClient.Models public string Uuid { get { return uuid; } } public string Name { get { return name; } } public string Description { get { return description; } } - public string FolderPath { get { return folderPath; } } + public string FolderPath { get { return folderPath; } set { folderPath = value; } } public string Hash { get { return hash; } } public string CurrentHash { get { return currentHash; } } public string? CoverPath { get { return coverPath; } } @@ -110,5 +110,10 @@ namespace OpenSaveCloudClient.Models { hash = currentHash; } + + public bool PathExist() + { + return Directory.Exists(FolderPath); + } } }