Cobb 2026-05-23: 'trending on youtube is cancer. only braindead zombies
will want what is trending on youtube.' So no Trending entry. Instead:
Watch Later — pure user-curated. Pin a video from any listing context
menu ('Add to Watch Later'); it persists to watch_later.json under
addon_data with full metadata {id, name, channel, duration, thumbnail}
so re-rendering the list doesn't need to re-fetch from rustypipe.
Newest first, dedupe on id, cap WATCH_LATER_MAX=500.
New ops + actions:
- _watch_later_directory (action=watch_later) — renders saved videos
with _add_video_items(in_watch_later=True). Each item gets a
'Remove from Watch Later' context entry; the Add entry is suppressed.
- _wl_add_action (action=wl_add) — RunPlugin-style handler that gets
the id from the URL, calls sidecar 'resolve' for fresh metadata
(falls back to id-only if resolve fails), saves into watch_later.json,
notification toast.
- _wl_remove_action (action=wl_remove) — symmetric remove. Triggers
Container.Refresh so the item disappears immediately from the list.
- Root menu gains a 'Watch Later (N)' entry, always present, with the
count when N>0.
- _add_video_items now accepts in_watch_later=bool and adds either Add
or Remove to the context menu accordingly.
MED-8 from the audit: SponsorBlock response capped at 1 MiB before
JSON parse. Normal SponsorBlock responses are tens of KB; a degenerate
prefix collision or malicious mirror returning gigabytes would
otherwise be deserialized into memory before we filter. resp.bytes()
+ length check + serde_json::from_slice.
Verified live via JSON-RPC (browse-only, Leia not interrupted):
- Empty WL → notification path
- Addons.ExecuteAddon wl_add for LTT 2T8x5antlnc → watch_later.json
has full metadata block
- watch_later dir lists 'The Internet was WRONG: Trump Phone is
Shipping · Linus Tech Tips · 14:08'
- Root menu shows 'Watch Later (1)' alongside Search + Play by URL +
Recent searches.
Saved feedback memory at memory/feedback_no_youtube_trending.md so
future me doesn't propose Trending again.
Addon v0.0.15.
22 lines
1,013 B
XML
22 lines
1,013 B
XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
<addon id="plugin.video.torttube"
|
|
name="torttube"
|
|
version="0.0.15"
|
|
provider-name="Sulkta-Coop">
|
|
<requires>
|
|
<import addon="xbmc.python" version="3.0.0"/>
|
|
<import addon="plugin.video.youtube" version="7.0.0" optional="true"/>
|
|
<import addon="inputstream.adaptive" version="2.0.0" optional="true"/>
|
|
</requires>
|
|
<extension point="xbmc.python.pluginsource" library="main.py">
|
|
<provides>video</provides>
|
|
</extension>
|
|
<extension point="xbmc.addon.metadata">
|
|
<summary lang="en_gb">YouTube via RustyPipe + SponsorBlock</summary>
|
|
<description lang="en_gb">Browse, search, and play YouTube videos without an account. Backed by a native RustyPipe sidecar binary. SponsorBlock segments are skipped automatically.</description>
|
|
<license>GPL-3.0-or-later</license>
|
|
<source>http://192.168.0.5:3001/Sulkta-Coop/torttube</source>
|
|
<platform>linux</platform>
|
|
<language>en</language>
|
|
</extension>
|
|
</addon>
|