2017-06-17 04:37:30 -06:00
|
|
|
// Copyright 2017 Dolphin Emulator Project
|
|
|
|
// Licensed under GPLv2+
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2017-06-18 05:20:54 -06:00
|
|
|
#include <functional>
|
2017-06-17 04:37:30 -06:00
|
|
|
#include <optional>
|
2019-05-29 00:16:12 -06:00
|
|
|
#include <string>
|
|
|
|
#include <string_view>
|
2017-06-17 04:37:30 -06:00
|
|
|
|
|
|
|
#include "Common/CommonTypes.h"
|
|
|
|
|
|
|
|
namespace DiscIO
|
|
|
|
{
|
|
|
|
class FileInfo;
|
|
|
|
struct Partition;
|
|
|
|
class Volume;
|
|
|
|
|
2019-03-21 15:23:12 -06:00
|
|
|
constexpr u32 PARTITION_DATA = 0;
|
|
|
|
constexpr u32 PARTITION_UPDATE = 1;
|
2019-03-21 16:04:56 -06:00
|
|
|
constexpr u32 PARTITION_CHANNEL = 2; // Mario Kart Wii, Wii Fit, Wii Fit Plus, Rabbids Go Home
|
|
|
|
constexpr u32 PARTITION_INSTALL = 3; // Dragon Quest X only
|
2019-03-21 15:23:12 -06:00
|
|
|
|
|
|
|
std::string NameForPartitionType(u32 partition_type, bool include_prefix);
|
2017-06-20 13:51:40 -06:00
|
|
|
|
2017-06-17 04:37:30 -06:00
|
|
|
u64 ReadFile(const Volume& volume, const Partition& partition, const FileInfo* file_info,
|
|
|
|
u8* buffer, u64 max_buffer_size, u64 offset_in_file = 0);
|
2019-05-29 00:16:12 -06:00
|
|
|
u64 ReadFile(const Volume& volume, const Partition& partition, std::string_view path, u8* buffer,
|
2017-08-02 10:16:56 -06:00
|
|
|
u64 max_buffer_size, u64 offset_in_file = 0);
|
2017-06-17 05:37:33 -06:00
|
|
|
bool ExportData(const Volume& volume, const Partition& partition, u64 offset, u64 size,
|
|
|
|
const std::string& export_filename);
|
2017-06-17 04:37:30 -06:00
|
|
|
bool ExportFile(const Volume& volume, const Partition& partition, const FileInfo* file_info,
|
|
|
|
const std::string& export_filename);
|
2019-05-29 00:16:12 -06:00
|
|
|
bool ExportFile(const Volume& volume, const Partition& partition, std::string_view path,
|
2017-08-02 10:16:56 -06:00
|
|
|
const std::string& export_filename);
|
2017-06-18 05:20:54 -06:00
|
|
|
|
|
|
|
// update_progress is called once for each child (file or directory).
|
|
|
|
// If update_progress returns true, the extraction gets cancelled.
|
|
|
|
// filesystem_path is supposed to be the path corresponding to the directory argument.
|
2018-03-27 19:49:39 -06:00
|
|
|
void ExportDirectory(const Volume& volume, const Partition& partition, const FileInfo& directory,
|
2017-06-18 05:20:54 -06:00
|
|
|
bool recursive, const std::string& filesystem_path,
|
|
|
|
const std::string& export_folder,
|
|
|
|
const std::function<bool(const std::string& path)>& update_progress);
|
|
|
|
|
2017-06-20 09:31:50 -06:00
|
|
|
// To export everything listed below, you can use ExportSystemData
|
|
|
|
|
|
|
|
bool ExportWiiUnencryptedHeader(const Volume& volume, const std::string& export_filename);
|
|
|
|
bool ExportWiiRegionData(const Volume& volume, const std::string& export_filename);
|
|
|
|
|
|
|
|
bool ExportTicket(const Volume& volume, const Partition& partition,
|
|
|
|
const std::string& export_filename);
|
|
|
|
bool ExportTMD(const Volume& volume, const Partition& partition,
|
|
|
|
const std::string& export_filename);
|
|
|
|
bool ExportCertificateChain(const Volume& volume, const Partition& partition,
|
|
|
|
const std::string& export_filename);
|
|
|
|
bool ExportH3Hashes(const Volume& volume, const Partition& partition,
|
|
|
|
const std::string& export_filename);
|
|
|
|
|
|
|
|
bool ExportHeader(const Volume& volume, const Partition& partition,
|
|
|
|
const std::string& export_filename);
|
|
|
|
bool ExportBI2Data(const Volume& volume, const Partition& partition,
|
|
|
|
const std::string& export_filename);
|
2020-06-07 14:58:03 -06:00
|
|
|
std::optional<u64> GetApploaderSize(const Volume& volume, const Partition& partition);
|
2017-06-17 04:37:30 -06:00
|
|
|
bool ExportApploader(const Volume& volume, const Partition& partition,
|
2017-06-17 08:53:55 -06:00
|
|
|
const std::string& export_filename);
|
2017-06-17 04:37:30 -06:00
|
|
|
std::optional<u64> GetBootDOLOffset(const Volume& volume, const Partition& partition);
|
|
|
|
std::optional<u32> GetBootDOLSize(const Volume& volume, const Partition& partition, u64 dol_offset);
|
2017-06-17 08:53:55 -06:00
|
|
|
bool ExportDOL(const Volume& volume, const Partition& partition,
|
|
|
|
const std::string& export_filename);
|
2017-06-20 09:31:50 -06:00
|
|
|
std::optional<u64> GetFSTOffset(const Volume& volume, const Partition& partition);
|
|
|
|
std::optional<u64> GetFSTSize(const Volume& volume, const Partition& partition);
|
|
|
|
bool ExportFST(const Volume& volume, const Partition& partition,
|
|
|
|
const std::string& export_filename);
|
2017-06-17 04:37:30 -06:00
|
|
|
|
2017-06-20 07:41:17 -06:00
|
|
|
bool ExportSystemData(const Volume& volume, const Partition& partition,
|
|
|
|
const std::string& export_folder);
|
|
|
|
|
2017-06-17 04:37:30 -06:00
|
|
|
} // namespace DiscIO
|