From a2e8cd758f616ac16f15490ddebe169ca69ce37f Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 12 Jan 2023 07:53:08 -0500 Subject: [PATCH] cleaning up the code for the update tally --- app/src/processing/app/Base.java | 23 ++++--- .../app/contrib/ContributionListing.java | 65 ++++++++++-------- .../app/contrib/ContributionManager.java | 7 +- .../app/contrib/LocalContribution.java | 4 +- build/shared/lib/manager/loader.gif | Bin 8787 -> 0 bytes todo.txt | 44 +++++++----- 6 files changed, 82 insertions(+), 61 deletions(-) delete mode 100644 build/shared/lib/manager/loader.gif diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 89d7fb31e..7f2cf3ab8 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -113,6 +113,9 @@ public class Base { private List coreTools; private List contribTools; + /** Current tally of available updates (used for new Editor windows). */ + private int updatesAvailable = 0; + // Used by handleOpen(), this saves the chooser to remember the directory. // Doesn't appear to be necessary with the AWT native file dialog. // https://github.com/processing/processing/pull/2366 @@ -700,17 +703,21 @@ public class Base { } - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + public void tallyUpdatesAvailable() { + Set installed = getInstalledContribs(); + ContributionListing listing = ContributionListing.getInstance(); + int newCount = 0; + for (Contribution contrib : installed) { + if (listing.hasUpdates(contrib)) { + newCount++; + } + } + updatesAvailable = newCount; - private int updatesAvailable = 0; - - - public void setUpdatesAvailable(int n) { - updatesAvailable = n; synchronized (editors) { - for (Editor e : editors) { - e.setUpdatesAvailable(n); + for (Editor editor : editors) { + editor.setUpdatesAvailable(updatesAvailable); } } } diff --git a/app/src/processing/app/contrib/ContributionListing.java b/app/src/processing/app/contrib/ContributionListing.java index 580aef16f..d08b6360f 100644 --- a/app/src/processing/app/contrib/ContributionListing.java +++ b/app/src/processing/app/contrib/ContributionListing.java @@ -29,7 +29,6 @@ import java.util.*; import java.util.concurrent.locks.ReentrantLock; import processing.app.Base; -import processing.app.Library; import processing.app.UpdateCheck; import processing.app.Util; import processing.core.PApplet; @@ -98,23 +97,23 @@ public class ContributionListing { } - /** - * Adds the installed libraries to the listing of libraries, replacing - * any pre-existing libraries by the same name as one in the list. - */ - protected void updateInstalledList(Set installed) { - for (Contribution contribution : installed) { - Contribution existingContribution = getContribution(contribution); - if (existingContribution != null) { - if (existingContribution != contribution) { - // don't replace contrib with itself - replaceContribution(existingContribution, contribution); - } - } else { - addContribution(contribution); - } - } - } +// /** +// * Adds the installed libraries to the listing of libraries, replacing +// * any pre-existing libraries by the same name as one in the list. +// */ +// protected void updateInstalledList(Set installed) { +// for (Contribution contribution : installed) { +// Contribution existingContribution = getContribution(contribution); +// if (existingContribution != null) { +// if (existingContribution != contribution) { +// // don't replace contrib with itself +// replaceContribution(existingContribution, contribution); +// } +// } else { +// addContribution(contribution); +// } +// } +// } protected void replaceContribution(Contribution oldLib, Contribution newLib) { @@ -164,6 +163,7 @@ public class ContributionListing { } + /* private Contribution getContribution(Contribution contribution) { for (Contribution c : allContributions) { if (c.getName().equals(contribution.getName()) && @@ -173,6 +173,7 @@ public class ContributionListing { } return null; } + */ protected AvailableContribution getAvailableContribution(Contribution info) { @@ -226,7 +227,7 @@ public class ContributionListing { // TODO: run this in SwingWorker done() [jv] EventQueue.invokeAndWait(() -> { setAdvertisedList(listingFile); - base.setUpdatesAvailable(countUpdates(base)); + base.tallyUpdatesAvailable(); }); } catch (InterruptedException e) { e.printStackTrace(); @@ -275,7 +276,7 @@ public class ContributionListing { } - protected boolean hasUpdates(Contribution contrib) { + public boolean hasUpdates(Contribution contrib) { if (contrib.isInstalled()) { Contribution advertised = getAvailableContribution(contrib); if (advertised != null) { @@ -342,13 +343,14 @@ public class ContributionListing { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - /** - * TODO This needs to be called when the listing loads, and also - * the contribs list has been updated (for whatever reason). - * In addition, the caller (presumably Base) should update all - * Editor windows with the correct number of items available. - * @return The number of contributions that have available updates. - */ +// /** +// * TODO This needs to be called when the listing loads, and also +// * the contribs list has been updated (for whatever reason). +// * In addition, the caller (presumably Base) should update all +// * Editor windows with the correct number of items available. +// * @return The number of contributions that have available updates. +// */ + /* public int countUpdates(Base base) { int count = 0; for (ModeContribution mc : base.getContribModes()) { @@ -357,12 +359,16 @@ public class ContributionListing { } } if (base.getActiveEditor() != null) { - for (Library lib : base.getActiveEditor().getMode().contribLibraries) { + Mode activeMode = base.getActiveEditor().getMode(); + for (Library lib : activeMode.contribLibraries) { if (hasUpdates(lib)) { count++; } } - for (Library lib : base.getActiveEditor().getMode().coreLibraries) { + // Changing this from coreLibraries to foundationLibraries for 4.1.2 + // because that's probably what was intended earlier. [fry 230112] + // https://github.com/processing/processing4/commit/3f5451c7371f2d97aa0bac21262a27ea4eeebe67 + for (Library lib : activeMode.foundationLibraries) { if (hasUpdates(lib)) { count++; } @@ -380,6 +386,7 @@ public class ContributionListing { } return count; } + */ /** Used by JavaEditor to auto-import */ diff --git a/app/src/processing/app/contrib/ContributionManager.java b/app/src/processing/app/contrib/ContributionManager.java index 72a4bd202..6ab13a285 100644 --- a/app/src/processing/app/contrib/ContributionManager.java +++ b/app/src/processing/app/contrib/ContributionManager.java @@ -165,7 +165,8 @@ public class ContributionManager { EventQueue.invokeAndWait(() -> { contribListing.replaceContribution(ad, contribution); base.refreshContribs(contribution.getType()); - base.setUpdatesAvailable(contribListing.countUpdates(base)); + //base.setUpdatesAvailable(contribListing.countUpdates(base)); + base.tallyUpdatesAvailable(); }); } catch (InterruptedException e) { e.printStackTrace(); @@ -248,7 +249,7 @@ public class ContributionManager { EventQueue.invokeAndWait(() -> { contribListing.replaceContribution(ad, contribution); base.refreshContribs(contribution.getType()); - base.setUpdatesAvailable(contribListing.countUpdates(base)); + base.tallyUpdatesAvailable(); }); } catch (InterruptedException e) { e.printStackTrace(); @@ -378,7 +379,7 @@ public class ContributionManager { EventQueue.invokeAndWait(() -> { contribListing.replaceContribution(contrib, contribution); base.refreshContribs(contribution.getType()); - base.setUpdatesAvailable(contribListing.countUpdates(base)); + base.tallyUpdatesAvailable(); }); } catch (InterruptedException e) { e.printStackTrace(); diff --git a/app/src/processing/app/contrib/LocalContribution.java b/app/src/processing/app/contrib/LocalContribution.java index e73874b29..216f6b61c 100644 --- a/app/src/processing/app/contrib/LocalContribution.java +++ b/app/src/processing/app/contrib/LocalContribution.java @@ -402,7 +402,7 @@ public abstract class LocalContribution extends Contribution { cl.replaceContribution(LocalContribution.this, advertisedVersion); } base.refreshContribs(LocalContribution.this.getType()); - base.setUpdatesAvailable(cl.countUpdates(base)); + base.tallyUpdatesAvailable(); }); } catch (InterruptedException e) { e.printStackTrace(); @@ -426,7 +426,7 @@ public abstract class LocalContribution extends Contribution { cl.replaceContribution(LocalContribution.this, LocalContribution.this); base.refreshContribs(LocalContribution.this.getType()); - base.setUpdatesAvailable(cl.countUpdates(base)); + base.tallyUpdatesAvailable(); }); } catch (InterruptedException e) { e.printStackTrace(); diff --git a/build/shared/lib/manager/loader.gif b/build/shared/lib/manager/loader.gif deleted file mode 100644 index 60cbc6a1372936920c764a1a87ab97bba4278846..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8787 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 diff --git a/todo.txt b/todo.txt index 3b3d87abe..f451b77ce 100755 --- a/todo.txt +++ b/todo.txt @@ -21,6 +21,20 @@ X this ship has sailed X something to set min/max versions that are supported by a library o ManagerFrame.makeAndShowTab() o this one looks like it's gonna get called multiple times +o alternating blue/white backgrounds aren't updated after changing filter +o just need to call a repaint() after a filter change? +o check with Casey about coloring for error messages +o test on Windows and Linux +o font size for "Downloading" on progress bar is too large +o but changing the size breaks the vertical centering +o wheel mouse is super jumpy +o something about unit increment in ContributionListPanel +o arrow keys up/down move scroll bar, not selection +o fonts/etc need to be set in one place where they can be edited +o move styling to separate constants that are more accessible +o optimize ContributionTab addListener() call in constructor +X no longer calling addListener() on every single entry, whcih helps +/ but what else might that change be breaking? manager X add foundation libraries to the stats (https://download.processing.org/stats/) @@ -34,12 +48,17 @@ X change base.getModeContribs() to base.getContribModes() for consistency X move contribs -> binary blob out of Base since it doesn't belong there X Mode manager window is empty X https://github.com/processing/processing4/issues/613 +X in ContributionTab, the downloadAndUpdateContributionListing() should actually be downloading +X but in ManagerFrame.showFrame(), it should not, and should just make sure the list is updated +X however, the list can be updated another time, right? after load? only on changes? +X remove dorky loading.gif (used in ContributionTab and UpdateContributionTab) +X should be a better way to implement this +X currently removed, but still need a way to indicate loading +_ updates tab is empty +_ remove Libraries/Tools/etc separators from Updates tab? too confusing/looks like a bug? _ remove rebuildLayout() from ContributionTab? -_ in ContributionTab, the downloadAndUpdateContributionListing() should actually be downloading -_ but in ManagerFrame.showFrame(), it should not, and should just make sure the list is updated -_ however, the list can be updated another time, right? after load? only on changes? _ Cannot invoke "javax.swing.JProgressBar.setVisible(boolean)" because "this.progressBar" is null _ https://github.com/processing/processing4/issues/618 @@ -344,8 +363,8 @@ PDE / Manager (4.x notes) _ get rid of dummy progress bar being created in StatusDetail.update() _ would be good to *add* a progress bar of some kind, but sheesh -_ remove dorky loading.gif (used in ContributionTab and UpdateContributionTab) -_ should be a better way to implement this +_ if contribution listing is still downloading, need to indicate +_ especially when no previous contribs.txt is in the prefs folder _ if no internet available, install buttons disabled, but not clear why broken _ also if update check disabled, user isn't notified that contribs unavailable _ currently no indication that contrib download failed @@ -367,9 +386,6 @@ _ when opening manager, animation runs briefly then freezes _ DetailPanel setContribution() being called 4x for each contrib on startup _ during install of contrib, progress is halting during the install _ probably too much happening on the EDT that should not be -_ optimize ContributionTab addListener() call in constructor -X no longer calling addListener() on every single entry, whcih helps -_ but what else might that change be breaking? _ StatusPanel seems to be recreated entirely _ StatusPanel being reset twice on each click _ is checking for previous, but apparently that's not working @@ -449,17 +465,7 @@ _ "Update 4 items" as a button name _ new libraries not picked up when changing sketchbook location _ make sure contrib manager can run w/o a network connection _ or if a bad document comes through, it can recover -_ alternating blue/white backgrounds aren't updated after changing filter -_ just need to call a repaint() after a filter change? -_ check with Casey about coloring for error messages -_ test on Windows and Linux -_ font size for "Downloading" on progress bar is too large -_ but changing the size breaks the vertical centering -_ wheel mouse is super jumpy -_ something about unit increment in ContributionListPanel -_ arrow keys up/down move scroll bar, not selection -_ fonts/etc need to be set in one place where they can be edited -_ move styling to separate constants that are more accessible + PDE / Preferences