diff --git a/android/app/src/main/java/com/jellify/BackgroundFileReader.kt b/android/app/src/main/java/com/jellify/BackgroundFileReader.kt new file mode 100644 index 00000000..b474aba1 --- /dev/null +++ b/android/app/src/main/java/com/jellify/BackgroundFileReader.kt @@ -0,0 +1,15 @@ +@ReactMethod +public void readBlobInBackground(ReadableMap blob, Promise promise) { + new Thread(new Runnable() { + @Override + public void run() { + try { + byte[] bytes = Base64.decode(blob.getString("data"), Base64.DEFAULT); + String base64String = Base64.encodeToString(bytes, Base64.NO_WRAP); + promise.resolve(base64String); + } catch (Exception e) { + promise.reject("Error", e); + } + } + }).start(); +} diff --git a/api/queries/functions/images.ts b/api/queries/functions/images.ts index a5353fa7..062445e7 100644 --- a/api/queries/functions/images.ts +++ b/api/queries/functions/images.ts @@ -2,8 +2,9 @@ import { ImageFormat, ImageType } from "@jellyfin/sdk/lib/generated-client/model import { getImageApi } from "@jellyfin/sdk/lib/utils/api" import _ from "lodash" import Client from "../../../api/client" -import { backgroundRuntime } from "../../../App"; -import { runOnRuntime } from "react-native-reanimated"; +import { NativeModules } from "react-native"; + +const { BackgroundFileReader } = NativeModules; export function fetchItemImage(itemId: string, imageType: ImageType, width: number, height: number) { @@ -40,13 +41,7 @@ export function fetchItemImage(itemId: string, imageType: ImageType, width: numb } function blobToBase64(blob : Blob) { - return new Promise((resolve, _) => { - runOnRuntime(backgroundRuntime, (blob : Blob) => { - 'worklet'; - - const reader = new FileReader(); - reader.onloadend = () => resolve(reader.result as string); - reader.readAsDataURL(blob); - })(blob) + return new Promise((resolve, reject) => { + BackgroundFileReader.readBlobInBackground(blob, resolve, reject) }); } \ No newline at end of file diff --git a/ios/FileReader.swift b/ios/FileReader.swift new file mode 100644 index 00000000..50baf8c5 --- /dev/null +++ b/ios/FileReader.swift @@ -0,0 +1,9 @@ +@objc(BackgroundFileReader) +class BackgroundFileReader: NSObject { + @objc func readBlobInBackground(_ blob: NSData, resolver: @escaping (String) -> Void, rejecter: @escaping (String) -> Void) { + DispatchQueue.global(qos: .background).async { + let base64String = blob.base64EncodedString(options: []) + resolver(base64String) + } + } +} \ No newline at end of file