Move muted/audible API to own ".audio" object
This commit is contained in:
parent
1c8d470bd7
commit
a1fcdbcfd1
@ -606,6 +606,33 @@ class AbstractElements:
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class AbstractAudio(QObject):
|
||||
|
||||
"""Handling of audio/muting for this tab."""
|
||||
|
||||
muted_changed = pyqtSignal(bool)
|
||||
recently_audible_changed = pyqtSignal(bool)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self._widget = None
|
||||
|
||||
def set_muted(self, muted: bool):
|
||||
"""Set this tab as muted or not."""
|
||||
raise NotImplementedError
|
||||
|
||||
def is_muted(self):
|
||||
"""Whether this tab is muted."""
|
||||
raise NotImplementedError
|
||||
|
||||
def toggle_muted(self):
|
||||
self.set_muted(not self.is_muted())
|
||||
|
||||
def is_recently_audible(self):
|
||||
"""Whether this tab has had audio playing recently."""
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class AbstractTab(QWidget):
|
||||
|
||||
"""A wrapper over the given widget to hide its API and expose another one.
|
||||
@ -702,6 +729,7 @@ class AbstractTab(QWidget):
|
||||
self.printing._widget = widget
|
||||
self.action._widget = widget
|
||||
self.elements._widget = widget
|
||||
self.audio._widget = widget
|
||||
self.settings._settings = widget.settings()
|
||||
|
||||
self._install_event_filter()
|
||||
@ -932,15 +960,3 @@ class AbstractTab(QWidget):
|
||||
|
||||
def is_deleted(self):
|
||||
return sip.isdeleted(self._widget)
|
||||
|
||||
def set_muted(self, muted: bool):
|
||||
"""Set this tab as muted or not."""
|
||||
raise NotImplementedError
|
||||
|
||||
def is_muted(self):
|
||||
"""Whether this tab is muted."""
|
||||
raise NotImplementedError
|
||||
|
||||
def is_recently_audible(self):
|
||||
"""Whether this tab has had audio playing recently."""
|
||||
raise NotImplementedError
|
||||
|
@ -2238,6 +2238,6 @@ class CommandDispatcher:
|
||||
if tab is None:
|
||||
return
|
||||
try:
|
||||
tab.set_muted(not tab.is_muted())
|
||||
tab.audio.toggle_muted()
|
||||
except browsertab.WebTabError as e:
|
||||
raise cmdexc.CommandError(e)
|
||||
|
@ -617,6 +617,26 @@ class WebEngineElements(browsertab.AbstractElements):
|
||||
self._tab.run_js_async(js_code, js_cb)
|
||||
|
||||
|
||||
class WebEngineAudio(browsertab.AbstractAudio):
|
||||
|
||||
def _connect_signals(self):
|
||||
page = self._widget.page()
|
||||
page.audioMutedChanged.connect(self.muted_changed)
|
||||
page.recentlyAudibleChanged.connect(self.recently_audible_changed)
|
||||
|
||||
def set_muted(self, muted: bool):
|
||||
page = self._widget.page()
|
||||
page.setAudioMuted(muted)
|
||||
|
||||
def is_muted(self):
|
||||
page = self._widget.page()
|
||||
return page.isAudioMuted()
|
||||
|
||||
def is_recently_audible(self):
|
||||
page = self._widget.page()
|
||||
return page.recentlyAudible()
|
||||
|
||||
|
||||
class WebEngineTab(browsertab.AbstractTab):
|
||||
|
||||
"""A QtWebEngine tab in the browser.
|
||||
@ -643,6 +663,7 @@ class WebEngineTab(browsertab.AbstractTab):
|
||||
self.printing = WebEnginePrinting()
|
||||
self.elements = WebEngineElements(tab=self)
|
||||
self.action = WebEngineAction(tab=self)
|
||||
self.audio = WebEngineAudio()
|
||||
# We're assigning settings in _set_widget
|
||||
self.settings = webenginesettings.WebEngineSettings(settings=None)
|
||||
self._set_widget(widget)
|
||||
@ -1141,18 +1162,7 @@ class WebEngineTab(browsertab.AbstractTab):
|
||||
page.loadFinished.connect(self._on_load_finished)
|
||||
|
||||
self.predicted_navigation.connect(self._on_predicted_navigation)
|
||||
self.audio._connect_signals() # pylint: disable=protected-access
|
||||
|
||||
def event_target(self):
|
||||
return self._widget.render_widget()
|
||||
|
||||
def set_muted(self, muted: bool):
|
||||
page = self._widget.page()
|
||||
page.setAudioMuted(muted)
|
||||
|
||||
def is_muted(self):
|
||||
page = self._widget.page()
|
||||
return page.isAudioMuted()
|
||||
|
||||
def is_recently_audible(self):
|
||||
page = self._widget.page()
|
||||
return page.recentlyAudible()
|
||||
|
@ -651,6 +651,20 @@ class WebKitElements(browsertab.AbstractElements):
|
||||
callback(elem)
|
||||
|
||||
|
||||
class WebKitAudio(browsertab.AbstractAudio):
|
||||
|
||||
"""Dummy handling of audio status for QtWebKit."""
|
||||
|
||||
def set_muted(self, muted: bool):
|
||||
raise browsertab.WebTabError('Muting is not supported on QtWebKit!')
|
||||
|
||||
def is_muted(self):
|
||||
return False
|
||||
|
||||
def is_recently_audible(self):
|
||||
return False
|
||||
|
||||
|
||||
class WebKitTab(browsertab.AbstractTab):
|
||||
|
||||
"""A QtWebKit tab in the browser."""
|
||||
@ -671,6 +685,7 @@ class WebKitTab(browsertab.AbstractTab):
|
||||
self.printing = WebKitPrinting()
|
||||
self.elements = WebKitElements(tab=self)
|
||||
self.action = WebKitAction(tab=self)
|
||||
self.audio = WebKitAudio()
|
||||
# We're assigning settings in _set_widget
|
||||
self.settings = webkitsettings.WebKitSettings(settings=None)
|
||||
self._set_widget(widget)
|
||||
@ -839,14 +854,3 @@ class WebKitTab(browsertab.AbstractTab):
|
||||
|
||||
def event_target(self):
|
||||
return self._widget
|
||||
|
||||
def set_muted(self, muted: bool):
|
||||
raise browsertab.WebTabError('Muting is not supported on QtWebKit!')
|
||||
|
||||
def is_muted(self):
|
||||
# Dummy value for things that read muted status
|
||||
return False
|
||||
|
||||
def is_recently_audible(self):
|
||||
# Dummy value for things that read audible status
|
||||
return False
|
||||
|
@ -238,9 +238,9 @@ class TabbedBrowser(QWidget):
|
||||
functools.partial(self.on_window_close_requested, tab))
|
||||
tab.renderer_process_terminated.connect(
|
||||
functools.partial(self._on_renderer_process_terminated, tab))
|
||||
tab.audio_muted_changed.connect(
|
||||
tab.audio.muted_changed.connect(
|
||||
functools.partial(self._on_audio_changed, tab))
|
||||
tab.recently_audible_changed.connect(
|
||||
tab.audio.recently_audible_changed.connect(
|
||||
functools.partial(self._on_audio_changed, tab))
|
||||
tab.new_tab_requested.connect(self.tabopen)
|
||||
if not self.private:
|
||||
|
@ -174,9 +174,9 @@ class TabWidget(QTabWidget):
|
||||
fields['backend'] = objects.backend.name
|
||||
fields['private'] = ' [Private Mode] ' if tab.private else ''
|
||||
try:
|
||||
if tab.is_muted():
|
||||
if tab.audio.is_muted():
|
||||
fields['audio'] = '[M] '
|
||||
elif tab.is_recently_audible():
|
||||
elif tab.audio.is_recently_audible():
|
||||
fields['audio'] = '[A] '
|
||||
else:
|
||||
fields['audio'] = ''
|
||||
|
Loading…
Reference in New Issue
Block a user