From 9fa5e36cdc2053ecc36f87f918146b482cc38aec Mon Sep 17 00:00:00 2001 From: Nekojimi Date: Sat, 4 Mar 2023 19:54:22 +0000 Subject: [PATCH] Handle new format listing style in yt-dlp. --- .../java/moe/nekojimi/chords/Downloader.java | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/src/main/java/moe/nekojimi/chords/Downloader.java b/src/main/java/moe/nekojimi/chords/Downloader.java index 3f47df4..cc0c695 100644 --- a/src/main/java/moe/nekojimi/chords/Downloader.java +++ b/src/main/java/moe/nekojimi/chords/Downloader.java @@ -140,18 +140,58 @@ public class Downloader implements Consumer List formats = new ArrayList<>(); + int codeCol = 0; + int extCol = 1; + int resCol = 2; + int noteCol = 3; + int sizeCol = -1; + int bitrateCol = -1; + List list = output.lines().collect(Collectors.toList()); int i = 0; while (!list.get(i).contains("Available formats")) i++; i++; + if (list.get(i).contains("FILESIZE")) + { + String[] split = list.get(i).split("\\s+"); + for (int j = 0; j < split.length; j++) + { + switch (split[j]) + { + case "ID": + codeCol = j; + break; + case "EXT": + extCol = j; + break; + case "RESOLUTION": + resCol = j; + break; + case "MORE": + noteCol = j; + break; + case "FILESIZE": + sizeCol = j; + break; + case "TBR": + bitrateCol = j; + } + } + i += 2; + } for (; i < list.size(); i++) { String line = list.get(i); - String[] split = line.split("\\s\\s+", 4); + String[] split = line.split("\\s+", Math.max(4, noteCol - 1)); if (split.length < 4) continue; - formats.add(new Format(split[0], split[1], split[2], split[3])); + final Format format = new Format(split[codeCol], split[extCol], split[resCol], split[noteCol]); + if (sizeCol >= 0) + format.setSize(Util.parseSize(split[sizeCol])); + if (bitrateCol >= 0) + format.setSampleRate(Util.parseSampleRate(split[bitrateCol])); + formats.add(format); } song.setFormats(formats);