mirror of
https://github.com/fHDHR/fHDHR_NextPVR.git
synced 2025-12-06 18:26:57 -05:00
81 lines
4.2 KiB
Python
81 lines
4.2 KiB
Python
import xmltodict
|
|
|
|
import fHDHR.tools
|
|
|
|
|
|
class OriginEPG():
|
|
|
|
def __init__(self, fhdhr):
|
|
self.fhdhr = fhdhr
|
|
|
|
def get_content_thumbnail(self, content_id):
|
|
item_thumb_url = ("%s%s:%s/service?method=channel.show.artwork&sid=%s&event_id=%s" %
|
|
("https://" if self.fhdhr.config.dict["origin"]["ssl"] else "http://",
|
|
self.fhdhr.config.dict["origin"]["address"],
|
|
str(self.fhdhr.config.dict["origin"]["port"]),
|
|
self.fhdhr.config.dict["origin"]["sid"],
|
|
str(content_id)
|
|
))
|
|
return item_thumb_url
|
|
|
|
def duration_nextpvr_minutes(self, starttime, endtime):
|
|
return ((int(endtime) - int(starttime))/1000/60)
|
|
|
|
def update_epg(self, fhdhr_channels):
|
|
programguide = {}
|
|
|
|
for fhdhr_id in list(fhdhr_channels.list.keys()):
|
|
chan_obj = fhdhr_channels.list[fhdhr_id]
|
|
|
|
if str(chan_obj.number) not in list(programguide.keys()):
|
|
|
|
programguide[str(chan_obj.number)] = chan_obj.epgdict
|
|
|
|
epg_url = ('%s%s:%s/service?method=channel.listings&channel_id=%s' %
|
|
("https://" if self.fhdhr.config.dict["origin"]["ssl"] else "http://",
|
|
self.fhdhr.config.dict["origin"]["address"],
|
|
str(self.fhdhr.config.dict["origin"]["port"]),
|
|
str(chan_obj.dict["origin_id"]),
|
|
))
|
|
epg_req = self.fhdhr.web.session.get(epg_url)
|
|
epg_dict = xmltodict.parse(epg_req.content)
|
|
|
|
for program_listing in epg_dict["rsp"]["listings"]:
|
|
for program_item in epg_dict["rsp"]["listings"][program_listing]:
|
|
if not isinstance(program_item, str):
|
|
|
|
progdict = fHDHR.tools.xmldictmaker(program_item, ["start", "end", "title", "name", "subtitle", "rating", "description", "season", "episode", "id", "episodeTitle"])
|
|
|
|
clean_prog_dict = {
|
|
"time_start": (int(progdict["start"]) / 1000),
|
|
"time_end": (int(progdict["end"]) / 1000),
|
|
"duration_minutes": self.duration_nextpvr_minutes(progdict["start"], progdict["end"]),
|
|
"thumbnail": self.get_content_thumbnail(progdict['id']),
|
|
"title": progdict['name'] or "Unavailable",
|
|
"sub-title": progdict['subtitle'] or "Unavailable",
|
|
"description": progdict['description'] or "Unavailable",
|
|
"rating": progdict['rating'] or "N/A",
|
|
"episodetitle": progdict['episodeTitle'],
|
|
"releaseyear": None,
|
|
"genres": [],
|
|
"seasonnumber": progdict['season'],
|
|
"episodenumber": progdict['episode'],
|
|
"isnew": False,
|
|
"id": str(progdict['id'] or "%s_%s" % (chan_obj.dict['origin_id'], progdict["start"])),
|
|
}
|
|
|
|
if 'genre' in list(progdict.keys()):
|
|
clean_prog_dict["genres"] = progdict['genre'].split(",")
|
|
|
|
if clean_prog_dict['sub-title'].startswith("Movie:"):
|
|
clean_prog_dict['releaseyear'] = clean_prog_dict['sub-title'].split("Movie: ")[-1]
|
|
clean_prog_dict['sub-title'] = "Unavailable"
|
|
clean_prog_dict["genres"].append("Movie")
|
|
|
|
# TODO isNEW
|
|
|
|
if not any((d['time_start'] == clean_prog_dict['time_start'] and d['id'] == clean_prog_dict['id']) for d in programguide[chan_obj.number]["listing"]):
|
|
programguide[str(chan_obj.number)]["listing"].append(clean_prog_dict)
|
|
|
|
return programguide
|