summaryrefslogtreecommitdiff
path: root/src/KingSystem/System/PlayReport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/KingSystem/System/PlayReport.cpp')
-rw-r--r--src/KingSystem/System/PlayReport.cpp77
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