diff --git a/app/src/main/java/ru/vtosters/lite/music/downloader/Mp3Downloader.java b/app/src/main/java/ru/vtosters/lite/music/downloader/Mp3Downloader.java index 94f382304..a720400f5 100644 --- a/app/src/main/java/ru/vtosters/lite/music/downloader/Mp3Downloader.java +++ b/app/src/main/java/ru/vtosters/lite/music/downloader/Mp3Downloader.java @@ -8,9 +8,11 @@ import com.google.android.exoplayer2.source.hls.playlist.e; import com.google.android.exoplayer2.source.hls.playlist.f; import com.google.android.exoplayer2.source.hls.playlist.f.a; import com.vk.dto.music.MusicTrack; +import com.vk.dto.music.Playlist; import java.io.File; import java.io.IOException; +import java.net.URL; import java.security.GeneralSecurityException; import java.util.Arrays; import java.util.List; @@ -20,7 +22,6 @@ import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; -import com.vk.dto.music.Playlist; import ru.vtosters.hooks.other.Preferences; import ru.vtosters.lite.music.converter.ts.MpegDemuxer; import ru.vtosters.lite.music.interfaces.Callback; @@ -37,17 +38,29 @@ public final class Mp3Downloader implements ITrackDownloader { @Override public void download(MusicTrack track, Callback callback, Playlist playlist) { String uri = track.D; + if (Objects.requireNonNull(uri).isEmpty()) { String msg = "link error: " + track.y1() + ", title: " + Mp3Downloader.getTitle(track); Log.d("Mp3Downloader", msg); throw new RuntimeException(msg); } - var tsParser = new com.google.android.exoplayer2.source.hls.playlist.h(e.a(track.D)); - var baseUri = track.D.substring(0, track.D.lastIndexOf("/") + 1); + if (Objects.requireNonNull(uri).contains("master.m3u8?siren=1")) { + try { + String content = IOUtils.readAllLines(new URL(uri).openStream()); + String replacement = content.split("\n")[2].trim(); + uri = uri.replace("master.m3u8?siren=1", replacement); + } catch (IOException e) { + callback.onFailure(e); + return; + } + } + + var tsParser = new com.google.android.exoplayer2.source.hls.playlist.h(e.a(uri)); + var baseUri = uri.substring(0, uri.lastIndexOf("/") + 1); try { - var segments = ((f) tsParser.a(Uri.parse(baseUri), IOUtils.openStream(track.D))).o; + var segments = ((f) tsParser.a(Uri.parse(baseUri), IOUtils.openStream(uri))).o; byte[] buff = getMergedTs(baseUri, segments, callback); MpegDemuxer.convert(buff, outputFile.getAbsolutePath());