75 lines
3.0 KiB
Mathematica
75 lines
3.0 KiB
Mathematica
|
#import "Uploader.h"
|
||
|
|
||
|
@interface Uploader ()
|
||
|
|
||
|
@property NSOperationQueue * backgroundCopyQueue;
|
||
|
|
||
|
@end
|
||
|
|
||
|
@implementation Uploader
|
||
|
|
||
|
- (instancetype)init {
|
||
|
self = [super init];
|
||
|
if (self) {
|
||
|
self.backgroundCopyQueue = [NSOperationQueue new];
|
||
|
}
|
||
|
return self;
|
||
|
}
|
||
|
|
||
|
- (BOOL)shouldUploadFileAtPath:(NSString *)path {
|
||
|
//Whilst Safari is downloading the file it appends .download to the name
|
||
|
NSRegularExpression * ignoreDownload = [NSRegularExpression regularExpressionWithPattern:@".download$" options:NSRegularExpressionCaseInsensitive error:nil];
|
||
|
if ([ignoreDownload numberOfMatchesInString:path.lastPathComponent options:0 range:NSMakeRange(0, path.lastPathComponent.length)] > 0) {
|
||
|
return NO;
|
||
|
}
|
||
|
|
||
|
//Chrome and Firefox create .hex files
|
||
|
NSRegularExpression * hexFiles = [NSRegularExpression regularExpressionWithPattern:@".hex$" options:NSRegularExpressionCaseInsensitive error:nil];
|
||
|
if ([hexFiles numberOfMatchesInString:path.lastPathComponent options:0 range:NSMakeRange(0, path.lastPathComponent.length)] > 0) {
|
||
|
return YES;
|
||
|
}
|
||
|
|
||
|
//Safari tends to just name files 'Unknown X'
|
||
|
NSRegularExpression * unknownFiles = [NSRegularExpression regularExpressionWithPattern:@"^Unknown(( |-)[0-9]+)?" options:NSRegularExpressionCaseInsensitive error:nil];
|
||
|
if ([unknownFiles numberOfMatchesInString:path.lastPathComponent options:0 range:NSMakeRange(0, path.lastPathComponent.length)]) {
|
||
|
return YES;
|
||
|
}
|
||
|
|
||
|
return NO;
|
||
|
}
|
||
|
|
||
|
- (NSArray<NSString*>*)microBitPaths {
|
||
|
NSArray<NSURL*>* allVolumes = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:nil options:NSVolumeEnumerationSkipHiddenVolumes];
|
||
|
NSMutableArray<NSString*>* microbitPaths = [NSMutableArray new];
|
||
|
NSRegularExpression * microbitRegex = [NSRegularExpression regularExpressionWithPattern:@"^MICROBIT" options:NSRegularExpressionCaseInsensitive error:nil];
|
||
|
for (NSURL * volume in allVolumes) {
|
||
|
NSString * lastPathComponent = volume.lastPathComponent;
|
||
|
if ([microbitRegex numberOfMatchesInString:lastPathComponent options:0 range:NSMakeRange(0, lastPathComponent.length)] > 0) {
|
||
|
[microbitPaths addObject:volume.path];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return microbitPaths;
|
||
|
}
|
||
|
|
||
|
- (void)uploadFile:(NSString *)file {
|
||
|
for (NSString * microbit in [self microBitPaths]) {
|
||
|
[self uploadFile:file toMicroBit:microbit];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- (void)uploadFile:(NSString *)file toMicroBit:(NSString *)path {
|
||
|
[self.backgroundCopyQueue addOperationWithBlock:^{
|
||
|
NSError * copyError;
|
||
|
NSString * destination = [path stringByAppendingPathComponent:file.lastPathComponent];
|
||
|
if (![[NSFileManager defaultManager] copyItemAtPath:file toPath:destination error:©Error]) {
|
||
|
[self.delegate uploader:self failedToTransferFile:file toMicroBit:path.lastPathComponent];
|
||
|
}
|
||
|
else {
|
||
|
[self.delegate uploader:self transferredFile:file toMicroBit:path.lastPathComponent];
|
||
|
}
|
||
|
}];
|
||
|
}
|
||
|
|
||
|
@end
|