CookiesModel.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. DeprecatedString 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::SameSite:
  43. return "SameSite";
  44. case Column::__Count:
  45. return {};
  46. }
  47. return {};
  48. }
  49. GUI::ModelIndex CookiesModel::index(int row, int column, GUI::ModelIndex const&) const
  50. {
  51. if (static_cast<size_t>(row) < m_cookies.size())
  52. return create_index(row, column, &m_cookies.at(row));
  53. return {};
  54. }
  55. GUI::Variant CookiesModel::data(GUI::ModelIndex const& index, GUI::ModelRole role) const
  56. {
  57. if (role != GUI::ModelRole::Display)
  58. return {};
  59. auto const& cookie = m_cookies[index.row()];
  60. switch (index.column()) {
  61. case Column::Domain:
  62. return cookie.domain;
  63. case Column::Path:
  64. return cookie.path;
  65. case Column::Name:
  66. return cookie.name;
  67. case Column::Value:
  68. return cookie.value;
  69. case Column::ExpiryTime:
  70. return cookie.expiry_time_to_string();
  71. case Column::SameSite:
  72. return Web::Cookie::same_site_to_string(cookie.same_site);
  73. }
  74. VERIFY_NOT_REACHED();
  75. }
  76. TriState CookiesModel::data_matches(GUI::ModelIndex const& index, GUI::Variant const& term) const
  77. {
  78. auto needle = term.as_string();
  79. if (needle.is_empty())
  80. return TriState::True;
  81. auto const& cookie = m_cookies[index.row()];
  82. auto haystack = DeprecatedString::formatted("{} {} {} {}", cookie.domain, cookie.path, cookie.name, cookie.value);
  83. if (fuzzy_match(needle, haystack).score > 0)
  84. return TriState::True;
  85. return TriState::False;
  86. }
  87. Web::Cookie::Cookie CookiesModel::take_cookie(GUI::ModelIndex const& index)
  88. {
  89. VERIFY(index.is_valid());
  90. auto cookie = m_cookies.take(index.row());
  91. did_update(InvalidateAllIndices);
  92. return cookie;
  93. }
  94. AK::Vector<Web::Cookie::Cookie> CookiesModel::take_all_cookies()
  95. {
  96. auto cookies = move(m_cookies);
  97. did_update(InvalidateAllIndices);
  98. return cookies;
  99. }
  100. }