Add dwb download keybindings.

This commit is contained in:
Florian Bruhin 2014-06-19 17:58:46 +02:00
parent 9c26eba761
commit 6b12572fb0
5 changed files with 51 additions and 18 deletions

18
TODO
View File

@ -123,21 +123,6 @@ wo
Open url in a new instance (command: winopen, aliases: wopen, w). Open url in a new instance (command: winopen, aliases: wopen, w).
downloads
---------
;d
Download via hints (command hints_download, aliases: dhints).
[n]ad
Cancel the download with number n or the first download in the lists of running downloads if n is omitted. (command cancel_download).
gd
Download the current site. (command download).
Sd
Show download (command show_downloads, aliases: sdownloads).
Bookmarks/quickmarks Bookmarks/quickmarks
-------------------- --------------------
@ -223,6 +208,9 @@ Show settings (command show_settings, aliases: ssettings).
eu eu
Show and execute userscripts (command execute_userscript). Show and execute userscripts (command execute_userscript).
Sd
Show download (command show_downloads, aliases: sdownloads).
Other Other
----- -----

View File

@ -653,6 +653,13 @@ class CommandDispatcher:
else: else:
cur.inspector.show() cur.inspector.show()
@cmdutils.register(instance='mainwindow.tabs.cmd')
def download_page(self):
"""Download the current page."""
widget = self._tabs.currentWidget()
url = urlutils.urlstring(widget.url())
QApplication.instance().downloadmanager.get(url)
@cmdutils.register(instance='mainwindow.tabs.cmd', modes=['insert'], @cmdutils.register(instance='mainwindow.tabs.cmd', modes=['insert'],
hide=True) hide=True)
def open_editor(self): def open_editor(self):

View File

@ -24,15 +24,18 @@ import os.path
from functools import partial from functools import partial
from collections import deque from collections import deque
from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject, QCoreApplication
from PyQt5.QtNetwork import QNetworkReply from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply
import qutebrowser.config.config as config import qutebrowser.config.config as config
import qutebrowser.utils.message as message import qutebrowser.utils.message as message
import qutebrowser.utils.url as urlutils
import qutebrowser.commands.utils as cmdutils
from qutebrowser.utils.log import downloads as logger from qutebrowser.utils.log import downloads as logger
from qutebrowser.utils.usertypes import PromptMode, Question, Timer from qutebrowser.utils.usertypes import PromptMode, Question, Timer
from qutebrowser.utils.misc import (interpolate_color, format_seconds, from qutebrowser.utils.misc import (interpolate_color, format_seconds,
format_size, get_http_header) format_size, get_http_header)
from qutebrowser.commands.exceptions import CommandError
class DownloadItem(QObject): class DownloadItem(QObject):
@ -334,6 +337,27 @@ class DownloadManager(QObject):
filename = 'qutebrowser-download' filename = 'qutebrowser-download'
return os.path.basename(filename) return os.path.basename(filename)
def get(self, link):
"""Start a download with a link URL.
Args:
link: The link URL as a string.
"""
req = QNetworkRequest(urlutils.qurl(link))
reply = QCoreApplication.instance().networkmanager.get(req)
self.fetch(reply)
@cmdutils.register(instance='downloadmanager')
def cancel_download(self, count=1):
"""Cancel the first/[count]th download."""
if count == 0:
return
try:
download = self.downloads[count - 1]
except IndexError:
raise CommandError("There's no download {}!".format(count))
download.cancel()
@pyqtSlot('QNetworkReply') @pyqtSlot('QNetworkReply')
def fetch(self, reply): def fetch(self, reply):
"""Download a QNetworkReply to disk. """Download a QNetworkReply to disk.

View File

@ -40,7 +40,7 @@ ElemTuple = namedtuple('ElemTuple', 'elem, label')
Target = enum('normal', 'tab', 'tab_bg', 'yank', 'yank_primary', 'cmd', Target = enum('normal', 'tab', 'tab_bg', 'yank', 'yank_primary', 'cmd',
'cmd_tab', 'cmd_tab_bg', 'rapid') 'cmd_tab', 'cmd_tab_bg', 'rapid', 'download')
class HintContext: class HintContext:
@ -56,6 +56,7 @@ class HintContext:
yank/yank_primary: Yank to clipboard/primary selection yank/yank_primary: Yank to clipboard/primary selection
cmd/cmd_tab/cmd_tab_bg: Enter link to commandline cmd/cmd_tab/cmd_tab_bg: Enter link to commandline
rapid: Rapid mode with background tabs rapid: Rapid mode with background tabs
download: Download the link.
to_follow: The link to follow when enter is pressed. to_follow: The link to follow when enter is pressed.
connected_frames: The QWebFrames which are connected to a signal. connected_frames: The QWebFrames which are connected to a signal.
""" """
@ -115,6 +116,7 @@ class HintManager(QObject):
Target.cmd_tab: "Set hint in commandline as new tab...", Target.cmd_tab: "Set hint in commandline as new tab...",
Target.cmd_tab_bg: "Set hint in commandline as background tab...", Target.cmd_tab_bg: "Set hint in commandline as background tab...",
Target.rapid: "Follow hint (rapid mode)...", Target.rapid: "Follow hint (rapid mode)...",
Target.download: "Download hint...",
} }
hint_strings_updated = pyqtSignal(list) hint_strings_updated = pyqtSignal(list)
@ -318,6 +320,14 @@ class HintManager(QObject):
message.set_cmd_text(':{} {}'.format(commands[self._context.target], message.set_cmd_text(':{} {}'.format(commands[self._context.target],
urlutils.urlstring(link))) urlutils.urlstring(link)))
def _download(self, link):
"""Download a hint URL.
Args:
link: The link to download.
"""
QApplication.instance().downloadmanager.get(link)
def _resolve_link(self, elem, baseurl=None): def _resolve_link(self, elem, baseurl=None):
"""Resolve a link and check if we want to keep it. """Resolve a link and check if we want to keep it.
@ -505,6 +515,7 @@ class HintManager(QObject):
Target.cmd: self._preset_cmd_text, Target.cmd: self._preset_cmd_text,
Target.cmd_tab: self._preset_cmd_text, Target.cmd_tab: self._preset_cmd_text,
Target.cmd_tab_bg: self._preset_cmd_text, Target.cmd_tab_bg: self._preset_cmd_text,
Target.download: self._download,
} }
elem = self._context.elems[keystr].elem elem = self._context.elems[keystr].elem
if self._context.target in elem_handlers: if self._context.target in elem_handlers:

View File

@ -624,6 +624,7 @@ DATA = OrderedDict([
(';y', 'hint links yank'), (';y', 'hint links yank'),
(';Y', 'hint links yank-primary'), (';Y', 'hint links yank-primary'),
(';r', 'hint links rapid'), (';r', 'hint links rapid'),
(';d', 'hint links download'),
('h', 'scroll -50 0'), ('h', 'scroll -50 0'),
('j', 'scroll 0 50'), ('j', 'scroll 0 50'),
('k', 'scroll 0 -50'), ('k', 'scroll 0 -50'),
@ -658,6 +659,8 @@ DATA = OrderedDict([
('{{', 'prev-page-tab'), ('{{', 'prev-page-tab'),
('}}', 'next-page-tab'), ('}}', 'next-page-tab'),
('wi', 'inspector'), ('wi', 'inspector'),
('gd', 'download-page'),
('ad', 'cancel-download'),
('<Ctrl-Tab>', 'tab-focus-last'), ('<Ctrl-Tab>', 'tab-focus-last'),
('<Ctrl-V>', 'enter-mode passthrough'), ('<Ctrl-V>', 'enter-mode passthrough'),
('<Ctrl-Q>', 'quit'), ('<Ctrl-Q>', 'quit'),