CookiesModel.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * Copyright (c) 2022, the SerenityOS developers.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "CookiesModel.h"
  7. #include <AK/FuzzyMatch.h>
  8. namespace Browser {
  9. void CookiesModel::set_items(AK::Vector<Web::Cookie::Cookie> items)
  10. {
  11. begin_insert_rows({}, m_cookies.size(), m_cookies.size());
  12. m_cookies = move(items);
  13. end_insert_rows();
  14. did_update(DontInvalidateIndices);
  15. }
  16. void CookiesModel::clear_items()
  17. {
  18. begin_insert_rows({}, m_cookies.size(), m_cookies.size());
  19. m_cookies.clear();
  20. end_insert_rows();
  21. did_update(DontInvalidateIndices);
  22. }
  23. int CookiesModel::row_count(GUI::ModelIndex const& index) const
  24. {
  25. if (!index.is_valid())
  26. return m_cookies.size();
  27. return 0;
  28. }
  29. String CookiesModel::column_name(int column) const
  30. {
  31. switch (column) {
  32. case Column::Domain:
  33. return "Domain";
  34. case Column::Path:
  35. return "Path";
  36. case Column::Name:
  37. return "Name";
  38. case Column::Value:
  39. return "Value";
  40. case Column::ExpiryTime:
  41. return "Expiry time";
  42. case Column::__Count:
  43. return {};
  44. }
  45. return {};
  46. }
  47. GUI::ModelIndex CookiesModel::index(int row, int column, GUI::ModelIndex const&) const
  48. {
  49. if (static_cast<size_t>(row) < m_cookies.size())
  50. return create_index(row, column, &m_cookies.at(row));
  51. return {};
  52. }
  53. GUI::Variant CookiesModel::data(GUI::ModelIndex const& index, GUI::ModelRole role) const
  54. {
  55. if (role != GUI::ModelRole::Display)
  56. return {};
  57. auto const& cookie = m_cookies[index.row()];
  58. switch (index.column()) {
  59. case Column::Domain:
  60. return cookie.domain;
  61. case Column::Path:
  62. return cookie.path;
  63. case Column::Name:
  64. return cookie.name;
  65. case Column::Value:
  66. return cookie.value;
  67. case Column::ExpiryTime:
  68. return cookie.expiry_time.to_string();
  69. }
  70. VERIFY_NOT_REACHED();
  71. }
  72. TriState CookiesModel::data_matches(GUI::ModelIndex const& index, GUI::Variant const& term) const
  73. {
  74. auto needle = term.as_string();
  75. if (needle.is_empty())
  76. return TriState::True;
  77. auto const& cookie = m_cookies[index.row()];
  78. auto haystack = String::formatted("{} {} {} {}", cookie.domain, cookie.path, cookie.name, cookie.value);
  79. if (fuzzy_match(needle, haystack).score > 0)
  80. return TriState::True;
  81. return TriState::False;
  82. }
  83. Web::Cookie::Cookie const& CookiesModel::get_cookie(GUI::ModelIndex const& index) const
  84. {
  85. VERIFY(index.is_valid());
  86. return m_cookies[index.row()];
  87. }
  88. }