@@ -1753,6 +1753,7 @@ protected boolean handleOpenInternal(File sketchFile) {
17531753
17541754 } else {
17551755 String properParent = fileName .substring (0 , fileName .length () - 4 );
1756+ File properFolder ;
17561757
17571758 Object [] options = {tr ("OK" ), tr ("Cancel" )};
17581759 String prompt = I18n .format (tr ("The file \" {0}\" needs to be inside\n " +
@@ -1761,40 +1762,51 @@ protected boolean handleOpenInternal(File sketchFile) {
17611762 fileName ,
17621763 properParent );
17631764
1764- int result = JOptionPane . showOptionDialog ( this , prompt , tr ( "Moving" ), JOptionPane . YES_NO_OPTION , JOptionPane . QUESTION_MESSAGE , null , options , options [ 0 ] );
1765+ properFolder = new File ( sketchFile . getParent ( ), properParent );
17651766
1766- if (result != JOptionPane .YES_OPTION ) {
1767- return false ;
1768- }
1767+ int result ;
1768+ if (parentFolderContainsSketchName (sketchFile , properParent )) {
17691769
1770- // create properly named folder
1771- File properFolder ;
1772- if (onlyContainsSketchFiles (sketchFile .getParent ())) {
1773- // Move the whole folder, so properFolder needs to be created one level above
1770+ // properFolder needs to be created one level above
17741771 properFolder = new File (new File (sketchFile .getParent ()).getParent (), properParent );
1772+
1773+ // ask for different confirmation
1774+ prompt = I18n .format (tr ("The file \" {0}\" needs to be inside\n " +
1775+ "a sketch folder named \" {1}\" .\n " +
1776+ "Renaming folder \" {2}\" into \" {3}\" \n " +
1777+ "Continue?" ),
1778+ fileName ,
1779+ properParent ,
1780+ sketchFile .getParent (),
1781+ properFolder );
1782+
1783+ result = JOptionPane .showOptionDialog (this , prompt , tr ("Moving" ), JOptionPane .YES_NO_OPTION , JOptionPane .QUESTION_MESSAGE , null , options , options [0 ]);
17751784 } else {
1776- properFolder = new File (sketchFile .getParent (), properParent );
1785+ result = JOptionPane .showOptionDialog (this , prompt , tr ("Moving" ), JOptionPane .YES_NO_OPTION , JOptionPane .QUESTION_MESSAGE , null , options , options [0 ]);
1786+ }
1787+
1788+ if (result != JOptionPane .YES_OPTION ) {
1789+ return false ;
17771790 }
17781791
17791792 if (properFolder .exists ()) {
17801793 Base .showWarning (tr ("Error" ), I18n .format (tr ("A folder named \" {0}\" already exists. " +
17811794 "Can't open sketch." ), properParent ), null );
17821795 return false ;
17831796 }
1784- if (!properFolder .mkdirs ()) {
1785- //throw new IOException("Couldn't create sketch folder");
1786- Base .showWarning (tr ("Error" ), tr ("Could not create the sketch folder." ), null );
1787- return false ;
1788- }
1797+
17891798 // copy the sketch inside
17901799 File properPdeFile = new File (properFolder , sketchFile .getName ());
17911800 try {
1792- if (onlyContainsSketchFiles (sketchFile . getParent () )) {
1801+ if (parentFolderContainsSketchName (sketchFile , properParent )) {
17931802 File dir = new File (sketchFile .getParent ());
1794- FileUtils .copy (dir , properFolder );
1795- // remove the original folder, so user doesn't get confused
1796- FileUtils .recursiveDelete (dir );
1803+ dir .renameTo (properFolder );
17971804 } else {
1805+ if (!properFolder .mkdirs ()) {
1806+ //throw new IOException("Couldn't create sketch folder");
1807+ Base .showWarning (tr ("Error" ), tr ("Could not create the sketch folder." ), null );
1808+ return false ;
1809+ }
17981810 Base .copyFile (sketchFile , properPdeFile );
17991811 // remove the original file, so user doesn't get confused
18001812 sketchFile .delete ();
@@ -1826,38 +1838,10 @@ protected boolean handleOpenInternal(File sketchFile) {
18261838 return true ;
18271839 }
18281840
1829- private boolean allowedExtension (String fileName , String [] validExtensions ) {
1830- int i = fileName .lastIndexOf ('.' );
1831- if (i > 0 ) {
1832- String ext = fileName .substring (i +1 ).toLowerCase ();
1833- if (!Arrays .asList (validExtensions ).contains (ext )) {
1834- return false ;
1835- }
1836- }
1837- // no extension or valid extension
1838- return true ;
1839- }
1840-
1841- private boolean onlyContainsSketchFiles (String path ) {
1842- File folder = new File (path );
1843- File [] listOfFiles = folder .listFiles ();
1844-
1845- for (int i = 0 ; i < listOfFiles .length ; i ++) {
1846- String name = listOfFiles [i ].getName ();
1847- if (listOfFiles [i ].isFile ()) {
1848- // allowed files extensions are only .ino, .h, .hpp, .c, .cpp (all cases)
1849- String [] valid = {"ino" , "h" , "hpp" , "c" , "cpp" , "pde" };
1850- if (!allowedExtension (name , valid )) {
1851- return false ;
1852- }
1853- } else if (listOfFiles [i ].isDirectory ()) {
1854- // allowed dir names are only src and extras , plus source control folders
1855- if (name != "src" && name != "extras" && !FileUtils .SOURCE_CONTROL_FOLDERS .contains (name )) {
1856- return false ;
1857- }
1858- }
1859- }
1860- return true ;
1841+ private boolean parentFolderContainsSketchName (File sketchFile , String sketchName ) {
1842+ String dir = sketchFile .getParent ().toLowerCase ();
1843+ System .out .println (dir + " " + sketchName );
1844+ return dir .contains (sketchName .toLowerCase ());
18611845 }
18621846
18631847 public void updateTitle () {
0 commit comments