User-curated, no YouTube account. Same posture as Watch Later: you
decide what comes back, no algorithm involved.
Sidecar SubscriptionsFeed op:
- Takes channel_ids: Vec<String>, per_channel + limit defaults 8/60
- Caps fan-out at 200 channels per call + each id at 64 chars to
keep a malicious caller from hammering YouTube via the sidecar
- Spawns one tokio::task per channel against
rustypipe::query().channel_videos(), merges results once all
finish, sorts by publish_date string newest-first
- A channel that 404s / region-blocks / rustypipe-errors is silently
dropped — one dead subscription doesn't kill the whole feed; the
failed list is returned in channels_failed for logging
Addon side:
- subscriptions.json under addon_data, persisted via same
_atomic_write_json + _with_lock helpers as Watch Later (no
repeat of the race + torn-write hazards the audit caught)
- Two new root menu entries (visible only when subscribed):
* 'Subscriptions Feed (N)' — chronological merge of latest uploads
* 'Subscriptions (channel list)' — per-channel browse
- Context menu on every video result toggles
'Subscribe to <channel>' / 'Unsubscribe from <channel>' based on
current sub state
- Context menu on each entry in the channel list has its own
'Unsubscribe from <channel>' for direct removal
- _unsubscribe_action does Container.Refresh only when
Container.FolderPath contains 'action=subs' (same guard pattern
we used for wl_remove)
Live smoke (browse-only, no playback, Leia still safe):
- Subscribed to LTT (UCXuqSBlHAE6Xw-yeJA0Tunw) + MKBHD
(UCBJycsmduvYEL83R_U4JriQ) via RunPlugin
- subscriptions.json correctly holds both
- action=subs shows MKBHD + Linus Tech Tips as channel folders
- action=subs_feed returns 16 merged items: MKBHD's recent uploads
plus LTT's
- Root menu now includes 'Subscriptions Feed (2)' and
'Subscriptions (channel list)'
Addon v0.0.17.
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.17"
|
|
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>
|