tvheadend/epg2xml/__main__.py
2025-01-20 12:04:20 +09:00

73 lines
2.2 KiB
Python

import logging
import socket
import sys
from contextlib import ExitStack
from epg2xml.config import Config
from epg2xml.providers import EPGHandler
############################################################
# INIT
############################################################
# load initial config
conf = Config()
# load config file
conf.load()
# logger
log = logging.getLogger("MAIN")
############################################################
# MAIN
############################################################
def main():
log.debug("Loading providers...")
h = EPGHandler(conf.configs)
if (cmd := conf.args["cmd"]) in ["run", "fromdb"]:
with ExitStack() as stack:
# redirecting stdout to...
if xmlfile := conf.settings["xmlfile"]:
sys.stdout = stack.enter_context(open(xmlfile, "w", encoding="utf-8"))
elif xmlsock := conf.settings["xmlsock"]:
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect(xmlsock)
sys.stdout = stack.enter_context(sock.makefile("w"))
if cmd == "fromdb":
log.debug("Importing from dbfile...")
h.from_db(conf.settings["dbfile"])
else:
log.debug("Loading service channels...")
h.load_channels(conf.settings["channelfile"], conf.settings["parallel"])
log.debug("Loading requested channels...")
h.load_req_channels()
log.debug("Getting EPG...")
h.get_programs(conf.settings["parallel"])
if (dbfile := conf.settings["dbfile"]) is not None:
log.debug("Exporting to dbfile...")
h.to_db(dbfile)
log.info("Writing xmltv.dtd header...")
h.to_xml()
log.info("Done")
elif cmd == "update_channels":
h.load_channels(conf.settings["channelfile"], conf.settings["parallel"])
else:
raise NotImplementedError(f"Unknown command: {cmd}")
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
sys.exit(0)