mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 13:20:03 +00:00 
			
		
		
		
	Addressed Bunnei's review comments, and made some other tweaks:
- Deleted GetStatus() because it wasn't used anywhere outside of Core::System. - Fixed design flaw where the message bar status could be set despite the game being stopped.
This commit is contained in:
		
							parent
							
								
									ff04320c97
								
							
						
					
					
						commit
						f008b22e3b
					
				
					 7 changed files with 32 additions and 29 deletions
				
			
		|  | @ -663,10 +663,11 @@ void GMainWindow::OnCoreError(Core::System::ResultStatus result, std::string det | ||||||
|     switch (result) { |     switch (result) { | ||||||
|     case Core::System::ResultStatus::ErrorSystemFiles: { |     case Core::System::ResultStatus::ErrorSystemFiles: { | ||||||
|         QString message = "Citra was unable to locate a 3DS system archive"; |         QString message = "Citra was unable to locate a 3DS system archive"; | ||||||
|         if (details != std::string()) |         if (!details.empty()) { | ||||||
|             message.append(tr(": %1. ").arg(details.c_str())); |             message.append(tr(": %1. ").arg(details.c_str())); | ||||||
|         else |         } else { | ||||||
|             message.append(". "); |             message.append(". "); | ||||||
|  |         } | ||||||
|         message.append(common_message); |         message.append(common_message); | ||||||
| 
 | 
 | ||||||
|         answer = QMessageBox::question(this, tr("System Archive Not Found"), message, |         answer = QMessageBox::question(this, tr("System Archive Not Found"), message, | ||||||
|  | @ -698,11 +699,15 @@ void GMainWindow::OnCoreError(Core::System::ResultStatus result, std::string det | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (answer == QMessageBox::Yes) { |     if (answer == QMessageBox::Yes) { | ||||||
|         if (emu_thread != nullptr) |         if (emu_thread) { | ||||||
|             ShutdownGame(); |             ShutdownGame(); | ||||||
|  |         } | ||||||
|     } else { |     } else { | ||||||
|         message_label->setText(status_message); |         // Only show the message if the game is still running.
 | ||||||
|         message_label->setVisible(true); |         if (emu_thread) { | ||||||
|  |             message_label->setText(status_message); | ||||||
|  |             message_label->setVisible(true); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -26,7 +26,7 @@ namespace Core { | ||||||
| /*static*/ System System::s_instance; | /*static*/ System System::s_instance; | ||||||
| 
 | 
 | ||||||
| System::ResultStatus System::RunLoop(int tight_loop) { | System::ResultStatus System::RunLoop(int tight_loop) { | ||||||
|     this->status = ResultStatus::Success; |     status = ResultStatus::Success; | ||||||
|     if (!cpu_core) { |     if (!cpu_core) { | ||||||
|         return ResultStatus::ErrorNotInitialized; |         return ResultStatus::ErrorNotInitialized; | ||||||
|     } |     } | ||||||
|  | @ -60,7 +60,7 @@ System::ResultStatus System::RunLoop(int tight_loop) { | ||||||
|     HW::Update(); |     HW::Update(); | ||||||
|     Reschedule(); |     Reschedule(); | ||||||
| 
 | 
 | ||||||
|     return GetStatus(); |     return status; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| System::ResultStatus System::SingleStep() { | System::ResultStatus System::SingleStep() { | ||||||
|  | @ -99,8 +99,8 @@ System::ResultStatus System::Load(EmuWindow* emu_window, const std::string& file | ||||||
|         return init_result; |         return init_result; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     Loader::ResultStatus load_result = app_loader->Load(); |     const Loader::ResultStatus load_result{app_loader->Load()}; | ||||||
|     if (load_result != Loader::ResultStatus::Success) { |     if (Loader::ResultStatus::Success != load_result) { | ||||||
|         LOG_CRITICAL(Core, "Failed to load ROM (Error %i)!", load_result); |         LOG_CRITICAL(Core, "Failed to load ROM (Error %i)!", load_result); | ||||||
|         System::Shutdown(); |         System::Shutdown(); | ||||||
| 
 | 
 | ||||||
|  | @ -113,9 +113,8 @@ System::ResultStatus System::Load(EmuWindow* emu_window, const std::string& file | ||||||
|             return ResultStatus::ErrorLoader; |             return ResultStatus::ErrorLoader; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     // this->status will be used for errors while actually running the game
 |  | ||||||
|     status = ResultStatus::Success; |     status = ResultStatus::Success; | ||||||
|     return ResultStatus::Success; |     return status; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void System::PrepareReschedule() { | void System::PrepareReschedule() { | ||||||
|  |  | ||||||
|  | @ -108,16 +108,14 @@ public: | ||||||
|     PerfStats perf_stats; |     PerfStats perf_stats; | ||||||
|     FrameLimiter frame_limiter; |     FrameLimiter frame_limiter; | ||||||
| 
 | 
 | ||||||
|     ResultStatus GetStatus() { |     void SetStatus(ResultStatus new_status, const char* details = nullptr) { | ||||||
|         return status; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     void SetStatus(ResultStatus new_status, std::string details = std::string()) { |  | ||||||
|         status = new_status; |         status = new_status; | ||||||
|         status_details = details; |         if (details) { | ||||||
|  |             status_details = details; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     std::string GetStatusDetails() { |     const std::string& GetStatusDetails() const { | ||||||
|         return status_details; |         return status_details; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -147,8 +145,8 @@ private: | ||||||
| 
 | 
 | ||||||
|     static System s_instance; |     static System s_instance; | ||||||
| 
 | 
 | ||||||
|     ResultStatus status; |     ResultStatus status = ResultStatus::Success; | ||||||
|     std::string status_details; |     std::string status_details = ""; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| inline ARM_Interface& CPU() { | inline ARM_Interface& CPU() { | ||||||
|  |  | ||||||
|  | @ -42,13 +42,13 @@ ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_NCCH::Open(const Path& | ||||||
| 
 | 
 | ||||||
|     if (!file->IsOpen()) { |     if (!file->IsOpen()) { | ||||||
|         // High Title ID of the archive: The category (https://3dbrew.org/wiki/Title_list).
 |         // High Title ID of the archive: The category (https://3dbrew.org/wiki/Title_list).
 | ||||||
|         const u32 shared_data_archive = 0x0004009B; |         constexpr u32 shared_data_archive = 0x0004009B; | ||||||
|         const u32 system_data_archive = 0x000400DB; |         constexpr u32 system_data_archive = 0x000400DB; | ||||||
| 
 | 
 | ||||||
|         // Low Title IDs.
 |         // Low Title IDs.
 | ||||||
|         const u32 mii_data = 0x00010202; |         constexpr u32 mii_data = 0x00010202; | ||||||
|         const u32 region_manifest = 0x00010402; |         constexpr u32 region_manifest = 0x00010402; | ||||||
|         const u32 ng_word_list = 0x00010302; |         constexpr u32 ng_word_list = 0x00010302; | ||||||
| 
 | 
 | ||||||
|         LOG_DEBUG(Service_FS, "Full Path: %s. Category: 0x%X. Path: 0x%X.", path.DebugStr().c_str(), |         LOG_DEBUG(Service_FS, "Full Path: %s. Category: 0x%X. Path: 0x%X.", path.DebugStr().c_str(), | ||||||
|                   high, low); |                   high, low); | ||||||
|  | @ -60,7 +60,7 @@ ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_NCCH::Open(const Path& | ||||||
|                                                       "Mii data"); |                                                       "Mii data"); | ||||||
|             } else if (low == region_manifest) { |             } else if (low == region_manifest) { | ||||||
|                 LOG_ERROR(Service_FS, |                 LOG_ERROR(Service_FS, | ||||||
|                           "Failed to get a handle for shared data archive: region manifes"); |                           "Failed to get a handle for shared data archive: region manifest."); | ||||||
|                 Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSystemFiles, |                 Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSystemFiles, | ||||||
|                                                       "Region manifest"); |                                                       "Region manifest"); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  | @ -257,8 +257,9 @@ ResultVal<ArchiveHandle> OpenArchive(ArchiveIdCode id_code, FileSys::Path& archi | ||||||
|     LOG_TRACE(Service_FS, "Opening archive with id code 0x%08X", id_code); |     LOG_TRACE(Service_FS, "Opening archive with id code 0x%08X", id_code); | ||||||
| 
 | 
 | ||||||
|     auto itr = id_code_map.find(id_code); |     auto itr = id_code_map.find(id_code); | ||||||
|     if (itr == id_code_map.end()) |     if (itr == id_code_map.end()) { | ||||||
|         return FileSys::ERROR_NOT_FOUND; |         return FileSys::ERROR_NOT_FOUND; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     CASCADE_RESULT(std::unique_ptr<ArchiveBackend> res, itr->second->Open(archive_path)); |     CASCADE_RESULT(std::unique_ptr<ArchiveBackend> res, itr->second->Open(archive_path)); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -101,7 +101,7 @@ public: | ||||||
|      * Loads the system mode that this application needs. |      * Loads the system mode that this application needs. | ||||||
|      * This function defaults to 2 (96MB allocated to the application) if it can't read the |      * This function defaults to 2 (96MB allocated to the application) if it can't read the | ||||||
|      * information. |      * information. | ||||||
|      * @returns a pair of Optional with the kernel system mode and ResultStatus. |      * @returns A pair with the optional system mode, and and the status. | ||||||
|      */ |      */ | ||||||
|     virtual std::pair<boost::optional<u32>, ResultStatus> LoadKernelSystemMode() { |     virtual std::pair<boost::optional<u32>, ResultStatus> LoadKernelSystemMode() { | ||||||
|         // 96MB allocated to the application.
 |         // 96MB allocated to the application.
 | ||||||
|  |  | ||||||
|  | @ -179,7 +179,7 @@ public: | ||||||
| 
 | 
 | ||||||
|     /**
 |     /**
 | ||||||
|      * Loads the Exheader and returns the system mode for this application. |      * Loads the Exheader and returns the system mode for this application. | ||||||
|      * @returns a pair of Optional with the kernel system mode and ResultStatus |      * @returns A pair with the optional system mode, and and the status. | ||||||
|      */ |      */ | ||||||
|     std::pair<boost::optional<u32>, ResultStatus> LoadKernelSystemMode() override; |     std::pair<boost::optional<u32>, ResultStatus> LoadKernelSystemMode() override; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue