Book detail view: When showing device replace path with click to open link as well

This commit is contained in:
Kovid Goyal 2010-06-14 14:19:38 -06:00
parent e01da87c2b
commit 3853b6bdbe
3 changed files with 37 additions and 6 deletions

View File

@ -10,12 +10,31 @@ import os
from contextlib import closing
from calibre.customize import FileTypePlugin
from calibre.utils.zipfile import ZipFile, stringFileHeader
def is_comic(list_of_names):
extensions = set([x.rpartition('.')[-1].lower() for x in list_of_names])
comic_extensions = set(['jpg', 'jpeg', 'png'])
return len(extensions - comic_extensions) == 0
def archive_type(stream):
try:
pos = stream.tell()
except:
pos = 0
id_ = stream.read(4)
ans = None
if id_ == stringFileHeader:
ans = 'zip'
elif id_.startswith('Rar'):
ans = 'rar'
try:
stream.seek(pos)
except:
pass
return ans
class ArchiveExtract(FileTypePlugin):
name = 'Archive Extract'
author = 'Kovid Goyal'
@ -31,7 +50,6 @@ class ArchiveExtract(FileTypePlugin):
if is_rar:
from calibre.libunrar import extract_member, names
else:
from calibre.utils.zipfile import ZipFile
zf = ZipFile(archive, 'r')
if is_rar:

View File

@ -9,7 +9,7 @@ import os, collections
from PyQt4.Qt import QLabel, QPixmap, QSize, QWidget, Qt, pyqtSignal, \
QVBoxLayout, QScrollArea, QPropertyAnimation, QEasingCurve, \
QSizePolicy, QPainter, QRect, pyqtProperty
QSizePolicy, QPainter, QRect, pyqtProperty, QDesktopServices, QUrl
from calibre import fit_image, prepare_string_for_xml
from calibre.gui2.widgets import IMAGE_EXTENSIONS
@ -42,7 +42,6 @@ def render_rows(data):
txt = prepare_string_for_xml(txt)
if 'id' in data:
if key == _('Path'):
txt = '...'+os.sep+os.sep.join(txt.split(os.sep)[-2:])
txt = u'<a href="path:%s">%s</a>'%(data['id'],
_('Click to open'))
if key == _('Formats') and txt and txt != _('None'):
@ -50,6 +49,11 @@ def render_rows(data):
fmts = [u'<a href="format:%s:%s">%s</a>' % (data['id'], x, x) for x
in fmts]
txt = ', '.join(fmts)
else:
if key == _('Path'):
txt = u'<a href="devpath:%s">%s</a>'%(txt,
_('Click to open'))
rows.append((key, txt))
return rows
@ -150,6 +154,7 @@ class Label(QLabel):
def __init__(self):
QLabel.__init__(self)
self.setTextFormat(Qt.RichText)
self.setText('')
self.setWordWrap(True)
self.linkActivated.connect(self.link_activated)
@ -249,9 +254,13 @@ class BookDetails(QWidget):
typ, _, val = link.partition(':')
if typ == 'path':
self.open_containing_folder.emit(int(val))
if typ == 'format':
elif typ == 'format':
id_, fmt = val.split(':')
self.view_specific_format.emit(int(id_), fmt)
elif typ == 'devpath':
path = os.path.dirname(val)
QDesktopServices.openUrl(QUrl.fromLocalFile(path))
def mouseReleaseEvent(self, ev):
ev.accept()

View File

@ -5,7 +5,7 @@ import os
from PyQt4.Qt import QStatusBar, QLabel, QWidget, QHBoxLayout, QPixmap, \
QSizePolicy, QScrollArea, Qt, QSize, pyqtSignal, \
QPropertyAnimation, QEasingCurve
QPropertyAnimation, QEasingCurve, QDesktopServices, QUrl
from calibre import fit_image, preferred_encoding, isosx
@ -231,9 +231,13 @@ class StatusBar(QStatusBar, StatusBarInterface, BookDetailsInterface):
typ, _, val = link.partition(':')
if typ == 'path':
self.open_containing_folder.emit(int(val))
if typ == 'format':
elif typ == 'format':
id_, fmt = val.split(':')
self.view_specific_format.emit(int(id_), fmt)
elif typ == 'devpath':
path = os.path.dirname(val)
QDesktopServices.openUrl(QUrl.fromLocalFile(path))
def resizeEvent(self, ev):
self.resized.emit(self.size())