Skip to content

Add paramter for size if url #82

@billnbell3

Description

@billnbell3

Hi! 👋

Firstly, thanks for your work on this project! 🙂

Today I used patch-package to patch @candlefinance/faster-image@1.7.2 for the project I'm working on.

Here is the diff that solved my problem:

diff --git a/node_modules/@candlefinance/faster-image/ios/FasterImageViewManager.swift b/node_modules/@candlefinance/faster-image/ios/FasterImageViewManager.swift
index d653e1c..6d357df 100644
--- a/node_modules/@candlefinance/faster-image/ios/FasterImageViewManager.swift
+++ b/node_modules/@candlefinance/faster-image/ios/FasterImageViewManager.swift
@@ -1,4 +1,7 @@
+import Foundation
+
 @objc(FasterImageViewManager)
+
 final class FasterImageViewManager: RCTViewManager {
   
   override func view() -> (FasterImageView) {
@@ -108,7 +111,9 @@ final class FasterImageView: UIView {
     lazyImageView.pipeline = .shared
     lazyImageView.onCompletion = { [weak self] result in
       DispatchQueue.main.async {
-        self?.completionHandler(with: result)
+          Task {
+              await self?.completionHandler(with: result)
+          }
       }
     }
   }
@@ -117,6 +122,32 @@ final class FasterImageView: UIView {
     fatalError("init(coder:) has not been implemented")
   }
 
+    func getFileSize(forURL urlStr: String) async -> Double {
+        var sizeUrl: Double = 0.0
+        
+        if let url = URL(string: urlStr) {
+            var request: URLRequest = URLRequest(url: url)
+            request.httpMethod = "HEAD"
+            do {
+                let (data, response) = try await URLSession.shared.data(for: request)
+                
+                
+                // Process the data
+                print("Data received: \(data)")
+                
+                sizeUrl = Double(response.expectedContentLength)
+                
+                
+            } catch _ {
+                return 0.0
+            }
+
+            
+            // return sizeUrl
+        }
+        return sizeUrl
+    }
+  
   // MARK: - Views
   
   private lazy var lazyImageView = LazyImageView()
@@ -126,6 +157,7 @@ final class FasterImageView: UIView {
   @objc var onError: RCTDirectEventBlock?
   @objc var onSuccess: RCTDirectEventBlock?
     
+  
   // MARK: - Properties
   @objc var source: NSDictionary? = nil {
     didSet {
@@ -137,6 +169,8 @@ final class FasterImageView: UIView {
       }
       do {
         let options = try DictionaryDecoder().decode(ImageOptions.self, from: source)
+          
+          
         if let base64Placeholder = options.base64Placeholder {
           self.base64Placeholder = base64Placeholder
         }
@@ -181,6 +215,7 @@ final class FasterImageView: UIView {
           var urlRequestFromOptions = URLRequest(url: url)
           urlRequestFromOptions.allHTTPHeaderFields = options.headers
             
+          
           urlRequest = urlRequestFromOptions
           
           if ignoreQueryParamsForCacheKey {
@@ -436,13 +471,14 @@ final class FasterImageView: UIView {
 
 fileprivate extension FasterImageView {
   
-  func completionHandler(with result: Result<ImageResponse, Error>) {
+  func completionHandler(with result: Result<ImageResponse, Error>) async {
     switch result {
     case .success(let value):
       onSuccess?([
         "width": value.image.size.width,
         "height": value.image.size.height,
-        "source": value.urlResponse?.url?.absoluteString ?? ""
+        "size": await self.getFileSize(forURL: self.source?["url"] as! String),
+        "source": value.urlResponse?.url?.absoluteString ?? self.source?["url"] ?? "",
       ])
     case .failure(let error):
       onError?([
diff --git a/node_modules/@candlefinance/faster-image/src/index.tsx b/node_modules/@candlefinance/faster-image/src/index.tsx
index aeafc34..c5997b9 100644
--- a/node_modules/@candlefinance/faster-image/src/index.tsx
+++ b/node_modules/@candlefinance/faster-image/src/index.tsx
@@ -98,6 +98,7 @@ export type FasterImageProps = {
     nativeEvent: {
       width: number;
       height: number;
+      size: number;
       source: string;
     };
   }) => void;

This issue body was partially generated by patch-package.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions