freeflix-cli 2.3.1__tar.gz → 2.4.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/CHANGELOG.md +67 -0
  2. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/PKG-INFO +8 -6
  3. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/README.md +7 -5
  4. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/pyproject.toml +1 -1
  5. freeflix_cli-2.4.1/src/freeflix_cli/data/channel_logos.json +1 -0
  6. freeflix_cli-2.4.1/src/freeflix_cli/data/clubs.json +1 -0
  7. freeflix_cli-2.4.1/src/freeflix_cli/handlers/match.py +399 -0
  8. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/i18n.py +12 -1
  9. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/install_health.py +1 -1
  10. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/player_manager.py +127 -6
  11. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/yacine_match.py +155 -5
  12. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/yacine_live_proxy.py +37 -1
  13. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_yacine_match.py +223 -4
  14. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/uv.lock +1 -1
  15. freeflix_cli-2.3.1/src/freeflix_cli/handlers/match.py +0 -232
  16. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/.github/workflows/binaries.yml +0 -0
  17. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/.github/workflows/ci.yml +0 -0
  18. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/.github/workflows/macos.yml +0 -0
  19. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/.github/workflows/release.yml +0 -0
  20. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/.gitignore +0 -0
  21. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/CONTRIBUTING.md +0 -0
  22. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/LICENSE +0 -0
  23. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/SECURITY.md +0 -0
  24. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/assets/logo.png +0 -0
  25. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/config/freeflix_position.lua +0 -0
  26. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/config/input.conf +0 -0
  27. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/config/mpv.conf +0 -0
  28. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/data/selectors.jsonc +0 -0
  29. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/data/source_portal.jsonc +0 -0
  30. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/docs/ARCHITECTURE.md +0 -0
  31. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/docs/AUDIT-FREEFLIX-2.0-2026-11-04.md +0 -0
  32. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/docs/CORRECTIONS-2.1.0.md +0 -0
  33. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/docs/README.md +0 -0
  34. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/docs/RELEASE.md +0 -0
  35. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/docs/SCORECARD-2.1.0.md +0 -0
  36. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/docs/TROUBLESHOOTING.md +0 -0
  37. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/docs/USAGE.md +0 -0
  38. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/scripts/build-binary.sh +0 -0
  39. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/scripts/install-mac.sh +0 -0
  40. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/scripts/install.ps1 +0 -0
  41. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/scripts/install.py +0 -0
  42. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/scripts/install.sh +0 -0
  43. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/scripts/wrappers/mpv +0 -0
  44. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/__init__.py +0 -0
  45. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/__main__.py +0 -0
  46. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/anilist.py +0 -0
  47. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/cli.py +0 -0
  48. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/cli_utils.py +0 -0
  49. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/cloudflare.py +0 -0
  50. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/config_loader.py +0 -0
  51. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/defaults.py +0 -0
  52. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/doctor.py +0 -0
  53. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/__init__.py +0 -0
  54. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/anilist.py +0 -0
  55. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/anime_sama.py +0 -0
  56. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/coflix.py +0 -0
  57. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/french_manga.py +0 -0
  58. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/french_stream.py +0 -0
  59. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/goldenanime.py +0 -0
  60. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/goldenms.py +0 -0
  61. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/hianime.py +0 -0
  62. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/nyaa.py +0 -0
  63. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/papystreaming.py +0 -0
  64. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/playback.py +0 -0
  65. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/handlers/yts.py +0 -0
  66. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/health.py +0 -0
  67. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/history_ui.py +0 -0
  68. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/httpcache.py +0 -0
  69. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/icons.py +0 -0
  70. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/languages.py +0 -0
  71. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/logsetup.py +0 -0
  72. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/main.py +0 -0
  73. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/motion.py +0 -0
  74. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/mpv_ipc.py +0 -0
  75. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/neon.py +0 -0
  76. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/net_config.py +0 -0
  77. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/notifications.py +0 -0
  78. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/platform_android.py +0 -0
  79. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/preview_picker.py +0 -0
  80. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/progress.py +0 -0
  81. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/providers_registry.py +0 -0
  82. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/proxy.py +0 -0
  83. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/recent.py +0 -0
  84. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/__init__.py +0 -0
  85. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/anime_sama.py +0 -0
  86. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/anime_sama_planning.py +0 -0
  87. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/coflix.py +0 -0
  88. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/config.py +0 -0
  89. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/deobfuscate.py +0 -0
  90. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/eztv.py +0 -0
  91. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/french_manga.py +0 -0
  92. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/french_stream.py +0 -0
  93. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/goldenanime.py +0 -0
  94. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/goldenms.py +0 -0
  95. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/nyaa.py +0 -0
  96. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/objects.py +0 -0
  97. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/papystreaming.py +0 -0
  98. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/player.py +0 -0
  99. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/resilient.py +0 -0
  100. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/subtitles.py +0 -0
  101. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/utils.py +0 -0
  102. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/scraping/yts.py +0 -0
  103. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/setup_assistant.py +0 -0
  104. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/splash.py +0 -0
  105. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/subtitles.py +0 -0
  106. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/terminal_image.py +0 -0
  107. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/themes.py +0 -0
  108. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/tracker.py +0 -0
  109. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/ui.py +0 -0
  110. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/src/freeflix_cli/update_checker.py +0 -0
  111. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/conftest.py +0 -0
  112. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_android_setup.py +0 -0
  113. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_anilist_errors.py +0 -0
  114. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_anilist_token_input.py +0 -0
  115. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_anime_sama_planning.py +0 -0
  116. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_audit_fixes.py +0 -0
  117. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_batch_download.py +0 -0
  118. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_coflix_parse.py +0 -0
  119. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_core_units.py +0 -0
  120. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_cover_cache.py +0 -0
  121. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_decoy_stream.py +0 -0
  122. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_download_fixes.py +0 -0
  123. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_download_integration.py +0 -0
  124. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_download_robustness.py +0 -0
  125. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_episode_parsing.py +0 -0
  126. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_fsvid_decode.py +0 -0
  127. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_health.py +0 -0
  128. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_httpcache.py +0 -0
  129. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_i18n_complete.py +0 -0
  130. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_keyboard.py +0 -0
  131. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_managed_binaries.py +0 -0
  132. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_mouse.py +0 -0
  133. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_mpv_ipc.py +0 -0
  134. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_navigation.py +0 -0
  135. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_nerd_font.py +0 -0
  136. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_nyaa.py +0 -0
  137. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_pack_a_polish.py +0 -0
  138. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_performance.py +0 -0
  139. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_platform_android.py +0 -0
  140. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_player_dash.py +0 -0
  141. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_polish.py +0 -0
  142. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_premium_players.py +0 -0
  143. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_providers_repair.py +0 -0
  144. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_proxy_endpoint.py +0 -0
  145. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_proxy_integration.py +0 -0
  146. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_proxy_resilient.py +0 -0
  147. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_proxy_ssrf.py +0 -0
  148. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_recent_new_episodes.py +0 -0
  149. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_release_config.py +0 -0
  150. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_resilient.py +0 -0
  151. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_scraper_resilience.py +0 -0
  152. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_search_parity.py +0 -0
  153. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_sendvid.py +0 -0
  154. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_stream_analysis.py +0 -0
  155. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_stream_integrity.py +0 -0
  156. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_system_deps_cache.py +0 -0
  157. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_terminal_image.py +0 -0
  158. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_update_prompt.py +0 -0
  159. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_v1105_improvements.py +0 -0
  160. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tests/test_v2_aesthetic.py +0 -0
  161. {freeflix_cli-2.3.1 → freeflix_cli-2.4.1}/tools/audit_providers.py +0 -0
@@ -1,5 +1,72 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.4.1
4
+
5
+ - **Match : une seule ligne par affiche**. Le catalogue répétait un même
6
+ match sur plusieurs créneaux (un « Twente - Ajax » en direct alors qu'un
7
+ autre du même jour était déjà terminé). Une entrée live/à venir/terminée
8
+ par match, la plus utile gagne.
9
+ - **Bascule automatique de source** : un match en direct expose désormais
10
+ HD, SD, Low et des flux **Multi**. Si la qualité choisie est refusée par
11
+ le CDN, FreeFlix essaie les autres sources au lieu de s'arrêter.
12
+ - **Contrôle avant lecture fiable** : le préflight passe par **ffmpeg en
13
+ direct** (comme la lecture) et lit sa sortie en continu. Le proxy local
14
+ déclenchait des 404 anti-hotlink et un live qui joue « sans fin » était
15
+ pris pour une panne — les deux sont corrigés. Les erreurs sont
16
+ distinguées : `403` (serveur qui refuse) vs `404/invalid data` (flux sans
17
+ données).
18
+ - **Multi en tête** : les flux « Multi » passent avant HD/SD/Low (source la
19
+ plus fiable en direct) ; tri stable, ordre du catalogue conservé à
20
+ qualité égale.
21
+ - Proxy HLS : rafraîchissement automatique de la playlist quand un segment
22
+ devient introuvable.
23
+ - 618 tests au vert, ruff OK.
24
+
25
+ ## 2.4.0
26
+
27
+ - **Match regroupé par statut** : sections `En direct (n)`, `À venir (n)`,
28
+ `Terminés (n)` avec une **grille à colonnes fixes** (chaîne · heure ·
29
+ équipes · compétition). Les largeurs sont calculées en cellules réelles
30
+ sur tout l'écran, donc les heures et les équipes sont parfaitement
31
+ alignées d'une section à l'autre.
32
+ - **Badges de chaîne génériques** : `beIN N` → `BN` (toutes les chaînes),
33
+ `Dubai Sports N` → `DSN`, et toute autre chaîne reçoit une abréviation
34
+ courte (≤ 6 caractères).
35
+ - **Noms d'équipes corrigés** : dictionnaire de clubs embarqué
36
+ (`data/clubs.json`, ~430 entrées) utilisé avant la traduction machine,
37
+ plus une liste de rejets pour les traductions littérales. Fini
38
+ « ليل → nuit », « مان يونايتد → Homme Uni », « انجيه → Enregistrez-le ».
39
+ - **`LIVE` traduit** en `EN DIRECT` (FR).
40
+ - **Logos de chaînes** : index iptv-org embarqué
41
+ (`data/channel_logos.json`, ~30 k entrées) pour afficher le logo d'une
42
+ chaîne à partir de son nom.
43
+ - Cache de traductions versionné : les valeurs erronées des anciennes
44
+ versions sont automatiquement régénérées.
45
+ - **Contrôle avant lecture d'un match** : le manifeste est testé (DNS + HLS)
46
+ avant de lancer le lecteur. Une chaîne retirée ou bloquée affiche
47
+ « Impossible de lire ce match : serveur injoignable » au lieu d'ouvrir un
48
+ lecteur qui se referme aussitôt. Les chaînes Dubai Sports sont concernées
49
+ aujourd'hui (CDN `mgmlcdn.com`/`mangomolo.com` ne résout plus).
50
+ - 614 tests au vert, ruff OK.
51
+
52
+ ## 2.3.3
53
+
54
+ - **Match : badges de chaîne généralisés**. beIN 1..N → `B1`..`BN`
55
+ (plus seulement 1–4), Dubai Sports N → `DSN`, et toute autre chaîne reçoit
56
+ une abréviation courte (`Canal+ Sport 2` → `CS2`, `Sky Sports F1` → `SSF`,
57
+ `ESPN` → `E`). Fin des libellés complets dans la liste.
58
+ - Testé sur le catalogue courant (18 matchs, 8 chaînes différentes).
59
+
60
+ ## 2.3.2
61
+
62
+ - **Match buffer 20 s, démarrage rapide** : mpv utilise
63
+ `cache-secs=20` + `demuxer-readahead-secs=20` + `cache-pause=no`
64
+ (première image en ~1 s sur le test synthétique) ;
65
+ - VLC revient à la lecture **ffmpeg → TS** (celle qui ne s'arrêtait pas),
66
+ sans cache réseau 20 s : démarrage immédiat et flux continu ;
67
+ - la lecture reste au bord du live tout en gardant 20 s de marge pour
68
+ les connexions instables.
69
+
3
70
  ## 2.3.1
4
71
 
5
72
  - **Qualités Match prêtes pour le futur** : 4K/2160p (≥ 15,0 Mbps,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freeflix-cli
3
- Version: 2.3.1
3
+ Version: 2.4.1
4
4
  Summary: Watch movies, series, and anime from your terminal — multi-language, multi-source, no browser required. A maintained fork of autoflix-cli.
5
5
  Project-URL: Homepage, https://github.com/freedy237/freeflix-cli
6
6
  Project-URL: Repository, https://github.com/freedy237/freeflix-cli.git
@@ -121,7 +121,7 @@ Description-Content-Type: text/markdown
121
121
  | 🆕 | **Nouveautés** : new episodes of the shows you follow, cleared once watched |
122
122
  | 🖱 | **Full mouse control** : hover, click, wheel, right-click back, clickable pagination |
123
123
  | 🎨 | **Cinema Noir** (2.0) design system, 12 themes, reduced-motion support |
124
- | ⚽ | **Match** : live football from YacineTV, Cameroon time, B1–B4 channel badges, HD/SD/Low/4K + Auto, minimum bitrate + GB/h estimate, mpv/VLC |
124
+ | ⚽ | **Match** : live football from YacineTV grouped by status (live / upcoming / finished), aligned columns, short channel badges, HD/SD/Low/4K + Auto with bitrate and GB/h, mpv/VLC |
125
125
  | 🎬 | **Browse Films, Séries & Anime** : the provider list, grouped as before |
126
126
  | 🎮 | **4 player backends** : mpv, VLC, browser, download-only |
127
127
  | 🇫🇷 | **French UI** : the whole CLI is in French when language is set to FR |
@@ -246,10 +246,12 @@ freeflix
246
246
  That's it. The menu walks you through everything.
247
247
 
248
248
  - **Films, Séries & Anime** opens the provider list (unchanged grouping).
249
- - **Match** shows live/upcoming football with kick-off in Cameroon time
250
- (UTC+1), the channel badge (B1–B4), and quality rows with resolution,
251
- minimum bitrate and estimated GB/hour; pick **Auto** or a quality, then
252
- mpv or VLC.
249
+ - **Match** groups live, upcoming and finished football under section
250
+ headers with aligned columns (channel · kick-off in Cameroon time · teams ·
251
+ competition). Quality rows add resolution, minimum bitrate and estimated
252
+ GB/hour; pick **Auto** or a quality, then mpv or VLC. Team names are
253
+ localized from a bundled club dictionary, and every stream is checked
254
+ before the player opens (a dead channel shows a clear message).
253
255
  - Player settings are isolated: FreeFlix never edits your global mpv/VLC
254
256
  configuration.
255
257
 
@@ -89,7 +89,7 @@
89
89
  | 🆕 | **Nouveautés** : new episodes of the shows you follow, cleared once watched |
90
90
  | 🖱 | **Full mouse control** : hover, click, wheel, right-click back, clickable pagination |
91
91
  | 🎨 | **Cinema Noir** (2.0) design system, 12 themes, reduced-motion support |
92
- | ⚽ | **Match** : live football from YacineTV, Cameroon time, B1–B4 channel badges, HD/SD/Low/4K + Auto, minimum bitrate + GB/h estimate, mpv/VLC |
92
+ | ⚽ | **Match** : live football from YacineTV grouped by status (live / upcoming / finished), aligned columns, short channel badges, HD/SD/Low/4K + Auto with bitrate and GB/h, mpv/VLC |
93
93
  | 🎬 | **Browse Films, Séries & Anime** : the provider list, grouped as before |
94
94
  | 🎮 | **4 player backends** : mpv, VLC, browser, download-only |
95
95
  | 🇫🇷 | **French UI** : the whole CLI is in French when language is set to FR |
@@ -214,10 +214,12 @@ freeflix
214
214
  That's it. The menu walks you through everything.
215
215
 
216
216
  - **Films, Séries & Anime** opens the provider list (unchanged grouping).
217
- - **Match** shows live/upcoming football with kick-off in Cameroon time
218
- (UTC+1), the channel badge (B1–B4), and quality rows with resolution,
219
- minimum bitrate and estimated GB/hour; pick **Auto** or a quality, then
220
- mpv or VLC.
217
+ - **Match** groups live, upcoming and finished football under section
218
+ headers with aligned columns (channel · kick-off in Cameroon time · teams ·
219
+ competition). Quality rows add resolution, minimum bitrate and estimated
220
+ GB/hour; pick **Auto** or a quality, then mpv or VLC. Team names are
221
+ localized from a bundled club dictionary, and every stream is checked
222
+ before the player opens (a dead channel shows a clear message).
221
223
  - Player settings are isolated: FreeFlix never edits your global mpv/VLC
222
224
  configuration.
223
225
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "freeflix-cli"
7
- version = "2.3.1"
7
+ version = "2.4.1"
8
8
  description = "Watch movies, series, and anime from your terminal — multi-language, multi-source, no browser required. A maintained fork of autoflix-cli."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9.2"