| 97 | } |
| 98 | |
| 99 | class BookmarksSearchCallback |
| 100 | { |
| 101 | public: |
| 102 | using OnResults = BookmarksSearchParams::OnResults; |
| 103 | |
| 104 | BookmarksSearchCallback(SearchAPI::Delegate & delegate, OnResults onResults) |
| 105 | : m_delegate(delegate) |
| 106 | , m_onResults(std::move(onResults)) |
| 107 | {} |
| 108 | |
| 109 | void operator()(Results const & results) |
| 110 | { |
| 111 | if (results.IsEndMarker()) |
| 112 | { |
| 113 | if (results.IsEndedNormal()) |
| 114 | { |
| 115 | m_status = BookmarksSearchParams::Status::Completed; |
| 116 | } |
| 117 | else |
| 118 | { |
| 119 | ASSERT(results.IsEndedCancelled(), ()); |
| 120 | m_status = BookmarksSearchParams::Status::Cancelled; |
| 121 | } |
| 122 | } |
| 123 | else |
| 124 | { |
| 125 | ASSERT_EQUAL(m_status, BookmarksSearchParams::Status::InProgress, ()); |
| 126 | } |
| 127 | |
| 128 | auto const & rs = results.GetBookmarksResults(); |
| 129 | ASSERT_LESS_OR_EQUAL(m_results.size(), rs.size(), ()); |
| 130 | |
| 131 | for (size_t i = m_results.size(); i < rs.size(); ++i) |
| 132 | m_results.emplace_back(SearchBookmarkIdToKmlMarkId(rs[i].m_id)); |
| 133 | |
| 134 | m_delegate.RunUITask([onResults = m_onResults, results = m_results, status = m_status]() mutable |
| 135 | { onResults(std::move(results), status); }); |
| 136 | } |
| 137 | |
| 138 | private: |
| 139 | BookmarksSearchParams::Results m_results; |
| 140 | BookmarksSearchParams::Status m_status = BookmarksSearchParams::Status::InProgress; |
| 141 | |
| 142 | SearchAPI::Delegate & m_delegate; |
| 143 | OnResults m_onResults; |
| 144 | }; |
| 145 | } // namespace |
| 146 | |
| 147 | SearchAPI::SearchAPI(DataSource & dataSource, storage::Storage const & storage, |