mirror of
https://github.com/R0m1k3/xtremobile.git
synced 2026-10-11 17:29:26 +02:00
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>
81 lines
1.5 KiB
YAML
81 lines
1.5 KiB
YAML
name: xtremobile
|
|
description: High-performance IPTV Android Application with Xtream Codes API
|
|
publish_to: 'none'
|
|
version: 1.6.0+12
|
|
|
|
environment:
|
|
sdk: '>=3.0.0 <4.0.0'
|
|
|
|
dependencies:
|
|
flutter:
|
|
sdk: flutter
|
|
|
|
# State Management
|
|
flutter_riverpod: ^2.6.1
|
|
riverpod_annotation: ^2.6.1
|
|
|
|
# Local Database (Web IndexedDB)
|
|
hive: ^2.2.3
|
|
hive_flutter: ^1.1.0
|
|
|
|
# Networking
|
|
dio: ^5.7.0
|
|
dio_cache_interceptor: ^3.5.1
|
|
dio_cache_interceptor_hive_store: ^3.2.2
|
|
http: ^1.2.2
|
|
|
|
# EPG (XMLTV fallback parsing)
|
|
xml: ^6.5.0
|
|
|
|
# Routing
|
|
go_router: ^13.2.5
|
|
|
|
# Video Player (FFmpeg-based for full codec support)
|
|
media_kit: ^1.1.11
|
|
media_kit_video: ^1.2.5
|
|
media_kit_libs_video: ^1.0.5
|
|
|
|
# UI Components
|
|
google_fonts: ^6.2.1
|
|
cached_network_image: ^3.3.1
|
|
|
|
# Security
|
|
crypto: ^3.0.3
|
|
uuid: ^4.4.0
|
|
|
|
# Utilities
|
|
intl: ^0.19.0
|
|
equatable: ^2.0.5
|
|
shared_preferences: ^2.3.2
|
|
path_provider: ^2.1.5
|
|
video_player: ^2.10.1
|
|
wakelock_plus: ^1.2.8
|
|
device_info_plus: ^12.3.0
|
|
shelf_router: ^1.1.4
|
|
shelf_static: ^1.1.3
|
|
flutter_cache_manager: ^3.4.1
|
|
|
|
|
|
|
|
dev_dependencies:
|
|
flutter_test:
|
|
sdk: flutter
|
|
flutter_lints: ^3.0.2
|
|
flutter_launcher_icons: ^0.14.3
|
|
|
|
# Code Generation
|
|
build_runner: ^2.4.13
|
|
riverpod_generator: ^2.4.0
|
|
hive_generator: ^2.0.1
|
|
|
|
flutter_launcher_icons:
|
|
android: true
|
|
image_path: "assets/images/app-icon.png"
|
|
adaptive_icon_background: "#1a1a2e"
|
|
adaptive_icon_foreground: "assets/images/app-icon.png"
|
|
|
|
flutter:
|
|
uses-material-design: true
|
|
assets:
|
|
- assets/images/
|