diff --git a/ythdd_api.py b/ythdd_api.py index c7350cf..0672e68 100644 --- a/ythdd_api.py +++ b/ythdd_api.py @@ -31,7 +31,7 @@ def api_global_catchall(received_request): except Exception as e: ythdd_globals.apiFailedRequests += 1 stripped_filename = __file__[max(__file__.rfind("/"), __file__.rfind("\\")) + 1:] - print(f"\n{c.FAIL}Error! /api/{received_request} -> {stripped_filename}:L{e.__traceback__.tb_lineno} -> {type(e).__name__}{c.ENDC}:" + print(f"\n{c.FAIL}Error! /api/{received_request} -> {stripped_filename}:L{e.__traceback__.tb_lineno} -> {type(e).__name__}{c.ENDC}:\n" + f"{traceback.format_exc()}") status, received, data = 500, f"internal server error: call ended in failure: {e}", [] if ythdd_globals.config["general"]["debug"]: @@ -56,7 +56,7 @@ def api_global_catchall(received_request): except Exception as e: ythdd_globals.apiFailedRequests += 1 stripped_filename = __file__[max(__file__.rfind("/"), __file__.rfind("\\")) + 1:] - print(f"\n{c.FAIL}Error! /api/{received_request} -> {stripped_filename}:L{e.__traceback__.tb_lineno} -> {type(e).__name__}{c.ENDC}:" + print(f"\n{c.FAIL}Error! /api/{received_request} -> {stripped_filename}:L{e.__traceback__.tb_lineno} -> {type(e).__name__}{c.ENDC}:\n" + f"{traceback.format_exc()}") status, received, data = 500, f"internal server error: invidious translation call ended in failure: {e}", [] if ythdd_globals.config["general"]["debug"]: diff --git a/ythdd_inv_tl.py b/ythdd_inv_tl.py index 4160906..a260333 100644 --- a/ythdd_inv_tl.py +++ b/ythdd_inv_tl.py @@ -32,7 +32,7 @@ def send(status, response): return Response(json.dumps(response), mimetype='application/json', status=status) def notImplemented(data): - return send(501, {'error': f"not recognised/implemented: {'/'.join(data)}"}) + return send(501, {'error': f"not recognised/implemented in Invidious TL: {'/'.join(data)}"}) def stats(): data_to_send = { @@ -253,13 +253,16 @@ def rebuildFormatsFromYtdlpApi(ydata: dict): if safeTraverse(stream, ["acodec"]) != "none": # audio-only track type = safeTraverse(stream, ["audio_ext"], default=None) + fnote = safeTraverse(stream, ["format_note"], default="low") if type is None: type = "mp4" newRow[ "type"] = "audio/" + type - newRow[ "audioQuality"] = str(safeTraverse(stream, ["abr"], default=128)) - newRow["audioSampleRate"] = str(safeTraverse(stream, ["asr"], default=44100)) - newRow[ "audioChannels"] = safeTraverse(stream, ["audio_channels"]) - newRow[ "qualityLabel"] = newRow["audioQuality"] + "kbps" + newRow[ "audioQuality"] = fnote + newRow["audioSampleRate"] = int(safeTraverse(stream, ["asr"], default="44100")) + newRow[ "audioChannels"] = int(safeTraverse(stream, ["audio_channels"])) + newRow[ "qualityLabel"] = str(safeTraverse(stream, ["abr"], default="?")) + newRow[ "resolution"] = f"{fnote} quality" + newRow[ "size"] = "0x0" if safeTraverse(stream, ["vcodec"]) != "none": # either video-only or video+audio type = safeTraverse(stream, ["video_ext"], default=None) @@ -276,6 +279,13 @@ def rebuildFormatsFromYtdlpApi(ydata: dict): newRow["clen"] = safeTraverse(params, ["clen"], default=safeTraverse(stream, ["filesize"], default="0")) newRow["lmt"] = safeTraverse(params, ["lmt"], default="0") + newRow[ "projectionType"] = "RECTANGULAR" # clipious requires this to be mentioned explicitly and cannot be nulled + newRow[ "container"] = safeTraverse(stream, ["ext"], default="unknown_container") + newRow[ "encoding"] = safeTraverse(invidious_formats.FORMATS, [int("0" + newRow["itag"].split("-")[0]), "ext"], default="unknown_encoding") # not sure this split is necessary + newRow[ "quality"] = newRow["qualityLabel"] + newRow[ "init"] = "0-1" # dummy values + newRow[ "index"] = "2-3" # dummy values + if vcodec != "none" and acodec != "none": # 360p stream format_streams.append(newRow.copy())