mirror of
https://github.com/LostArtefacts/TRX.git
synced 2025-04-28 20:58:07 +03:00
tools/installer: standardize output paths
This standardizes output paths to conform with shipped TRX data. Folders and files created within the target folder will be in lower-case; PCX files will be copied to a sub-directory within images as TRX ships with custom images, and this as a result keeps the data folder tidy.
This commit is contained in:
parent
24fb920cd1
commit
5fb3f84fed
5 changed files with 34 additions and 9 deletions
|
@ -37,7 +37,8 @@ public class CDRomInstallSource : BaseInstallSource
|
||||||
sourceDirectory,
|
sourceDirectory,
|
||||||
targetDirectory,
|
targetDirectory,
|
||||||
progress,
|
progress,
|
||||||
file => filterRegex.IsMatch(file)
|
file => filterRegex.IsMatch(file),
|
||||||
|
path => ConvertTargetPath(path)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,8 @@ public class GOGInstallSource : BaseInstallSource
|
||||||
});
|
});
|
||||||
foreach (var path in filesToExtract)
|
foreach (var path in filesToExtract)
|
||||||
{
|
{
|
||||||
var targetPath = Path.Combine(targetDirectory, path);
|
var relPath = ConvertTargetPath(path);
|
||||||
|
var targetPath = Path.Combine(targetDirectory, relPath);
|
||||||
if (!File.Exists(targetPath))
|
if (!File.Exists(targetPath))
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(Path.GetDirectoryName(targetPath)!);
|
Directory.CreateDirectory(Path.GetDirectoryName(targetPath)!);
|
||||||
|
@ -100,7 +101,7 @@ public class GOGInstallSource : BaseInstallSource
|
||||||
{
|
{
|
||||||
MaximumValue = filesToExtract.Count(),
|
MaximumValue = filesToExtract.Count(),
|
||||||
CurrentValue = ++currentProgress,
|
CurrentValue = ++currentProgress,
|
||||||
Description = string.Format(Language.Instance.Controls!["progress_extracting"], path)
|
Description = string.Format(Language.Instance.Controls!["progress_extracting"], relPath)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,8 @@ public class TombATIInstallSource : BaseInstallSource
|
||||||
sourceDirectory,
|
sourceDirectory,
|
||||||
targetDirectory,
|
targetDirectory,
|
||||||
progress,
|
progress,
|
||||||
file => filterRegex.IsMatch(file)
|
file => filterRegex.IsMatch(file),
|
||||||
|
path => ConvertTargetPath(path)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,4 +35,22 @@ public abstract class BaseInstallSource : IInstallSource
|
||||||
public abstract bool IsDownloadingExpansionNeeded(string sourceDirectory);
|
public abstract bool IsDownloadingExpansionNeeded(string sourceDirectory);
|
||||||
|
|
||||||
public abstract bool IsGameFound(string sourceDirectory);
|
public abstract bool IsGameFound(string sourceDirectory);
|
||||||
|
|
||||||
|
public static string ConvertTargetPath(string relPath)
|
||||||
|
{
|
||||||
|
string ext = Path.GetExtension(relPath).ToLower();
|
||||||
|
switch (ext)
|
||||||
|
{
|
||||||
|
case ".pcx":
|
||||||
|
relPath = @$"data\images\og\{Path.GetFileName(relPath)}";
|
||||||
|
break;
|
||||||
|
case ".json5":
|
||||||
|
case ".exe":
|
||||||
|
return relPath;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return relPath.ToLower();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ public static class InstallUtils
|
||||||
string targetDirectory,
|
string targetDirectory,
|
||||||
IProgress<InstallProgress> progress,
|
IProgress<InstallProgress> progress,
|
||||||
Func<string, bool>? filterCallback = null,
|
Func<string, bool>? filterCallback = null,
|
||||||
|
Func<string, string>? targetCallback = null,
|
||||||
Func<string, bool>? overwriteCallback = null
|
Func<string, bool>? overwriteCallback = null
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -37,6 +38,10 @@ public static class InstallUtils
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var relPath = Path.GetRelativePath(sourceDirectory, sourcePath);
|
var relPath = Path.GetRelativePath(sourceDirectory, sourcePath);
|
||||||
|
if (targetCallback is not null)
|
||||||
|
{
|
||||||
|
relPath = targetCallback(relPath) ?? relPath;
|
||||||
|
}
|
||||||
var targetPath = Path.Combine(targetDirectory, relPath);
|
var targetPath = Path.Combine(targetDirectory, relPath);
|
||||||
var isSamePath = string.Equals(Path.GetFullPath(sourcePath), Path.GetFullPath(targetPath), StringComparison.OrdinalIgnoreCase);
|
var isSamePath = string.Equals(Path.GetFullPath(sourcePath), Path.GetFullPath(targetPath), StringComparison.OrdinalIgnoreCase);
|
||||||
if (!File.Exists(targetPath) || (overwriteCallback is not null && overwriteCallback(sourcePath) && !isSamePath))
|
if (!File.Exists(targetPath) || (overwriteCallback is not null && overwriteCallback(sourcePath) && !isSamePath))
|
||||||
|
@ -129,9 +134,8 @@ public static class InstallUtils
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var targetPath = Path.Combine(
|
var relPath = BaseInstallSource.ConvertTargetPath(new Regex(@"[\\/]").Replace(entry.FullName, Path.DirectorySeparatorChar.ToString()));
|
||||||
targetDirectory,
|
var targetPath = Path.Combine(targetDirectory, relPath);
|
||||||
new Regex(@"[\\/]").Replace(entry.FullName, Path.DirectorySeparatorChar.ToString()));
|
|
||||||
|
|
||||||
if (!File.Exists(targetPath) || overwrite)
|
if (!File.Exists(targetPath) || overwrite)
|
||||||
{
|
{
|
||||||
|
@ -139,7 +143,7 @@ public static class InstallUtils
|
||||||
{
|
{
|
||||||
CurrentValue = currentProgress,
|
CurrentValue = currentProgress,
|
||||||
MaximumValue = maximumProgress,
|
MaximumValue = maximumProgress,
|
||||||
Description = string.Format(Language.Instance.Controls!["progress_extracting"], entry.FullName),
|
Description = string.Format(Language.Instance.Controls!["progress_extracting"], relPath),
|
||||||
});
|
});
|
||||||
|
|
||||||
Directory.CreateDirectory(Path.GetDirectoryName(targetPath)!);
|
Directory.CreateDirectory(Path.GetDirectoryName(targetPath)!);
|
||||||
|
@ -151,7 +155,7 @@ public static class InstallUtils
|
||||||
{
|
{
|
||||||
CurrentValue = currentProgress,
|
CurrentValue = currentProgress,
|
||||||
MaximumValue = maximumProgress,
|
MaximumValue = maximumProgress,
|
||||||
Description = string.Format(Language.Instance.Controls!["progress_extracting_skipped"], entry.FullName),
|
Description = string.Format(Language.Instance.Controls!["progress_extracting_skipped"], relPath),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue