Skip to content

Add paramter for size if url #82

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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions