Move ExtractDir from FilesystemPanel to DiscExtractor

This commit is contained in:
JosJuice
2017-06-18 13:20:54 +02:00
parent 5778e8bdba
commit 6d51992648
3 changed files with 44 additions and 33 deletions

View File

@ -71,6 +71,38 @@ bool ExportFile(const Volume& volume, const Partition& partition, const FileInfo
export_filename);
}
void ExportDirectory(const Volume& volume, const Partition partition, const FileInfo& directory,
bool recursive, const std::string& filesystem_path,
const std::string& export_folder,
const std::function<bool(const std::string& path)>& update_progress)
{
for (const FileInfo& file_info : directory)
{
const std::string path =
filesystem_path + file_info.GetName() + (file_info.IsDirectory() ? "/" : "");
const std::string export_path = export_folder + '/' + path;
if (update_progress(path))
return;
DEBUG_LOG(DISCIO, "%s", export_path.c_str());
if (!file_info.IsDirectory())
{
if (File::Exists(export_path))
NOTICE_LOG(DISCIO, "%s already exists", export_path.c_str());
else if (!ExportFile(volume, partition, &file_info, export_path))
ERROR_LOG(DISCIO, "Could not export %s", export_path.c_str());
}
else if (recursive)
{
File::CreateFullPath(export_path);
ExportDirectory(volume, partition, file_info, recursive, path, export_folder,
update_progress);
}
}
}
bool ExportApploader(const Volume& volume, const Partition& partition,
const std::string& export_filename)
{

View File

@ -4,6 +4,7 @@
#pragma once
#include <functional>
#include <optional>
#include "Common/CommonTypes.h"
@ -20,6 +21,15 @@ bool ExportData(const Volume& volume, const Partition& partition, u64 offset, u6
const std::string& export_filename);
bool ExportFile(const Volume& volume, const Partition& partition, const FileInfo* file_info,
const std::string& export_filename);
// 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.
void ExportDirectory(const Volume& volume, const Partition partition, const FileInfo& directory,
bool recursive, const std::string& filesystem_path,
const std::string& export_folder,
const std::function<bool(const std::string& path)>& update_progress);
bool ExportApploader(const Volume& volume, const Partition& partition,
const std::string& export_filename);
std::optional<u64> GetBootDOLOffset(const Volume& volume, const Partition& partition);