Problem / motivation
While running an i18n audit on IDE/src/main/java/ for the v3.0.5 release I noticed that org.sikuli.ide.AutoUpdater has two hardcoded EN buttons (new JButton("ok") line 212, new JButton("download") line 233). Before fixing them I went to verify they were even reachable — and they are not.
AutoUpdater has been a no-op since the OculiX fork. A quick autopsy:
| Indice |
Preuve dans le code |
| Class marked TODO from line 1 |
public class AutoUpdater { //TODO |
| Main update-check loop entirely commented out |
AutoUpdater.java:75-120 — // for (String s : SikulixIDE.runTime.ServerList) { ... } |
checkUpdate() therefore always returns 0 (= "nothing to update") |
available is never incremented |
| Auto-call at IDE start is commented too |
Sikulix.java:101 — //TODO autoCheckUpdate(); |
| Hardcoded fallback URLs are dead |
// DOWNLOAD https://launchpad.net/sikuli/+download (Launchpad abandoned ~2014) + // BETA https://dl.dropboxusercontent.com/u/42895525/... (personal Dropbox, gone) |
| The matching i18n key reflects this |
prefMoreUpdateNotImplemented=Check for Updates (not yet implemented) (and it's an orphan — referenced by no Java code) |
Net effect today: clicking Help → Check for Updates runs doCheckUpdate(), which calls au.checkUpdate() → returns 0 → shows msgNoUpdate or msgUpdateError. The showUpdateFrame() with its two unlocalized buttons is therefore never rendered to any user.
So I have a decision to take before v3.0.5 ships, and rather than take it alone on a piece of code I didn't write, I'd like @RaiMan's read.
Proposed solution
Three options, in increasing effort:
Option A — delete AutoUpdater entirely
- Remove the class, the
Help → Check for Updates menu item, the matching PreferencesUser.getCheckUpdate() field, and the orphan i18n keys (prefMoreUpdateNotImplemented, dlgUpdateAvailable, msgUpdate, msgUpdateError, msgNoUpdate, menuHelpCheckUpdate).
- Smallest API change, clearest signal to users.
- Loss: no in-IDE update mechanism at all — users find releases via GitHub or Sonatype only.
Option B — replace with a thin GitHub Releases check
- Rewrite
checkUpdate() to call https://api.github.com/repos/oculix-org/Oculix/releases/latest, compare against Commons.getSXVersionIDE(), and show a notification linking to the release page.
- Keep the menu item, keep the i18n keys, just point at a live data source.
- ~50 lines of code (one
HttpURLConnection + JSON parse on tag_name). No new dependency if we use org.json already on classpath, otherwise regex out "tag_name":"vX.Y.Z".
- Side benefit: makes
prefMoreUpdateNotImplemented finally honest, can be removed.
Option C — resurrect the original Launchpad/Dropbox flow
- Just un-comment the loop and point it at a new server we control.
- Functionally similar to B but requires hosting the metadata ourselves (release index file). Won't suggest this unless there's a reason A and B don't work.
Alternatives considered
Status quo (do nothing). Acceptable but leaves dead code in the IDE, a menu item that lies to users ("Check for Updates" → "no updates" forever), and two hardcoded EN strings in a frame that exists only on paper. Build hygiene argues against this.
Defer to v3.1.0. Also fine if there's bigger fish to fry for v3.0.5 — I just don't want to silently i18n strings that will never render.
Where would this live?
IDE (editor, menus, dialogs, recorder)
API impact
Option A → Yes — modifies existing API (potentially breaking) — removes the Check for Updates menu item and a PreferencesUser field.
Option B → No — internal / non-breaking addition — same surface, different implementation.
Option C → No — internal / non-breaking addition.
Use case / impact
v3.0.5 release prep. With ~150 companies now adopting OculiX in production (per Scarf telemetry), an actual update mechanism — even just a "new release available, open page?" notification — has real value: today a v3.0.3-pinned user has no way of learning that v3.0.5 ships a fix for their open ticket without manually checking the repo.
Lower-priority but real: clean dead code is easier to audit during security reviews, which matter for the F500/Defense tier of the adopter list.
Additional context
@RaiMan — this is a piece you wrote and it's been parked since well before the fork. Three honest questions:
- Do you remember why the loop was originally commented out? (Server-side decommissioning? Beta-channel rework that never landed? Something else?) Context would help us pick between A / B / C without re-treading old ground.
- Option B (GitHub Releases API) — does that direction sit OK with you, or do you see a reason to keep the update mechanism off the IDE entirely (e.g. enterprise users behind air-gapped networks where any outbound HTTP is unwelcome)?
- If you'd rather we just delete the whole machinery (Option A), say the word — your call on your code.
No rush on the answer — v3.0.5 can ship either way (with the deletion, with B implemented, or with the menu hidden and a follow-up issue). Just want to make sure we don't quietly remove a piece without checking with you first.
I'm asking now in particular because I noticed fd45d843 ("ExtensionManager removed for now — parked in Support") and read it as a coherent cleanup moment on parked-but-still-wired code. AutoUpdater feels like it's in the same bucket. If you'd rather batch the decision with whatever you're doing on the new Extension concept, that's also fine — just say "later".
Problem / motivation
While running an i18n audit on
IDE/src/main/java/for the v3.0.5 release I noticed thatorg.sikuli.ide.AutoUpdaterhas two hardcoded EN buttons (new JButton("ok")line 212,new JButton("download")line 233). Before fixing them I went to verify they were even reachable — and they are not.AutoUpdaterhas been a no-op since the OculiX fork. A quick autopsy:public class AutoUpdater { //TODOAutoUpdater.java:75-120—// for (String s : SikulixIDE.runTime.ServerList) { ... }checkUpdate()therefore always returns0(= "nothing to update")availableis never incrementedSikulix.java:101—//TODO autoCheckUpdate();// DOWNLOAD https://launchpad.net/sikuli/+download(Launchpad abandoned ~2014) +// BETA https://dl.dropboxusercontent.com/u/42895525/...(personal Dropbox, gone)prefMoreUpdateNotImplemented=Check for Updates (not yet implemented)(and it's an orphan — referenced by no Java code)Net effect today: clicking
Help → Check for UpdatesrunsdoCheckUpdate(), which callsau.checkUpdate()→ returns 0 → showsmsgNoUpdateormsgUpdateError. TheshowUpdateFrame()with its two unlocalized buttons is therefore never rendered to any user.So I have a decision to take before v3.0.5 ships, and rather than take it alone on a piece of code I didn't write, I'd like @RaiMan's read.
Proposed solution
Three options, in increasing effort:
Option A — delete
AutoUpdaterentirelyHelp → Check for Updatesmenu item, the matchingPreferencesUser.getCheckUpdate()field, and the orphan i18n keys (prefMoreUpdateNotImplemented,dlgUpdateAvailable,msgUpdate,msgUpdateError,msgNoUpdate,menuHelpCheckUpdate).Option B — replace with a thin GitHub Releases check
checkUpdate()to callhttps://api.github.com/repos/oculix-org/Oculix/releases/latest, compare againstCommons.getSXVersionIDE(), and show a notification linking to the release page.HttpURLConnection+ JSON parse ontag_name). No new dependency if we useorg.jsonalready on classpath, otherwise regex out"tag_name":"vX.Y.Z".prefMoreUpdateNotImplementedfinally honest, can be removed.Option C — resurrect the original Launchpad/Dropbox flow
Alternatives considered
Status quo (do nothing). Acceptable but leaves dead code in the IDE, a menu item that lies to users ("Check for Updates" → "no updates" forever), and two hardcoded EN strings in a frame that exists only on paper. Build hygiene argues against this.
Defer to v3.1.0. Also fine if there's bigger fish to fry for v3.0.5 — I just don't want to silently i18n strings that will never render.
Where would this live?
IDE (editor, menus, dialogs, recorder)
API impact
Option A → Yes — modifies existing API (potentially breaking) — removes the
Check for Updatesmenu item and aPreferencesUserfield.Option B → No — internal / non-breaking addition — same surface, different implementation.
Option C → No — internal / non-breaking addition.
Use case / impact
v3.0.5 release prep. With ~150 companies now adopting OculiX in production (per Scarf telemetry), an actual update mechanism — even just a "new release available, open page?" notification — has real value: today a v3.0.3-pinned user has no way of learning that v3.0.5 ships a fix for their open ticket without manually checking the repo.
Lower-priority but real: clean dead code is easier to audit during security reviews, which matter for the F500/Defense tier of the adopter list.
Additional context
@RaiMan — this is a piece you wrote and it's been parked since well before the fork. Three honest questions:
No rush on the answer — v3.0.5 can ship either way (with the deletion, with B implemented, or with the menu hidden and a follow-up issue). Just want to make sure we don't quietly remove a piece without checking with you first.
I'm asking now in particular because I noticed
fd45d843("ExtensionManager removed for now — parked in Support") and read it as a coherent cleanup moment on parked-but-still-wired code. AutoUpdater feels like it's in the same bucket. If you'd rather batch the decision with whatever you're doing on the new Extension concept, that's also fine — just say "later".