do not allow to change storage folder as long as monitoring is active

This commit is contained in:
rootdarkarchon
2024-02-13 01:02:25 +01:00
committed by Loporrit
parent 739c02cf0b
commit 9122460801
2 changed files with 29 additions and 27 deletions

View File

@@ -783,7 +783,6 @@ public class SettingsUi : WindowMediatorSubscriberBase
+ UiSharedService.TooltipSeparator + "Hold CTRL to enable this button"); + UiSharedService.TooltipSeparator + "Hold CTRL to enable this button");
} }
_uiShared.DrawCacheDirectorySetting(); _uiShared.DrawCacheDirectorySetting();
ImGui.TextUnformatted($"Currently utilized local storage: {UiSharedService.ByteToString(_uiShared.FileCacheSize)}"); ImGui.TextUnformatted($"Currently utilized local storage: {UiSharedService.ByteToString(_uiShared.FileCacheSize)}");
bool isLinux = Util.IsWine(); bool isLinux = Util.IsWine();

View File

@@ -594,36 +594,39 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
ImGui.InputText("Storage Folder##cache", ref cacheDirectory, 255, ImGuiInputTextFlags.ReadOnly); ImGui.InputText("Storage Folder##cache", ref cacheDirectory, 255, ImGuiInputTextFlags.ReadOnly);
ImGui.SameLine(); ImGui.SameLine();
ImGui.PushFont(UiBuilder.IconFont); using (ImRaii.Disabled(_cacheMonitor.MareWatcher != null))
string folderIcon = FontAwesomeIcon.Folder.ToIconString();
if (ImGui.Button(folderIcon + "##chooseCacheFolder"))
{ {
FileDialogManager.OpenFolderDialog("Pick Loporrit Storage Folder", (success, path) => if (NormalizedIconButton(FontAwesomeIcon.Folder))
{ {
if (!success) return; FileDialogManager.OpenFolderDialog("Pick Loporrit Storage Folder", (success, path) =>
_isOneDrive = path.Contains("onedrive", StringComparison.OrdinalIgnoreCase);
_isPenumbraDirectory = string.Equals(path.ToLowerInvariant(), _ipcManager.PenumbraModDirectory?.ToLowerInvariant(), StringComparison.Ordinal);
_isDirectoryWritable = IsDirectoryWritable(path);
_cacheDirectoryHasOtherFilesThanCache = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Any(f => Path.GetFileNameWithoutExtension(f).Length != 40);
_cacheDirectoryIsValidPath = PathRegex().IsMatch(path);
if (!string.IsNullOrEmpty(path)
&& Directory.Exists(path)
&& _isDirectoryWritable
&& !_isPenumbraDirectory
&& !_isOneDrive
&& !_cacheDirectoryHasOtherFilesThanCache
&& _cacheDirectoryIsValidPath)
{ {
_configService.Current.CacheFolder = path; if (!success) return;
_configService.Save();
_cacheMonitor.StartMareWatcher(path); _isOneDrive = path.Contains("onedrive", StringComparison.OrdinalIgnoreCase);
_cacheMonitor.InvokeScan(); _isPenumbraDirectory = string.Equals(path.ToLowerInvariant(), _ipcManager.PenumbraModDirectory?.ToLowerInvariant(), StringComparison.Ordinal);
} _isDirectoryWritable = IsDirectoryWritable(path);
}); _cacheDirectoryHasOtherFilesThanCache = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Any(f => Path.GetFileNameWithoutExtension(f).Length != 40);
_cacheDirectoryIsValidPath = PathRegex().IsMatch(path);
if (!string.IsNullOrEmpty(path)
&& Directory.Exists(path)
&& _isDirectoryWritable
&& !_isPenumbraDirectory
&& !_cacheDirectoryHasOtherFilesThanCache
&& _cacheDirectoryIsValidPath)
{
_configService.Current.CacheFolder = path;
_configService.Save();
_cacheMonitor.StartMareWatcher(path);
_cacheMonitor.InvokeScan();
}
});
}
}
if (_cacheMonitor.MareWatcher != null)
{
AttachToolTip("Stop the Monitoring before changing the Storage folder. As long as monitoring is active, you cannot change the Storage folder location.");
} }
ImGui.PopFont();
if (_isPenumbraDirectory) if (_isPenumbraDirectory)
{ {