From c9b3cb14881a8f19fabdacb1d0c523dfc56d2c68 Mon Sep 17 00:00:00 2001 From: Nirvana Date: Thu, 26 Mar 2026 13:11:58 +0100 Subject: [PATCH] Add movetv --- .../providers/movetv/constants.py | 2 ++ .../providers/movetv/provider.py | 2 ++ routes/m3u.py | 10 +++++-- service.py | 28 ++++++++++++------- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/lib/streaming_providers/providers/movetv/constants.py b/lib/streaming_providers/providers/movetv/constants.py index 79846bb..a6c0402 100644 --- a/lib/streaming_providers/providers/movetv/constants.py +++ b/lib/streaming_providers/providers/movetv/constants.py @@ -58,6 +58,8 @@ class MoveTVConfig: # ------------------------------------------------------------------------- DTYPE_DASH: int = 1 + DEFAULT_LANG: int = 1 + # ------------------------------------------------------------------------- # Header builders # ------------------------------------------------------------------------- diff --git a/lib/streaming_providers/providers/movetv/provider.py b/lib/streaming_providers/providers/movetv/provider.py index ecb5631..67e54f0 100644 --- a/lib/streaming_providers/providers/movetv/provider.py +++ b/lib/streaming_providers/providers/movetv/provider.py @@ -197,6 +197,8 @@ class MoveTVProvider(StreamingProvider): payload = { "customerId": session["customer_id"], + "customerProfileId": session["customer_profile_id"], + "lang": MoveTVConfig.DEFAULT_LANG, "appVersion": MoveTVConfig.APP_VERSION, } response = self.http_manager.post( diff --git a/routes/m3u.py b/routes/m3u.py index 758df26..9e02a65 100644 --- a/routes/m3u.py +++ b/routes/m3u.py @@ -343,7 +343,10 @@ def setup_m3u_routes(app, manager, service): provider_list = manager.list_providers() for provider_name in provider_list: try: - channels = manager.get_subscribed_channels(provider_name) + channels = sorted( + manager.get_subscribed_channels(provider_name), + key=lambda ch: (ch.channel_number is None, ch.channel_number or 0) + ) for channel in channels: # Generate M3U entry for each subscribed channel @@ -441,7 +444,10 @@ def setup_m3u_routes(app, manager, service): provider_list = manager.list_providers() for provider_name in provider_list: try: - channels = manager.get_subscribed_channels(provider_name) + channels = sorted( + manager.get_subscribed_channels(provider_name), + key=lambda ch: (ch.channel_number is None, ch.channel_number or 0) + ) # Get provider label try: diff --git a/service.py b/service.py index 08e6b2b..7a5bbb5 100644 --- a/service.py +++ b/service.py @@ -531,6 +531,14 @@ class UltimateService: response.content_type = "application/json" return json.dumps({"error": f"Failed to fetch manifest: {str(fetch_err)}"}) + @staticmethod + def _sort_channels(channels): + """Sort channels by channel_number ascending; channels without a number come last.""" + return sorted( + channels, + key=lambda ch: (ch.channel_number is None, ch.channel_number or 0) + ) + def _generate_m3u_content( self, providers=None, save_to_cache=True, cache_filename=None ): @@ -566,8 +574,8 @@ class UltimateService: for provider_name in providers_to_process: try: # Get channels for this provider - channels = self.manager.get_channels( - provider_name=provider_name, fetch_manifests=False + channels = self._sort_channels( + self.manager.get_channels(provider_name=provider_name, fetch_manifests=False) ) # Add each channel to M3U @@ -631,8 +639,8 @@ class UltimateService: for provider_name in providers_to_process: try: # Get channels for this provider - channels = self.manager.get_channels( - provider_name=provider_name, fetch_manifests=False + channels = self._sort_channels( + self.manager.get_channels(provider_name=provider_name, fetch_manifests=False) ) # Get provider label @@ -733,8 +741,8 @@ class UltimateService: for provider_name in providers_to_process: try: # Get channels for this provider - channels = self.manager.get_channels( - provider_name=provider_name, fetch_manifests=False + channels = self._sort_channels( + self.manager.get_channels(provider_name=provider_name, fetch_manifests=False) ) # Get provider label @@ -852,8 +860,8 @@ class UltimateService: for provider_name in providers_to_process: try: # Get channels for this provider - channels = self.manager.get_channels( - provider_name=provider_name, fetch_manifests=False + channels = self._sort_channels( + self.manager.get_channels(provider_name=provider_name, fetch_manifests=False) ) # Get provider instance for label and proxy config @@ -1181,8 +1189,8 @@ class UltimateService: for provider_name in providers_to_process: try: # Get channels for this provider - channels = self.manager.get_channels( - provider_name=provider_name, fetch_manifests=False + channels = self._sort_channels( + self.manager.get_channels(provider_name=provider_name, fetch_manifests=False) ) # Get provider instance for label and proxy config