diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 042bf0cbe..00800871d 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -1065,21 +1065,40 @@ public class Base { } return res; } - + + /** + * XXX FAT lib detection temporary disabled: compatibility issues arised.
+ *
+ * Scans inside a "FAT" (multi-platform) library folder to see if it contains + * a version suitable for the actual selected architecture. If a suitable + * version is found the folder containing that version is returned, otherwise + * null is returned.
+ *
+ * If a non-"FAT" library is detected, we assume that the library is suitable + * for the current architecture and the libFolder parameter is returned.
+ * + * @param libFolder + * @return + */ public File scanFatLibrary(File libFolder) { // A library is considered "fat" if there are folders besides // examples and utility boolean fat = false; String[] folders = libFolder.list(new OnlyDirs()); for (String folder : folders) { - if (folder.equals("examples")) + if (folder.equalsIgnoreCase("examples")) continue; - if (folder.equals("utility")) + if (folder.equalsIgnoreCase("utility")) continue; fat = true; break; } + // XXX: Temporary override "FAT" (multiplatform) library detection. + // Compatibility issues arised: many library uses additional folders + // https://code.google.com/p/arduino/issues/detail?id=1079 + fat = false; + if (!fat) return libFolder; @@ -2612,7 +2631,7 @@ public class Base { JFileChooser fileChooser = new JFileChooser(System.getProperty("user.home")); fileChooser.setDialogTitle(_("Select a zip file or a folder containing the library you'd like to add")); fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); - fileChooser.setFileFilter(new FileNameExtensionFilter("ZIP files or folders", "zip")); + fileChooser.setFileFilter(new FileNameExtensionFilter(_("ZIP files or folders"), "zip")); Dimension preferredSize = fileChooser.getPreferredSize(); fileChooser.setPreferredSize(new Dimension(preferredSize.width + 200, preferredSize.height + 200)); @@ -2635,7 +2654,7 @@ public class Base { zipDeflater.deflate(); File[] foldersInTmpFolder = tmpFolder.listFiles(new OnlyDirs()); if (foldersInTmpFolder.length != 1) { - throw new IOException("Zip doesn't contain one library"); + throw new IOException(_("Zip doesn't contain a library")); } sourceFile = foldersInTmpFolder[0]; } catch (IOException e) { @@ -2644,22 +2663,27 @@ public class Base { } } - // is there a library? - File libFolder = scanFatLibrary(sourceFile); - if (libFolder == null) { - editor.statusError("Not a valid library"); + // is there a valid library? + File libFolder = sourceFile; + String libName = libFolder.getName(); + if (!Sketch.isSanitaryName(libName)) { + String mess = I18n.format(_("The library \"{0}\" cannot be used.\n" + + "Library names must contain only basic letters and numbers.\n" + + "(ASCII only and no spaces, and it cannot start with a number)"), + libName); + editor.statusError(mess); return; } String[] headerFiles = headerListFromIncludePath(libFolder); if (headerFiles == null || headerFiles.length == 0) { - editor.statusError("Not a valid library"); + editor.statusError(_("Not a valid library: no header files found")); return; } // copy folder File destinationFolder = new File(getSketchbookLibrariesFolder(), sourceFile.getName()); if (!destinationFolder.mkdir()) { - editor.statusError("A library named " + sourceFile.getName() + " already exists"); + editor.statusError(I18n.format(_("A library named {0} already exists"), sourceFile.getName())); return; } try {