Adjust URL completion when quickmarks are changed.

Fixes #590.
This commit is contained in:
Florian Bruhin 2015-04-02 07:40:00 +02:00
parent 068e1c14b6
commit 37ab5296a7
2 changed files with 52 additions and 7 deletions

View File

@ -43,9 +43,19 @@ class QuickmarkManager(QObject):
marks: An OrderedDict of all quickmarks. marks: An OrderedDict of all quickmarks.
_lineparser: The LineParser used for the quickmarks, or None _lineparser: The LineParser used for the quickmarks, or None
(when qutebrowser is started with -c ''). (when qutebrowser is started with -c '').
Signals:
changed: Emitted when anything changed.
added: Emitted when a new quickmark was added.
arg 0: The name of the quickmark.
arg 1: The URL of the quickmark, as string.
removed: Emitted when an existing quickmark was removed.
arg 0: The name of the quickmark.
""" """
changed = pyqtSignal() changed = pyqtSignal()
added = pyqtSignal(str, str)
removed = pyqtSignal(str)
def __init__(self, parent=None): def __init__(self, parent=None):
"""Initialize and read quickmarks.""" """Initialize and read quickmarks."""
@ -117,6 +127,7 @@ class QuickmarkManager(QObject):
"""Really set the quickmark.""" """Really set the quickmark."""
self.marks[name] = url self.marks[name] = url
self.changed.emit() self.changed.emit()
self.added.emit(name, url)
if name in self.marks: if name in self.marks:
message.confirm_async( message.confirm_async(
@ -138,6 +149,7 @@ class QuickmarkManager(QObject):
raise cmdexc.CommandError("Quickmark '{}' not found!".format(name)) raise cmdexc.CommandError("Quickmark '{}' not found!".format(name))
else: else:
self.changed.emit() self.changed.emit()
self.removed.emit(name)
def get(self, name): def get(self, name):
"""Get the URL of the quickmark named name as a QUrl.""" """Get the URL of the quickmark named name as a QUrl."""

View File

@ -21,7 +21,7 @@
import datetime import datetime
from PyQt5.QtCore import pyqtSlot from PyQt5.QtCore import pyqtSlot, Qt
from qutebrowser.utils import objreg, utils from qutebrowser.utils import objreg, utils
from qutebrowser.completion.models import base from qutebrowser.completion.models import base
@ -42,20 +42,21 @@ class UrlCompletionModel(base.BaseCompletionModel):
self._quickmark_cat = self.new_category("Quickmarks") self._quickmark_cat = self.new_category("Quickmarks")
self._history_cat = self.new_category("History") self._history_cat = self.new_category("History")
quickmarks = objreg.get('quickmark-manager').marks.items() quickmark_manager = objreg.get('quickmark-manager')
self._history = objreg.get('web-history') quickmarks = quickmark_manager.marks.items()
for qm_name, qm_url in quickmarks: for qm_name, qm_url in quickmarks:
self.new_item(self._quickmark_cat, qm_url, qm_name) self._add_quickmark_entry(qm_name, qm_url)
quickmark_manager.added.connect(self.on_quickmark_added)
quickmark_manager.removed.connect(self.on_quickmark_removed)
self._history = objreg.get('web-history')
max_history = config.get('completion', 'web-history-max-items') max_history = config.get('completion', 'web-history-max-items')
history = utils.newest_slice(self._history, max_history) history = utils.newest_slice(self._history, max_history)
for entry in history: for entry in history:
self._add_history_entry(entry) self._add_history_entry(entry)
self._history.item_about_to_be_added.connect( self._history.item_about_to_be_added.connect(
self.on_history_item_added) self.on_history_item_added)
objreg.get('config').changed.connect(self.reformat_timestamps) objreg.get('config').changed.connect(self.reformat_timestamps)
def _fmt_atime(self, atime): def _fmt_atime(self, atime):
@ -71,6 +72,15 @@ class UrlCompletionModel(base.BaseCompletionModel):
self._fmt_atime(entry.atime), sort=int(entry.atime), self._fmt_atime(entry.atime), sort=int(entry.atime),
userdata=entry.url) userdata=entry.url)
def _add_quickmark_entry(self, name, url):
"""Add a new quickmark entry to the completion.
Args:
name: The name of the new quickmark.
url: The URL of the new quickmark.
"""
self.new_item(self._quickmark_cat, url, name)
@config.change_filter('completion', 'timestamp-format') @config.change_filter('completion', 'timestamp-format')
def reformat_timestamps(self): def reformat_timestamps(self):
"""Reformat the timestamps if the config option was changed.""" """Reformat the timestamps if the config option was changed."""
@ -93,3 +103,26 @@ class UrlCompletionModel(base.BaseCompletionModel):
break break
else: else:
self._add_history_entry(entry) self._add_history_entry(entry)
@pyqtSlot(str, str)
def on_quickmark_added(self, name, url):
"""Called when a quickmark has been added by the user.
Args:
name: The name of the new quickmark.
url: The url of the new quickmark, as string.
"""
self._add_quickmark_entry(name, url)
@pyqtSlot(str)
def on_quickmark_removed(self, name):
"""Called when a quickmark has been removed by the user.
Args:
name: The name of the quickmark which has been removed.
"""
for i in range(self._quickmark_cat.rowCount()):
name_item = self._quickmark_cat.child(i, 1)
if name_item.data(Qt.DisplayRole) == name:
self._quickmark_cat.removeRow(i)
break