Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
3d8eb5d
refactor(movix): replace humorous texts with a sober presence
MysticSaba-max Aug 29, 2026
517f712
feat(movix): direct TMDB lookups, FR/EN i18n, rich WatchParty, iframe…
MysticSaba-max Aug 29, 2026
056d59f
feat(movix): round YouTube-style status badges
MysticSaba-max Aug 29, 2026
9bcb4ee
refactor(movix): derive logo and badges from the current origin
MysticSaba-max Aug 29, 2026
5fc88c9
refactor(movix): host logo and badges in the activity assets folder
MysticSaba-max Aug 29, 2026
e80fa12
feat(movix): show media and episode on the WatchParty creation page
MysticSaba-max Aug 29, 2026
76c9da0
feat(movix): playback state in WatchParty rooms and buttons on by def…
MysticSaba-max Aug 29, 2026
8f143c8
fix(movix): never show the player URL, only its name
MysticSaba-max Aug 29, 2026
23b6f3e
fix(movix): strip bare domains and duplicates from source details
MysticSaba-max Aug 29, 2026
599b1b2
style(movix): definite articles in detail-page states
MysticSaba-max Aug 29, 2026
588641e
style(movix): action first on movie and TV show pages
MysticSaba-max Aug 29, 2026
9c3b300
refactor(movix): drop France.tv support
MysticSaba-max Aug 29, 2026
6a90280
refactor(movix): drop VIP support
MysticSaba-max Aug 29, 2026
28d620b
style(movix): action first on the download page
MysticSaba-max Aug 29, 2026
6a3334b
chore(movix): bump version to 2.0.0
MysticSaba-max Aug 29, 2026
0f5eecd
style(movix): fix import and metadata key order for repo lint
MysticSaba-max Aug 29, 2026
4d9930a
fix(Movix): retire le suivi iframe et ajoute movix.men
MysticSaba-max Sep 13, 2026
a2db437
Merge branch 'main' into update/movix
MysticSaba-max Sep 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added websites/M/Movix/assets/live.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added websites/M/Movix/assets/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added websites/M/Movix/assets/pause.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added websites/M/Movix/assets/play.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added websites/M/Movix/assets/search.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added websites/M/Movix/assets/stop.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
68 changes: 44 additions & 24 deletions websites/M/Movix/core/constants.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
export const SITE_NAME = 'Movix'
export const FALLBACK_SITE_URL = 'https://movix.tax'
export const FALLBACK_LOGO = `${FALLBACK_SITE_URL}/movix512.png`
export const CDN_ASSETS_BASE
= 'https://cdn.rcd.gg/PreMiD/websites/M/Movix/assets'
export const FALLBACK_LOGO = `${CDN_ASSETS_BASE}/logo.png`

export const PRESENCE_ICONS = {
play: `${CDN_ASSETS_BASE}/play.png`,
pause: `${CDN_ASSETS_BASE}/pause.png`,
stop: `${CDN_ASSETS_BASE}/stop.png`,
search: `${CDN_ASSETS_BASE}/search.png`,
live: `${CDN_ASSETS_BASE}/live.png`,
} as const
export const TMDB_API_BASE = 'https://api.themoviedb.org/3'
export const TMDB_IMAGE_BASE = 'https://image.tmdb.org/t/p'
export const TMDB_API_KEY = 'f3d757824f08ea2cff45eb8f47ca3a1e'
Expand All @@ -17,20 +26,31 @@ export const PROVIDER_NAMES: Record<string, string> = {
531: 'Paramount+',
}

export const SAFE_BUTTON_PATTERNS = [
/^\/collection\/[^/]+$/i,
/^\/movie\/[^/]+$/i,
/^\/tv\/[^/]+$/i,
/^\/download\/[^/]+\/[^/]+$/i,
/^\/genre\/[^/]+\/[^/]+$/i,
/^\/provider\/[^/]+\/[^/]+(?:\/[^/]+)?$/i,
/^\/person\/[^/]+$/i,
/^\/watchparty\/room\/[^/]+$/i,
/^\/list\/[^/]+$/i,
/^\/vip\/invoice\/[^/]+$/i,
/^\/vip\/cadeau\/[^/]+$/i,
/^\/ftv\/info\/[^/]+$/i,
/^\/wrapped(?:\/[^/]+)?$/i,
export type SafeButtonLabel = 'btnViewPage' | 'btnWatch' | 'btnJoinRoom'

export const SAFE_BUTTON_RULES: Array<{
pattern: RegExp
label: SafeButtonLabel
}> = [
{ pattern: /^\/watch\/movie\/[^/]+$/i, label: 'btnWatch' },
{ pattern: /^\/watch\/tv\/[^/]+\/s\/[^/]+\/e\/[^/]+$/i, label: 'btnWatch' },
{
pattern: /^\/watch\/anime\/[^/]+\/season\/[^/]+\/episode\/[^/]+$/i,
label: 'btnWatch',
},
{ pattern: /^\/watchparty\/room\/[^/]+$/i, label: 'btnJoinRoom' },
{ pattern: /^\/collection\/[^/]+$/i, label: 'btnViewPage' },
{ pattern: /^\/movie\/[^/]+$/i, label: 'btnViewPage' },
{ pattern: /^\/tv\/[^/]+$/i, label: 'btnViewPage' },
{ pattern: /^\/download\/[^/]+\/[^/]+$/i, label: 'btnViewPage' },
{ pattern: /^\/genre\/[^/]+\/[^/]+$/i, label: 'btnViewPage' },
{
pattern: /^\/provider\/[^/]+\/[^/]+(?:\/[^/]+)?$/i,
label: 'btnViewPage',
},
{ pattern: /^\/person\/[^/]+$/i, label: 'btnViewPage' },
{ pattern: /^\/list\/[^/]+$/i, label: 'btnViewPage' },
{ pattern: /^\/wrapped(?:\/[^/]+)?$/i, label: 'btnViewPage' },
]

export const NON_BREAKING_SPACE_PATTERN = /\u00A0/g
Expand All @@ -47,17 +67,21 @@ export const WATCH_TITLE_NEW_PAGE_PATTERN = /ouvrir dans une nouvelle page/i
export const WATCH_TITLE_TRAILER_PATTERN = /trailer background/i
export const WATCH_TITLE_SKIP_PATTERN = /^[-+]\d+s$/i
export const WATCH_TITLE_ZOOM_PATTERN = /^zoom [+-]$/i
export const SOURCE_LABEL_SEPARATOR_PATTERN = /^[:\s-]+/
export const SOURCE_URL_TOKEN_PATTERN
= /(?:https?:\/\/|www\.)\S+|\b[a-z0-9-]+(?:\.[a-z]{2,})+(?:\/\S*)?/gi
export const SOURCE_URL_PREFIX_PATTERN = /^(?:https?:\/\/|www\.)/i
export const SOURCE_EDGE_SEPARATOR_PATTERN = /^[\s:,-]+|[\s:,-]+$/g
export const SOURCE_SEGMENT_SPLIT_PATTERN = /\s+-\s+|\s*\|\s*/
export const RELEASE_TAG_PATTERN = /\s*SORTI(?:E|ES|S)?[.!]*$/i
export const QUOTED_TEXT_PATTERNS = [
/\u00AB([^\u00AB\u00BB]+)\u00BB/,
/\u201C([^\u201C\u201D]+)\u201D/,
/"([^"]+)"/,
/'([^']+)'/,
]
export const WATCH_MOVIE_PATH_PATTERN = /^\/watch\/movie\/[^/]+$/i
export const WATCH_TV_PATH_PATTERN = /^\/watch\/tv\/[^/]+\/s\/[^/]+\/e\/[^/]+$/i
export const WATCH_ANIME_PATH_PATTERN = /^\/watch\/anime\/[^/]+\/season\/[^/]+\/episode\/[^/]+$/i
export const WATCH_MOVIE_PATH_PATTERN = /^\/watch\/movie\/([^/]+)$/i
export const WATCH_TV_PATH_PATTERN = /^\/watch\/tv\/([^/]+)\/s\/([^/]+)\/e\/([^/]+)$/i
export const WATCH_ANIME_PATH_PATTERN = /^\/watch\/anime\/([^/]+)\/season\/([^/]+)\/episode\/([^/]+)$/i
export const ROUTE_COLLECTION_PATTERN = /^\/collection\/([^/]+)$/i
export const ROUTE_MOVIE_PATTERN = /^\/movie\/([^/]+)$/i
export const ROUTE_TV_PATTERN = /^\/tv\/([^/]+)$/i
Expand All @@ -69,9 +93,5 @@ export const ROUTE_PERSON_PATTERN = /^\/person\/([^/]+)$/i
export const ROUTE_WATCHPARTY_ROOM_PATTERN = /^\/watchparty\/room\/([^/]+)$/i
export const ROUTE_WATCHPARTY_JOIN_PATTERN = /^\/watchparty\/join(?:\/([^/]+))?$/i
export const ROUTE_LIST_PATTERN = /^\/list\/([^/]+)$/i
export const ROUTE_VIP_INVOICE_PATTERN = /^\/vip\/invoice\/([^/]+)$/i
export const ROUTE_VIP_GIFT_PATTERN = /^\/vip\/cadeau\/([^/]+)$/i
export const ROUTE_FTV_INFO_PATTERN = /^\/ftv\/info\/([^/]+)$/i
export const ROUTE_FTV_WATCH_PATTERN = /^\/ftv\/watch\/[^/]+$/i
export const ROUTE_WRAPPED_PATTERN = /^\/wrapped(?:\/([^/]+))?$/i
export const EPISODE_CODE_SUFFIX_PATTERN = /\s*-\s*S\d+E\d+$/i
Loading
Loading