diff options
Diffstat (limited to 'src/KingSystem/System/PlayReport.cpp')
| -rw-r--r-- | src/KingSystem/System/PlayReport.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/KingSystem/System/PlayReport.cpp b/src/KingSystem/System/PlayReport.cpp new file mode 100644 index 00000000..1ff33d08 --- /dev/null +++ b/src/KingSystem/System/PlayReport.cpp @@ -0,0 +1,77 @@ +#include <nn/account.h> +#include <nn/prepo.h> +#include "KingSystem/System/Account.h" +#include "KingSystem/System/PlayReportMgr.h" +#include "KingSystem/System/ProductReporter.h" + +namespace ksys { + +bool PlayReport::setEventId(sead::BufferedSafeString& event_id) { + if (!mHasNinPrepoReport) + return false; + + event_id.replaceCharList("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz"); + return mNinPlayReport->SetEventId(event_id.cstr()).IsSuccess(); +} + +[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key, u32 value) { + return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), s64(value)).IsSuccess(); +} + +[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key, s32 value) { + return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), s64(value)).IsSuccess(); +} + +[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key, f32 value) { + return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), value).IsSuccess(); +} + +[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key, + const sead::SafeString& value) { + return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), value.cstr()).IsSuccess(); +} + +bool PlayReport::save() { + if (!mHasNinPrepoReport) + return false; + + nn::account::Uid uid; + Account::instance()->getUserId(&uid); + if (uid.IsValid()) { + static_cast<void>(mNinPlayReport->GetCount()); + return mNinPlayReport->Save(uid).IsSuccess(); + } + static_cast<void>(ProductReporter::getSomeBool()); + static_cast<void>(mNinPlayReport->GetCount()); + return mNinPlayReport->Save().IsSuccess(); +} + +void PlayReport::init(s32 num_entries, sead::Heap* heap) { + if (mHasNinPrepoReport) + return; + + auto* report = new (heap) nn::prepo::PlayReport; + const u32 buffer_size = nn::prepo::PlayReport::CalcBufferSize(num_entries); + mNinPlayReport = report; + if (buffer_size > 0 && mBuffer.tryAllocBuffer(buffer_size, heap)) { + mNinPlayReport->SetBuffer(mBuffer.getBufferPtr(), buffer_size); + mHasNinPrepoReport = true; + } +} + +PlayReport::~PlayReport() { + if (!mHasNinPrepoReport) + return; + + if (mNinPlayReport) { + delete mNinPlayReport; + mNinPlayReport = nullptr; + } + + if (mHasNinPrepoReport) + mBuffer.freeBuffer(); + + mHasNinPrepoReport = false; +} + +} // namespace ksys |
