mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 18:27:24 +01:00
Some fixes regarding Forward-Slashes in ModNames.
This commit is contained in:
parent
03a722b92f
commit
d6bb45f33c
8 changed files with 72 additions and 21 deletions
|
|
@ -50,11 +50,8 @@ namespace Penumbra.Importer
|
||||||
_resolvedTempFilePath = Path.Combine( _outDirectory.FullName, TempFileName );
|
_resolvedTempFilePath = Path.Combine( _outDirectory.FullName, TempFileName );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string ReplaceBadXivSymbols( string source )
|
|
||||||
=> source.ReplaceInvalidPathSymbols().RemoveNonAsciiSymbols();
|
|
||||||
|
|
||||||
private static DirectoryInfo NewOptionDirectory( DirectoryInfo baseDir, string optionName )
|
private static DirectoryInfo NewOptionDirectory( DirectoryInfo baseDir, string optionName )
|
||||||
=> new( Path.Combine( baseDir.FullName, ReplaceBadXivSymbols( optionName ) ) );
|
=> new( Path.Combine( baseDir.FullName, optionName.ReplaceBadXivSymbols() ) );
|
||||||
|
|
||||||
public void ImportModPack( FileInfo modPackFile )
|
public void ImportModPack( FileInfo modPackFile )
|
||||||
{
|
{
|
||||||
|
|
@ -197,7 +194,12 @@ namespace Penumbra.Importer
|
||||||
|
|
||||||
public static DirectoryInfo CreateModFolder( DirectoryInfo outDirectory, string modListName )
|
public static DirectoryInfo CreateModFolder( DirectoryInfo outDirectory, string modListName )
|
||||||
{
|
{
|
||||||
var newModFolderBase = NewOptionDirectory( outDirectory, Path.GetFileName( modListName ) );
|
var name = Path.GetFileName( modListName );
|
||||||
|
if( !name.Any() )
|
||||||
|
{
|
||||||
|
name = "_";
|
||||||
|
}
|
||||||
|
var newModFolderBase = NewOptionDirectory( outDirectory, name );
|
||||||
var newModFolder = newModFolderBase;
|
var newModFolder = newModFolderBase;
|
||||||
var i = 2;
|
var i = 2;
|
||||||
while( newModFolder.Exists && i < 12 )
|
while( newModFolder.Exists && i < 12 )
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,7 @@ namespace Penumbra.Meta
|
||||||
_resolvedFiles = resolvedFiles;
|
_resolvedFiles = resolvedFiles;
|
||||||
_default = Service< MetaDefaults >.Get();
|
_default = Service< MetaDefaults >.Get();
|
||||||
_resourceManagement = Service< GameResourceManagement >.Get();
|
_resourceManagement = Service< GameResourceManagement >.Get();
|
||||||
_dir = new DirectoryInfo( Path.Combine( modDir.FullName, TmpDirectory, name.ReplaceInvalidPathSymbols().RemoveNonAsciiSymbols() ) );
|
_dir = new DirectoryInfo( Path.Combine( modDir.FullName, TmpDirectory, name.ReplaceBadXivSymbols() ) );
|
||||||
ClearDirectory();
|
ClearDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace Penumbra.Mod
|
||||||
Meta = meta;
|
Meta = meta;
|
||||||
Resources = resources;
|
Resources = resources;
|
||||||
MetaFile = MetaFileInfo( basePath );
|
MetaFile = MetaFileInfo( basePath );
|
||||||
SortOrder = meta.Name;
|
SortOrder = meta.Name.Replace( '/', '\\' );
|
||||||
ComputeChangedItems();
|
ComputeChangedItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,11 @@ namespace Penumbra.Mods
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( Config.ModSortOrder.TryGetValue( mod.BasePath.Name, out var sortOrder ) )
|
||||||
|
{
|
||||||
|
mod.SortOrder = sortOrder;
|
||||||
|
}
|
||||||
|
|
||||||
if( Mods.ContainsKey( modFolder.Name ) )
|
if( Mods.ContainsKey( modFolder.Name ) )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -166,6 +171,14 @@ namespace Penumbra.Mods
|
||||||
if( metaChanges || fileChanges.HasFlag( ResourceChange.Files ) )
|
if( metaChanges || fileChanges.HasFlag( ResourceChange.Files ) )
|
||||||
{
|
{
|
||||||
mod.ComputeChangedItems();
|
mod.ComputeChangedItems();
|
||||||
|
if( Config.ModSortOrder.TryGetValue( mod.BasePath.Name, out var sortOrder ) )
|
||||||
|
{
|
||||||
|
mod.SortOrder = sortOrder;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mod.SortOrder = mod.Meta.Name.Replace( '/', '\\' );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var nameChange = !string.Equals( oldName, mod.Meta.Name, StringComparison.InvariantCulture );
|
var nameChange = !string.Equals( oldName, mod.Meta.Name, StringComparison.InvariantCulture );
|
||||||
|
|
|
||||||
|
|
@ -39,9 +39,10 @@ namespace Penumbra.Mods
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( newSortOrder == string.Empty || newSortOrder == mod.Meta.Name )
|
var modName = mod.Meta.Name.Replace( '/', '\\' );
|
||||||
|
if( newSortOrder == string.Empty || newSortOrder == modName )
|
||||||
{
|
{
|
||||||
mod.SortOrder = mod.Meta.Name;
|
mod.SortOrder = modName;
|
||||||
manager.Config.ModSortOrder.Remove( mod.BasePath.Name );
|
manager.Config.ModSortOrder.Remove( mod.BasePath.Name );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -254,7 +254,8 @@ namespace Penumbra.UI
|
||||||
|
|
||||||
private void DrawOpenModFolderButton()
|
private void DrawOpenModFolderButton()
|
||||||
{
|
{
|
||||||
if( ImGui.Button( ButtonOpenModFolder ) )
|
Mod!.Data.BasePath.Refresh();
|
||||||
|
if( ImGui.Button( ButtonOpenModFolder ) && Mod.Data.BasePath.Exists )
|
||||||
{
|
{
|
||||||
Process.Start( Mod!.Data.BasePath.FullName );
|
Process.Start( Mod!.Data.BasePath.FullName );
|
||||||
}
|
}
|
||||||
|
|
@ -270,7 +271,7 @@ namespace Penumbra.UI
|
||||||
|
|
||||||
private void RenameModFolder( string newName )
|
private void RenameModFolder( string newName )
|
||||||
{
|
{
|
||||||
_newName = newName.RemoveNonAsciiSymbols().RemoveInvalidPathSymbols();
|
_newName = newName.ReplaceBadXivSymbols();
|
||||||
if( _newName.Length == 0 )
|
if( _newName.Length == 0 )
|
||||||
{
|
{
|
||||||
PluginLog.Debug( "New Directory name {NewName} was empty after removing invalid symbols.", newName );
|
PluginLog.Debug( "New Directory name {NewName} was empty after removing invalid symbols.", newName );
|
||||||
|
|
|
||||||
|
|
@ -157,7 +157,7 @@ namespace Penumbra.UI
|
||||||
var modMeta = new ModMeta
|
var modMeta = new ModMeta
|
||||||
{
|
{
|
||||||
Author = "Unknown",
|
Author = "Unknown",
|
||||||
Name = newName,
|
Name = newName.Replace('/', '\\'),
|
||||||
Description = string.Empty,
|
Description = string.Empty,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
|
|
@ -5,27 +6,60 @@ namespace Penumbra.Util
|
||||||
{
|
{
|
||||||
public static class StringPathExtensions
|
public static class StringPathExtensions
|
||||||
{
|
{
|
||||||
private static readonly char[] Invalid = Path.GetInvalidFileNameChars();
|
private static readonly HashSet< char > Invalid = new( Path.GetInvalidFileNameChars() );
|
||||||
|
|
||||||
public static string ReplaceInvalidPathSymbols( this string s, string replacement = "_" )
|
public static string ReplaceInvalidPathSymbols( this string s, string replacement = "_" )
|
||||||
=> string.Join( replacement, s.Split( Invalid ) );
|
|
||||||
|
|
||||||
public static string RemoveInvalidPathSymbols( this string s )
|
|
||||||
=> string.Concat( s.Split( Invalid ) );
|
|
||||||
|
|
||||||
public static string RemoveNonAsciiSymbols( this string s, string replacement = "_" )
|
|
||||||
{
|
{
|
||||||
StringBuilder sb = new( s.Length );
|
StringBuilder sb = new( s.Length );
|
||||||
foreach( var c in s )
|
foreach( var c in s )
|
||||||
{
|
{
|
||||||
if( c < 128 )
|
if( Invalid.Contains( c ) )
|
||||||
{
|
{
|
||||||
sb.Append( c );
|
sb.Append( replacement );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
sb.Append( c );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string RemoveInvalidPathSymbols( this string s )
|
||||||
|
=> string.Concat( s.Split( Path.GetInvalidFileNameChars() ) );
|
||||||
|
|
||||||
|
public static string ReplaceNonAsciiSymbols( this string s, string replacement = "_" )
|
||||||
|
{
|
||||||
|
StringBuilder sb = new( s.Length );
|
||||||
|
foreach( var c in s )
|
||||||
|
{
|
||||||
|
if( c >= 128 )
|
||||||
{
|
{
|
||||||
sb.Append( replacement );
|
sb.Append( replacement );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sb.Append( c );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ReplaceBadXivSymbols( this string s, string replacement = "_" )
|
||||||
|
{
|
||||||
|
StringBuilder sb = new( s.Length );
|
||||||
|
foreach( var c in s )
|
||||||
|
{
|
||||||
|
if( c >= 128 || Invalid.Contains( c ) )
|
||||||
|
{
|
||||||
|
sb.Append( replacement );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sb.Append( c );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue