Skip to content

Update/movix - #11146

Open
MysticSaba-max wants to merge 16 commits into
PreMiD:mainfrom
MysticSaba-max:update/movix
Open

Update/movix#11146
MysticSaba-max wants to merge 16 commits into
PreMiD:mainfrom
MysticSaba-max:update/movix

Conversation

@MysticSaba-max

Copy link
Copy Markdown
Contributor

Description

Full rework of the Movix activity, bumping it to 2.0.0:

  • Rewritten presence texts: all statuses are now sober, descriptive strings following store conventions, localized in French and English via a "Display Language" setting (~115 keys). The language also applies to TMDB lookups (fr-FR/en-US).
  • Direct TMDB lookups: watch routes carry the TMDB id, so title and poster are fetched from the TMDB API (cached per id and language) instead of relying on DOM scraping.
  • Playback states: play/pause/stop/source-selection states with round status badges and real start/end timestamps (Discord progress bar), including inside embed players through a new iframe.ts relaying currentTime/duration/paused.
  • Rich WatchParty: rooms show "Title - SxEy" with "In a WatchParty - N participants" as a Watching activity, plus playback state; the creation page shows the selected media and episode. Powered by data-premid-* bridges exposed by the website.
  • Live TV: channel name and poster with a Live badge.
  • Contextual buttons: "Watch" on watch pages, "Join the room" on WatchParty rooms, "View page" on detail pages (HTTPS-only, on by default).
  • New settings: Display Language, Show Poster, and a Privacy Mode that hides titles, posters, sources and buttons behind a generic label.
  • Removed France.tv and VIP page support (these pages now fall back to a generic browsing status).
  • New assets/ folder with the logo and the five round status badges (play, pause, stop, search, live).
image image image image

Acknowledgements

MysticSaba-max and others added 15 commits August 29, 2026 17:28
The activity displayed whimsical emoji-laden strings picked from a
rotating-variant system (~150 strings such as "Forging an account like
a digital druid"), far from the conventions of official activities.
Everything moves to neutral descriptive texts, plus a few standard
store patterns:

- removed core/variants.ts and the whole variant machinery (hashString,
  pickVariant, resolveVariantText, findVariantsForPath, VariantText);
  handlers now pass plain strings ("Browsing the movie catalog",
  "Viewing a movie page", and so on)
- createWatchingPresence simplified: fixed states (source selection /
  playing / paused / finished) with the standard smallImageKey icons
  (Assets.Play/Pause/Stop/Search); Search and Live icons added on
  /search and /live-tv
- new Privacy Mode setting: hides titles, posters, sources and buttons
  in favor of a generic label, without reading sensitive DOM context
- finalizePresence no longer requires a state: simple pages show a
  single line instead of filler text
- metadata.json: version 1.1.0, accents fixed in the French
  description, privacyMode setting declared

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… support and settings

Six improvements to the Discord presence, fed by data bridges exposed
by the website:

- direct TMDB: the /watch routes carry the TMDB id; title and poster
  are fetched from the API (cached per id and language) instead of
  relying on DOM scraping. The WATCH_* patterns gain capture groups
  (season/episode extraction from the URL was actually broken: no
  groups existed)
- i18n: new core/strings.ts layer (complete FR/EN dictionaries, ~115
  keys) driven by a "Display Language" setting; the chosen language
  also applies to TMDB requests (fr-FR/en-US)
- rich WatchParty: the room page exposes its media and participant
  count through a hidden data-premid-party-* bridge; the presence shows
  "Title - SxEy" plus "In a WatchParty - N participants" as
  ActivityType.Watching with the media poster
- Live TV: data-premid-live-context bridge (channel name + poster),
  shown with the Live badge
- contextual buttons: SAFE_BUTTON_PATTERNS becomes SAFE_BUTTON_RULES
  with a per-route label ("Watch" on watch pages, "Join the room" on
  rooms, "View page" elsewhere)
- "Show Poster" setting: poster/logo toggle centralized in
  buildBasePresence
- iframe support: iframe.ts relays currentTime/duration/paused from
  embed players (10 s freshness guard on the presence side) so embeds
  get real play/pause timestamps; metadata declares iframe and
  iFrameRegExp
- metadata 1.2.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The smallImageKey values used the generic PreMiD resource assets, plain
white glyphs with no background that floated over the poster in the
Discord activity card. Like well-known activities, switch to dedicated
badges: white glyph on a Movix red circle (#dc2626), generated at
512x512. At this stage the five badges (play, pause, stop, search,
live) are served by the website itself. metadata 1.2.1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A fixed https://movix.tax base was hardcoded for the logo and the
status badges, while that exact domain is the one ISPs block and the
website lives on rotating mirror domains. The FALLBACK_SITE_URL,
FALLBACK_LOGO and PRESENCE_ICONS constants are replaced by
getSiteLogo() and getPresenceIcon(), which build URLs from
document.location.origin: the presence runs injected in the page, so
the origin is always the mirror the user is browsing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Rather than serving the images from the website origin (dependent on
the current mirror), the assets/ folder follows the store convention:
its content is published to cdn.rcd.gg/PreMiD/websites/M/Movix/assets/
on merge, stable URLs independent of the Movix domains.

- assets/: logo.png plus the five round play/pause/stop/search/live
  badges
- constants.ts: FALLBACK_LOGO and PRESENCE_ICONS are back, pointing to
  CDN_ASSETS_BASE (cdn.rcd.gg); getSiteLogo()/getPresenceIcon() removed
  from utils.ts
- metadata 1.2.2

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The presence only showed the generic page title on /watchparty/create,
while the page already knows the selected media. For a TV show the
episode was missing from the Discord status.

The website exposes the same data-premid-party-* bridge as the room
(title, type, season, episode, poster) on its creation page; the
handler reads getPartyContext() and shows "Creating a WatchParty" /
"Title - SxEy" with the media poster, falling back to h2/h1 then "New
WatchParty" when no media is loaded. metadata 1.2.3.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ault

The room status showed the title and participants but neither the
progress nor the player state, and the "Join the room" button stayed
invisible because the Show Buttons setting was off by default.

- utils.ts: new applyVideoPlaybackToPresence() reads the page video and
  sets the play/pause/stop badge plus start/end timestamps (Discord
  progress bar) while playing
- watch.ts: the rich WatchParty room presence applies that playback
  state on top of "In a WatchParty - N participants"
- metadata: Show Buttons enabled by default (Discord never shows your
  own buttons on your own profile); version 1.2.4

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
When the source label exposed by the website is a URL (custom source,
direct file) or the source detail contains one, the Discord status
displayed the player address.

- formatWatchSourceLabel: a URL-shaped label is converted to a player
  name via getEmbedSourceLabelFromUrl (known provider patterns,
  otherwise the formatted hostname root)
- formatWatchSourceDisplay: URL tokens (scheme, www., domain/path) are
  stripped from the detail before display, orphan separators cleaned
  up; a URL-only detail leaves just "Via <Name>"
- getEmbedSourceLabelFromUrl accepts scheme-less URLs (https prefix
  added for parsing)
- metadata 1.2.5

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The first filter only removed URLs with a scheme or a path: a bare
domain such as "example-host.com" was still displayed, and the detail
repeated the player name and language ("Via Vidzy - VF - Vidzy HD -
VF").

formatWatchSourceDisplay now works per segment (split on " - " or
"|"):
- the URL pattern also covers bare domains without a path
- a segment identical to the label, or prefixed by it, is reduced
  ("Vidzy HD" becomes "HD")
- exact duplicates and segments whose words all appear in a longer
  segment are removed (the lone "VF" disappears when "Lynx VF" is
  already there)
- a URL-only detail leaves just the player name, and the former
  "Via Via" output of the no-detail case is gone

metadata 1.2.6.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The states of specific pages are displayed under the content title: the
indefinite article read oddly ("Dark Matter" / "Viewing a movie page").
Switch to the definite article in both FR and EN for the whole family:
movie/TV show/person page, the collection, the public list, the
France.tv program, the movie/TV show download. metadata 1.2.7.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
On movie and TV show pages the order becomes "Viewing the movie page"
as details with the content title as state (instead of title first).
Privacy Mode keeps the same output as before: action only, no title.
metadata 1.2.8.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The /ftv, /ftv/info and /ftv/watch pages are no longer handled:
removed the route patterns and associated button rules in constants.ts,
the FTV branches in misc.ts and watch.ts, and the matching translation
keys (browseFtv, ftv, viewFtvProgram, programId, watchFtv, fallbackFtv)
in FR and EN. Those pages fall back to the generic "Browsing Movix"
status. metadata 1.2.9.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The /vip, /vip/don, /vip/invoice/:id and /vip/cadeau/:id pages are no
longer handled: removed the route patterns and button rules in
constants.ts, the four branches in misc.ts and the associated
translation keys (viewVip, makeDonation, viewInvoice, invoiceId,
viewGift, giftId) in FR and EN. Those pages fall back to the generic
"Browsing Movix" status. metadata 1.3.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Same order as the movie and TV show pages: "Preparing the movie/TV
show download" as details and the content title as state.
metadata 1.3.1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The store CI requires the activity version to be bumped against the
published one. Given the scope of this update (full text rework, TMDB
lookups, i18n, WatchParty/Live TV bridges, iframe support, France.tv
and VIP support removed), 2.0.0 is the appropriate bump.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@dimerp

dimerp Bot commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

🖼️ Activity asset preview

I rummaged through the diff and found these. Finders keepers? No? Fine, they're yours.

Movix (websites/M/Movix) — update

Preview Source URL
logo https://cdn.rcd.gg/PreMiD/websites/M/Movix/assets/logo.png
thumbnail https://cdn.rcd.gg/PreMiD/websites/M/Movix/assets/thumbnail.png

Beep boop — I refresh this comment on every push, so no need to scroll. 🤖

Comment thread websites/M/Movix/metadata.json Fixed
npm run lint flagged two auto-fixable issues: ./constants.js must be
imported before ./strings.js (perfectionist/sort-imports) and the
iframe/iFrameRegExp keys must come after tags in metadata.json
(jsonc/sort-keys). Applied with eslint --fix.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
"streaming"
],
"iframe": true,
"iFrameRegExp": ".*",
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Development

Successfully merging this pull request may close these issues.

2 participants