mirror of
https://github.com/J-D-K/JKSV.git
synced 2026-09-08 02:25:17 -05:00
More refactoring. Start to completely implement remote storage.
This commit is contained in:
@@ -1,80 +1,64 @@
|
||||
#include "fs/save_data_functions.hpp"
|
||||
|
||||
#include "error.hpp"
|
||||
#include "logger.hpp"
|
||||
|
||||
bool fs::create_save_data_for(data::User *targetUser, data::TitleInfo *titleInfo)
|
||||
{
|
||||
// Attributes.
|
||||
FsSaveDataAttribute saveAttributes = {.application_id = titleInfo->get_application_id(),
|
||||
.uid = targetUser->get_account_save_type() == FsSaveDataType_Account
|
||||
? targetUser->get_account_id()
|
||||
: data::BLANK_ACCOUNT_ID,
|
||||
.system_save_data_id = 0,
|
||||
.save_data_type = targetUser->get_account_save_type(),
|
||||
.save_data_rank = FsSaveDataRank_Primary,
|
||||
.save_data_index = 0};
|
||||
const uint8_t saveType = targetUser->get_account_save_type();
|
||||
const uint64_t applicationID = titleInfo->get_application_id();
|
||||
const AccountUid accountID = saveType == FsSaveDataType_Account ? targetUser->get_account_id() : data::BLANK_ACCOUNT_ID;
|
||||
const uint64_t ownerID = saveType == FsSaveDataType_Bcat ? 0x010000000000000C : titleInfo->get_save_data_owner_id();
|
||||
const int64_t saveSize = titleInfo->get_save_data_size(saveType);
|
||||
const int64_t journalSize = titleInfo->get_journal_size(saveType);
|
||||
|
||||
// For just creating it, we're using the safe baseline values.
|
||||
FsSaveDataCreationInfo saveCreation = {
|
||||
.save_data_size = titleInfo->get_save_data_size(targetUser->get_account_save_type()),
|
||||
.journal_size = titleInfo->get_journal_size(targetUser->get_account_save_type()),
|
||||
.available_size = 0x4000,
|
||||
.owner_id = targetUser->get_account_save_type() == FsSaveDataType_Bcat ? 0x010000000000000C
|
||||
: titleInfo->get_save_data_owner_id(),
|
||||
.flags = 0,
|
||||
.save_data_space_id = FsSaveDataSpaceId_User};
|
||||
const FsSaveDataAttribute saveAttributes = {.application_id = applicationID,
|
||||
.uid = accountID,
|
||||
.system_save_data_id = 0,
|
||||
.save_data_type = saveType,
|
||||
.save_data_rank = FsSaveDataRank_Primary,
|
||||
.save_data_index = 0};
|
||||
|
||||
// Save meta
|
||||
FsSaveDataMetaInfo saveMeta = {.size = 0x40060, .type = FsSaveDataMetaType_Thumbnail};
|
||||
const FsSaveDataCreationInfo saveCreation = {.save_data_size = saveSize,
|
||||
.journal_size = journalSize,
|
||||
.available_size = 0x4000,
|
||||
.owner_id = ownerID,
|
||||
.flags = 0,
|
||||
.save_data_space_id = FsSaveDataSpaceId_User};
|
||||
|
||||
Result fsError = fsCreateSaveDataFileSystem(&saveAttributes, &saveCreation, &saveMeta);
|
||||
if (R_FAILED(fsError))
|
||||
{
|
||||
logger::log("Error creating save data for %016llX: 0x%X.", titleInfo->get_application_id(), fsError);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
const FsSaveDataMetaInfo saveMeta = {.size = 0x40060, .type = FsSaveDataMetaType_Thumbnail};
|
||||
|
||||
// I want this recorded.
|
||||
const bool createError = error::libnx(fsCreateSaveDataFileSystem(&saveAttributes, &saveCreation, &saveMeta));
|
||||
return createError;
|
||||
}
|
||||
|
||||
bool fs::delete_save_data(const FsSaveDataInfo *saveInfo)
|
||||
{
|
||||
// I'm not allowing this at all.
|
||||
if (saveInfo->save_data_type == FsSaveDataType_System || saveInfo->save_data_type == FsSaveDataType_SystemBcat)
|
||||
{
|
||||
logger::log("Error deleting save data: Deleting system save data is not allowed.");
|
||||
return false;
|
||||
}
|
||||
const FsSaveDataType saveType = static_cast<FsSaveDataType>(saveInfo->save_data_type);
|
||||
const FsSaveDataSpaceId spaceID = static_cast<FsSaveDataSpaceId>(saveInfo->save_data_space_id);
|
||||
const bool isSystem = fs::is_system_save_data(saveInfo);
|
||||
if (isSystem) { return false; }
|
||||
|
||||
// Save attributes.
|
||||
FsSaveDataAttribute saveAttributes = {.application_id = saveInfo->application_id,
|
||||
.uid = saveInfo->uid,
|
||||
.system_save_data_id = saveInfo->system_save_data_id,
|
||||
.save_data_type = saveInfo->save_data_type,
|
||||
.save_data_rank = saveInfo->save_data_rank,
|
||||
.save_data_index = saveInfo->save_data_index};
|
||||
const FsSaveDataAttribute saveAttributes = {.application_id = saveInfo->application_id,
|
||||
.uid = saveInfo->uid,
|
||||
.system_save_data_id = saveInfo->system_save_data_id,
|
||||
.save_data_type = saveInfo->save_data_type,
|
||||
.save_data_rank = saveInfo->save_data_rank,
|
||||
.save_data_index = saveInfo->save_data_index};
|
||||
|
||||
Result fsError =
|
||||
fsDeleteSaveDataFileSystemBySaveDataAttribute(static_cast<FsSaveDataSpaceId>(saveInfo->save_data_space_id),
|
||||
&saveAttributes);
|
||||
if (R_FAILED(fsError))
|
||||
{
|
||||
logger::log("Error deleting save data: 0x%X.", fsError);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
const bool deleteError = error::libnx(fsDeleteSaveDataFileSystemBySaveDataAttribute(spaceID, &saveAttributes));
|
||||
return deleteError;
|
||||
}
|
||||
|
||||
bool fs::extend_save_data(const FsSaveDataInfo *saveInfo, int64_t size, int64_t journalSize)
|
||||
{
|
||||
Result fsError = fsExtendSaveDataFileSystem(static_cast<FsSaveDataSpaceId>(saveInfo->save_data_space_id),
|
||||
saveInfo->save_data_id,
|
||||
size,
|
||||
journalSize);
|
||||
if (R_FAILED(fsError))
|
||||
{
|
||||
logger::log("Error extending save data: 0x%0X.", fsError);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
const FsSaveDataSpaceId spaceID = static_cast<FsSaveDataSpaceId>(saveInfo->save_data_space_id);
|
||||
const uint64_t saveID = saveInfo->save_data_id;
|
||||
|
||||
const bool extendError = error::libnx(fsExtendSaveDataFileSystem(spaceID, saveID, size, journalSize));
|
||||
return extendError;
|
||||
}
|
||||
|
||||
bool fs::is_system_save_data(const FsSaveDataInfo *saveInfo)
|
||||
|
||||
Reference in New Issue
Block a user