From c86a162f69a173988a45271710320d22f855db41 Mon Sep 17 00:00:00 2001 From: Stef Tervelde Date: Tue, 15 Apr 2025 16:08:23 +0200 Subject: [PATCH] Move populateSketchbookMenu to a separate thread --- app/src/processing/app/Base.java | 38 ++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 07e23d36b..4578336ed 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -1942,18 +1942,20 @@ public void rebuildSketchbook() { public void populateSketchbookMenu(JMenu menu) { - boolean found = false; - try { - found = addSketches(menu, sketchbookFolder); - } catch (Exception e) { - Messages.showWarning("Sketchbook Menu Error", - "An error occurred while trying to list the sketchbook.", e); - } - if (!found) { - JMenuItem empty = new JMenuItem(Language.text("menu.file.sketchbook.empty")); - empty.setEnabled(false); - menu.add(empty); - } + new Thread(() -> { + boolean found = false; + try { + found = addSketches(menu, sketchbookFolder); + } catch (Exception e) { + Messages.showWarning("Sketchbook Menu Error", + "An error occurred while trying to list the sketchbook.", e); + } + if (!found) { + JMenuItem empty = new JMenuItem(Language.text("menu.file.sketchbook.empty")); + empty.setEnabled(false); + menu.add(empty); + } + }).start(); } @@ -1964,11 +1966,17 @@ public void populateSketchbookMenu(JMenu menu) { * sketch should open in a new window. */ protected boolean addSketches(JMenu menu, File folder) { + Messages.log("scanning " + folder.getAbsolutePath()); // skip .DS_Store files, etc. (this shouldn't actually be necessary) if (!folder.isDirectory()) { return false; } + // Don't look inside the 'android' folders in the sketchbook + if (folder.getName().equals("android")) { + return false; + } + if (folder.getName().equals("libraries")) { return false; // let's not go there } @@ -2054,6 +2062,7 @@ protected boolean addSketches(JMenu menu, File folder) { */ public boolean addSketches(DefaultMutableTreeNode node, File folder, boolean examples) throws IOException { + Messages.log("scanning " + folder.getAbsolutePath()); // skip .DS_Store files, etc. (this shouldn't actually be necessary) if (!folder.isDirectory()) { return false; @@ -2061,6 +2070,11 @@ public boolean addSketches(DefaultMutableTreeNode node, File folder, final String folderName = folder.getName(); + // Don't look inside the 'android' folders in the sketchbook + if (folderName.equals("android")) { + return false; + } + // Don't look inside the 'libraries' folders in the sketchbook if (folderName.equals("libraries")) { return false;