fix: Files added to the temp directory gets an index to make them unique

Unzipped files are added to a subdirectory named after the zip file to avoid name clashes.
This commit is contained in:
mikael.lantz 2021-04-13 12:53:41 +02:00
parent 74101a8812
commit dff20f56a5
2 changed files with 17 additions and 5 deletions

View File

@ -42,6 +42,7 @@ public class GamebaseImporter
private String joyBase = ":JU,JD,JL,JR,JF,JF,SP,EN,,F1,F3,F5,,,";
private List<GbGameInfo> gbGameInfoList = new ArrayList<>();
private int importIndexForTempFiles = 0;
private Options selectedOption = Options.FAVORITES;
private String titleQueryString = "";
@ -555,16 +556,18 @@ public class GamebaseImporter
}
File gameFile = gbPath.resolve(filenameInGb).toFile();
//Increase index to be sure file names are unique in the temp folder
importIndexForTempFiles++;
if (isVic20cart)
{
return FileManager
.getTempFileForVic20Cart(new BufferedInputStream(new FileInputStream(gameFile)), gameFile.getName()).toPath()
.getTempFileForVic20Cart(new BufferedInputStream(new FileInputStream(gameFile)), importIndexForTempFiles + "_" + gameFile.getName()).toPath()
.toString();
}
else
{
File selectedFile = FileManager.createTempFileForScraper(new BufferedInputStream(new FileInputStream(gameFile)),
gameFile.getName());
importIndexForTempFiles + "_" + gameFile.getName());
//Do not compress prg files: Vice doesn't seem to unzip them properly
String lowercaseName = selectedFile.getName().toLowerCase();
if (lowercaseName.endsWith(".gz") || lowercaseName.endsWith(".prg") || lowercaseName.endsWith(".p00") )
@ -584,5 +587,6 @@ public class GamebaseImporter
{
gbGameInfoList.clear();
FileManager.deleteTempFolder();
importIndexForTempFiles = 0;
}
}

View File

@ -34,6 +34,7 @@ import java.util.zip.ZipEntry;
import javax.imageio.ImageIO;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -1131,6 +1132,8 @@ public class FileManager
public static File unzipAndPickFirstEntry(File file)
{
String unzippedBasePath = TEMP_PATH + File.separator + FilenameUtils.removeExtension(file.getName()) + File.separator;
String zipFilePath = file.getAbsolutePath();
Path filePath = null;
FileInputStream fis;
@ -1144,9 +1147,9 @@ public class FileManager
if (ze != null)
{
String fileName = ze.getName();
File newFile = new File(TEMP_PATH + File.separator + fileName);
File newFile = new File(unzippedBasePath + fileName);
//create directories for sub directories in zip
new File(newFile.getParent()).mkdirs();
new File(newFile.getParentFile().getParent()).mkdirs();
FileOutputStream fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0)
@ -1170,6 +1173,7 @@ public class FileManager
public static File unrarAndPickFirstEntry(File file)
{
String unzippedBasePath = TEMP_PATH + File.separator + FilenameUtils.removeExtension(file.getName()) + File.separator;
Path filePath = null;
try (Archive archive = new Archive(file))
{
@ -1177,7 +1181,11 @@ public class FileManager
FileHeader fh = archive.nextFileHeader();
if (fh != null)
{
File fileEntry = new File(TEMP_PATH + File.separator + fh.getFileNameString().trim());
File fileEntry = new File(unzippedBasePath + fh.getFileNameString().trim());
//create directories for sub directories in rar
new File(fileEntry.getParentFile().getParent()).mkdirs();
FileOutputStream os = new FileOutputStream(fileEntry);
archive.extractFile(fh, os);
os.close();