Infinity-For-Reddit icon indicating copy to clipboard operation
Infinity-For-Reddit copied to clipboard

Streamable videos fail to load if mp4-mobile not available

Open evanc577 opened this issue 1 year ago • 0 comments

Checklist

  • [X] I have used the search function for open and closed issues to see if someone else has already submitted the same bug report.
  • [X] I will describe the problem with as much detail as possible.
  • [X] If the bug only occurs with a certain link, post, image..., I will include the URL.

App version

master

Where did you get the app from

Other

Android version

13

Device model

No response

First occurred

No response

Steps to reproduce

  1. Go to streamable video
  2. Toast Streamable Video failed to load, video does not play

Example post, link, markdown...

https://reddit.com/r/dreamcatcher/comments/14gx2p3 https://streamable.com/e2dg62

Streamable API does not return a mp4-mobile field

{
  "status": 2,
  "percent": 100,
  "url": "streamable.com/e2dg62",
  "embed_code": "<div style=\"width: 100%; height: 0px; position: relative; padding-bottom: 177.778%;\"><iframe class=\"streamable-embed\" src=\"https://streamable.com/o/e2dg62\" frameborder=\"0\" scrolling=\"no\" style=\"width: 100%; height: 100%; position: absolute;\" allowfullscreen></iframe></div>",
  "message": null,
  "files": {
    "mp4": {
      "status": 2,
      "url": "https://cdn-cf-east.streamable.com/video/mp4/e2dg62.mp4?Expires=1687792620&Signature=ARBjequUnKT0xmwKq15yFQPOAJq~sYWD2sjzgFNWFMo3UVL8zpELaG8d-YpD62umcgX2Wxz1yWvQs6eiw~pX9bAao7gMXHCGr5rgPTk9WnragOboBRjVzLgdm0cafsVDIZGhl8uuTA8qM0HythW-qmRk8U5wjrOkpN3LLH4u~ckrloF3CaAF1Cy5I33RX5OL4YGhdeevz~K~8JnJ5zXTEWdKBPIsog~DLns6AIqhY8Z8q440ZSV2DomaFrRuvGEoXY7rC8tow9VYSv4r4J-cO1yqW0zm5AqaBR1dzbJiaJji9LeUjdUxhvwN~Sr0oIjDEz-37ZPIAOgYb9D6wHQcIQ__&Key-Pair-Id=APKAIEYUVEN4EVB2OKEQ",
      "framerate": 30,
      "height": 1280,
      "width": 720,
      "bitrate": 3114249,
      "size": 15973766,
      "duration": 41.033333
    },
    "original": {
      "framerate": 30,
      "bitrate": 3114248,
      "size": 15973758,
      "duration": 41.033333,
      "height": 1280,
      "width": 720
    }
  },
  "thumbnail_url": "//cdn-cf-east.streamable.com/image/e2dg62-screenshot815147.jpg?Expires=1687792620&Signature=f~WAb4o1Uc8PAJOFi0yY9dUfZ-snnVSQUx-IZAJDPlx7JGxPAebXjT9gCsP9C6sC5Gfna1OATPtxPq7428eagTcq1afxIKX~PrhiVg222DYS-5iACzUoAgNaCuGqGOvIiNCzf81zEj-EFFmhLNgX3DNbh-9I6iop-kmvKxLoJGwYGhzfKW3bec~cv6syRxEKdY3as3VP761EAngJRf4cpAC6B1CY7YT-9a-FZPMeDOSdSmF0W4CJ6LLBNENfz9eqoWVdIWo-T0GVa17lWNjjE-JZc9nIhiBzwiRQGjTEPkM9CsUoJQjQUv2RAlcP~XZhLMcebyH6P75~NwFnwLjl~Q__&Key-Pair-Id=APKAIEYUVEN4EVB2OKEQ",
  "title": "EL WH RN WJN DC BVYGE (230623 TT)",
  "source": null,
  "audio_channels": 2
}

Expected behaviour

This patch seems to fix it. (I am not an Android or Java dev so this may be bad code)

diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchStreamableVideo.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchStreamableVideo.java
index ef5629d4..cbc210b3 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchStreamableVideo.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchStreamableVideo.java
@@ -34,7 +34,11 @@ public class FetchStreamableVideo {
                     String title = jsonObject.getString(JSONUtils.TITLE_KEY);
                     JSONObject filesObject = jsonObject.getJSONObject(JSONUtils.FILES_KEY);
                     StreamableVideo.Media mp4 = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_KEY));
-                    StreamableVideo.Media mp4Mobile = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_MOBILE_KEY));
+                    StreamableVideo.Media mp4MobileTemp = null;
+                    try {
+                        mp4MobileTemp = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_MOBILE_KEY));
+                    } catch (JSONException e) {}
+                    StreamableVideo.Media mp4Mobile = mp4MobileTemp;
                     handler.post(() -> fetchStreamableVideoListener.success(new StreamableVideo(title, mp4, mp4Mobile)));
                 } else {
                     handler.post(fetchStreamableVideoListener::failed);
@@ -56,7 +60,11 @@ public class FetchStreamableVideo {
                     String title = jsonObject.getString(JSONUtils.TITLE_KEY);
                     JSONObject filesObject = jsonObject.getJSONObject(JSONUtils.FILES_KEY);
                     StreamableVideo.Media mp4 = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_KEY));
-                    StreamableVideo.Media mp4Mobile = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_MOBILE_KEY));
+                    StreamableVideo.Media mp4MobileTemp = null;
+                    try {
+                        mp4MobileTemp = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_MOBILE_KEY));
+                    } catch (JSONException e) {}
+                    StreamableVideo.Media mp4Mobile = mp4MobileTemp;
                     if (mp4 == null && mp4Mobile == null) {
                         handler.post(fetchStreamableVideoListener::failed);
                         return;

Current behaviour

No response

Logs

No response

evanc577 avatar Jun 23 '23 15:06 evanc577