diff --git a/server/src/main/java/xyz/e3ndr/athena/service/simple_ui/UIRoutes.java b/server/src/main/java/xyz/e3ndr/athena/service/simple_ui/UIRoutes.java index d7d1d7d..96b1800 100644 --- a/server/src/main/java/xyz/e3ndr/athena/service/simple_ui/UIRoutes.java +++ b/server/src/main/java/xyz/e3ndr/athena/service/simple_ui/UIRoutes.java @@ -407,6 +407,65 @@ public HttpResponse onViewSpecificMedia(SoraHttpSession session) { String directors = String.join(", ", media.getInfo().getDirectors().stream().map((p) -> p.getName()).collect(Collectors.toList())); String actors = String.join(", ", media.getInfo().getActors().stream().limit(4).map((p) -> p.getName()).collect(Collectors.toList())); + ContainerFormat container = null; + VideoCodec vCodec = null; + AudioCodec aCodec = null; + VideoQuality quality = null; + + String userAgent = session.getHeader("User-Agent"); + if (userAgent.contains("Nintendo WiiU")) { + container = ContainerFormat.TS; + vCodec = VideoCodec.H264_BASELINE; + aCodec = AudioCodec.AAC; + quality = VideoQuality.FHD; + } else if (userAgent.contains("Windows Phone") || userAgent.contains("Trident/")) { + container = ContainerFormat.MP4; + vCodec = VideoCodec.H264_HIGH; + aCodec = AudioCodec.AAC; + quality = VideoQuality.FHD; + } else { + container = ContainerFormat.MKV; + vCodec = VideoCodec.SOURCE; + aCodec = AudioCodec.SOURCE; + quality = VideoQuality.UHD; + } + + String containerOptions = ""; + for (ContainerFormat e : ContainerFormat.values()) { + if (e == container) { + containerOptions += ""; + } else { + containerOptions += ""; + } + } + + String vCodecOptions = ""; + for (VideoCodec e : VideoCodec.values()) { + if (e == vCodec) { + vCodecOptions += ""; + } else { + vCodecOptions += ""; + } + } + + String aCodecOptions = ""; + for (AudioCodec e : AudioCodec.values()) { + if (e == aCodec) { + aCodecOptions += ""; + } else { + aCodecOptions += ""; + } + } + + String qualityOptions = ""; + for (VideoQuality e : VideoQuality.values()) { + if (e == quality) { + qualityOptions += ""; + } else { + qualityOptions += ""; + } + } + return new HTMLBuilder() .f("Go back") .f("
") @@ -444,7 +503,13 @@ public HttpResponse onViewSpecificMedia(SoraHttpSession session) { .f(" ") .f("") .f("
") - .f(" Watch", media.getId()) + .f("
", media.getId()) + .f(" ") + .f(" ") + .f(" ") + .f(" ") + .f(" ") + .f("
") .f(" ") .f(" ") .f("") @@ -459,37 +524,12 @@ public HttpResponse onWatchSpecificMedia(SoraHttpSession session) { return HttpResponse.newFixedLengthResponse(StandardHttpStatus.NOT_FOUND); } - String videoUrl; - - String userAgent = session.getHeader("User-Agent"); -// if (userAgent.contains("Nintendo WiiU")) { -// VideoCodec vCodec = VideoCodec.H264_BASELINE; -// AudioCodec aCodec = AudioCodec.AAC; -// VideoQuality quality = VideoQuality.FHD; -// -// videoUrl = String.format( -// "/_internal/media/%s/stream/hls/media.m3u8?videoCodec=%s&audioCodec=%s&quality=%s", -// media.getId(), vCodec, aCodec, quality -// ); -// } else { - ContainerFormat container = ContainerFormat.MKV; - VideoCodec vCodec = VideoCodec.H264_HIGH; - AudioCodec aCodec = AudioCodec.OPUS; - VideoQuality quality = VideoQuality.UHD; - - if (userAgent.contains("Nintendo WiiU")) { - container = ContainerFormat.TS; - vCodec = VideoCodec.H264_BASELINE; - aCodec = AudioCodec.AAC; - quality = VideoQuality.FHD; - } else if (userAgent.contains("Windows Phone") || userAgent.contains("Trident/")) { - container = ContainerFormat.MP4; - vCodec = VideoCodec.H264_HIGH; - aCodec = AudioCodec.AAC; - quality = VideoQuality.FHD; - } + ContainerFormat container = ContainerFormat.valueOf(session.getQueryParameters().get("container")); + VideoCodec vCodec = VideoCodec.valueOf(session.getQueryParameters().get("vCodec")); + AudioCodec aCodec = AudioCodec.valueOf(session.getQueryParameters().get("aCodec")); + VideoQuality quality = VideoQuality.valueOf(session.getQueryParameters().get("quality")); - videoUrl = String.format( + String videoUrl = String.format( "/_internal/media/%s/stream?format=%s&videoCodec=%s&audioCodec=%s&quality=%s", media.getId(), container, vCodec, aCodec, quality );