LocalStorageModel.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * Copyright (c) 2022, Valtteri Koskivuori <vkoskiv@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "LocalStorageModel.h"
  7. #include <AK/FuzzyMatch.h>
  8. namespace Browser {
  9. void LocalStorageModel::set_items(OrderedHashMap<String, String> map)
  10. {
  11. begin_insert_rows({}, m_local_storage_entries.size(), m_local_storage_entries.size());
  12. m_local_storage_entries = map;
  13. end_insert_rows();
  14. did_update(DontInvalidateIndices);
  15. }
  16. void LocalStorageModel::clear_items()
  17. {
  18. begin_insert_rows({}, m_local_storage_entries.size(), m_local_storage_entries.size());
  19. m_local_storage_entries.clear();
  20. end_insert_rows();
  21. did_update(DontInvalidateIndices);
  22. }
  23. int LocalStorageModel::row_count(GUI::ModelIndex const& index) const
  24. {
  25. if (!index.is_valid())
  26. return m_local_storage_entries.size();
  27. return 0;
  28. }
  29. String LocalStorageModel::column_name(int column) const
  30. {
  31. switch (column) {
  32. case Column::Key:
  33. return "Key";
  34. case Column::Value:
  35. return "Value";
  36. case Column::__Count:
  37. return {};
  38. }
  39. return {};
  40. }
  41. GUI::ModelIndex LocalStorageModel::index(int row, int column, GUI::ModelIndex const&) const
  42. {
  43. if (static_cast<size_t>(row) < m_local_storage_entries.size())
  44. return create_index(row, column, NULL);
  45. return {};
  46. }
  47. GUI::Variant LocalStorageModel::data(GUI::ModelIndex const& index, GUI::ModelRole role) const
  48. {
  49. if (role != GUI::ModelRole::Display)
  50. return {};
  51. auto const& keys = m_local_storage_entries.keys();
  52. auto const& local_storage_key = keys[index.row()];
  53. auto const& local_storage_value = m_local_storage_entries.get(local_storage_key).value_or({});
  54. switch (index.column()) {
  55. case Column::Key:
  56. return local_storage_key;
  57. case Column::Value:
  58. return local_storage_value;
  59. }
  60. VERIFY_NOT_REACHED();
  61. }
  62. TriState LocalStorageModel::data_matches(GUI::ModelIndex const& index, GUI::Variant const& term) const
  63. {
  64. auto needle = term.as_string();
  65. if (needle.is_empty())
  66. return TriState::True;
  67. auto const& keys = m_local_storage_entries.keys();
  68. auto const& local_storage_key = keys[index.row()];
  69. auto const& local_storage_value = m_local_storage_entries.get(local_storage_key).value_or({});
  70. auto haystack = String::formatted("{} {}", local_storage_key, local_storage_value);
  71. if (fuzzy_match(needle, haystack).score > 0)
  72. return TriState::True;
  73. return TriState::False;
  74. }
  75. }