From 59748aa9ba8be4d07431f34735c2ba5cefa587f4 Mon Sep 17 00:00:00 2001 From: DYefremov Date: Mon, 7 Dec 2020 09:30:03 +0300 Subject: [PATCH] added encoding detection for *.m3u import --- app/eparser/iptv.py | 18 +++++++++++++++--- app/ui/main_app_window.py | 13 ++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/app/eparser/iptv.py b/app/eparser/iptv.py index d84a5bb4..4dbbff2e 100644 --- a/app/eparser/iptv.py +++ b/app/eparser/iptv.py @@ -21,15 +21,27 @@ class StreamType(Enum): E_SERVICE_URI = "8193" -def parse_m3u(path, s_type): - with open(path) as file: +def parse_m3u(path, s_type, detect_encoding=True): + with open(path, "rb") as file: + data = file.read() + encoding = "utf-8" + + if detect_encoding: + try: + import chardet + except ModuleNotFoundError: + pass + else: + enc = chardet.detect(data) + encoding = enc.get("encoding", "utf-8") + aggr = [None] * 10 services = [] groups = set() counter = 0 name = None - for line in file.readlines(): + for line in str(data, encoding=encoding, errors="ignore").splitlines(): if line.startswith("#EXTINF"): name = line[1 + line.index(","):].strip() elif line.startswith("#EXTGRP") and s_type is SettingsType.ENIGMA_2: diff --git a/app/ui/main_app_window.py b/app/ui/main_app_window.py index d0fbcc1e..d13af160 100644 --- a/app/ui/main_app_window.py +++ b/app/ui/main_app_window.py @@ -2140,10 +2140,17 @@ class Application(Gtk.Application): self.show_error_dialog("No m3u file is selected!") return - channels = parse_m3u(response, self._s_type) + self._wait_dialog.show() + self.get_m3u(response) - if channels and self._bq_selected: - self.append_imported_services(channels) + @run_task + def get_m3u(self, path): + try: + channels = parse_m3u(path, self._s_type) + if channels and self._bq_selected: + GLib.idle_add(self.append_imported_services, channels) + finally: + GLib.idle_add(self._wait_dialog.hide) def append_imported_services(self, services): bq_services = self._bouquets.get(self._bq_selected)