diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal Kiosk.xcscheme b/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal Kiosk.xcscheme index 2787530a5..a9a61567e 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal Kiosk.xcscheme +++ b/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal Kiosk.xcscheme @@ -125,7 +125,7 @@ isEnabled = "NO"> diff --git a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm index 96bdc5d31..0d33f1ea1 100644 --- a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm +++ b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm @@ -132,10 +132,10 @@ struct ActivityObserver: public Activity::Observer { _analyser = result; Machine::Error error; - std::vector missing_roms; + ROM::Request missing_roms; _machine.reset(Machine::MachineForTargets(_analyser.targets, CSROMFetcher(&missing_roms), error)); if(!_machine) { - for(const auto &missing_rom : missing_roms) { +/* for(const auto &missing_rom : missing_roms) { CSMissingROM *rom = [[CSMissingROM alloc] init]; // Copy/convert the primitive fields. @@ -153,7 +153,7 @@ struct ActivityObserver: public Activity::Observer { // Add to the missing list. [missingROMs addObject:rom]; - } + }*/ return nil; } diff --git a/OSBindings/Mac/Clock Signal/Machine/CSROMFetcher.hpp b/OSBindings/Mac/Clock Signal/Machine/CSROMFetcher.hpp index f1d039ade..bd00e601e 100644 --- a/OSBindings/Mac/Clock Signal/Machine/CSROMFetcher.hpp +++ b/OSBindings/Mac/Clock Signal/Machine/CSROMFetcher.hpp @@ -8,4 +8,4 @@ #include "ROMMachine.hpp" -ROMMachine::ROMFetcher CSROMFetcher(std::vector *missing_roms = nullptr); +ROMMachine::ROMFetcher CSROMFetcher(ROM::Request *missing = nullptr); diff --git a/OSBindings/Mac/Clock Signal/Machine/CSROMFetcher.mm b/OSBindings/Mac/Clock Signal/Machine/CSROMFetcher.mm index b1f36c455..0dce4fdb2 100644 --- a/OSBindings/Mac/Clock Signal/Machine/CSROMFetcher.mm +++ b/OSBindings/Mac/Clock Signal/Machine/CSROMFetcher.mm @@ -14,46 +14,41 @@ #include -ROMMachine::ROMFetcher CSROMFetcher(std::vector *missing_roms) { - return [missing_roms] (const std::vector &roms) -> std::vector>> { +ROMMachine::ROMFetcher CSROMFetcher(ROM::Request *missing) { + return [missing] (const ROM::Request &roms) -> ROM::Map { NSArray *const supportURLs = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask]; - std::vector>> results; - for(const auto &rom: roms) { - NSData *fileData; - NSString *const subdirectory = [@"ROMImages/" stringByAppendingString:[NSString stringWithUTF8String:rom.machine_name.c_str()]]; + ROM::Map results; + for(const auto &description: roms.all_descriptions()) { + for(const auto &file_name: description.file_names) { + NSData *fileData; + NSString *const subdirectory = [@"ROMImages/" stringByAppendingString:[NSString stringWithUTF8String:description.machine_name.c_str()]]; - // Check for this file first within the application support directories. - for(NSURL *supportURL in supportURLs) { - NSURL *const fullURL = [[supportURL URLByAppendingPathComponent:subdirectory] - URLByAppendingPathComponent:[NSString stringWithUTF8String:rom.file_name.c_str()]]; - fileData = [NSData dataWithContentsOfURL:fullURL]; - if(fileData) break; - } + // Check for this file first within the application support directories. + for(NSURL *supportURL in supportURLs) { + NSURL *const fullURL = [[supportURL URLByAppendingPathComponent:subdirectory] + URLByAppendingPathComponent:[NSString stringWithUTF8String:file_name.c_str()]]; + fileData = [NSData dataWithContentsOfURL:fullURL]; + if(fileData) break; + } - // Failing that, check inside the application bundle. - if(!fileData) { - fileData = [[NSBundle mainBundle] - dataForResource:[NSString stringWithUTF8String:rom.file_name.c_str()] - withExtension:nil - subdirectory:subdirectory]; - } + // Failing that, check inside the application bundle. + if(!fileData) { + fileData = [[NSBundle mainBundle] + dataForResource:[NSString stringWithUTF8String:file_name.c_str()] + withExtension:nil + subdirectory:subdirectory]; + } - // Store an appropriate result, accumulating a list of the missing if requested. - if(!fileData) { - results.emplace_back(nullptr); - - if(missing_roms) { - missing_roms->push_back(rom); + // Store an appropriate result. + if(fileData) { + results[description.name] = fileData.stdVector8; } } - else { - auto data = std::make_unique>(); - *data = fileData.stdVector8; - results.emplace_back(std::move(data)); - } } + // TODO: sever all found ROMs from roms and store to missing, if provided. + return results; }; }