refactor using chatgpt :]

This commit is contained in:
deflax 2024-01-07 02:08:25 +02:00
parent 64373534d6
commit 06da63cd0c

View file

@ -35,7 +35,42 @@ epg_json.close()
print(epg) print(epg)
logger_api.info(epg) logger_api.info(epg)
# Helper functions # Helper function to get process details
def get_core_process_details(client, process_id):
try:
return client.v3_process_get(id=process_id)
except Exception as err:
logger_job.error(f'Error getting process details for {process_id}: {err}')
return None
# Helper function to process a running channel
def process_running_channel(client, database, scheduler, stream_id, stream_name, stream_description, stream_hls_url):
if stream_id in database:
# Skip learned channels
return
else:
logger_job.info(f'{stream_id} ({stream_name}) has been registered to the database')
epg_result = find_event_entry(epg, stream_name)
logger_job.info(epg_result)
stream_prio = epg_result.get('prio', 0)
try:
stream_start_hour = epg_result['start_at']
logger_job.info(f"Stream start hour is set to {stream_start_hour}")
scheduler.add_job(
func=stream_exec, trigger='cron', hour=stream_start_hour, jitter=60,
id=stream_id, args=(stream_name, stream_prio, stream_hls_url)
)
except TypeError:
logger_job.info("Stream should start now")
scheduler.add_job(func=stream_exec, id=stream_id, args=(stream_name, stream_prio, stream_hls_url))
database.update({stream_id: {'name': stream_name, 'meta': stream_description, 'src': stream_hls_url}})
# Helper function to remove channel from the database
def remove_channel_from_database(stream_id, stream_name, state, database, scheduler):
logger_job.info(f'{stream_id} ({stream_name}) has been removed from the database. Reason: {state.exec}')
database.pop(stream_id)
scheduler.remove_job(stream_id)
def find_event_entry(events, target_name): def find_event_entry(events, target_name):
for entry in events: for entry in events:
if "name" in entry and entry["name"] == target_name: if "name" in entry and entry["name"] == target_name:
@ -52,77 +87,54 @@ def stream_exec(stream_name, stream_prio, stream_hls_url):
head = { "head": stream_hls_url } head = { "head": stream_hls_url }
logger_job.info('head position is: ' + str(head)) logger_job.info('head position is: ' + str(head))
# Main function for synchronizing with Datarhei Core API
def core_api_sync(): def core_api_sync():
global database global database
global epg global epg
global prio
new_ids = [] new_ids = []
try: try:
process_list = client.v3_process_get_list() process_list = client.v3_process_get_list()
except Exception as err: except Exception as err:
logger_job.error('client.v3_process_get_list ' + err) logger_job.error(f'Error getting process list: {err}')
return True return True
for process in process_list: for process in process_list:
try: try:
get_process = client.v3_process_get(id=process.id) get_process = get_core_process_details(client, process.id)
if not get_process:
continue
stream_id = get_process.reference stream_id = get_process.reference
meta = get_process.metadata meta = get_process.metadata
state = get_process.state state = get_process.state
except Exception as err: except Exception as err:
logger_job.error('client.v3_process_get ' + err) logger_job.error(f'Error processing process {process.id}: {err}')
continue continue
if meta is None:
# Skip processes without metadata
continue
else:
if meta['restreamer-ui'].get('meta') is None:
# Skip processes without meta key
#logger_job.warn('{} does not have a meta key'.format(stream_id))
continue
new_ids.append(stream_id)
stream_name = meta['restreamer-ui']['meta']['name']
stream_description = meta['restreamer-ui']['meta']['description']
stream_storage_type = meta['restreamer-ui']['control']['hls']['storage']
stream_hls_url = 'https://{}/{}/{}.m3u8'.format(api_hostname, stream_storage_type, stream_id)
payload = { stream_id: { 'name': stream_name, 'meta': stream_description, 'src': stream_hls_url } }
if state.exec == "running": if meta is None or meta['restreamer-ui'].get('meta') is None:
# Register a running channel to the database # Skip processes without metadata or meta key
if stream_id in database:
# Skip learned channels
continue
else:
logger_job.info('{} ({}) has been registered to the database'.format(stream_id, stream_name))
epg_result = find_event_entry(epg, stream_name)
logger_job.info(epg_result)
#stream_prio = epg_result['prio']
stream_prio = 0
try:
stream_start_hour = epg_result['start_at']
logger_job.info("Stream start hour is set to " + stream_start_hour)
scheduler.add_job(func=stream_exec, trigger='cron', hour=stream_start_hour, jitter=60, id=stream_id, args=(stream_name, stream_prio, stream_hls_url))
except TypeError:
logger_job.info("Stream should start now")
scheduler.add_job(func=stream_exec, id=stream_id, args=(stream_name, stream_prio, stream_hls_url))
database.update(payload)
else:
# Remove from the database if the state is changed
if stream_id in database:
logger_job.info('{} ({}) has been removed from the database. Reason: {}'.format(stream_id, stream_name, state.exec))
database.pop(stream_id)
scheduler.remove_job(stream_id)
new_ids.remove(stream_id)
# Cleanup orphaned references
orphan_keys = []
for key in database:
if key in new_ids:
continue continue
new_ids.append(stream_id)
stream_name = meta['restreamer-ui']['meta']['name']
stream_description = meta['restreamer-ui']['meta']['description']
stream_storage_type = meta['restreamer-ui']['control']['hls']['storage']
stream_hls_url = f'https://{api_hostname}/{stream_storage_type}/{stream_id}.m3u8'
payload = {stream_id: {'name': stream_name, 'meta': stream_description, 'src': stream_hls_url}}
if state.exec == "running":
process_running_channel(client, database, scheduler, stream_id, stream_name, stream_description, stream_hls_url)
else: else:
logger_job.info('Key {} is an orphan. Removing.'.format(key)) remove_channel_from_database(stream_id, stream_name, state, database, scheduler)
orphan_keys.append(key)
# Cleanup orphaned references
orphan_keys = [key for key in database if key not in new_ids]
for orphan_key in orphan_keys: for orphan_key in orphan_keys:
logger_job.info(f'Key {orphan_key} is an orphan. Removing.')
database.pop(orphan_key) database.pop(orphan_key)
scheduler.remove_job(stream_id) scheduler.remove_job(orphan_key)
def show_database(): def show_database():
global database global database