summaryrefslogtreecommitdiff
path: root/src/core/loader/loader.cpp
diff options
context:
space:
mode:
authorGravatar wwylele2016-04-14 00:04:05 +0300
committerGravatar wwylele2016-05-04 13:02:49 +0300
commit5d5dd66d9222ced82dd61747ef4078fc1eae2496 (patch)
treee7495d933b0fbdc767426fc18940f95b7817c8ab /src/core/loader/loader.cpp
parentMerge pull request #1726 from MerryMage/read-write-region (diff)
downloadyuzu-5d5dd66d9222ced82dd61747ef4078fc1eae2496.tar.gz
yuzu-5d5dd66d9222ced82dd61747ef4078fc1eae2496.tar.xz
yuzu-5d5dd66d9222ced82dd61747ef4078fc1eae2496.zip
add icon & title to game list
Diffstat (limited to 'src/core/loader/loader.cpp')
-rw-r--r--src/core/loader/loader.cpp50
1 files changed, 31 insertions, 19 deletions
diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp
index 886501c41..0d4c1d351 100644
--- a/src/core/loader/loader.cpp
+++ b/src/core/loader/loader.cpp
@@ -90,6 +90,28 @@ const char* GetFileTypeString(FileType type) {
90 return "unknown"; 90 return "unknown";
91} 91}
92 92
93std::unique_ptr<AppLoader> GetLoader(FileUtil::IOFile&& file, FileType type,
94 const std::string& filename, const std::string& filepath) {
95 switch (type) {
96
97 // 3DSX file format.
98 case FileType::THREEDSX:
99 return std::make_unique<AppLoader_THREEDSX>(std::move(file), filename, filepath);
100
101 // Standard ELF file format.
102 case FileType::ELF:
103 return std::make_unique<AppLoader_ELF>(std::move(file), filename);
104
105 // NCCH/NCSD container formats.
106 case FileType::CXI:
107 case FileType::CCI:
108 return std::make_unique<AppLoader_NCCH>(std::move(file), filepath);
109
110 default:
111 return std::unique_ptr<AppLoader>();
112 }
113}
114
93ResultStatus LoadFile(const std::string& filename) { 115ResultStatus LoadFile(const std::string& filename) {
94 FileUtil::IOFile file(filename, "rb"); 116 FileUtil::IOFile file(filename, "rb");
95 if (!file.IsOpen()) { 117 if (!file.IsOpen()) {
@@ -111,15 +133,19 @@ ResultStatus LoadFile(const std::string& filename) {
111 133
112 LOG_INFO(Loader, "Loading file %s as %s...", filename.c_str(), GetFileTypeString(type)); 134 LOG_INFO(Loader, "Loading file %s as %s...", filename.c_str(), GetFileTypeString(type));
113 135
136 std::unique_ptr<AppLoader> app_loader = GetLoader(std::move(file), type, filename_filename, filename);
137
114 switch (type) { 138 switch (type) {
115 139
116 //3DSX file format... 140 // 3DSX file format...
141 // or NCCH/NCSD container formats...
117 case FileType::THREEDSX: 142 case FileType::THREEDSX:
143 case FileType::CXI:
144 case FileType::CCI:
118 { 145 {
119 AppLoader_THREEDSX app_loader(std::move(file), filename_filename, filename);
120 // Load application and RomFS 146 // Load application and RomFS
121 if (ResultStatus::Success == app_loader.Load()) { 147 if (ResultStatus::Success == app_loader->Load()) {
122 Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(app_loader), Service::FS::ArchiveIdCode::RomFS); 148 Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(*app_loader), Service::FS::ArchiveIdCode::RomFS);
123 return ResultStatus::Success; 149 return ResultStatus::Success;
124 } 150 }
125 break; 151 break;
@@ -127,21 +153,7 @@ ResultStatus LoadFile(const std::string& filename) {
127 153
128 // Standard ELF file format... 154 // Standard ELF file format...
129 case FileType::ELF: 155 case FileType::ELF:
130 return AppLoader_ELF(std::move(file), filename_filename).Load(); 156 return app_loader->Load();
131
132 // NCCH/NCSD container formats...
133 case FileType::CXI:
134 case FileType::CCI:
135 {
136 AppLoader_NCCH app_loader(std::move(file), filename);
137
138 // Load application and RomFS
139 ResultStatus result = app_loader.Load();
140 if (ResultStatus::Success == result) {
141 Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(app_loader), Service::FS::ArchiveIdCode::RomFS);
142 }
143 return result;
144 }
145 157
146 // CIA file format... 158 // CIA file format...
147 case FileType::CIA: 159 case FileType::CIA: