Skip to content

[plugin.video.sandmann] v2.4.0#4760

Closed
sorax wants to merge 1 commit intoxbmc:matrixfrom
sorax:matrix
Closed

[plugin.video.sandmann] v2.4.0#4760
sorax wants to merge 1 commit intoxbmc:matrixfrom
sorax:matrix

Conversation

@sorax
Copy link
Copy Markdown

@sorax sorax commented Mar 21, 2026

  • make plugin work again (switch source)

Description

The plugin was broken, due to a change in the external source.
Now it works again and should even be more resilient.

Checklist:

  • My code follows the add-on rules and piracy stance of this project.
  • I have read the CONTRIBUTING document
  • Each add-on submission should be a single commit with using the following style: [plugin.video.foo] v1.0.0

- make plugin work again (switch source)
@kodiai
Copy link
Copy Markdown

kodiai Bot commented Mar 21, 2026

Kodiai Review Summary

What Changed

Plugin source switched from ARD Mediathek API to sandmann.de website scraping with BeautifulSoup4 to fix broken functionality.

Reviewed: core logic, docs

Strengths

  • ✅ Simplified codebase by consolidating three modules (episode.py, show.py) into sandmann.py (libs/sandmann.py:48-134)
  • ✅ Added BeautifulSoup4 dependency in addon.xml for robust HTML parsing (addon.xml:6)

Observations

Impact

[MAJOR] plugin.video.sandmann/libs/network.py (22, 28): Missing error handling on network requests
Both fetchHtml and fetchJson lack exception handling for network failures, timeouts, or HTTP errors—causes plugin crash when sandmann.de is unreachable or returns non-200 status.

[MAJOR] plugin.video.sandmann/libs/sandmann.py (90, 100, 103): Multiple KeyError vulnerabilities on JSON/HTML parsing
getEpisodePath (line 90) assumes "data-jsb" attribute exists; fetchEpisodeDetails (lines 100, 103) accesses nested JSON keys without validation—causes crash when website structure changes.

[MAJOR] plugin.video.sandmann/libs/sandmann.py (82, 83): BeautifulSoup selectors return empty lists on structure change
CSS selectors for episodes/descriptions will silently return empty lists if sandmann.de changes HTML structure—causes empty episode list or zip mismatch crash.

[MAJOR] plugin.video.sandmann/libs/sandmann.py (103): IndexError on title split operation
title.split(" | ") assumes at least 3 elements exist when accessing title[2] and title[0]—causes crash if title format differs from expected pattern.

[MEDIUM] plugin.video.sandmann/libs/sandmann.py (86): Mismatched episode/description counts cause silent data corruption
zip() truncates to shortest iterable when episodes and descriptions lists have different lengths—causes incorrect descriptions paired with wrong episodes without warning.

Suggestions

  • Future consideration: Add robust error handling around all external data fetching and parsing operations with user-friendly error messages

Verdict

🔴 Address before merging -- 5 blocking issue(s) found (CRITICAL/MAJOR)

Review Details
  • Files reviewed: 7
  • Lines changed: +81 -154
  • Profile: balanced (auto, lines changed: 235)
  • Author: core (adapted tone)
  • Findings: 0 critical, 4 major, 1 medium, 0 minor (includes 5 from summary observations)
  • Review completed: 2026-03-21T22:37:34.381Z
  • Keyword parsing:
    • focus hints: [PLUGIN.VIDEO.SANDMANN]

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