Skip to content

Instantly share code, notes, and snippets.

@CarstenG2
CarstenG2 / backoff-integration-docs.md
Created April 5, 2026 16:41
Backoff-Integration Design Docs

Provider-Statistiken (dynamische Reihenfolge)

Problem

Alle Priority-1 Provider sind gleichwertig — der erste in der Scraper-Load-Order wird immer zuerst aufgerufen. Kein Mechanismus um schnelle/zuverlaessige Provider zu bevorzugen.

Loesung

provider Tabelle in sourcecache.db trackt pro Provider:

  • Priority (aus Scraper, aktualisiert bei jedem Sync)
@CarstenG2
CarstenG2 / speed-prio-design.md
Last active April 5, 2026 16:25
Hoster/Provider Speed-Prio + Force-Scan - Design Docs

Provider-Statistiken (dynamische Reihenfolge)

Problem

Alle Priority-1 Provider sind gleichwertig — der erste in der Scraper-Load-Order wird immer zuerst aufgerufen. Kein Mechanismus um schnelle/zuverlaessige Provider zu bevorzugen.

Loesung

provider Tabelle in sourcecache.db trackt pro Provider:

  • Priority (aus Scraper, aktualisiert bei jedem Sync)
@CarstenG2
CarstenG2 / hoster-backoff-design.md
Created April 5, 2026 14:14
Hoster Exponential Backoff - Design Doc

Exponential Backoff (implementiert)

Hoster mit wiederholten Fehlern bekommen progressive Sperre:

1st fail -> 5s, 2nd -> 10s, 3rd -> 20s, 4th -> 30s, 5th -> 60s, 6th -> 300s, 7th+ -> 3600s (max)

Success resettet consecutive_fails auf 0.

@CarstenG2
CarstenG2 / DB-SCHEMA.md
Created March 16, 2026 17:26
xShip Precache Design-Docs (DB-Schema, Dispatcher, Settings)

DB Schema (sourcecache.db)

Tabellen

source — Gecachte Streaming-Quellen

CREATE TABLE IF NOT EXISTS source (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    imdb_id TEXT NOT NULL,
@CarstenG2
CarstenG2 / CACHE-HIT.md
Created March 15, 2026 13:00
xShip Quellen-Precaching — Design-Dokumentation

Cache-Hit & Manueller Klick (sources.py)

Cache-Hit Path

Wenn der User einen Film anklickt:

sources.py getSources():
    +-- sourcecacheDB.get_sources(imdb) → cached sources
 +-- Cache Hit: sofortige Anzeige (~15ms)
@CarstenG2
CarstenG2 / gui.py
Last active March 16, 2026 08:09
xStream trailer: per-language priority search (Version: 2026-03-08) — code + design docs
# -*- coding: utf-8 -*-
# Python 3
import sys
import xbmc
import xbmcgui
import xbmcplugin
from resources.lib import utils
from resources.lib.config import cConfig
@CarstenG2
CarstenG2 / CHANGELOG.txt
Created March 4, 2026 21:24
xShip PATCHED changelog (2026-03-04)
xShip PATCHED — Issues #40 through #68
Base: plugin.video.xship v2026.01.18 (michaz1988)
== 2026-03-04 ==
Source search fix: isFolder=True for clean context menu now works
correctly with source list displayed as directory after scan.
FSK age rating: movie listings show FSK rating (0/6/12/16/18)
from TMDB release_dates API. Shown in plot and as overlay.
@CarstenG2
CarstenG2 / kodi-boolean-extra-test-clean.log
Created February 27, 2026 07:32
Kodi debug log: StartAndroidActivity boolean extra not implemented
2026-02-27 08:30:31.586 T:16000 info <general>: -----------------------------------------------------------------------
2026-02-27 08:30:31.586 T:16000 info <general>: Starting Kodi (21.3 (21.3.0) Git:20251031-a3a448d26b). Platform: Android ARM 32-bit
2026-02-27 08:30:31.586 T:16000 info <general>: Using Release Kodi x32
2026-02-27 08:30:31.586 T:16000 info <general>: Kodi compiled 2025-12-13 by Clang 9.0.9 (https://android.googlesource.com/toolchain/llvm-project a2a1e703c0edb03ba29944e529ccbf457742737b) for Android ARM 32-bit API level 21 (API level 21)
2026-02-27 08:30:31.586 T:16000 info <general>: Running on Amazon AFTKRT with Android TV 11.0.0 API level 30, kernel: Linux ARM 32-bit version 5.10.43-android12-9-ga8c852b26125
2026-02-27 08:30:31.587 T:16000 info <general>: FFmpeg version/source: 6.0.1-Kodi
2026-02-27 08:30:31.587 T:16000 info <general>: Host CPU: ARMv8 Processor rev 0 (v8l), 4 cores available
2026-02-27 08:30:31.587 T:16000 info <general>: Product: karat, Device: ka
@CarstenG2
CarstenG2 / gist:9abd615f33a00eebf13a3e3192948915
Created February 26, 2026 07:43
xShip: Fix ValueError in listings.py _call() when TMDB returns status_code 34
--- a/resources/lib/indexers/listings.py
+++ b/resources/lib/indexers/listings.py
@@ -106,7 +106,7 @@ class listings:
name = oRequestHandler.request()
data = json.loads(name)
if 'status_code' in data and data['status_code'] == 34:
- return {}
+ return [], 0
list = []
for i in data['results']:
@CarstenG2
CarstenG2 / gist:58452e4ae288d94b53b177554de27a2c
Created February 24, 2026 16:51
xShip: skip captcha/popup hosters during scan, fallback during play
--- a/resources/lib/utils.py
+++ b/resources/lib/utils.py
@@ -61,6 +61,11 @@ def isBlockedHoster(url, isResolve=True):
url = html.unescape(url) # https://github.com/Gujal00/ResolveURL/pull/1115
hmf = resolver.HostedMediaFile(url=url, include_disabled=True, include_universal=False)
if hmf.valid_url():
+ try:
+ if hmf._HostedMediaFile__resolvers[0].isPopup():
+ prioHoster = hmf._HostedMediaFile__resolvers[0].priority
+ return False, sDomain, url, max(prioHoster, 999)