forked from invertase/react-native-firebase
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRNFBUtilsModule.m
More file actions
101 lines (84 loc) · 3.45 KB
/
Copy pathRNFBUtilsModule.m
File metadata and controls
101 lines (84 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/**
* Copyright (c) 2016-present Invertase Limited & Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this library except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#import <React/RCTBridgeModule.h>
#import <React/RCTUtils.h>
#import "RNFBApp/RNFBSharedUtils.h"
#import "RNFBUtilsModule.h"
@implementation RNFBUtilsModule
#pragma mark -
#pragma mark Module Setup
RCT_EXPORT_MODULE();
- (dispatch_queue_t)methodQueue {
return dispatch_get_main_queue();
}
+ (BOOL)requiresMainQueueSetup {
return YES;
}
#pragma mark -
#pragma mark Firebase Utils Methods
+ (BOOL)isRemoteAsset:(NSString *)localFilePath {
return [localFilePath hasPrefix:@"assets-library://"] || [localFilePath hasPrefix:@"ph://"];
}
+ (BOOL)unused_isHeic:(NSString *)localFilePath {
return [[localFilePath pathExtension] caseInsensitiveCompare:@"heic"] == NSOrderedSame;
}
+ (NSString *)valueForKey:(NSString *)key fromQueryItems:(NSArray *)queryItems {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name=%@", key];
NSURLQueryItem *queryItem = [[queryItems filteredArrayUsingPredicate:predicate] firstObject];
return queryItem.value;
}
+ (PHAsset *)fetchAssetForPath:(NSString *)localFilePath {
PHAsset *asset = nil;
if ([localFilePath hasPrefix:@"assets-library://"] || [localFilePath hasPrefix:@"ph://"]) {
if ([localFilePath hasPrefix:@"assets-library://"]) {
NSURL *localFile = [[NSURL alloc] initWithString:localFilePath];
static BOOL hasWarned = NO;
if (!hasWarned) {
NSLog(@"'assets-library://' & 'ph://' URLs are not supported in Catalyst-based targets "
@"or iOS 12 and higher; returning nil (future warnings will be suppressed)");
hasWarned = YES;
}
} else {
NSString *assetId = [localFilePath substringFromIndex:@"ph://".length];
asset = [[PHAsset fetchAssetsWithLocalIdentifiers:@[ assetId ] options:nil] firstObject];
}
} else {
NSURLComponents *components = [NSURLComponents componentsWithString:localFilePath];
NSArray *queryItems = components.queryItems;
NSString *assetId = [self valueForKey:@"id" fromQueryItems:queryItems];
asset = [[PHAsset fetchAssetsWithLocalIdentifiers:@[ assetId ] options:nil] firstObject];
}
return asset;
}
- (NSString *)getPathForDirectory:(int)directory {
NSArray *paths =
NSSearchPathForDirectoriesInDomains((NSSearchPathDirectory)directory, NSUserDomainMask, YES);
return [paths firstObject];
}
- (NSDictionary *)constantsToExport {
NSMutableDictionary *constants = [@{
@"MAIN_BUNDLE" : [[NSBundle mainBundle] bundlePath],
@"CACHES_DIRECTORY" : [self getPathForDirectory:NSCachesDirectory],
@"DOCUMENT_DIRECTORY" : [self getPathForDirectory:NSDocumentDirectory],
@"PICTURES_DIRECTORY" : [self getPathForDirectory:NSPicturesDirectory],
@"MOVIES_DIRECTORY" : [self getPathForDirectory:NSMoviesDirectory],
@"TEMP_DIRECTORY" : NSTemporaryDirectory(),
@"LIBRARY_DIRECTORY" : [self getPathForDirectory:NSLibraryDirectory],
} mutableCopy];
return constants;
}
@end