* Load favourites of a picker from config. * @param ini IniFile to load to. * @param callbacks Picker to load. */
| 63 | * @param callbacks Picker to load. |
| 64 | */ |
| 65 | static void PickerLoadConfig(const IniFile &ini, PickerCallbacks &callbacks) |
| 66 | { |
| 67 | const IniGroup *group = ini.GetGroup(callbacks.ini_group); |
| 68 | if (group == nullptr) return; |
| 69 | |
| 70 | callbacks.saved.clear(); |
| 71 | for (const IniItem &item : group->items) { |
| 72 | std::array<uint8_t, 4> grfid_buf; |
| 73 | |
| 74 | std::string_view str = item.name; |
| 75 | |
| 76 | /* Try reading "<grfid>|<localid>" */ |
| 77 | auto grfid_pos = str.find('|'); |
| 78 | if (grfid_pos == std::string_view::npos) continue; |
| 79 | |
| 80 | std::string_view grfid_str = str.substr(0, grfid_pos); |
| 81 | if (!ConvertHexToBytes(grfid_str, grfid_buf)) continue; |
| 82 | |
| 83 | str = str.substr(grfid_pos + 1); |
| 84 | uint32_t grfid = grfid_buf[0] | (grfid_buf[1] << 8) | (grfid_buf[2] << 16) | (grfid_buf[3] << 24); |
| 85 | uint16_t localid; |
| 86 | auto [ptr, err] = std::from_chars(str.data(), str.data() + str.size(), localid); |
| 87 | |
| 88 | if (err == std::errc{} && ptr == str.data() + str.size()) { |
| 89 | callbacks.saved.insert({grfid, localid, 0, 0}); |
| 90 | } |
| 91 | } |
| 92 | } |
| 93 | |
| 94 | /** |
| 95 | * Save favourites of a picker to config. |
no test coverage detected