From 9e00dd09e344419f2fe538918dc81709a8671dc0 Mon Sep 17 00:00:00 2001 From: j Date: Wed, 9 Oct 2024 17:49:21 +0100 Subject: [PATCH 1/2] allow adding global yt-dlp flags --- pandora/archive/external.py | 10 +++++++--- pandora/settings.py | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pandora/archive/external.py b/pandora/archive/external.py index 5f4ac3fd..54c55246 100644 --- a/pandora/archive/external.py +++ b/pandora/archive/external.py @@ -40,8 +40,12 @@ info_key_map = { 'display_id': 'id', } +YT_DLP = ['yt-dlp'] +if settings.YT_DLP_EXTRA: + YT_DLP += settings.YT_DLP_EXTRA + def get_info(url, referer=None): - cmd = ['yt-dlp', '-j', '--all-subs', url] + cmd = YT_DLP + ['-j', '--all-subs', url] if referer: cmd += ['--referer', referer] p = subprocess.Popen(cmd, @@ -93,7 +97,7 @@ def add_subtitles(item, media, tmp): sub.save() def load_formats(url): - cmd = ['yt-dlp', '-q', url, '-j', '-F'] + cmd = YT_DLP + ['-q', url, '-j', '-F'] p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) @@ -112,7 +116,7 @@ def download(item_id, url, referer=None): if isinstance(tmp, bytes): tmp = tmp.decode('utf-8') os.chdir(tmp) - cmd = ['yt-dlp', '-q', media['url']] + cmd = YT_DLP + ['-q', media['url']] if referer: cmd += ['--referer', referer] elif 'referer' in media: diff --git a/pandora/settings.py b/pandora/settings.py index 7268c31c..084ce8b3 100644 --- a/pandora/settings.py +++ b/pandora/settings.py @@ -291,6 +291,8 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 32 * 1024 * 1024 EMPTY_CLIPS = True +YT_DLP_EXTRA = [] + #you can ignore things below this line #========================================================================= LOCAL_APPS = [] From c69ca372ee1d8f08316212c9b0174bea106bf7ff Mon Sep 17 00:00:00 2001 From: j Date: Sun, 13 Oct 2024 17:06:15 +0100 Subject: [PATCH 2/2] sort annotations --- static/mobile/js/item.js | 1 + static/mobile/js/utils.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/static/mobile/js/item.js b/static/mobile/js/item.js index a9942536..7f81fa23 100644 --- a/static/mobile/js/item.js +++ b/static/mobile/js/item.js @@ -129,6 +129,7 @@ async function loadData(id, args) { ${icon.down} ${layerData.title} `) + data.layers[layer] = sortBy(data.layers[layer], ["+in", "+created"]) data.layers[layer].forEach(annotation => { if (pandora.url) { annotation.value = annotation.value.replace( diff --git a/static/mobile/js/utils.js b/static/mobile/js/utils.js index cbaec6a6..860db698 100644 --- a/static/mobile/js/utils.js +++ b/static/mobile/js/utils.js @@ -161,3 +161,33 @@ const getVideoURL = function(id, resolution, part, track, streamId) { return prefix + '/' + getVideoURLName(id, resolution, part, track, streamId); }; +function getSortValue(value) { + var getSortValue = Ox.cache(function getSortValue(value) { + var sortValue = value; + return sortValue; +} + +function sortBy(array, by, map) { + return array.sort(function(a, b) { + var aValue, bValue, index = 0, key, ret = 0; + while (ret == 0 && index < by.length) { + key = by[index].key; + aValue = getSortValue( + map[key] ? map[key](a[key], a) : a[key] + ); + bValue = getSortValue( + map[key] ? map[key](b[key], b) : b[key] + ); + if ((aValue === null) != (bValue === null)) { + ret = aValue === null ? 1 : -1; + } else if (aValue < bValue) { + ret = by[index].operator == '+' ? -1 : 1; + } else if (aValue > bValue) { + ret = by[index].operator == '+' ? 1 : -1; + } else { + index++; + } + } + return ret; + }); +}