Skip to content

Commit

Permalink
Add android and ios setDiskSize
Browse files Browse the repository at this point in the history
  • Loading branch information
jasminmif committed Feb 28, 2024
1 parent d1a2c0b commit e886de4
Show file tree
Hide file tree
Showing 10 changed files with 75 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ public void run() {
});
}

@ReactMethod
public void setMaxDiskCacheSize(int maxSizeInBytes, final Promise promise) {
@ReactMethod
public void setDiskCacheSize(int maxSizeInBytes, final Promise promise) {
final Activity activity = getCurrentActivity();
if (activity == null) {
promise.resolve(false);
Expand Down
1 change: 1 addition & 0 deletions dist/PreloaderManager.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ declare class PreloaderManager {
preload(sources: Source[], onProgress?: PreloadProgressHandler, onComplete?: PreloadCompletionHandler): void;
onProgress({ id, finished, total }: OnProgressParams): void;
onComplete({ id, finished, skipped }: OnCompleteParams): void;
setDiskCacheSize(maxSizeInBytes: number): any;
}
declare const preloaderManager: PreloaderManager;
export default preloaderManager;
Expand Down
2 changes: 1 addition & 1 deletion dist/PreloaderManager.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 7 additions & 5 deletions dist/index.cjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,14 @@ class PreloaderManager {
}
}

setDiskCacheSize(maxSizeInBytes) {
return nativeManager.setDiskCacheSize(maxSizeInBytes);
}

}

const preloaderManager = new PreloaderManager();

const FastImageViewModule = reactNative.NativeModules.FastImageView;
const resizeMode = {
contain: "contain",
cover: "cover",
Expand Down Expand Up @@ -153,14 +156,13 @@ FastImage.priority = priority;

FastImage.preload = (sources, onProgress, onComplete) => preloaderManager.preload(sources, onProgress, onComplete);

FastImage.setDiskCacheSize = maxSizeInBytes => preloaderManager.setDiskCacheSize(maxSizeInBytes);

const styles = reactNative.StyleSheet.create({
imageContainer: {
overflow: "hidden"
}
});

FastImage.setDiskCacheSize = maxSizeInBytes => FastImageViewModule.setDiskCacheSize(maxSizeInBytes); // Types of requireNativeComponent are not correct.

}); // Types of requireNativeComponent are not correct.

const FastImageView = reactNative.requireNativeComponent("FastImageView", FastImage, {
nativeOnly: {
Expand Down
2 changes: 1 addition & 1 deletion dist/index.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 7 additions & 5 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,14 @@ class PreloaderManager {
}
}

setDiskCacheSize(maxSizeInBytes) {
return nativeManager.setDiskCacheSize(maxSizeInBytes);
}

}

const preloaderManager = new PreloaderManager();

const FastImageViewModule = NativeModules.FastImageView;
const resizeMode = {
contain: "contain",
cover: "cover",
Expand Down Expand Up @@ -146,14 +149,13 @@ FastImage.priority = priority;

FastImage.preload = (sources, onProgress, onComplete) => preloaderManager.preload(sources, onProgress, onComplete);

FastImage.setDiskCacheSize = maxSizeInBytes => preloaderManager.setDiskCacheSize(maxSizeInBytes);

const styles = StyleSheet.create({
imageContainer: {
overflow: "hidden"
}
});

FastImage.setDiskCacheSize = maxSizeInBytes => FastImageViewModule.setDiskCacheSize(maxSizeInBytes); // Types of requireNativeComponent are not correct.

}); // Types of requireNativeComponent are not correct.

const FastImageView = requireNativeComponent("FastImageView", FastImage, {
nativeOnly: {
Expand Down
11 changes: 11 additions & 0 deletions ios/FastImage/FFFastImagePreloaderManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#import "FFFastImagePreloader.h"
#import "FFFastImageSource.h"
#import "SDWebImageDownloader.h"
#import <SDWebImage/SDImageCache.h>

@implementation FFFastImagePreloaderManager
{
Expand Down Expand Up @@ -76,4 +77,14 @@ - (void) imagePrefetcher:(nonnull SDWebImagePrefetcher *)imagePrefetcher
[preloader prefetchURLs:urls];
}

RCT_EXPORT_METHOD(setDiskCacheSize:(NSInteger)maxSizeInBytes resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
{
#ifdef DEBUG
NSLog(@"Setting disk cache size to: %ld", (long)maxSizeInBytes);
#endif
[SDImageCache.sharedImageCache.config setMaxDiskSize:maxSizeInBytes];

resolve(NULL);
}

@end
11 changes: 0 additions & 11 deletions ios/FastImage/FFFastImageViewManager.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#import "FFFastImageViewManager.h"
#import "FFFastImageView.h"
#import <SDWebImage/SDImageCache.h>

@implementation FFFastImageViewManager

Expand All @@ -19,14 +18,4 @@ - (FFFastImageView*)view {
RCT_EXPORT_VIEW_PROPERTY(onFastImageLoadEnd, RCTDirectEventBlock)
RCT_REMAP_VIEW_PROPERTY(tintColor, imageColor, UIColor)

RCT_EXPORT_METHOD(setDiskCacheSize:(NSInteger)maxSizeInBytes resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
{
#ifdef DEBUG
NSLog(@"Setting disk cache size to: %ld", (long)maxSizeInBytes);
#endif
[SDImageCache.sharedImageCache.config setMaxDiskSize:maxSizeInBytes];

resolve(NULL);
}

@end
80 changes: 42 additions & 38 deletions src/PreloaderManager.tsx
Original file line number Diff line number Diff line change
@@ -1,87 +1,91 @@
import { NativeEventEmitter, NativeModules } from 'react-native'
import { NativeEventEmitter, NativeModules } from "react-native";

import type { EmitterSubscription } from 'react-native'
import type { EmitterSubscription } from "react-native";

import type {
Source,
PreloadProgressHandler,
PreloadCompletionHandler,
} from './index'
} from "./index";

const nativeManager = NativeModules.FastImagePreloaderManager
const nativeEmitter = new NativeEventEmitter(nativeManager)
const nativeManager = NativeModules.FastImagePreloaderManager;
const nativeEmitter = new NativeEventEmitter(nativeManager);

type PreloadCallbacks = {
onProgress?: PreloadProgressHandler
onComplete?: PreloadCompletionHandler
}
onProgress?: PreloadProgressHandler;
onComplete?: PreloadCompletionHandler;
};

type OnProgressParams = {
id: number
finished: number
total: number
}
id: number;
finished: number;
total: number;
};

type OnCompleteParams = {
id: number
finished: number
skipped: number
}
id: number;
finished: number;
skipped: number;
};

class PreloaderManager {
_instances: Map<number, PreloadCallbacks> = new Map()
_subProgress!: EmitterSubscription
_subComplete!: EmitterSubscription
_instances: Map<number, PreloadCallbacks> = new Map();
_subProgress!: EmitterSubscription;
_subComplete!: EmitterSubscription;

preload(
sources: Source[],
onProgress?: PreloadProgressHandler,
onComplete?: PreloadCompletionHandler,
onComplete?: PreloadCompletionHandler
) {
nativeManager.createPreloader().then((id: number) => {
if (this._instances.size === 0) {
this._subProgress = nativeEmitter.addListener(
'fffastimage-progress',
this.onProgress.bind(this),
)
"fffastimage-progress",
this.onProgress.bind(this)
);
this._subComplete = nativeEmitter.addListener(
'fffastimage-complete',
this.onComplete.bind(this),
)
"fffastimage-complete",
this.onComplete.bind(this)
);
}

this._instances.set(id, { onProgress, onComplete })
this._instances.set(id, { onProgress, onComplete });

nativeManager.preload(id, sources)
})
nativeManager.preload(id, sources);
});
}

onProgress({ id, finished, total }: OnProgressParams) {
const instance = this._instances.get(id)
const instance = this._instances.get(id);

if (instance && instance.onProgress)
instance.onProgress(finished, total)
instance.onProgress(finished, total);
}

onComplete({ id, finished, skipped }: OnCompleteParams) {
const instance = this._instances.get(id)
const instance = this._instances.get(id);

if (instance && instance.onComplete)
instance.onComplete(finished, skipped)
instance.onComplete(finished, skipped);

this._instances.delete(id)
this._instances.delete(id);

if (
this._instances.size === 0 &&
this._subProgress &&
this._subComplete
) {
this._subProgress.remove()
this._subComplete.remove()
this._subProgress.remove();
this._subComplete.remove();
}
}

setDiskCacheSize(maxSizeInBytes: number) {
return nativeManager.setDiskCacheSize(maxSizeInBytes);
}
}

const preloaderManager = new PreloaderManager()
const preloaderManager = new PreloaderManager();

export default preloaderManager
export default preloaderManager;
8 changes: 3 additions & 5 deletions src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,9 @@ import {
TransformsStyle,
AccessibilityProps,
ViewProps,
NativeModules,
} from "react-native";

import preloaderManager from "./PreloaderManager";
const FastImageViewModule = NativeModules.FastImageView;

export type ResizeMode = "contain" | "cover" | "stretch" | "center";

Expand Down Expand Up @@ -235,15 +233,15 @@ FastImage.preload = (
onComplete?: PreloadCompletionHandler
) => preloaderManager.preload(sources, onProgress, onComplete);

FastImage.setDiskCacheSize = (maxSizeInBytes: number) =>
preloaderManager.setDiskCacheSize(maxSizeInBytes);

const styles = StyleSheet.create({
imageContainer: {
overflow: "hidden",
},
});

FastImage.setDiskCacheSize = (maxSizeInBytes: number) =>
FastImageViewModule.setDiskCacheSize(maxSizeInBytes);

// Types of requireNativeComponent are not correct.
const FastImageView = (requireNativeComponent as any)(
"FastImageView",
Expand Down

0 comments on commit e886de4

Please sign in to comment.