Skip to content

Commit 7de7879

Browse files
authored
Not work after upgrade to IOS 17 and Xcode 15 #899 (#905)
Co-authored-by: Salma <salmaahhmed2@yahoo.com>
1 parent 9260ff5 commit 7de7879

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

ios/Classes/FlutterDownloaderPlugin.m

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,9 @@ - (void)sendUpdateProgressForTaskId: (NSString*)taskId inStatus: (NSNumber*) sta
299299
{
300300
NSArray *args = @[@(_callbackHandle), taskId, status, progress];
301301
if (initialized && _callbackHandle != 0) {
302-
[_callbackChannel invokeMethod:@"" arguments:args];
302+
dispatch_async(dispatch_get_main_queue(), ^{
303+
[self-> _callbackChannel invokeMethod:@"" arguments:args];
304+
});
303305
} else {
304306
[_eventQueue addObject:args];
305307
}
@@ -361,11 +363,7 @@ - (NSURL*)fileUrlOf:(NSString*)taskId taskInfo:(NSDictionary*)taskInfo downloadT
361363
if (filename == nil || ![filename isKindOfClass:[NSString class]] || [filename isEqualToString:@""]) {
362364
// If suggestedFilename is empty, use the last path component of the URL as the filename
363365
filename = [self sanitizeFilename:suggestedFilename];
364-
} else {
365-
// Sanitize the suggestedFilename to remove unsafe characters
366-
filename = [self sanitizeFilename:filename];
367-
}
368-
366+
}
369367
// Update the taskInfo with the sanitized filename
370368
NSMutableDictionary *mutableTaskInfo = [taskInfo mutableCopy];
371369
mutableTaskInfo[KEY_FILE_NAME] = filename;
@@ -390,7 +388,25 @@ - (NSString*)absoluteSavedDirPathWithShortSavedDir:(NSString*)shortSavedDir sear
390388

391389
- (NSString *)sanitizeFilename:(nullable NSString *)filename {
392390
// Define a list of allowed characters for filenames
393-
NSCharacterSet *allowedCharacters = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_."];
391+
NSMutableCharacterSet *allowedCharacters = [[NSMutableCharacterSet alloc] init];
392+
393+
// Allow alphabetical characters (lowercase and uppercase)
394+
[allowedCharacters formUnionWithCharacterSet:[NSCharacterSet letterCharacterSet]];
395+
396+
// Allow digits
397+
[allowedCharacters addCharactersInRange:NSMakeRange('0', 10)]; // ASCII digits
398+
399+
// Allow additional characters: -_.()
400+
[allowedCharacters addCharactersInString:@"-_.()"];
401+
402+
// Allow empty spaces
403+
[allowedCharacters addCharactersInString:@" "];
404+
405+
// Remove the backslash (if you want to disallow it)
406+
[allowedCharacters removeCharactersInString:@"\\"];
407+
408+
// Now, you have a character set that allows the specified characters
409+
NSCharacterSet *finalCharacterSet = [allowedCharacters copy];
394410
if (filename == nil || [filename isEqual:[NSNull null]] || [filename isEqualToString:@""]) {
395411
NSString *defaultFilename = @"default_filename";
396412
return defaultFilename;

0 commit comments

Comments
 (0)