Repository navigation
Releases: jamesccupps/UnifiStockWatcher
Releases · jamesccupps/UnifiStockWatcher
Release list
v2.1.0
Downloads
| File | Use |
|---|---|
UnifiStockWatcher.exe |
The GUI. Double-click; no Python needed. |
UnifiStockWatcher-cli.exe |
Headless watcher, for running under Task Scheduler. |
Both are portable — they keep watched_items.json, settings.json and
stock_history.json in the folder you put the executable in, so put it
somewhere writable rather than Program Files.
The executables are unsigned, so SmartScreen will warn on first run
(More info → Run anyway). Some antivirus engines flag unsigned PyInstaller
builds; if you would rather not trust a binary, running from source is
still fully supported — see the README.
v2.0.1
Fix mouse wheel scrolling doing nothing The previous fix for the bind_all leak installed the wheel binding on <Enter> of the canvas and tore it down on <Leave>. Moving the pointer onto a child row fires <Leave> on the container, so the binding was removed exactly where the user scrolls - and in a list the pointer is always over a row. Scrolling stopped working entirely, in both the watch list and the browse dialog. Bind on the toplevel instead: a toplevel is in the bindtags of every widget inside it, so it catches wheel events over any descendant while staying scoped to that window. The handler resolves the scroll target from the pointer position rather than closing over one canvas, so a destroyed canvas is simply never found - which keeps the original leak fixed too. Verified over rows, over nested labels and checkbuttons, in both the watch list and the browse dialog, and with the browse dialog closed. Two tests added; the first fails against the old binding. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Update v2
UniFi Stock Watcher 2.0.0 A correctness release. Stock detection was wrong for a large part of the catalog, in ways that produced no error and no visible symptom - the watcher simply never fired. Verified against catalog truth: a 40-product sweep went from 10 correct / 10 wrong to 40 / 0. Also closes a command-injection hole in the notification path, and adds 92 tests plus CI on Windows and Linux across Python 3.10-3.13. Breaking for anyone importing unifi_core: check_slug() raises ProductNotFound / StoreError instead of returning a fabricated (False, None); invalidate_build_id() takes a region; StockHistory buffers writes and needs flush(). See CHANGELOG.md for the full list.
Unifi Stock Tracker - Category Update
Added
- Two new top-level categories: Accessories, Cables & DACs (+229 products)
and Network Storage (+33 products). Product discovery went from ~199 to
~461 unique items. fetch_all_productsnow accepts an optionalerror_cb(category, exception)
so GUI callers can surface per-category failures.- Automatic retry with fresh buildId when a category fetch 404s mid-run
(matches the existing behavior incheck_slug). - Fallback support for flat
pageProps.productslists for future-proofing.
Notes
- No config migration required. Existing
watched_items.json,
settings.json, andstock_history.jsonare untouched. - Fully backward compatible — existing CLI and GUI calls work unchanged.
Unifi Stock Watcher v1.0.0
Initial release - Unifi Stock Watcher v1.0.0