| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2020, Andreas Kling <kling@serenityos.org> | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2021-04-22 01:24:48 -07:00
										 |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "History.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Browser { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void History::dump() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-10-04 17:09:01 +02:00
										 |  |  |     dbgln("Dump {} items(s)", m_items.size()); | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  |     int i = 0; | 
					
						
							|  |  |  |     for (auto& item : m_items) { | 
					
						
							| 
									
										
										
										
											2021-05-26 20:19:35 +02:00
										 |  |  |         dbgln("[{}] {} '{}' {}", i, item.url, item.title, m_current == i ? '*' : ' '); | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  |         ++i; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-01 20:58:27 +03:00
										 |  |  | void History::push(const URL& url, String const& title) | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2021-05-26 20:19:35 +02:00
										 |  |  |     if (!m_items.is_empty() && m_items[m_current].url == url) | 
					
						
							| 
									
										
										
										
											2021-05-18 23:28:41 +02:00
										 |  |  |         return; | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  |     m_items.shrink(m_current + 1); | 
					
						
							| 
									
										
										
										
											2021-05-26 20:19:35 +02:00
										 |  |  |     m_items.append(URLTitlePair { | 
					
						
							|  |  |  |         .url = url, | 
					
						
							|  |  |  |         .title = title, | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  |     m_current++; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-24 01:17:15 +01:00
										 |  |  | void History::replace_current(const URL& url, String const& title) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (m_current == -1) | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_current--; | 
					
						
							|  |  |  |     push(url, title); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-26 20:19:35 +02:00
										 |  |  | History::URLTitlePair History::current() const | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  | { | 
					
						
							|  |  |  |     if (m_current == -1) | 
					
						
							|  |  |  |         return {}; | 
					
						
							|  |  |  |     return m_items[m_current]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  | void History::go_back(int steps) | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  |     VERIFY(can_go_back(steps)); | 
					
						
							|  |  |  |     m_current -= steps; | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  | void History::go_forward(int steps) | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  |     VERIFY(can_go_forward(steps)); | 
					
						
							|  |  |  |     m_current += steps; | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void History::clear() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_items = {}; | 
					
						
							|  |  |  |     m_current = -1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-01 20:58:27 +03:00
										 |  |  | void History::update_title(String const& title) | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2022-09-21 13:04:59 +02:00
										 |  |  |     if (m_current == -1) | 
					
						
							|  |  |  |         return; | 
					
						
							| 
									
										
										
										
											2021-05-26 20:19:35 +02:00
										 |  |  |     m_items[m_current].title = title; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-01 20:58:27 +03:00
										 |  |  | Vector<StringView> const History::get_back_title_history() | 
					
						
							| 
									
										
										
										
											2021-05-26 20:19:35 +02:00
										 |  |  | { | 
					
						
							|  |  |  |     Vector<StringView> back_title_history; | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  |     for (int i = m_current - 1; i >= 0; i--) { | 
					
						
							| 
									
										
										
										
											2021-05-26 20:19:35 +02:00
										 |  |  |         back_title_history.append(m_items[i].title); | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-05-26 20:19:35 +02:00
										 |  |  |     return back_title_history; | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-01 20:58:27 +03:00
										 |  |  | Vector<StringView> const History::get_forward_title_history() | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2021-05-26 20:19:35 +02:00
										 |  |  |     Vector<StringView> forward_title_history; | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  |     for (int i = m_current + 1; i < static_cast<int>(m_items.size()); i++) { | 
					
						
							| 
									
										
										
										
											2021-05-26 20:19:35 +02:00
										 |  |  |         forward_title_history.append(m_items[i].title); | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-05-26 20:19:35 +02:00
										 |  |  |     return forward_title_history; | 
					
						
							| 
									
										
										
										
											2021-05-24 00:58:00 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-07 15:04:05 +02:00
										 |  |  | } |