summaryrefslogtreecommitdiff
path: root/qutebrowser/utils/message.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/utils/message.py')
-rw-r--r--qutebrowser/utils/message.py51
1 files changed, 38 insertions, 13 deletions
diff --git a/qutebrowser/utils/message.py b/qutebrowser/utils/message.py
index c490aa4e8..48dcc9945 100644
--- a/qutebrowser/utils/message.py
+++ b/qutebrowser/utils/message.py
@@ -23,14 +23,23 @@
"""Message singleton so we don't have to define unneeded signals."""
+import dataclasses
import traceback
-from typing import Any, Callable, Iterable, List, Tuple, Union, Optional
+from typing import Any, Callable, Iterable, List, Union, Optional
from PyQt5.QtCore import pyqtSignal, pyqtBoundSignal, QObject
from qutebrowser.utils import usertypes, log
+@dataclasses.dataclass
+class MessageInfo:
+
+ level: usertypes.MessageLevel
+ text: str
+ replace: Optional[str] = None
+
+
def _log_stack(typ: str, stack: str) -> None:
"""Log the given message stacktrace.
@@ -58,7 +67,11 @@ def error(message: str, *, stack: str = None, replace: str = None) -> None:
typ = 'error (from exception)'
_log_stack(typ, stack)
log.message.error(message)
- global_bridge.show(usertypes.MessageLevel.error, message, replace)
+ global_bridge.show(
+ level=usertypes.MessageLevel.error,
+ text=message,
+ replace=replace,
+ )
def warning(message: str, *, replace: str = None) -> None:
@@ -70,7 +83,11 @@ def warning(message: str, *, replace: str = None) -> None:
"""
_log_stack('warning', ''.join(traceback.format_stack()))
log.message.warning(message)
- global_bridge.show(usertypes.MessageLevel.warning, message, replace)
+ global_bridge.show(
+ level=usertypes.MessageLevel.warning,
+ text=message,
+ replace=replace,
+ )
def info(message: str, *, replace: str = None) -> None:
@@ -81,7 +98,11 @@ def info(message: str, *, replace: str = None) -> None:
replace: Replace existing messages which are still being shown.
"""
log.message.info(message)
- global_bridge.show(usertypes.MessageLevel.info, message, replace)
+ global_bridge.show(
+ level=usertypes.MessageLevel.info,
+ text=message,
+ replace=replace,
+ )
def _build_question(title: str,
@@ -210,7 +231,7 @@ class GlobalMessageBridge(QObject):
mode_left: Emitted when a keymode was left in any window.
"""
- show_message = pyqtSignal(usertypes.MessageLevel, str, str)
+ show_message = pyqtSignal(MessageInfo)
prompt_done = pyqtSignal(usertypes.KeyMode)
ask_question = pyqtSignal(usertypes.Question, bool)
mode_left = pyqtSignal(usertypes.KeyMode)
@@ -219,7 +240,7 @@ class GlobalMessageBridge(QObject):
def __init__(self, parent: QObject = None) -> None:
super().__init__(parent)
self._connected = False
- self._cache: List[Tuple[usertypes.MessageLevel, str, Optional[str]]] = []
+ self._cache: List[MessageInfo] = []
def ask(self, question: usertypes.Question,
blocking: bool, *,
@@ -237,14 +258,18 @@ class GlobalMessageBridge(QObject):
"""
self.ask_question.emit(question, blocking)
- def show(self, level: usertypes.MessageLevel,
- text: str,
- replace: str = None) -> None:
+ def show(
+ self,
+ level: usertypes.MessageLevel,
+ text: str,
+ replace: str = None,
+ ) -> None:
"""Show the given message."""
+ info = MessageInfo(level=level, text=text, replace=replace)
if self._connected:
- self.show_message.emit(level, text, replace)
+ self.show_message.emit(info)
else:
- self._cache.append((level, text, replace))
+ self._cache.append(info)
def flush(self) -> None:
"""Flush messages which accumulated while no handler was connected.
@@ -253,8 +278,8 @@ class GlobalMessageBridge(QObject):
It needs to be called once the show_message signal is connected.
"""
self._connected = True
- for args in self._cache:
- self.show(*args)
+ for info in self._cache:
+ self.show(**dataclasses.asdict(info))
self._cache = []