1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-17 22:23:10 +03:00

keep included folder name as top level folder name, delete MAC folder and hidden files

This commit is contained in:
Cristian Maglie
2013-05-10 17:27:52 +02:00
parent d66e094a3b
commit 62a8a0149f

View File

@ -14,26 +14,30 @@ public class ZipDeflater {
private final ZipFile zipFile; private final ZipFile zipFile;
private final File destFolder; private final File destFolder;
private final Random random;
private final File file;
public ZipDeflater(File file, File destFolder) throws ZipException, IOException { public ZipDeflater(File file, File destFolder) throws ZipException, IOException {
this.file = file;
this.destFolder = destFolder; this.destFolder = destFolder;
this.zipFile = new ZipFile(file); this.zipFile = new ZipFile(file);
this.random = new Random();
} }
public void deflate() throws IOException { public void deflate() throws IOException {
String folderName = tempFolderNameFromZip(); String tmpFolderName = folderNameFromZip() + random.nextInt(1000000);
File folder = new File(destFolder, folderName); File tmpFolder = new File(destFolder, tmpFolderName);
if (!folder.mkdir()) { if (!tmpFolder.mkdir()) {
throw new IOException("Unable to create folder " + folderName); throw new IOException("Unable to create folder " + tmpFolderName);
} }
Enumeration<? extends ZipEntry> entries = zipFile.entries(); Enumeration<? extends ZipEntry> entries = zipFile.entries();
while (entries.hasMoreElements()) { while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement(); ZipEntry entry = entries.nextElement();
ensureFoldersOfEntryExist(folder, entry); ensureFoldersOfEntryExist(tmpFolder, entry);
File entryFile = new File(folder, entry.getName()); File entryFile = new File(tmpFolder, entry.getName());
if (entry.isDirectory()) { if (entry.isDirectory()) {
entryFile.mkdir(); entryFile.mkdir();
} else { } else {
@ -58,8 +62,33 @@ public class ZipDeflater {
} }
} }
// Test.zip may or may not contain Test folder. We use zip name to create libraries folder. Therefore, a contained Test folder is useless and must be removed deleteUndesiredFoldersAndFiles(tmpFolder);
ensureOneLevelFolder(folder);
// Test.zip may or may not contain Test folder. If it does, we keep it. If not, we use zip name.
ensureOneLevelFolder(tmpFolder);
}
private void deleteUndesiredFoldersAndFiles(File folder) {
for (File file : folder.listFiles()) {
if (file.isDirectory() && "__MACOSX".equals(file.getName())) {
recursiveDelete(file);
} else if (file.getName().startsWith(".")) {
recursiveDelete(file);
}
}
}
private void recursiveDelete(File file) {
if (file.isDirectory()) {
for (File current : file.listFiles()) {
if (current.isDirectory()) {
recursiveDelete(current);
} else {
current.delete();
}
}
}
file.delete();
} }
private void ensureFoldersOfEntryExist(File folder, ZipEntry entry) { private void ensureFoldersOfEntryExist(File folder, ZipEntry entry) {
@ -73,25 +102,22 @@ public class ZipDeflater {
private void ensureOneLevelFolder(File folder) { private void ensureOneLevelFolder(File folder) {
File[] files = folder.listFiles(); File[] files = folder.listFiles();
if (files.length == 1 && files[0].isDirectory()) {
File tempFile = new File(files[0].getPath() + new Random().nextInt(1000)); if (files.length != 1) {
files[0].renameTo(tempFile); folder.renameTo(new File(folder.getParentFile(), folderNameFromZip()));
for (File file : tempFile.listFiles()) { return;
file.renameTo(new File(folder, file.getName()));
}
tempFile.delete();
}
} }
private String tempFolderNameFromZip() { files[0].renameTo(new File(folder.getParentFile(), files[0].getName()));
String folderName = zipFile.getName(); recursiveDelete(folder);
if (folderName.lastIndexOf(".") != -1) {
folderName = folderName.substring(0, folderName.lastIndexOf("."));
} }
if (folderName.lastIndexOf(File.separator) != -1) {
folderName = folderName.substring(folderName.lastIndexOf(File.separator) + 1); private String folderNameFromZip() {
String filename = file.getName();
if (filename.lastIndexOf(".") != -1) {
filename = filename.substring(0, filename.lastIndexOf("."));
} }
return folderName; return filename;
} }
} }