mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
Fix ReosurcesMergingHelper wrongly modifing extensions of files having filename conflicts during export
This commit is contained in:
@@ -49,11 +49,25 @@ void ResourcesMergingHelper::SetNewFilename(gd::String oldFilename,
|
||||
gd::String newFilename) {
|
||||
if (oldFilenames.find(oldFilename) != oldFilenames.end()) return;
|
||||
|
||||
// Make sure that the new filename is not already used.
|
||||
gd::String finalFilename = gd::NewNameGenerator::Generate(
|
||||
newFilename, [this](const gd::String& name) {
|
||||
return newFilenames.find(name) != newFilenames.end();
|
||||
});
|
||||
// Extract baseName and extension from the new filename
|
||||
size_t extensionPos = newFilename.find_last_of(".");
|
||||
gd::String extension =
|
||||
extensionPos != gd::String::npos
|
||||
? newFilename.substr(extensionPos, newFilename.length())
|
||||
: "";
|
||||
gd::String baseName = newFilename.substr(0, extensionPos);
|
||||
|
||||
// Make sure that the new filename is not already used. Generate a
|
||||
// new filename while there is a collision.
|
||||
// Preserving extension is important.
|
||||
gd::String finalFilename =
|
||||
gd::NewNameGenerator::Generate(
|
||||
baseName,
|
||||
[this, extension](const gd::String& newBaseName) {
|
||||
return newFilenames.find(newBaseName + extension) !=
|
||||
newFilenames.end();
|
||||
}) +
|
||||
extension;
|
||||
|
||||
oldFilenames[oldFilename] = finalFilename;
|
||||
newFilenames[finalFilename] = oldFilename;
|
||||
|
@@ -18,8 +18,10 @@ class AbstractFileSystem;
|
||||
namespace gd {
|
||||
|
||||
/**
|
||||
* \brief ResourcesMergingHelper is used (mainly during compilation) so
|
||||
* as to inventory resources and change their filenames
|
||||
* \brief ResourcesMergingHelper is used (mainly during export)
|
||||
* to list resources and generate new filenames, to allow them to be all copied
|
||||
* in a single directory (potentially changing the filename to avoid conflicts,
|
||||
* but preserving extensions).
|
||||
*
|
||||
* \see ArbitraryResourceWorker
|
||||
*
|
||||
@@ -82,9 +84,9 @@ class GD_CORE_API ResourcesMergingHelper : public ArbitraryResourceWorker {
|
||||
///< baseDirectory, will be preserved in
|
||||
///< filenames.
|
||||
bool preserveAbsoluteFilenames; ///< If set to true, the filenames which are
|
||||
///< absolute ( C:\MyFile.png ) will not be
|
||||
///< transformed into their filenames (
|
||||
///< MyFile.png ).
|
||||
///< absolute (C:\MyFile.png will not be
|
||||
///< transformed into a relative filename
|
||||
///< (MyFile.png).
|
||||
gd::AbstractFileSystem&
|
||||
fs; ///< The gd::AbstractFileSystem used to manipulate files.
|
||||
};
|
||||
|
Reference in New Issue
Block a user