def __init__(self, source=SatelliteSource.LYNGSAT, entities=False, separator=' '): HTMLParser.__init__(self) self._S_TYPES = { "": "2", "MPEG-2 SD": "1", "MPEG-2/SD": "1", "SD": "1", "MPEG-4 SD": "22", "MPEG-4/SD": "22", "MPEG-4": "22", "HEVC SD": "22", "MPEG-4/HD": "25", "MPEG-4 HD": "25", "MPEG-4 HD 1080": "25", "MPEG-4 HD 720": "25", "HEVC HD": "25", "HEVC/HD": "25", "HEVC": "31", "HEVC/UHD": "31", "HEVC UHD": "31", "HEVC UHD 4K": "31", "3": "Data" } self._TR = "s {}000:{}000:{}:{}:{}:{}:{}:{}" self._S2_TR = "{}:{}:{}:{}" self._POS_PAT = re.compile(r".*?(\d+\.\d°[EW]).*") # LyngSat. self._TR_PAT = re.compile( (r".*?(\d+)\.?\d?\s+([RLHV]).*(DVB-S[2]?)/?(.*PSK)?\s" r"?(T2-MI)?\s?(PLS\s+Multistream)?\s?" r"SR-FEC:\s(\d+)-(\d/\d)\s+.*ONID-TID:\s+(\d+)-(\d+).*")) self._MULTI_PAT = re.compile( r"PLS\s+(Root|Gold|Combo)+\s(\d+)?\s+(?:Stream\s(\d+))") # KingOfSat. self._KING_TR_PAT = re.compile( (r"(DVB-S[2]?)\s?(?:T2-MI,\s+PLP\s+(\d+))?.*" r"?(?:PLS:\s+(Root|Gold|Combo)\+(\d+))?" r"\s+(.*PSK).*?(?:.*Stream\s+(\d+))?.*")) self._parse_html_entities = entities self._separator = separator self._is_td = False self._is_th = False self._is_mux_div = False self._current_row = [] self._current_cell_text = [] self._current_cell = Cell() self._rows = [] self._source = source self._t_url = "" self._use_short_names = True self._pls_modes = {v: k for k, v in PLS_MODE.items()}
def init_enigma2_transponder_data(self, srv): """ Transponder data initialisation """ data = srv.data_id.split(":") tr_data = srv.transponder.split(":") if srv.system == "DVB-S2": self.select_active_text(self._mod_combo_box, MODULATION.get(tr_data[8])) self.select_active_text(self._rolloff_combo_box, ROLL_OFF.get(tr_data[9])) self.select_active_text(self._pilot_combo_box, Pilot(tr_data[10]).name) self._tr_flag_entry.set_text(tr_data[7]) if len(tr_data) > 12: self._stream_id_entry.set_text(tr_data[11]) self._pls_code_entry.set_text(tr_data[12]) self.select_active_text(self._pls_mode_combo_box, PLS_MODE.get(tr_data[13])) self._namespace_entry.set_text(str(int(data[1], 16))) self._transponder_id_entry.set_text(str(int(data[2], 16))) self._network_id_entry.set_text(str(int(data[3], 16))) self.select_active_text(self._invertion_combo_box, Inversion(tr_data[5]).name) # Should be called last to properly initialize the reference self._srv_type_entry.set_text(data[4])
def init_enigma2_transponder_data(self, srv): """ Transponder data initialisation """ data = srv.data_id.split(":") tr_data = srv.transponder.split(":") tr_type = TrType(srv.transponder_type) self._namespace_entry.set_text(str(int(data[1], 16))) self._transponder_id_entry.set_text(str(int(data[2], 16))) self._network_id_entry.set_text(str(int(data[3], 16))) if tr_type is TrType.Satellite: self.select_active_text(self._invertion_combo_box, Inversion(tr_data[5]).name) if srv.system == "DVB-S2": self.select_active_text(self._mod_combo_box, MODULATION.get(tr_data[8])) self.select_active_text(self._rolloff_combo_box, ROLL_OFF.get(tr_data[9])) self.select_active_text(self._pilot_combo_box, Pilot(tr_data[10]).name) self._tr_flag_entry.set_text(tr_data[7]) if len(tr_data) > 12: self._stream_id_entry.set_text(tr_data[11]) self._pls_code_entry.set_text(tr_data[12]) self.select_active_text(self._pls_mode_combo_box, PLS_MODE.get(tr_data[13])) elif tr_type is TrType.Cable: self.select_active_text(self._invertion_combo_box, Inversion(tr_data[2]).name) self.select_active_text(self._mod_combo_box, C_MODULATION.get(tr_data[3])) self.select_active_text(self._fec_combo_box, FEC_DEFAULT.get(tr_data[4])) self.select_active_text(self._sys_combo_box, SystemCable(tr_data[5]).name) elif tr_type is TrType.Terrestrial: self.select_active_text(self._fec_combo_box, T_FEC.get(tr_data[2])) self.select_active_text(self._rate_lp_combo_box, T_FEC.get(tr_data[3])) # Pol -> Bandwidth self.select_active_text(self._pol_combo_box, BANDWIDTH.get(tr_data[1])) self.select_active_text(self._mod_combo_box, T_MODULATION.get(tr_data[4])) # Transmission Mode -> Roll off self.select_active_text(self._rolloff_combo_box, TRANSMISSION_MODE.get(tr_data[5])) # GuardInterval -> Pilot self.select_active_text(self._pilot_combo_box, GUARD_INTERVAL.get(tr_data[6])) # Hierarchy -> Pls Mode self.select_active_text(self._pls_mode_combo_box, HIERARCHY.get(tr_data[7])) self.select_active_text(self._invertion_combo_box, Inversion(tr_data[8]).name) self.select_active_text(self._sys_combo_box, T_SYSTEM.get(tr_data[9])) # Should be called last to properly initialize the reference self._srv_type_entry.set_text(data[4])
def init_transponder(self, transponder): self._freq_entry.set_text(transponder.frequency) self._rate_entry.set_text(transponder.symbol_rate) self._pol_box.set_active_id(transponder.polarization) self._fec_box.set_active_id(transponder.fec_inner) self._sys_box.set_active_id(transponder.system) self._mod_box.set_active_id(transponder.modulation) self._pls_mode_box.set_active_id(PLS_MODE.get(transponder.pls_mode, None)) self._is_id_entry.set_text(transponder.is_id if transponder.is_id else "") self._pls_code_entry.set_text(transponder.pls_code if transponder.pls_code else "")
def get_transponders_for_fly_sat(self, trs): """ Parsing transponders for FlySat """ pls_pattern = re.compile("(PLS:)+ (Root|Gold|Combo)+ (\\d+)?") is_id_pattern = re.compile("(Stream) (\\d+)") pls_modes = {v: k for k, v in PLS_MODE.items()} n_trs = [] if self._rows: zeros = "000" is_ids = [] for r in self._rows: if len(r) == 1: is_ids.extend(re.findall(is_id_pattern, r[0])) continue if len(r) < 3: continue data = r[2].split(" ") if len(data) != 2: continue sr, fec = data data = r[1].split(" ") if len(data) < 3: continue freq, pol, sys = data[0], data[1], data[2] sys = sys.split("/") if len(sys) != 2: continue sys, mod = sys mod = "QPSK" if sys == "DVB-S" else mod pls = re.findall(pls_pattern, r[1]) pls_code = None pls_mode = None if pls: pls_code = pls[0][2] pls_mode = pls_modes.get(pls[0][1], None) if is_ids: tr = trs.pop() for index, is_id in enumerate(is_ids): tr = tr._replace(is_id=is_id[1]) if is_transponder_valid(tr): n_trs.append(tr) else: tr = Transponder(freq + zeros, sr + zeros, pol, fec, sys, mod, pls_mode, pls_code, None) if is_transponder_valid(tr): trs.append(tr) is_ids.clear() trs.extend(n_trs)
def __init__(self, source=SatelliteSource.FLYSAT, entities=False, separator=' '): HTMLParser.__init__(self) self._parse_html_entities = entities self._separator = separator self._is_td = False self._is_th = False self._is_provider = False self._current_row = [] self._current_cell = [] self._rows = [] self._source = source self.pls_modes = {v: k for k, v in PLS_MODE.items()}
def get_transponders_for_lyng_sat(self, trs): """ Parsing transponders for LyngSat """ frq_pol_pattern = re.compile("(\\d{4,5})\\s+([RLHV]).*") sr_fec_pattern = re.compile("^(\\d{4,5})-(\\d/\\d)(.+PSK)?(.*)?$") sys_pattern = re.compile("(DVB-S[2]?) ?(PLS+ (Root|Gold|Combo)+ (\\d+))* ?(multistream stream (\\d+))?", re.IGNORECASE) zeros = "000" pls_modes = {v: k for k, v in PLS_MODE.items()} for r in filter(lambda x: len(x) > 8, self._rows): for frq in r[1], r[2], r[3]: freq = re.match(frq_pol_pattern, frq) if freq: break if not freq: continue frq, pol = freq.group(1), freq.group(2) sr_fec = re.match(sr_fec_pattern, r[-3]) if not sr_fec: continue sr, fec, mod = sr_fec.group(1), sr_fec.group(2), sr_fec.group(3) mod = mod.strip() if mod else "Auto" res = re.match(sys_pattern, r[-4]) if not res: continue sys = res.group(1) pls_mode = res.group(3) pls_mode = pls_modes.get(pls_mode.capitalize(), None) if pls_mode else pls_mode pls_code = res.group(4) pls_id = res.group(6) tr = Transponder(frq + zeros, sr + zeros, pol, fec, sys, mod, pls_mode, pls_code, pls_id) if is_transponder_valid(tr): trs.append(tr)