Skip to content

Commit ab952e8

Browse files
committed
improve entry deletion logic
1 parent 0975136 commit ab952e8

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

XgpSaveTools/XboxContainerRepository.cs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,29 @@ public IEnumerable<SaveFile> GetSaveEntries(GameInfo info, UserContainerFolder u
9292
return handler.GetSaveEntries(conts, info.HandlerArgs);
9393
}
9494

95-
private void DeleteDir(ContainerEntry entry)
95+
private bool IsNumeric(string s) => double.TryParse(s, out _);
96+
private bool ExtensionIsNumeric(string extensionStr)
97+
{
98+
if (string.IsNullOrEmpty(extensionStr)) return false;
99+
return IsNumeric(extensionStr.Replace(".", ""));
100+
}
101+
102+
private void HandleEntryDeletion(ContainerEntry entry)
96103
{
97104
var file = new FileInfo(entry.Path);
98-
if (file.Exists) file.Directory.Delete(true);
105+
var dir = file.Directory;
106+
var otherFiles = dir.EnumerateFiles().Where(f => f.FullName != file.FullName).ToArray();
107+
108+
if (otherFiles.Length == 1 && ExtensionIsNumeric(otherFiles[0].Extension)) // 1cn1f delete entire folder
109+
{
110+
Console.WriteLine($"Removing {dir.FullName}");
111+
dir.Delete(true);
112+
}
113+
else // delete only entry file
114+
{
115+
Console.WriteLine($"Removing {file.FullName}");
116+
file.Delete();
117+
}
99118
}
100119

101120
public void ReplaceEntries(GameInfo info, UserContainerFolder userContainer, IEnumerable<EntryReplacement> replacements)
@@ -109,8 +128,7 @@ public void ReplaceEntries(GameInfo info, UserContainerFolder userContainer, IEn
109128
Console.WriteLine("");
110129
foreach (var rep in replacements.Where(x => x.ReplacementFile == null))
111130
{
112-
Console.WriteLine($"Removing {rep.TargetFile.Path}");
113-
DeleteDir(rep.TargetFile);
131+
HandleEntryDeletion(rep.TargetFile);
114132
Console.WriteLine("");
115133
}
116134
foreach (var rep in replacements.Where(x => x.ReplacementFile != null))
@@ -210,7 +228,7 @@ private List<ContainerEntry> ReadContainerBlob(string containerFolder, int conta
210228
? path2
211229
: null!;
212230

213-
if (chosen == null)
231+
if (chosen == null || !File.Exists(chosen))
214232
{
215233
Console.WriteLine($"!! Missing file blob for {fileName}");
216234
continue;

Xgpst-ConsoleApp/ConsoleApp.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ string getLabel(GameInfo gameInfo)
114114
if (selection.Value == showUnregisteredOpt)
115115
{
116116
Newline();
117-
_helper.WriteWarning("Unregistered games will use generic handler, and output files will have no extension, consider creating entry on games.json");
117+
_helper.WriteWarning("Unregistered games will use generic handler, and output files might have no extension, consider creating entry on games.json");
118118
_ScanGamesMode(true);
119119
return;
120120
}

0 commit comments

Comments
 (0)