Skip to content

WorldCam 7.1 - #3

Merged
pQu4k3r merged 8 commits into
mainfrom
develop
Oct 8, 2026
Merged

pQu4k3r merged 8 commits into
mainfrom
develop

Conversation

@pQu4k3r

@pQu4k3r pQu4k3r commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Changelog 7.1

Player / YouTube

  • The player no longer closes when zapping (CH+/CH-) between webcams
  • YouTube answers that arrive after the player closed or after another webcam was selected are ignored
  • Single cleanup on close, no double close
  • Webcam pages and YouTube are resolved off the GUI thread
  • Timers work on DreamOS
  • Service type 4097 by default (ServiceApp's own player setting is used)
  • Status and key help are shown on screen
  • PREVIOUS and CH+/CH- keys work
  • YouTube channel live embeds and /channel/, /c/, /user/, /@name and playlist links are resolved

Bouquet export

  • YouTube webcams are exported as youtube.com/watch links (play with ytdlpwrapper) instead of a non-existent local proxy
  • Direct streams are exported as plain services, streamlink:// only for SkylineWebcams pages
  • Export on a location exports that location's webcams to their own bouquet
  • Bouquets are reloaded, no Enigma2 restart needed
  • Favorites stored in worldcam_favorites.json (migrated once from favorites.json)

Lists and screens

  • M3U playlists no longer list every webcam several times
  • Top Webcams and Locations open the selected row
  • Lists load without freezing the GUI
  • The chosen language is used for the site lists (only languages offered by SkylineWebcams)
  • Removing the last favorite clears the list
  • No crash on OK when a list failed to load

Updates and installer

  • No opkg run when Enigma2 loads the plugin
  • Updates come from OwnerPlugins/WorldCam
  • Update check in the background with a timeout, versions compared as numbers
  • No crash after "Update completed"
  • Installer: Python 3 detection, yt-dlp installed (feed or pip), package lists refreshed once, streamlinkproxy package name fixed

Cleanup

  • Removed broken translate_utils.py and unused client.py

Same fixes as TVGarden's player:
- Do not close the player on evStopped (fired while zapping)
- Single cleanup on close, no double close
- Ignore stream answers that arrive after the player closed or after
  another webcam was selected (YouTube and non-YouTube alike)
- Resolve the webcam page and YouTube off the GUI thread
- Keep eTimer connections alive (timers never fired on DreamOS)
- Service type 4097 by default: ServiceApp maps it to the player
  chosen in its settings; 5001/5002 are no longer forced
- Status and key help shown in an overlay dialog (the MoviePlayer
  skin has no widget for them, so they were never visible)
- CH+/CH- and PREVIOUS keys work with the WorldCam keymap actions

YouTube links:
- Channel live embeds (embed/live_stream?channel=ID) resolved as the
  channel's /live page instead of a video called "live_stream"
- /channel/, /c/, /user/ and /@name links resolved as /live,
  playlist links as their first video
YouTube webcams were exported as http://localhost:8000/proxy.m3u8?url=
(a proxy that does not exist), so they never played from a bouquet.

- Export YouTube entries as https://www.youtube.com/watch?v=ID, the form
  ytdlpwrapper resolves when playing from a bouquet; the export message
  says the wrapper is needed
- Direct streams (m3u8, mp4...) exported as plain 4097 services;
  streamlink:// is only used for skylinewebcams pages
- Export / "Export All to Bouquet" on a location exports that
  location's webcams to their own bouquet instead of the favorites
- Bouquets are reloaded, no Enigma2 restart is needed
- Favorites stored in worldcam_favorites.json (favorites.json is used
  by other plugins too); WorldCam favorites are migrated once
- Logger: never raise on a format mismatch (safe_cleanup crashed),
  fix exception() argument order
- The M3U branch re-parsed the whole file for every URL line, so a
  playlist with N entries showed N*N; parse M3U files once
- Check YouTube links before the direct-stream test
- Expire cached pages after one hour instead of a repeating eTimer per
  scraper (timers leaked and used callback.append, missing on DreamOS)
- Use only languages skylinewebcams.com offers, English otherwise
- Top Webcams: the "Top Live Cams" row was removed from the names but
  not from the webcams, so the selected row played another webcam
- Locations: the names were sorted but not the locations, so the
  selected row opened another location
- Pages are fetched in a worker thread: the GUI no longer freezes
  while a list loads ("Loading..." in the title)
- Update check off the GUI thread with a timeout (it could hang the
  main screen), versions compared as numbers ("7.0" < "10.0")
- "Update completed" no longer crashes (Screen has no addCallback);
  images that pass no return code are treated as success
- Removing the last favorite clears the list
- No AttributeError on OK when a list failed to load
- Chosen language is used for the site lists (screens always used
  English); only languages skylinewebcams.com offers are listed
- Do not close the menu ChoiceBox twice, do not reopen the menu over
  the Settings message
- Keep eTimer connections alive (DreamOS)
- Importing the plugin ran 'opkg update && opkg install
  python3-requests' synchronously, blocking Enigma2 while plugins
  load (requests is not needed)
- Updater and developer URLs point to OwnerPlugins/WorldCam instead of
  the upstream repository, which overwrote this fork on update
- Dependency check finds the yt_dlp module without importing it
  (slow on receivers) and no longer reports requests as missing
- Download the plugin from OwnerPlugins/WorldCam instead of the
  upstream repository
- Detect Python with python3: images without a 'python' binary took the
  Python 2 branch and never installed yt-dlp
- Install yt-dlp from the feed, or with pip when the feed has none,
  and report whether it works
- Refresh the package lists once instead of before every package
- Fix the streamlinkproxy package name, no Python 2 packages
- The installer does not restart the receiver: say so
- translate_utils.py (copied from Foreca) imported DEBUG, HEADERS and
  SYSTEM_DIR, which do not exist here: any import would fail
- client.py was only used by VideoURLHelper, which nothing uses
  (the scraper extracts the stream URLs)
Package, plugin and installer metadata updated to 7.1, with the
changelog of the fixes in this release.
@pQu4k3r
pQu4k3r merged commit 4f66f13 into main Oct 8, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant