Explorar o código

frontend_common: Add option to read unsigned integers

t895 %!s(int64=2) %!d(string=hai) anos
pai
achega
d8f380961e

+ 28 - 1
src/frontend_common/config.cpp

@@ -284,7 +284,7 @@ void Config::ReadDisabledAddOnValues() {
     const int size = BeginArray(std::string(""));
     const int size = BeginArray(std::string(""));
     for (int i = 0; i < size; ++i) {
     for (int i = 0; i < size; ++i) {
         SetArrayIndex(i);
         SetArrayIndex(i);
-        const auto title_id = ReadIntegerSetting(std::string("title_id"), 0);
+        const auto title_id = ReadUnsignedIntegerSetting(std::string("title_id"), 0);
         std::vector<std::string> out;
         std::vector<std::string> out;
         const int d_size = BeginArray("disabled");
         const int d_size = BeginArray("disabled");
         for (int j = 0; j < d_size; ++j) {
         for (int j = 0; j < d_size; ++j) {
@@ -664,6 +664,33 @@ s64 Config::ReadIntegerSetting(const std::string& key, const std::optional<s64>
     return result;
     return result;
 }
 }
 
 
+u64 Config::ReadUnsignedIntegerSetting(const std::string& key,
+                                       const std::optional<u64> default_value) {
+    std::string full_key = GetFullKey(key, false);
+    if (!default_value.has_value()) {
+        try {
+            return std::stoull(
+                std::string(config->GetValue(GetSection().c_str(), full_key.c_str(), "0")));
+        } catch (...) {
+            return 0;
+        }
+    }
+
+    u64 result = 0;
+    if (config->GetBoolValue(GetSection().c_str(),
+                             std::string(full_key).append("\\default").c_str(), true)) {
+        result = default_value.value();
+    } else {
+        try {
+            result = std::stoull(std::string(config->GetValue(
+                GetSection().c_str(), full_key.c_str(), ToString(default_value.value()).c_str())));
+        } catch (...) {
+            result = default_value.value();
+        }
+    }
+    return result;
+}
+
 double Config::ReadDoubleSetting(const std::string& key,
 double Config::ReadDoubleSetting(const std::string& key,
                                  const std::optional<double> default_value) {
                                  const std::optional<double> default_value) {
     std::string full_key = GetFullKey(key, false);
     std::string full_key = GetFullKey(key, false);

+ 4 - 0
src/frontend_common/config.h

@@ -137,6 +137,8 @@ protected:
     bool ReadBooleanSetting(const std::string& key,
     bool ReadBooleanSetting(const std::string& key,
                             std::optional<bool> default_value = std::nullopt);
                             std::optional<bool> default_value = std::nullopt);
     s64 ReadIntegerSetting(const std::string& key, std::optional<s64> default_value = std::nullopt);
     s64 ReadIntegerSetting(const std::string& key, std::optional<s64> default_value = std::nullopt);
+    u64 ReadUnsignedIntegerSetting(const std::string& key,
+                                   std::optional<u64> default_value = std::nullopt);
     double ReadDoubleSetting(const std::string& key,
     double ReadDoubleSetting(const std::string& key,
                              std::optional<double> default_value = std::nullopt);
                              std::optional<double> default_value = std::nullopt);
     std::string ReadStringSetting(const std::string& key,
     std::string ReadStringSetting(const std::string& key,
@@ -170,6 +172,8 @@ protected:
             return value_.has_value() ? std::to_string(*value_) : "none";
             return value_.has_value() ? std::to_string(*value_) : "none";
         } else if constexpr (std::is_same_v<T, bool>) {
         } else if constexpr (std::is_same_v<T, bool>) {
             return value_ ? "true" : "false";
             return value_ ? "true" : "false";
+        } else if constexpr (std::is_same_v<T, u64>) {
+            return std::to_string(static_cast<u64>(value_));
         } else {
         } else {
             return std::to_string(static_cast<s64>(value_));
             return std::to_string(static_cast<s64>(value_));
         }
         }

+ 2 - 1
src/yuzu/configuration/qt_config.cpp

@@ -283,7 +283,8 @@ void QtConfig::ReadUIGamelistValues() {
     const int favorites_size = BeginArray("favorites");
     const int favorites_size = BeginArray("favorites");
     for (int i = 0; i < favorites_size; i++) {
     for (int i = 0; i < favorites_size; i++) {
         SetArrayIndex(i);
         SetArrayIndex(i);
-        UISettings::values.favorited_ids.append(ReadIntegerSetting(std::string("program_id")));
+        UISettings::values.favorited_ids.append(
+            ReadUnsignedIntegerSetting(std::string("program_id")));
     }
     }
     EndArray();
     EndArray();