add content-type fallback seafile
This commit is contained in:
parent
c42b1a21d3
commit
4413fddab4
@ -68,10 +68,11 @@ class MetaParser(html.parser.HTMLParser):
|
|||||||
return self.handle_starttag_input(attrs)
|
return self.handle_starttag_input(attrs)
|
||||||
|
|
||||||
class StreamData():
|
class StreamData():
|
||||||
def __init__(self, upstream, ctype, thumbnail, title, description, override):
|
def __init__(self, upstream, ctype, proxy_ctype, thumbnail, title, description, override):
|
||||||
self.values = {}
|
self.values = {}
|
||||||
self.values["upstream"] = upstream
|
self.values["upstream"] = upstream
|
||||||
self.values["ctype"] = ctype
|
self.values["ctype"] = ctype
|
||||||
|
self.values["proxy_ctype"] = proxy_ctype
|
||||||
self.values["thumbnail"] = thumbnail
|
self.values["thumbnail"] = thumbnail
|
||||||
self.values["title"] = title
|
self.values["title"] = title
|
||||||
self.values["description"] = description
|
self.values["description"] = description
|
||||||
@ -85,6 +86,8 @@ class StreamData():
|
|||||||
return self.values.get("upstream")
|
return self.values.get("upstream")
|
||||||
def ctype(self):
|
def ctype(self):
|
||||||
return self.values.get("ctype")
|
return self.values.get("ctype")
|
||||||
|
def proxy_ctype(self):
|
||||||
|
return self.values.get("ctype")
|
||||||
def thumbnail(self):
|
def thumbnail(self):
|
||||||
return self.values.get("thumbnail")
|
return self.values.get("thumbnail")
|
||||||
def title(self):
|
def title(self):
|
||||||
@ -135,6 +138,7 @@ class StreamProvider():
|
|||||||
def init_stream(self):
|
def init_stream(self):
|
||||||
stream = {}
|
stream = {}
|
||||||
stream["upstream"] = None
|
stream["upstream"] = None
|
||||||
|
stream["proxy_ctype"] = None
|
||||||
stream["ctype"] = None
|
stream["ctype"] = None
|
||||||
stream["thumbnail"] = None
|
stream["thumbnail"] = None
|
||||||
stream["title"] = None
|
stream["title"] = None
|
||||||
@ -143,6 +147,7 @@ class StreamProvider():
|
|||||||
return stream
|
return stream
|
||||||
def process(self):
|
def process(self):
|
||||||
data = self.stream()
|
data = self.stream()
|
||||||
|
proxy_ctype = data.proxy_ctype()
|
||||||
if not isinstance(data.upstream(), str) or isinstance(data.ctype(), str):
|
if not isinstance(data.upstream(), str) or isinstance(data.ctype(), str):
|
||||||
return data
|
return data
|
||||||
proxies = None
|
proxies = None
|
||||||
@ -164,7 +169,9 @@ class StreamProvider():
|
|||||||
ctype = None
|
ctype = None
|
||||||
elif "mpegurl" in ctype:
|
elif "mpegurl" in ctype:
|
||||||
ctype = "application/vnd.apple.mpegurl"
|
ctype = "application/vnd.apple.mpegurl"
|
||||||
return StreamData(data.upstream(), ctype, data.thumbnail(), data.title(), data.description(), data.override)
|
if ctype == "application/octet-stream" and isinstance(proxy_ctype, str):
|
||||||
|
ctype = proxy_ctype
|
||||||
|
return StreamData(data.upstream(), ctype, proxy_ctype, data.thumbnail(), data.title(), data.description(), data.override)
|
||||||
async def run(self):
|
async def run(self):
|
||||||
data = None
|
data = None
|
||||||
try:
|
try:
|
||||||
@ -188,10 +195,10 @@ class StreamlinkRunner(StreamProvider):
|
|||||||
for key in reversed(streams):
|
for key in reversed(streams):
|
||||||
stream = streams.get(key)
|
stream = streams.get(key)
|
||||||
if hasattr(stream, "url"):
|
if hasattr(stream, "url"):
|
||||||
return StreamData(stream.url, self.extract_mime(stream.url), None, None, None, False)
|
return StreamData(stream.url, self.extract_mime(stream.url), None, None, None, None, False)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.info("%s <%s>", e, self.upstream)
|
self.logger.info("%s <%s>", e, self.upstream)
|
||||||
return StreamData(None, None, None, None, None, False)
|
return StreamData(None, None, None, None, None, None, False)
|
||||||
|
|
||||||
class YoutubeRunner(StreamProvider):
|
class YoutubeRunner(StreamProvider):
|
||||||
def stream(self):
|
def stream(self):
|
||||||
@ -249,7 +256,7 @@ class SeafileRunner(StreamProvider):
|
|||||||
stream_data["title"] = json_data.get("filePath")
|
stream_data["title"] = json_data.get("filePath")
|
||||||
stream_data["upstream"] = json_data.get("rawPath")
|
stream_data["upstream"] = json_data.get("rawPath")
|
||||||
if json_data.get("filePath").lower().endswith(".mp4"):
|
if json_data.get("filePath").lower().endswith(".mp4"):
|
||||||
stream_data["ctype"] = "video/mp4"
|
stream_data["proxy_ctype"] = "video/mp4"
|
||||||
return StreamData(**stream_data)
|
return StreamData(**stream_data)
|
||||||
|
|
||||||
class MetaProvider(StreamProvider):
|
class MetaProvider(StreamProvider):
|
||||||
@ -326,7 +333,7 @@ async def get_any(upstream, proxy, logger):
|
|||||||
tasks.append(asyncio.create_task(get_ytdl(upstream, proxy, logger)))
|
tasks.append(asyncio.create_task(get_ytdl(upstream, proxy, logger)))
|
||||||
tasks.append(asyncio.create_task(get_meta(upstream, proxy, logger)))
|
tasks.append(asyncio.create_task(get_meta(upstream, proxy, logger)))
|
||||||
|
|
||||||
result = StreamData(None, None, None, None, None, False)
|
result = StreamData(None, None, None, None, None, None, False)
|
||||||
for task in asyncio.as_completed(tasks):
|
for task in asyncio.as_completed(tasks):
|
||||||
temp_result = await task
|
temp_result = await task
|
||||||
if isinstance(temp_result, StreamData):
|
if isinstance(temp_result, StreamData):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user