Persist title-specific profile content

This commit is contained in:
Unknown
2018-06-09 16:08:57 -07:00
committed by Jeremy517
parent 5f16e46282
commit 86443dd28a
5 changed files with 99 additions and 3 deletions

View File

@@ -25,7 +25,7 @@ class UserProfile {
public:
struct Setting {
enum class Type {
UNKNOWN = 0,
CONTENT = 0,
INT32 = 1,
INT64 = 2,
DOUBLE = 3,
@@ -48,8 +48,13 @@ class UserProfile {
Type type;
size_t size;
bool is_set;
uint32_t loaded_title_id;
Setting(uint32_t setting_id, Type type, size_t size, bool is_set)
: setting_id(setting_id), type(type), size(size), is_set(is_set) {}
: setting_id(setting_id),
type(type),
size(size),
is_set(is_set),
loaded_title_id(0) {}
virtual size_t extra_size() const { return 0; }
virtual size_t Append(uint8_t* user_data, uint8_t* buffer,
uint32_t buffer_ptr, size_t buffer_offset) {
@@ -57,6 +62,10 @@ class UserProfile {
static_cast<uint8_t>(type));
return buffer_offset;
}
virtual std::vector<uint8_t> Serialize() const {
return std::vector<uint8_t>();
}
virtual void Deserialize(std::vector<uint8_t>) {}
bool is_title_specific() const { return (setting_id & 0x3F00) == 0x3F00; }
protected:
@@ -167,6 +176,13 @@ class UserProfile {
}
return buffer_offset + length;
}
std::vector<uint8_t> Serialize() const override {
return std::vector<uint8_t>(value.data(), value.data() + value.size());
}
void Deserialize(std::vector<uint8_t> data) override {
value = data;
is_set = true;
}
};
struct DateTimeSetting : public Setting {
DateTimeSetting(uint32_t setting_id, int64_t value)
@@ -195,6 +211,9 @@ class UserProfile {
std::string name_;
std::vector<std::unique_ptr<Setting>> setting_list_;
std::unordered_map<uint32_t, Setting*> settings_;
void LoadSetting(UserProfile::Setting*);
void SaveSetting(UserProfile::Setting*);
};
} // namespace xam