Skip to content

[Feature]: Decide fate of AutoUpdater — currently dead code since OculiX fork #382

Description

@julienmerconsulting

status
surface
age

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:

  1. 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.
  2. 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)?
  3. 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".

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Fields

    No fields configured for Feature.

    Projects

    Status
    📋 Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions