Move history (de)serializing to a private_api object
This commit is contained in:
parent
27ee3280b2
commit
5bf0dffa95
@ -592,6 +592,27 @@ class AbstractScroller(QObject):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class AbstractHistoryPrivate:
|
||||
|
||||
"""Private API related to the history."""
|
||||
|
||||
def __init__(self, tab: 'AbstractTab'):
|
||||
self._tab = tab
|
||||
self._history = None
|
||||
|
||||
def serialize(self) -> bytes:
|
||||
"""Serialize into an opaque format understood by self.deserialize."""
|
||||
raise NotImplementedError
|
||||
|
||||
def deserialize(self, data: bytes) -> None:
|
||||
"""Deserialize from a format produced by self.serialize."""
|
||||
raise NotImplementedError
|
||||
|
||||
def load_items(self, items: typing.Sequence) -> None:
|
||||
"""Deserialize from a list of WebHistoryItems."""
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class AbstractHistory:
|
||||
|
||||
"""The history attribute of a AbstractTab."""
|
||||
@ -599,6 +620,7 @@ class AbstractHistory:
|
||||
def __init__(self, tab: 'AbstractTab') -> None:
|
||||
self._tab = tab
|
||||
self._history = None
|
||||
self.private_api = AbstractHistoryPrivate(tab)
|
||||
|
||||
def __len__(self) -> int:
|
||||
raise NotImplementedError
|
||||
@ -646,18 +668,6 @@ class AbstractHistory:
|
||||
def _go_to_item(self, item: typing.Any) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
def serialize(self) -> bytes:
|
||||
"""Serialize into an opaque format understood by self.deserialize."""
|
||||
raise NotImplementedError
|
||||
|
||||
def deserialize(self, data: bytes) -> None:
|
||||
"""Deserialize from a format produced by self.serialize."""
|
||||
raise NotImplementedError
|
||||
|
||||
def load_items(self, items: typing.Sequence) -> None:
|
||||
"""Deserialize from a list of WebHistoryItems."""
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class AbstractElements:
|
||||
|
||||
@ -885,6 +895,7 @@ class AbstractTab(QWidget):
|
||||
self._widget = widget
|
||||
self._layout.wrap(self, widget)
|
||||
self.history._history = widget.history()
|
||||
self.history.private_api._history = widget.history()
|
||||
self.scroller._init_widget(widget)
|
||||
self.caret._widget = widget
|
||||
self.zoom._widget = widget
|
||||
|
@ -463,7 +463,7 @@ class CommandDispatcher:
|
||||
cur_title = self._tabbed_browser.widget.page_title(
|
||||
self._current_index())
|
||||
try:
|
||||
history = curtab.history.serialize()
|
||||
history = curtab.history.private_api.serialize()
|
||||
except browsertab.WebTabError as e:
|
||||
raise cmdutils.CommandError(e)
|
||||
|
||||
@ -486,7 +486,7 @@ class CommandDispatcher:
|
||||
new_tabbed_browser.widget.window().setWindowIcon(curtab.icon())
|
||||
|
||||
newtab.data.keep_icon = True
|
||||
newtab.history.deserialize(history)
|
||||
newtab.history.private_api.deserialize(history)
|
||||
newtab.zoom.set_factor(curtab.zoom.factor())
|
||||
new_tabbed_browser.widget.set_tab_pinned(newtab, curtab.data.pinned)
|
||||
return newtab
|
||||
|
@ -518,31 +518,7 @@ class WebEngineScroller(browsertab.AbstractScroller):
|
||||
return self._at_bottom
|
||||
|
||||
|
||||
class WebEngineHistory(browsertab.AbstractHistory):
|
||||
|
||||
"""QtWebEngine implementations related to page history."""
|
||||
|
||||
def __len__(self):
|
||||
return len(self._history)
|
||||
|
||||
def __iter__(self):
|
||||
return iter(self._history.items())
|
||||
|
||||
def current_idx(self):
|
||||
return self._history.currentItemIndex()
|
||||
|
||||
def can_go_back(self):
|
||||
return self._history.canGoBack()
|
||||
|
||||
def can_go_forward(self):
|
||||
return self._history.canGoForward()
|
||||
|
||||
def _item_at(self, i):
|
||||
return self._history.itemAt(i)
|
||||
|
||||
def _go_to_item(self, item):
|
||||
self._tab.predicted_navigation.emit(item.url())
|
||||
self._history.goToItem(item)
|
||||
class WebEngineHistoryPrivate(browsertab.AbstractHistoryPrivate):
|
||||
|
||||
def serialize(self):
|
||||
if not qtutils.version_check('5.9', compiled=False):
|
||||
@ -579,6 +555,37 @@ class WebEngineHistory(browsertab.AbstractHistory):
|
||||
self._tab.load_finished.connect(_on_load_finished)
|
||||
|
||||
|
||||
class WebEngineHistory(browsertab.AbstractHistory):
|
||||
|
||||
"""QtWebEngine implementations related to page history."""
|
||||
|
||||
def __init__(self, tab):
|
||||
super().__init__(tab)
|
||||
self.private_api = WebEngineHistoryPrivate(tab)
|
||||
|
||||
def __len__(self):
|
||||
return len(self._history)
|
||||
|
||||
def __iter__(self):
|
||||
return iter(self._history.items())
|
||||
|
||||
def current_idx(self):
|
||||
return self._history.currentItemIndex()
|
||||
|
||||
def can_go_back(self):
|
||||
return self._history.canGoBack()
|
||||
|
||||
def can_go_forward(self):
|
||||
return self._history.canGoForward()
|
||||
|
||||
def _item_at(self, i):
|
||||
return self._history.itemAt(i)
|
||||
|
||||
def _go_to_item(self, item):
|
||||
self._tab.predicted_navigation.emit(item.url())
|
||||
self._history.goToItem(item)
|
||||
|
||||
|
||||
class WebEngineZoom(browsertab.AbstractZoom):
|
||||
|
||||
"""QtWebEngine implementations related to zooming."""
|
||||
|
@ -509,31 +509,7 @@ class WebKitScroller(browsertab.AbstractScroller):
|
||||
return self.pos_px().y() >= frame.scrollBarMaximum(Qt.Vertical)
|
||||
|
||||
|
||||
class WebKitHistory(browsertab.AbstractHistory):
|
||||
|
||||
"""QtWebKit implementations related to page history."""
|
||||
|
||||
def __len__(self):
|
||||
return len(self._history)
|
||||
|
||||
def __iter__(self):
|
||||
return iter(self._history.items())
|
||||
|
||||
def current_idx(self):
|
||||
return self._history.currentItemIndex()
|
||||
|
||||
def can_go_back(self):
|
||||
return self._history.canGoBack()
|
||||
|
||||
def can_go_forward(self):
|
||||
return self._history.canGoForward()
|
||||
|
||||
def _item_at(self, i):
|
||||
return self._history.itemAt(i)
|
||||
|
||||
def _go_to_item(self, item):
|
||||
self._tab.predicted_navigation.emit(item.url())
|
||||
self._history.goToItem(item)
|
||||
class WebKitHistoryPrivate(browsertab.AbstractHistoryPrivate):
|
||||
|
||||
def serialize(self):
|
||||
return qtutils.serialize(self._history)
|
||||
@ -559,6 +535,37 @@ class WebKitHistory(browsertab.AbstractHistory):
|
||||
self._tab.scroller.to_point, cur_data['scroll-pos']))
|
||||
|
||||
|
||||
class WebKitHistory(browsertab.AbstractHistory):
|
||||
|
||||
"""QtWebKit implementations related to page history."""
|
||||
|
||||
def __init__(self, tab):
|
||||
super().__init__(tab)
|
||||
self.private_api = WebKitHistoryPrivate(tab)
|
||||
|
||||
def __len__(self):
|
||||
return len(self._history)
|
||||
|
||||
def __iter__(self):
|
||||
return iter(self._history.items())
|
||||
|
||||
def current_idx(self):
|
||||
return self._history.currentItemIndex()
|
||||
|
||||
def can_go_back(self):
|
||||
return self._history.canGoBack()
|
||||
|
||||
def can_go_forward(self):
|
||||
return self._history.canGoForward()
|
||||
|
||||
def _item_at(self, i):
|
||||
return self._history.itemAt(i)
|
||||
|
||||
def _go_to_item(self, item):
|
||||
self._tab.predicted_navigation.emit(item.url())
|
||||
self._history.goToItem(item)
|
||||
|
||||
|
||||
class WebKitElements(browsertab.AbstractElements):
|
||||
|
||||
"""QtWebKit implemementations related to elements on the page."""
|
||||
|
@ -345,7 +345,7 @@ class TabbedBrowser(QWidget):
|
||||
urlutils.invalid_url_error(tab.url(), "saving tab")
|
||||
elif add_undo:
|
||||
try:
|
||||
history_data = tab.history.serialize()
|
||||
history_data = tab.history.private_api.serialize()
|
||||
except browsertab.WebTabError:
|
||||
pass # special URL
|
||||
else:
|
||||
@ -391,7 +391,7 @@ class TabbedBrowser(QWidget):
|
||||
else:
|
||||
newtab = self.tabopen(background=False, idx=entry.index)
|
||||
|
||||
newtab.history.deserialize(entry.history)
|
||||
newtab.history.private_api.deserialize(entry.history)
|
||||
self.widget.set_tab_pinned(newtab, entry.pinned)
|
||||
|
||||
@pyqtSlot('QUrl', bool)
|
||||
|
@ -401,7 +401,7 @@ class SessionManager(QObject):
|
||||
new_tab.title_changed.emit(histentry['title'])
|
||||
|
||||
try:
|
||||
new_tab.history.load_items(entries)
|
||||
new_tab.history.private_api.load_items(entries)
|
||||
except ValueError as e:
|
||||
raise SessionError(e)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user