Commit Graph
30 Commits
Author SHA1 Message Date
Claude 2e88a56943 fix(ios): épingle volume_controller 3.4.1 pour compiler sur Flutter 3.35
Premier run du workflow Build iOS : toute la chaîne passe (génération du
projet Xcode, Info.plist, CocoaPods, icônes), mais la compilation Swift
échoue sur volume_controller 3.4.4, tiré transitivement par media_kit_video :

  Cannot find type 'FlutterSceneLifeCycleDelegate' in scope
  Value of type 'any FlutterPluginRegistrar' has no member 'addSceneDelegate'

Ces API sont apparues dans Flutter 3.38. volume_controller les utilise depuis
la 3.4.2 sans relever sa contrainte `flutter:` (toujours >=3.0.0), si bien que
pub la sélectionne sur le Flutter 3.35.3 des workflows. La 3.4.1 est la
dernière version sans ces appels — vérifié en inspectant les sources iOS des
versions 3.4.0 à 3.4.4.

Le côté Android du plugin n'utilise pas ces API, ce qui explique que seul le
build iOS soit touché. Un balayage des autres plugins à code natif iOS du
projet ne remonte que screen_brightness_ios (2.1.3+), absent du graphe depuis
que media_kit_video 1.3.x ne dépend plus que de screen_brightness_android.

Ajoute par ailleurs au guide iOS la marche à suivre pour un appareil qui n'est
pas toujours sur le même réseau que l'ordinateur (SideStore, compte payant).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WoXgHivbAphDk9ArgKDg8Q
2026-09-09 16:41:12 +00:00
Claude 26bf240b76 feat(ios): support iPhone/iPad avec build d'un IPA sideloadable
Le projet était Android-only : le dossier ios/ avait été supprimé et aucune
cible Apple n'existait. Le code Dart, lui, est resté portable (aucun appel
spécifique à Android) et media_kit_libs_video embarque déjà libmpv pour iOS.

- scripts/prepare_ios.sh régénère le projet Xcode via `flutter create` puis
  applique les réglages nécessaires à une app IPTV : exception App Transport
  Security (les serveurs Xtream sont en http:// simple), audio en arrière-plan,
  orientations paysage et 4 sens sur iPad, autorisation réseau local, cible
  iOS 13 exigée par media_kit et bundle id aligné sur l'applicationId Android.
  Le script est idempotent et respecte un dossier ios/ déjà versionné.
- Nouveau workflow Build iOS : runner macOS, build --no-codesign, empaquetage
  en IPA non signé publié sur la Release de la version, à côté de l'APK.
  Pas de déclenchement sur les PR, un runner macOS coûtant 10x en minutes.
- IOS_GUIDE.md documente les voies d'installation hors App Store (AltStore /
  SideStore, Sideloadly, compte développeur, TestFlight) et leurs limites.
- flutter_launcher_icons : image_path pointait sur app-icon.png, absent du
  dépôt ; correction vers le logo existant et ajout de la génération iOS.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WoXgHivbAphDk9ArgKDg8Q
2026-09-09 16:28:02 +00:00
MichaelandClaude Fable 5 186f9f89f9 chore: bump version to 1.7.1+15
The channel sidebar is an incremental change on top of v1.7.0, so ship it
as a patch release instead of 1.8.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L8c4kaH8AXVT5UUie3zR4p
2026-09-01 08:09:13 +02:00
MichaelandClaude Fable 5 3c37c6a6e6 feat(player): channel list sidebar accessible from the live OSD
Add a visible playlist button in both players (native + lite) that opens
the TiviMate-style channel sidebar (channels of the current category).
The sidebar existed in the native player but was only reachable via an
edge swipe or the M/Menu key; the lite player had none.

- New OSD button next to channel zapping (live only)
- Lite player: full sidebar port (swipe from right edge, M/Menu key)
- D-pad support: focus lands on the current channel when the list opens,
  arrows navigate, OK switches channel, Back/Menu closes
- Auto-hide timer (6s) restarted on D-pad focus and touch scroll
- Bump version to 1.8.0+15

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EG1frWE7suYF7hp4q2sDiR
2026-09-01 08:05:34 +02:00
Claude 04e9ab5730 ci: build release APK and publish a GitHub Release on main
Adds a Build APK workflow: on every push to main it builds the release
APK with Flutter 3.35.3 and publishes it as a GitHub Release tagged
with the pubspec version (v1.7.0 → xtremobile-v1.7.0.apk). On pull
requests and manual runs the APK is built and uploaded as an artifact
only. Bumps app version to 1.7.0+14 for this release.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0156exq7fejVrD3HKU3MmS8X
2026-08-28 07:43:21 +00:00
MichaelandClaude Opus 5 694b1257b9 fix(theme): remove every hardcoded Apple/Material colour left in the UI
Porting the palette was not enough: the Warm Cinema charter only reached the
widgets that read from AppColors. Nineteen screen and widget files still painted
Apple TV values inline, so the app kept showing blue — most visibly on the
selected navigation pill.

Swept out:
- 0xFF0A84FF (Apple blue) on the selected nav pill, category card icons and the
  "add playlist" button
- 0xFF4FC3F7 and 0xFF1565C0 in the player overlays
- Colors.blueAccent / Colors.blue in dialogs
- Apple greys 1C1C1E / 2C2C2E / 3A3A3C / 8E8E93 -> warm charcoals
- 128 Colors.white* -> the onSurfaceNN cream ladder (a pure white on a warm
  ground reads blue, which is the charter's whole point)
- Colors.red / green / amber / yellow / grey* -> error, success, ratingGold,
  outlineVariant
- pure black ink on light fills -> onPrimaryFixed, a warm near-black
- the white focus glow -> an ember glow

Deliberately left true black: the video surface backgrounds and the scrims over
posters and video, where a warm tint would clash with the picture.

Adds the onPrimaryFixed / primaryFixed / onSurface70 tokens the sweep needed.

Verified: no Material or Apple colour literal remains outside lib/core/theme;
flutter analyze reports no errors; 19/19 tests pass; release APK builds.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 20:39:58 +02:00
MichaelandClaude Opus 5 8d74bbb320 feat: XMLTV EPG fallback, Warm Cinema theme, background release
Align the Android app with xtremflow on three fronts.

EPG: add XmltvService, a streaming XMLTV parser (gunzip-aware, indexed to a
-3h/+18h window, JSON disk cache with a 6h TTL). XtreamServiceMobile now falls
back through the provider's xmltv.php, a user-supplied URL, then a community
guide whenever get_short_epg returns nothing. Channels are matched on
epg_channel_id first, then on a normalized name (accents, HD/FHD/4K suffixes,
"FR:" and "|FR|" prefixes). A streamId -> Channel index populated by
getLiveChannels supplies those keys, so no getShortEPG call site changed.
EPG requests are also funnelled through a 3-slot semaphore, as in xtremflow:
a 30-tile grid used to fire 30 parallel player_api.php calls, which rate-limited
panels answered with errors, emptying the guide for the whole screen.

Theme: port the Warm Cinema charter (ember/charcoal/cream, Fraunces + Karla)
into app_colors, app_theme and app_decorations. The 21 Apple TV colour names
already in use are kept as compatibility aliases. mobile_theme now derives from
AppTheme instead of duplicating its 390 lines.

Playback lifecycle: stop reacting to AppLifecycleState.inactive, which fires on
transient Android interruptions such as pulling down the notification shade and
was killing playback. Both engines now release on paused/hidden/detached via
_releasePlayback(): stream stopped, decoder released, timers cancelled, wakelock
dropped. An _isReleased latch keeps the watchdog and reconnect paths from
restarting a stream from the background.

Long-run stability: cancel the six player stream subscriptions on dispose, cap
demuxer-max-back-bytes at 8MB (mpv defaults to 50MiB, which combined with the
150MB readahead pushed the native heap toward an Android memory kill after a few
hours), rebuild on position only while the controls are visible, and dispose the
Lite player's focus nodes.

Startup: prewarmHost() pre-resolves DNS and opens then closes a bare TCP/TLS
socket before playback. No HTTP request is issued, so no provider connection
slot is consumed. Capped at 1.5s.

Verified: flutter analyze clean on all touched files; 19/19 tests, including a
run over a real 46MB/69802-programme dump (517 channels indexed in 1.1s, 5/5
name probes matched); flutter build apk --release succeeds.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:25:33 +02:00
Michael ef97c6dc90 feat: Add generated Hive TypeAdapters for AppUser and PlaylistConfig models, and new build/doctor log files. 2026-03-27 11:08:04 +01:00
GitHub Copilot 1293a159ee Phase 1: Android-Only Cleanup - Code and configuration cleanup
- Clean web-specific comments from hive_service.dart
- Update platform_utils.dart documentation
- Remove web-specific imports from mobile_xtream_providers.dart
- All platform-specific code removed
- Ready for Flutter build validation
2026-03-25 21:53:53 +01:00
Michael aaa0e9624d feat: Add mobile playlist screen for managing IPTV configurations, including creation, editing, and auto-login. 2025-12-27 10:37:25 +01:00
Michael d79d130126 feat: Add native video player screen using media_kit for IPTV playback with extensive performance and audio optimizations. 2025-12-21 18:05:29 +01:00
Michael 3d88463c65 feat: Implement a mobile-optimized IPTV settings tab including video playback, content filters, and cache management. 2025-12-21 09:46:55 +01:00
Michael 4e00cc7dc7 feat: add build log file 2025-12-18 00:06:00 +01:00
Michael f1bc6a4957 feat: add XtremFlow app icon for Android 2025-12-16 21:47:48 +01:00
Michael 43921abd2e feat: add wakelock_plus dependency and update task list to focus on Fire Stick fixes. 2025-12-11 19:48:44 +01:00
Michael 2406b9b100 feat: introduce XtreamServiceMobile for IPTV API interactions and DnsFallbackInterceptor for network robustness. 2025-12-10 22:16:51 +01:00
Michael 3888a21990 UI: Clean up player controls (remove duplicate arrows, move LIVE badge) 2025-12-09 20:34:44 +01:00
Michael 51f73d102d debug 2025-12-09 18:12:48 +01:00
Michael 2325431631 docs: add Docker build failure investigation task and pause audio investigation. 2025-12-08 17:19:10 +01:00
Michael 96367bb8be refactor: remove media_kit and media_kit_video dependencies 2025-12-08 13:09:41 +01:00
Michael 1a46f0ad63 feat: add IPTV player screen supporting live, VOD, and series streams via HTML iframe, and update dependencies. 2025-12-07 10:15:08 +01:00
Michael 29b070b964 chore: update project dependencies to their latest versions. 2025-12-07 00:04:52 +01:00
Michael 85471b5312 feat: implement core server with API (auth, playlists), static assets, Xtream proxy, media streaming, and icons 2025-12-06 13:10:58 +01:00
Michael 872531d2aa deps: update video_player_web_hls to ^1.3.0 2025-12-06 10:33:15 +01:00
Michael a3fe3bf7e9 feat: Implement initial web application structure and HLS video playback support. 2025-12-06 10:24:26 +01:00
Michael c78012dbdd feat: implement Hive service for local data persistence, user management, and playlist configuration. 2025-12-06 01:11:43 +01:00
Michael 5943cd9587 chore: Stop explicitly copying pubspec.lock as flutter pub get generates it. 2025-12-05 18:44:45 +01:00
Michael 163b1632bf feat: Add video_player_web dependency for web platform and enable verbose logging for web builds. 2025-12-05 11:14:41 +01:00
Michael 0ca2835cba chore: Update dependencies, switch Flutter web renderer to HTML, replace media_kit with video_player/chewie, and remove Hive volume from Docker setup. 2025-12-05 09:52:40 +01:00
Michael 2a28eb44d8 feat: Initialize XtremFlow project with core structure, IPTV features, authentication, and video player. 2025-12-05 09:17:11 +01:00