A bunch of filesystem fixes.

This commit is contained in:
Ottermandias 2022-05-11 20:58:21 +02:00
parent 0b9a48a485
commit f0af9f1274
4 changed files with 16 additions and 7 deletions

@ -1 +1 @@
Subproject commit 2539675a1bff56088ea7be1f6ad9da2f20115032
Subproject commit dd26a7f416106a5bed4ea68c500dfcd5c0818d59

View file

@ -13,7 +13,7 @@ public readonly struct FullPath : IComparable, IEquatable< FullPath >
public readonly Utf8String InternalName;
public readonly ulong Crc64;
public static readonly FullPath Empty = new(string.Empty);
public static readonly FullPath Empty = new(string.Empty);
public FullPath( DirectoryInfo baseDir, Utf8RelPath relPath )
: this( Path.Combine( baseDir.FullName, relPath.ToString() ) )
@ -71,9 +71,9 @@ public readonly struct FullPath : IComparable, IEquatable< FullPath >
public int CompareTo( object? obj )
=> obj switch
{
FullPath p => InternalName.CompareTo( p.InternalName ),
FullPath p => InternalName?.CompareTo( p.InternalName ) ?? -1,
FileInfo f => string.Compare( FullName, f.FullName, StringComparison.InvariantCultureIgnoreCase ),
Utf8String u => InternalName.CompareTo( u ),
Utf8String u => InternalName?.CompareTo( u ) ?? -1,
string s => string.Compare( FullName, s, StringComparison.InvariantCultureIgnoreCase ),
_ => -1,
};

View file

@ -68,7 +68,7 @@ public sealed class ModFileSystem : FileSystem< Mod >, IDisposable
if( type.HasFlag( MetaChangeType.Name ) && oldName != null )
{
var old = oldName.FixName();
if( Find( old, out var child ) )
if( Find( old, out var child ) && child is not Folder)
{
Rename( child, mod.Name.Text );
}
@ -117,7 +117,7 @@ public sealed class ModFileSystem : FileSystem< Mod >, IDisposable
private static (string, bool) SaveMod( Mod mod, string fullPath )
{
var regex = new Regex( $@"^{Regex.Escape( ModToName( mod ) )}( \(\d+\))?" );
var regex = new Regex( $@"^{Regex.Escape( ModToName( mod ) )}( \(\d+\))?$" );
// Only save pairs with non-default paths.
if( regex.IsMatch( fullPath ) )
{

View file

@ -5,6 +5,7 @@ using System.IO;
using System.Numerics;
using Dalamud.Interface;
using Dalamud.Interface.Components;
using Dalamud.Logging;
using Dalamud.Memory;
using ImGuiNET;
using OtterGui;
@ -45,7 +46,14 @@ public partial class ConfigWindow
if( Input.Text( "Mod Path", Input.Path, Input.None, _leaf.FullName(), out var newPath, 256,
_window._inputTextWidth.X ) )
{
_window._penumbra.ModFileSystem.RenameAndMove( _leaf, newPath );
try
{
_window._penumbra.ModFileSystem.RenameAndMove( _leaf, newPath );
}
catch( Exception e )
{
PluginLog.Warning( e.Message );
}
}
ImGui.Dummy( _window._defaultSpace );
@ -138,6 +146,7 @@ public partial class ConfigWindow
_window.ModEditPopup.ChangeOption( -1, 0 );
_window.ModEditPopup.IsOpen = true;
}
ImGui.SameLine();
fileExists = File.Exists( _mod.DefaultFile );
tt = fileExists