@@ -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}
0 commit comments