Skip to content

Commit 29856ff

Browse files
ffissorecmaglie
authored andcommitted
improved import library: complains if invalid zip or folders are selected
1 parent 1cdf75d commit 29856ff

File tree

2 files changed

+49
-11
lines changed

2 files changed

+49
-11
lines changed

app/src/processing/app/Base.java

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2382,16 +2382,47 @@ public void handleAddLibrary(Editor editor) {
23822382

23832383
Dimension preferredSize = fileChooser.getPreferredSize();
23842384
fileChooser.setPreferredSize(new Dimension(preferredSize.width + 200, preferredSize.height + 200));
2385-
2385+
23862386
int returnVal = fileChooser.showOpenDialog(editor);
23872387

23882388
if (returnVal != JFileChooser.APPROVE_OPTION) {
23892389
return;
23902390
}
23912391

23922392
File sourceFile = fileChooser.getSelectedFile();
2393+
File tmpFolder = null;
2394+
2395+
try {
2396+
// unpack ZIP
2397+
if (!sourceFile.isDirectory()) {
2398+
try {
2399+
tmpFolder = FileUtils.createTempFolder();
2400+
ZipDeflater zipDeflater = new ZipDeflater(sourceFile, tmpFolder);
2401+
zipDeflater.deflate();
2402+
File[] foldersInTmpFolder = tmpFolder.listFiles(new OnlyDirs());
2403+
if (foldersInTmpFolder.length != 1) {
2404+
throw new IOException("Zip doesn't contain one library");
2405+
}
2406+
sourceFile = foldersInTmpFolder[0];
2407+
} catch (IOException e) {
2408+
editor.statusError(e);
2409+
return;
2410+
}
2411+
}
2412+
2413+
// is there a library?
2414+
File libFolder = scanFatLibrary(sourceFile);
2415+
if (libFolder == null) {
2416+
editor.statusError("Not a valid library");
2417+
return;
2418+
}
2419+
String[] headerFiles = headerListFromIncludePath(libFolder);
2420+
if (headerFiles == null || headerFiles.length == 0) {
2421+
editor.statusError("Not a valid library");
2422+
return;
2423+
}
23932424

2394-
if (sourceFile.isDirectory()) {
2425+
// copy folder
23952426
File destinationFolder = new File(getSketchbookLibrariesFolder(), sourceFile.getName());
23962427
if (!destinationFolder.mkdir()) {
23972428
editor.statusError("Can't create folder: " + sourceFile.getName() + " into libraries folder");
@@ -2403,15 +2434,10 @@ public void handleAddLibrary(Editor editor) {
24032434
editor.statusError(e);
24042435
return;
24052436
}
2406-
} else {
2407-
try {
2408-
ZipDeflater zipDeflater = new ZipDeflater(sourceFile, getSketchbookLibrariesFolder());
2409-
zipDeflater.deflate();
2410-
} catch (IOException e) {
2411-
editor.statusError(e);
2412-
return;
2413-
}
2437+
editor.statusNotice(_("Library added to your libraries. Check \"Import library\" menu"));
2438+
} finally {
2439+
// delete zip created temp folder, if exists
2440+
FileUtils.recursiveDelete(tmpFolder);
24142441
}
2415-
editor.statusNotice(_("Library added to your libraries. Check \"Import library\" menu"));
24162442
}
24172443
}

app/src/processing/app/helpers/FileUtils.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.io.FileInputStream;
55
import java.io.FileOutputStream;
66
import java.io.IOException;
7+
import java.util.Random;
78

89
public class FileUtils {
910

@@ -66,6 +67,9 @@ public static void copy(File sourceFolder, File destFolder) throws IOException {
6667
}
6768

6869
public static void recursiveDelete(File file) {
70+
if (file == null) {
71+
return;
72+
}
6973
if (file.isDirectory()) {
7074
for (File current : file.listFiles()) {
7175
if (current.isDirectory()) {
@@ -78,4 +82,12 @@ public static void recursiveDelete(File file) {
7882
file.delete();
7983
}
8084

85+
public static File createTempFolder() throws IOException {
86+
File tmpFolder = new File(System.getProperty("java.io.tmpdir"), "arduino_" + new Random().nextInt(1000000));
87+
if (!tmpFolder.mkdir()) {
88+
throw new IOException("Unable to create temp folder " + tmpFolder);
89+
}
90+
return tmpFolder;
91+
}
92+
8193
}

0 commit comments

Comments
 (0)