| 
									
										
										
										
											2014-09-12 00:44:16 +02:00
										 |  |  | // Copyright 2014 Citra Emulator Project
 | 
					
						
							| 
									
										
										
										
											2014-12-16 21:38:14 -08:00
										 |  |  | // Licensed under GPLv2 or any later version
 | 
					
						
							| 
									
										
										
										
											2014-09-12 00:44:16 +02:00
										 |  |  | // Refer to the license.txt file included.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-21 15:44:11 +01:00
										 |  |  | #include <algorithm>
 | 
					
						
							| 
									
										
										
										
											2016-04-05 13:29:55 +01:00
										 |  |  | #include <memory>
 | 
					
						
							| 
									
										
										
										
											2014-09-12 00:44:16 +02:00
										 |  |  | #include "common/file_util.h"
 | 
					
						
							| 
									
										
										
										
											2015-05-06 04:06:12 -03:00
										 |  |  | #include "common/logging/log.h"
 | 
					
						
							| 
									
										
										
										
											2016-09-20 23:52:38 -07:00
										 |  |  | #include "core/file_sys/archive_sdmc.h"
 | 
					
						
							| 
									
										
										
										
											2014-12-16 00:33:41 -05:00
										 |  |  | #include "core/file_sys/disk_archive.h"
 | 
					
						
							| 
									
										
										
										
											2014-10-09 19:43:40 -07:00
										 |  |  | #include "core/settings.h"
 | 
					
						
							| 
									
										
										
										
											2014-09-12 00:44:16 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | ////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | // FileSys namespace
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace FileSys { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-18 09:38:01 +09:00
										 |  |  | ArchiveFactory_SDMC::ArchiveFactory_SDMC(const std::string& sdmc_directory) | 
					
						
							|  |  |  |     : sdmc_directory(sdmc_directory) { | 
					
						
							| 
									
										
										
										
											2015-01-06 15:02:30 -05:00
										 |  |  |     LOG_INFO(Service_FS, "Directory %s set as SDMC.", sdmc_directory.c_str()); | 
					
						
							| 
									
										
										
										
											2014-09-12 00:44:16 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-06 11:53:14 -02:00
										 |  |  | bool ArchiveFactory_SDMC::Initialize() { | 
					
						
							| 
									
										
										
										
											2014-10-09 19:43:40 -07:00
										 |  |  |     if (!Settings::values.use_virtual_sd) { | 
					
						
							| 
									
										
										
										
											2014-12-05 23:53:49 -02:00
										 |  |  |         LOG_WARNING(Service_FS, "SDMC disabled by config."); | 
					
						
							| 
									
										
										
										
											2014-10-09 19:43:40 -07:00
										 |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-06 11:53:14 -02:00
										 |  |  |     if (!FileUtil::CreateFullPath(sdmc_directory)) { | 
					
						
							| 
									
										
										
										
											2014-12-05 23:53:49 -02:00
										 |  |  |         LOG_ERROR(Service_FS, "Unable to create SDMC path."); | 
					
						
							| 
									
										
										
										
											2014-09-12 00:44:16 +02:00
										 |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-06 11:53:14 -02:00
										 |  |  | ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_SDMC::Open(const Path& path) { | 
					
						
							| 
									
										
										
										
											2016-04-05 13:29:55 +01:00
										 |  |  |     auto archive = std::make_unique<DiskArchive>(sdmc_directory); | 
					
						
							| 
									
										
										
										
											2015-02-06 11:53:14 -02:00
										 |  |  |     return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-18 09:38:01 +09:00
										 |  |  | ResultCode ArchiveFactory_SDMC::Format(const Path& path, | 
					
						
							|  |  |  |                                        const FileSys::ArchiveFormatInfo& format_info) { | 
					
						
							| 
									
										
										
										
											2015-02-06 11:53:14 -02:00
										 |  |  |     // This is kind of an undesirable operation, so let's just ignore it. :)
 | 
					
						
							|  |  |  |     return RESULT_SUCCESS; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-28 13:51:44 -05:00
										 |  |  | ResultVal<ArchiveFormatInfo> ArchiveFactory_SDMC::GetFormatInfo(const Path& path) const { | 
					
						
							|  |  |  |     // TODO(Subv): Implement
 | 
					
						
							|  |  |  |     LOG_ERROR(Service_FS, "Unimplemented GetFormatInfo archive %s", GetName().c_str()); | 
					
						
							|  |  |  |     return ResultCode(-1); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-09-12 00:44:16 +02:00
										 |  |  | } // namespace FileSys
 |