Added reload databases
This commit is contained in:
@@ -11,7 +11,7 @@ import logging
|
|||||||
from glob import glob
|
from glob import glob
|
||||||
|
|
||||||
# Version: YY.DDD.HHMM (Julian date format: Year.DayOfYear.Time)
|
# Version: YY.DDD.HHMM (Julian date format: Year.DayOfYear.Time)
|
||||||
__version__ = "25.317.1200"
|
__version__ = "25.317.1900"
|
||||||
|
|
||||||
# Setup logging
|
# Setup logging
|
||||||
LOGGER = logging.getLogger("plugins.fuzzy_matcher")
|
LOGGER = logging.getLogger("plugins.fuzzy_matcher")
|
||||||
@@ -85,6 +85,7 @@ class FuzzyMatcher:
|
|||||||
self.premium_channels = [] # Channel names only (for fuzzy matching)
|
self.premium_channels = [] # Channel names only (for fuzzy matching)
|
||||||
self.premium_channels_full = [] # Full channel objects with category
|
self.premium_channels_full = [] # Full channel objects with category
|
||||||
self.channel_lookup = {} # Callsign -> channel data mapping
|
self.channel_lookup = {} # Callsign -> channel data mapping
|
||||||
|
self.country_codes = None # Track which country databases are currently loaded
|
||||||
|
|
||||||
# Load all channel databases if plugin_dir is provided
|
# Load all channel databases if plugin_dir is provided
|
||||||
if self.plugin_dir:
|
if self.plugin_dir:
|
||||||
@@ -107,7 +108,99 @@ class FuzzyMatcher:
|
|||||||
for channel_file in channel_files:
|
for channel_file in channel_files:
|
||||||
try:
|
try:
|
||||||
with open(channel_file, 'r', encoding='utf-8') as f:
|
with open(channel_file, 'r', encoding='utf-8') as f:
|
||||||
channels_list = json.load(f)
|
data = json.load(f)
|
||||||
|
# Extract the channels array from the JSON structure
|
||||||
|
channels_list = data.get('channels', []) if isinstance(data, dict) else data
|
||||||
|
|
||||||
|
file_broadcast = 0
|
||||||
|
file_premium = 0
|
||||||
|
|
||||||
|
for channel in channels_list:
|
||||||
|
channel_type = channel.get('type', '').lower()
|
||||||
|
|
||||||
|
if 'broadcast' in channel_type or channel_type == 'broadcast (ota)':
|
||||||
|
# Broadcast channel with callsign
|
||||||
|
self.broadcast_channels.append(channel)
|
||||||
|
file_broadcast += 1
|
||||||
|
|
||||||
|
# Create lookup by callsign
|
||||||
|
callsign = channel.get('callsign', '').strip()
|
||||||
|
if callsign:
|
||||||
|
self.channel_lookup[callsign] = channel
|
||||||
|
|
||||||
|
# Also store base callsign without suffix for easier matching
|
||||||
|
base_callsign = re.sub(r'-(?:TV|CD|LP|DT|LD)$', '', callsign)
|
||||||
|
if base_callsign != callsign:
|
||||||
|
self.channel_lookup[base_callsign] = channel
|
||||||
|
else:
|
||||||
|
# Premium/cable/national channel
|
||||||
|
channel_name = channel.get('channel_name', '').strip()
|
||||||
|
if channel_name:
|
||||||
|
self.premium_channels.append(channel_name)
|
||||||
|
self.premium_channels_full.append(channel)
|
||||||
|
file_premium += 1
|
||||||
|
|
||||||
|
total_broadcast += file_broadcast
|
||||||
|
total_premium += file_premium
|
||||||
|
|
||||||
|
self.logger.info(f"Loaded from {os.path.basename(channel_file)}: {file_broadcast} broadcast, {file_premium} premium channels")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.error(f"Error loading {channel_file}: {e}")
|
||||||
|
|
||||||
|
self.logger.info(f"Total channels loaded: {total_broadcast} broadcast, {total_premium} premium")
|
||||||
|
return True
|
||||||
|
|
||||||
|
def reload_databases(self, country_codes=None):
|
||||||
|
"""
|
||||||
|
Reload channel databases with specific country codes.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
country_codes: List of country codes to load (e.g., ['US', 'UK', 'CA'])
|
||||||
|
If None, loads all available databases.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True if databases were loaded successfully, False otherwise
|
||||||
|
"""
|
||||||
|
# Clear existing channel data
|
||||||
|
self.broadcast_channels = []
|
||||||
|
self.premium_channels = []
|
||||||
|
self.premium_channels_full = []
|
||||||
|
self.channel_lookup = {}
|
||||||
|
|
||||||
|
# Update country_codes tracking
|
||||||
|
self.country_codes = country_codes
|
||||||
|
|
||||||
|
# Determine which files to load
|
||||||
|
if country_codes:
|
||||||
|
# Load only specified country databases
|
||||||
|
channel_files = []
|
||||||
|
for code in country_codes:
|
||||||
|
file_path = os.path.join(self.plugin_dir, f"{code}_channels.json")
|
||||||
|
if os.path.exists(file_path):
|
||||||
|
channel_files.append(file_path)
|
||||||
|
else:
|
||||||
|
self.logger.warning(f"Channel database not found: {code}_channels.json")
|
||||||
|
else:
|
||||||
|
# Load all available databases
|
||||||
|
pattern = os.path.join(self.plugin_dir, "*_channels.json")
|
||||||
|
channel_files = glob(pattern)
|
||||||
|
|
||||||
|
if not channel_files:
|
||||||
|
self.logger.warning(f"No channel database files found to load")
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.logger.info(f"Loading {len(channel_files)} channel database file(s): {[os.path.basename(f) for f in channel_files]}")
|
||||||
|
|
||||||
|
total_broadcast = 0
|
||||||
|
total_premium = 0
|
||||||
|
|
||||||
|
for channel_file in channel_files:
|
||||||
|
try:
|
||||||
|
with open(channel_file, 'r', encoding='utf-8') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
# Extract the channels array from the JSON structure
|
||||||
|
channels_list = data.get('channels', []) if isinstance(data, dict) else data
|
||||||
|
|
||||||
file_broadcast = 0
|
file_broadcast = 0
|
||||||
file_premium = 0
|
file_premium = 0
|
||||||
|
|||||||
Reference in New Issue
Block a user