Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Jul 2011 16:58:05 -0500 (CDT)
From:      Rusty Nejdl <rnejdl@tethys.ringofsaturn.com>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/158818: Update ports deskutils/calibre to 0.8.9, fix ICU in Makefile, and update patch for mounting ebooks
Message-ID:  <assp.01731d364e.201107112158.p6BLw5c0025557@tethys.ringofsaturn.com>
Resent-Message-ID: <201107112200.p6BM0NAM082059@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         158818
>Category:       ports
>Synopsis:       Update ports deskutils/calibre to 0.8.9, fix ICU in Makefile, and update patch for mounting ebooks
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jul 11 22:00:22 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Rusty Nejdl
>Release:        FreeBSD 8.2-STABLE amd64
>Organization:
>Environment:
System: FreeBSD tethys.ringofsaturn.com 8.2-STABLE FreeBSD 8.2-STABLE #1: Tue Jun 14 22:35:36 CDT 2011 root@tethys.ringofsaturn.com:/usr/obj/usr/src/sys/GENERIC amd64


>Description:
	This patch updates calibre from 0.8.6 to 0.8.9.  It also includes a fix for the recent ICU update.  Finally, it includes an updated patch from Denver Hull (denverh@comcast.net) that updates the code for mounting ebooks and integrating them within calibre.
>How-To-Repeat:
	The current port doesn't compile with the new ICU.
>Fix:

	

--- calibre.diff begins here ---
diff -ruN calibre/Makefile calibre.new/Makefile
--- calibre/Makefile	2011-07-10 16:06:36.000000000 -0500
+++ calibre.new/Makefile	2011-07-11 16:23:17.000000000 -0500
@@ -6,8 +6,7 @@
 #
 
 PORTNAME=	calibre
-PORTVERSION=	0.8.6
-PORTREVISION=	1
+PORTVERSION=	0.8.9
 CATEGORIES=	deskutils python
 MASTER_SITES=	SF/${PORTNAME}/${PORTVERSION}/
 
@@ -19,7 +18,7 @@
 		poppler-qt4.3:${PORTSDIR}/graphics/poppler-qt4 \
 		wmflite:${PORTSDIR}/graphics/libwmf \
 		chm.0:${PORTSDIR}/misc/chmlib \
-		icudata.46:${PORTSDIR}/devel/icu
+		icudata.48:${PORTSDIR}/devel/icu
 BUILD_DEPENDS=	py*-setuptools>=0:${PORTSDIR}/devel/py-setuptools \
 		py*-sip>=0:${PORTSDIR}/devel/py-sip \
 		py*-qt4-core>=0:${PORTSDIR}/devel/py-qt4-core \
diff -ruN calibre/distinfo calibre.new/distinfo
--- calibre/distinfo	2011-06-20 21:26:46.000000000 -0500
+++ calibre.new/distinfo	2011-07-11 12:43:22.000000000 -0500
@@ -1,2 +1,2 @@
-SHA256 (calibre-0.8.6.tar.gz) = 811a967fa44b59a34d313eda984c19f575cf2c5fe774170e08b4c536e9e22b72
-SIZE (calibre-0.8.6.tar.gz) = 28494397
+SHA256 (calibre-0.8.9.tar.gz) = d46709e2a81679dd0678b36696f8ce96aff112aebff494478c1674ec76612f14
+SIZE (calibre-0.8.9.tar.gz) = 29084120
diff -ruN calibre/files/patch-device.py calibre.new/files/patch-device.py
--- calibre/files/patch-device.py	2011-06-19 15:45:21.000000000 -0500
+++ calibre.new/files/patch-device.py	2011-07-11 15:45:03.000000000 -0500
@@ -1,192 +1,203 @@
---- src/calibre/devices/usbms/device.py.orig	2011-06-19 09:41:50.000000000 -0500
-+++ src/calibre/devices/usbms/device.py	2011-06-19 08:20:32.000000000 -0500
-@@ -17,7 +17,7 @@
- from calibre.devices.interface import DevicePlugin
- from calibre.devices.errors import DeviceError, FreeSpaceError
- from calibre.devices.usbms.deviceconfig import DeviceConfig
--from calibre.constants import iswindows, islinux, isosx, plugins
-+from calibre.constants import iswindows, islinux, isosx, isfreebsd, plugins
- from calibre.utils.filenames import ascii_filename as sanitize, shorten_components_to
- 
- if isosx:
-@@ -698,7 +698,152 @@
-             self._card_a_prefix = self._card_b_prefix
-             self._card_b_prefix = None
+--- src/calibre/devices/usbms/device.py.orig	2011-07-11 15:41:16.000000000 -0500
++++ src/calibre/devices/usbms/device.py	2011-07-11 15:44:07.000000000 -0500
+@@ -704,105 +704,104 @@
+ # ------------------------------------------------------
+ #
+ #  open for FreeBSD
+-#   find the device node or nodes that match the S/N we already have from the scanner
+-#   and attempt to mount each one
+-#       1.  get list of disk devices from sysctl
+-#       2.  compare that list with the one from camcontrol
+-#       3.  and see if it has a matching s/n
+-#       6.  find any partitions/slices associated with each node
+-#       7.  attempt to mount, using calibre-mount-helper, each one
+-#       8.  when finished, we have a list of mount points and associated device nodes
++#      find the device node or nodes that match the S/N we already have from the scanner 
++#      and attempt to mount each one
++#              1.  get list of disk devices from sysctl
++#              2.  find the ones with matching s/n
++#              3.  find any partitions/slices associated with each node
++#              4.  attempt to mount each one using calibre-mount-helper
++#              5.  when finished, we have a list of mount points and associated device nodes
+ #
+     def open_freebsd(self):
  
+-        # this gives us access to the S/N, etc. of the reader that the scanner has found
+-        # and the match routines for some of that data, like s/n, vendor ID, etc.
+-        d=self.detected_device
 -
-+# ------------------------------------------------------
-+#
-+#  open for FreeBSD
-+#	find the device node or nodes that match the S/N we already have from the scanner 
-+#	and attempt to mount each one
-+#		1.  get list of disk devices from sysctl
-+#		2.  compare that list with the one from camcontrol
-+#		3.  and see if it has a matching s/n
-+#		6.  find any partitions/slices associated with each node
-+#		7.  attempt to mount, using calibre-mount-helper, each one
-+#		8.  when finished, we have a list of mount points and associated device nodes
-+#
-+    def open_freebsd(self):
-+
-+		# this gives us access to the S/N, etc. of the reader that the scanner has found
-+		# and the match routines for some of that data, like s/n, vendor ID, etc.
-+		d=self.detected_device	
-+		
-+		if not d.serial:
-+			raise DeviceError("Device has no S/N.  Can't continue")
-+			return False
-+
-+		devs={}
-+		di=0
-+		ndevs=4		# number of possible devices per reader (main, carda, cardb, launcher)
-+
-+		#get list of disk devices
-+		p=subprocess.Popen(["sysctl", "kern.disks"], stdout=subprocess.PIPE)
-+		kdsks=subprocess.Popen(["sed", "s/kern.disks: //"], stdin=p.stdout, stdout=subprocess.PIPE).communicate()[0]
-+		p.stdout.close()
-+		#print kdsks
-+		for dvc in kdsks.split():
-+			# for each one that's also in the list of cam devices ...
-+			p=subprocess.Popen(["camcontrol", "devlist"], stdout=subprocess.PIPE)
-+			devmatch=subprocess.Popen(["grep", dvc], stdin=p.stdout, stdout=subprocess.PIPE).communicate()[0]
-+			p.stdout.close()
-+			if devmatch:
-+				#print "Checking ", devmatch
-+				# ... see if we can get a S/N from the actual device node
-+				sn=subprocess.Popen(["camcontrol", "inquiry", dvc, "-S"], stdout=subprocess.PIPE).communicate()[0]
-+				sn=sn[0:-1]             # drop the trailing newline
-+				#print "S/N = ", sn
-+				if sn and d.match_serial(sn):
-+					# we have a matching s/n, record this device node
-+					#print "match found: ", dvc
-+					devs[di]=dvc
-+					di += 1
-+
-+		# sort the list of devices
-+		for i in range(1,ndevs+1):
-+			for j in reversed(range(1,i)):
-+				if devs[j-1] > devs[j]:
-+					x=devs[j-1]
-+					devs[j-1]=devs[j]
-+					devs[j]=x
-+		#print devs
-+
-+		# now we need to see if any of these have slices/partitions
-+		mtd=0
-+		label="READER"		# could use something more unique, like S/N or productID...
-+		cmd = '/usr/local/bin/calibre-mount-helper'
-+		cmd = [cmd, 'mount']
-+		for i in range(0,ndevs):
-+			cmd2="ls /dev/"+devs[i]+"*"
-+			p=subprocess.Popen(cmd2, shell=True, stdout=subprocess.PIPE)
-+			devs[i]=subprocess.Popen(["cut", "-d", "/", "-f" "3"], stdin=p.stdout, stdout=subprocess.PIPE).communicate()[0]
-+			p.stdout.close()
-+	
-+			# try all the nodes to see what we can mount
-+			for dev in devs[i].split():
-+				mp='/media/'+label+'-'+dev
-+				#print "trying ", dev, "on", mp
-+				try:
-+					p = subprocess.Popen(cmd + ["/dev/"+dev, mp])
-+				except OSError:
-+					raise DeviceError(_('Could not find mount helper: %s.')%cmd[0])
-+				while p.poll() is None:
-+					time.sleep(0.1)
-+			
-+				if p.returncode == 0:
-+					#print "  mounted", dev
-+					if i == 0:
-+						self._main_prefix = mp
-+						self._main_dev = "/dev/"+dev
-+						#print "main = ", self._main_dev, self._main_prefix
-+					if i == 1:
-+						self._card_a_prefix = mp
-+						self._card_a_dev = "/dev/"+dev
-+						#print "card a = ", self._card_a_dev, self._card_a_prefix
-+					if i == 2:
-+						self._card_b_prefix = mp
-+						self._card_b_dev = "/dev/"+dev
-+						#print "card b = ", self._card_b_dev, self._card_b_prefix
-+						
-+					mtd += 1
-+					break
-+
-+		if mtd > 0:
-+			return True
-+		else :
-+			return False
-+#
-+# ------------------------------------------------------
-+#
-+#	this one is pretty simple:
-+#		just umount each of the previously
-+#		mounted filesystems, using the mount helper
-+#
-+    def eject_freebsd(self):
-+		cmd = '/usr/local/bin/calibre-mount-helper'
-+		cmd = [cmd, 'eject']
-+
-+		if self._main_prefix:
-+			#print "umount main:", cmd, self._main_dev, self._main_prefix
-+			try:
-+				p = subprocess.Popen(cmd + [self._main_dev, self._main_prefix])
-+			except OSError:
-+				raise DeviceError(
-+				_('Could not find mount helper: %s.')%cmd[0])
-+			while p.poll() is None:
-+				time.sleep(0.1)
-+
-+		if self._card_a_prefix:
-+			#print "umount card a:", cmd, self._card_a_dev, self._card_a_prefix
-+			try:
-+				p = subprocess.Popen(cmd + [self._card_a_dev,  self._card_a_prefix])
-+			except OSError:
-+				raise DeviceError(
-+				_('Could not find mount helper: %s.')%cmd[0])
-+			while p.poll() is None:
-+				time.sleep(0.1)
-+
-+		if self._card_b_prefix:
-+			#print "umount card b:", cmd, self._card_b_dev, self._card_b_prefix
-+			try:
-+				p = subprocess.Popen(cmd + [self._card_b_dev, self._card_b_prefix])
-+			except OSError:
-+				raise DeviceError(
-+				_('Could not find mount helper: %s.')%cmd[0])
-+			while p.poll() is None:
-+				time.sleep(0.1)
-+
-+		self._main_prefix = None
-+		self._card_a_prefix = None
-+		self._card_b_prefix = None
-+# ------------------------------------------------------
- 
-     def open(self, library_uuid):
-         time.sleep(5)
-@@ -709,6 +854,14 @@
-             except DeviceError:
-                 time.sleep(7)
-                 self.open_linux()
-+        if isfreebsd:
-+            self._main_dev = self._card_a_dev = self._card_b_dev = None
-+            try:
-+                self.open_freebsd()
-+            except DeviceError:
-+                subprocess.Popen(["camcontrol", "rescan", "all"])
-+                time.sleep(2)
-+                self.open_freebsd()
-         if iswindows:
-             try:
-                 self.open_windows()
-@@ -797,6 +950,11 @@
-                 self.eject_linux()
-             except:
-                 pass
-+        if isfreebsd:
-+            try:
-+                self.eject_freebsd()
-+            except:
-+                pass
-         if iswindows:
-             try:
-                 self.eject_windows()
+-        if not d.serial:
+-            raise DeviceError("Device has no S/N.  Can't continue")
+-            return False
+-
+-        devs={}
+-        di=0
+-        ndevs=4     # number of possible devices per reader (main, carda, cardb, launcher)
+-
+-        #get list of disk devices
+-        p=subprocess.Popen(["sysctl", "kern.disks"], stdout=subprocess.PIPE)
+-        kdsks=subprocess.Popen(["sed", "s/kern.disks: //"], stdin=p.stdout, stdout=subprocess.PIPE).communicate()[0]
+-        p.stdout.close()
+-        #print kdsks
+-        for dvc in kdsks.split():
+-            # for each one that's also in the list of cam devices ...
+-            p=subprocess.Popen(["camcontrol", "devlist"], stdout=subprocess.PIPE)
+-            devmatch=subprocess.Popen(["grep", dvc], stdin=p.stdout, stdout=subprocess.PIPE).communicate()[0]
+-            p.stdout.close()
+-            if devmatch:
+-                #print "Checking ", devmatch
+-                # ... see if we can get a S/N from the actual device node
+-                sn=subprocess.Popen(["camcontrol", "inquiry", dvc, "-S"], stdout=subprocess.PIPE).communicate()[0]
+-                sn=sn[0:-1]             # drop the trailing newline
+-                #print "S/N = ", sn
+-                if sn and d.match_serial(sn):
+-                    # we have a matching s/n, record this device node
+-                    #print "match found: ", dvc
+-                    devs[di]=dvc
+-                    di += 1
+-
+-        # sort the list of devices
+-        for i in range(1,ndevs+1):
+-            for j in reversed(range(1,i)):
+-                if devs[j-1] > devs[j]:
+-                    x=devs[j-1]
+-                    devs[j-1]=devs[j]
+-                    devs[j]=x
+-        #print devs
+-
+-        # now we need to see if any of these have slices/partitions
+-        mtd=0
+-        label="READER"      # could use something more unique, like S/N or productID...
+-        cmd = '/usr/local/bin/calibre-mount-helper'
+-        cmd = [cmd, 'mount']
+-        for i in range(0,ndevs):
+-            cmd2="ls /dev/"+devs[i]+"*"
+-            p=subprocess.Popen(cmd2, shell=True, stdout=subprocess.PIPE)
+-            devs[i]=subprocess.Popen(["cut", "-d", "/", "-f" "3"], stdin=p.stdout, stdout=subprocess.PIPE).communicate()[0]
+-            p.stdout.close()
+-
+-            # try all the nodes to see what we can mount
+-            for dev in devs[i].split():
+-                mp='/media/'+label+'-'+dev
+-                #print "trying ", dev, "on", mp
+-                try:
+-                    p = subprocess.Popen(cmd + ["/dev/"+dev, mp])
+-                except OSError:
+-                    raise DeviceError(_('Could not find mount helper: %s.')%cmd[0])
+-                while p.poll() is None:
+-                    time.sleep(0.1)
+-
+-                if p.returncode == 0:
+-                    #print "  mounted", dev
+-                    if i == 0:
+-                        self._main_prefix = mp
+-                        self._main_dev = "/dev/"+dev
+-                        #print "main = ", self._main_dev, self._main_prefix
+-                    if i == 1:
+-                        self._card_a_prefix = mp
+-                        self._card_a_dev = "/dev/"+dev
+-                        #print "card a = ", self._card_a_dev, self._card_a_prefix
+-                    if i == 2:
+-                        self._card_b_prefix = mp
+-                        self._card_b_dev = "/dev/"+dev
+-                        #print "card b = ", self._card_b_dev, self._card_b_prefix
+-
+-                    mtd += 1
+-                    break
+-
+-        if mtd > 0:
+-            return True
+-        else :
+-            return False
+-#
++               # this gives us access to the S/N, etc. of the reader that the scanner has found
++               # and the match routines for some of that data, like s/n, vendor ID, etc.
++               d=self.detected_device
++
++               if not d.serial:
++                       raise DeviceError("Device has no S/N.  Can't continue")
++                       return False
++
++               devs={}
++               di=0
++               ndevs=4         # number of possible devices per reader (main, carda, cardb, launcher)
++
++               #get list of disk devices
++               #kdsks="da4 da3 da2 da1"
++               try:
++                       kdsks=subprocess.Popen("/sbin/sysctl kern.disks | /usr/bin/sed 's/kern.disks: //'", shell=True, stdout=subprocess.PIPE).communicate()[0]
++               except:
++                       print "sysctl failed"
++               print kdsks
++               for dvc in kdsks.split():
++                       # just check the /dev/da* devices
++                       if dvc.startswith("da"):
++                               # see if we can get a S/N from the actual device node
++                               print "Checking ", dvc
++                               #sn="08004610011F550C"
++                               try:
++                                       sn=subprocess.Popen("/sbin/camcontrol inquiry "+dvc+" -S", shell=True, stdout=subprocess.PIPE).communicate()[0]
++                               except:
++                                       print "inquiry failed:"
++                               sn=sn[0:-1]             # drop the trailing newline
++                               print "S/N = ", sn
++                               if sn and d.match_serial(sn):
++                                       # we have a matching s/n, record this device node
++                                       print "match found: ", dvc
++                                       devs[di]=dvc
++                                       di += 1
++
++               # sort the list of devices
++               for i in range(1,ndevs+1):
++                       for j in reversed(range(1,i)):
++                               if devs[j-1] > devs[j]:
++                                       x=devs[j-1]
++                                       devs[j-1]=devs[j]
++                                       devs[j]=x
++               print devs
++
++               # now we need to see if any of these have slices/partitions
++               mtd=0
++               label="READER"          # could use something more unique, like S/N or productID...
++               cmd = '/usr/local/bin/calibre-mount-helper'
++               for i in range(0,ndevs):
++                       try:
++                               devs[i]=subprocess.Popen("/bin/ls /dev/"+devs[i]+"* | /usr/bin/cut -d'/' -f3", shell=True, stdout=subprocess.PIPE).communicate()[0]
++                       except:
++                               print "ls failed"
++
++                       # try all the nodes to see what we can mount
++                       for dev in devs[i].split():
++                               mp='/mnt/'+label+'-'+dev+'/'
++                               print "trying ", dev, "on", mp
++                               try:
++                                       p = subprocess.Popen([cmd, "mount", "/dev/"+dev, mp])
++                               except:
++                                       print "mount failed:"
++                               while p.poll() is None:
++                                       time.sleep(0.1)
++
++                               if p.returncode == 0:
++                                       print "  mounted", dev, "on", mp
++                                       if i == 0:
++                                               self._main_prefix = mp
++                                               self._main_dev = "/dev/"+dev
++                                               print "main = ", self._main_dev, self._main_prefix
++                                       if i == 1:
++                                               self._card_a_prefix = mp
++                                               self._card_a_dev = "/dev/"+dev
++                                               print "card a = ", self._card_a_dev, self._card_a_prefix
++                                       if i == 2:
++                                               self._card_b_prefix = mp
++                                               self._card_b_dev = "/dev/"+dev
++                                               print "card b = ", self._card_b_dev, self._card_b_prefix
++
++                                       mtd += 1
++                                       break
++               if mtd > 0:
++                       return True
++               else :
++                       return False
+ # ------------------------------------------------------
+ #
+ #   this one is pretty simple:
diff -ruN calibre/files/patch-linux_mount_helper.c calibre.new/files/patch-linux_mount_helper.c
--- calibre/files/patch-linux_mount_helper.c	2011-06-19 15:45:25.000000000 -0500
+++ calibre.new/files/patch-linux_mount_helper.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,52 +0,0 @@
---- src/calibre/devices/linux_mount_helper.c.orig	2011-06-19 09:35:30.000000000 -0500
-+++ src/calibre/devices/linux_mount_helper.c	2011-06-14 16:48:50.000000000 -0500
-@@ -65,14 +65,24 @@
-     snprintf(uids, 100, "%d", getuid());
-     snprintf(gids, 100, "%d", getgid());
- #else
-+#ifdef __FreeBSD__
-+    snprintf(options, 1000, "rw,noexec,nosuid,sync,-u=%d,-g=%d",getuid(),getgid());
-+#else
-     snprintf(options, 1000, "rw,noexec,nosuid,sync,nodev,quiet,shortname=mixed,uid=%d,gid=%d,umask=077,fmask=0177,dmask=0077,utf8,iocharset=iso8859-1", getuid(), getgid());
- #endif
-+#endif
-+
-     ensure_root();
-+
- #ifdef __NetBSD__
-     execlp("mount_msdos", "mount_msdos", "-u", uids, "-g", gids, "-o", options, dev, mp, NULL);
- #else
-+#ifdef __FreeBSD__
-+    execlp("mount", "mount", "-t", "msdosfs", "-o", options, dev, mp, NULL);
-+#else
-     execlp("mount", "mount", "-t", "auto", "-o", options, dev, mp, NULL);
- #endif
-+#endif
-     errsv = errno;
-     fprintf(stderr, "Failed to mount with error: %s\n", strerror(errsv));
-     return EXIT_FAILURE;
-@@ -92,8 +102,12 @@
- #ifdef __NetBSD__
-         execlp("eject", "eject", dev, NULL);
- #else
-+#ifdef __FreeBSD__
-+	execlp("umount", "umount", dev, NULL);
-+#else
-         execlp("eject", "eject", "-s", dev, NULL);
- #endif
-+#endif
-         /* execlp failed */
-         errsv = errno;
-         fprintf(stderr, "Failed to eject with error: %s\n", strerror(errsv));
-@@ -121,7 +135,11 @@
- 
-     if (pid == 0) { /* Child process */
-         ensure_root();
-+#ifdef __FreeBSD__
-+        execlp("umount", "umount", mp, NULL);
-+#else
-         execlp("umount", "umount", "-l", mp, NULL);
-+#endif
-         /* execlp failed */
-         errsv = errno;
-         fprintf(stderr, "Failed to umount with error: %s\n", strerror(errsv));
diff -ruN calibre/pkg-plist calibre.new/pkg-plist
--- calibre/pkg-plist	2011-06-20 21:26:46.000000000 -0500
+++ calibre.new/pkg-plist	2011-07-11 16:50:52.000000000 -0500
@@ -111,6 +111,13 @@
 lib/calibre/calibre/devices/usbms/deviceconfig.py
 lib/calibre/calibre/devices/usbms/driver.py
 lib/calibre/calibre/devices/usbobserver/test.py
+lib/calibre/calibre/db/__init__.py
+lib/calibre/calibre/db/backend.py
+lib/calibre/calibre/db/locking.py
+lib/calibre/calibre/db/schema_upgrades.py
+lib/calibre/calibre/db/errors.py
+lib/calibre/calibre/db/tables.py
+lib/calibre/calibre/db/cache.py
 lib/calibre/calibre/ebooks/BeautifulSoup.py
 lib/calibre/calibre/ebooks/__init__.py
 lib/calibre/calibre/ebooks/chardet/__init__.py
@@ -181,6 +188,7 @@
 lib/calibre/calibre/ebooks/html/input.py
 lib/calibre/calibre/ebooks/html/meta.py
 lib/calibre/calibre/ebooks/html/output.py
+lib/calibre/calibre/ebooks/html/to_zip.py
 lib/calibre/calibre/ebooks/htmlz/__init__.py
 lib/calibre/calibre/ebooks/htmlz/oeb2html.py
 lib/calibre/calibre/ebooks/htmlz/output.py
@@ -469,6 +477,7 @@
 lib/calibre/calibre/gui2/actions/restart.py
 lib/calibre/calibre/gui2/actions/save_to_disk.py
 lib/calibre/calibre/gui2/actions/show_book_details.py
+lib/calibre/calibre/gui2/actions/show_quickview.py
 lib/calibre/calibre/gui2/actions/similar_books.py
 lib/calibre/calibre/gui2/actions/store.py
 lib/calibre/calibre/gui2/actions/tweak_epub.py
@@ -598,6 +607,8 @@
 lib/calibre/calibre/gui2/dialogs/plugin_updater.py
 lib/calibre/calibre/gui2/dialogs/progress.py
 lib/calibre/calibre/gui2/dialogs/progress_ui.py
+lib/calibre/calibre/gui2/dialogs/quickview_ui.py
+lib/calibre/calibre/gui2/dialogs/quickview.py
 lib/calibre/calibre/gui2/dialogs/restore_library.py
 lib/calibre/calibre/gui2/dialogs/saved_search_editor.py
 lib/calibre/calibre/gui2/dialogs/saved_search_editor_ui.py
@@ -698,48 +709,52 @@
 lib/calibre/calibre/gui2/search_restriction_mixin.py
 lib/calibre/calibre/gui2/shortcuts.py
 lib/calibre/calibre/gui2/shortcuts_ui.py
-lib/calibre/calibre/gui2/store/beam_ebooks_de_plugin.py
-lib/calibre/calibre/gui2/store/gandalf_plugin.py
-lib/calibre/calibre/gui2/store/pragmatic_bookshelf_plugin.py
-lib/calibre/calibre/gui2/store/nexto_plugin.py
-lib/calibre/calibre/gui2/store/whsmith_uk_plugin.py
-lib/calibre/calibre/gui2/store/zixo_plugin.py
-lib/calibre/calibre/gui2/store/epubbud_plugin.py
-lib/calibre/calibre/gui2/store/oreilly_plugin.py
-lib/calibre/calibre/gui2/store/woblink_plugin.py
-lib/calibre/calibre/gui2/store/archive_org_plugin.py
-lib/calibre/calibre/gui2/store/weightless_books_plugin.py
-lib/calibre/calibre/gui2/store/epubbuy_de_plugin.py
-lib/calibre/calibre/gui2/store/wizards_tower_books_plugin.py
-lib/calibre/calibre/gui2/store/bewrite_plugin.py
-lib/calibre/calibre/gui2/store/baen_webscription_plugin.py
 lib/calibre/calibre/gui2/store/search_ui.py
 lib/calibre/calibre/gui2/store/__init__.py
-lib/calibre/calibre/gui2/store/eharlequin_plugin.py
-lib/calibre/calibre/gui2/store/waterstones_uk_plugin.py
-lib/calibre/calibre/gui2/store/ebooks_com_plugin.py
-lib/calibre/calibre/gui2/store/gutenberg_plugin.py
-lib/calibre/calibre/gui2/store/amazon_de_plugin.py
 lib/calibre/calibre/gui2/store/mobileread_store_dialog_ui.py
-lib/calibre/calibre/gui2/store/bn_plugin.py
 lib/calibre/calibre/gui2/store/web_control.py
 lib/calibre/calibre/gui2/store/web_store_dialog_ui.py
-lib/calibre/calibre/gui2/store/feedbooks_plugin.py
 lib/calibre/calibre/gui2/store/search_result.py
 lib/calibre/calibre/gui2/store/basic_config.py
-lib/calibre/calibre/gui2/store/kobo_plugin.py
-lib/calibre/calibre/gui2/store/smashwords_plugin.py
-lib/calibre/calibre/gui2/store/open_library_plugin.py
+lib/calibre/calibre/gui2/store/opensearch_store.py
 lib/calibre/calibre/gui2/store/web_store_dialog.py
-lib/calibre/calibre/gui2/store/foyles_uk_plugin.py
-lib/calibre/calibre/gui2/store/diesel_ebooks_plugin.py
-lib/calibre/calibre/gui2/store/manybooks_plugin.py
-lib/calibre/calibre/gui2/store/amazon_plugin.py
-lib/calibre/calibre/gui2/store/amazon_uk_plugin.py
 lib/calibre/calibre/gui2/store/basic_config_widget_ui.py
-lib/calibre/calibre/gui2/store/legimi_plugin.py
-lib/calibre/calibre/gui2/store/ebookshoppe_uk_plugin.py
-lib/calibre/calibre/gui2/store/virtualo_plugin.py
+lib/calibre/calibre/gui2/store/stores/beam_ebooks_de_plugin.py
+lib/calibre/calibre/gui2/store/stores/gandalf_plugin.py
+lib/calibre/calibre/gui2/store/stores/pragmatic_bookshelf_plugin.py
+lib/calibre/calibre/gui2/store/stores/nexto_plugin.py
+lib/calibre/calibre/gui2/store/stores/whsmith_uk_plugin.py
+lib/calibre/calibre/gui2/store/stores/zixo_plugin.py
+lib/calibre/calibre/gui2/store/stores/epubbud_plugin.py
+lib/calibre/calibre/gui2/store/stores/oreilly_plugin.py
+lib/calibre/calibre/gui2/store/stores/woblink_plugin.py
+lib/calibre/calibre/gui2/store/stores/archive_org_plugin.py
+lib/calibre/calibre/gui2/store/stores/weightless_books_plugin.py
+lib/calibre/calibre/gui2/store/stores/epubbuy_de_plugin.py
+lib/calibre/calibre/gui2/store/stores/wizards_tower_books_plugin.py
+lib/calibre/calibre/gui2/store/stores/bewrite_plugin.py
+lib/calibre/calibre/gui2/store/stores/baen_webscription_plugin.py
+lib/calibre/calibre/gui2/store/stores/__init__.py
+lib/calibre/calibre/gui2/store/stores/eharlequin_plugin.py
+lib/calibre/calibre/gui2/store/stores/waterstones_uk_plugin.py
+lib/calibre/calibre/gui2/store/stores/ebooks_com_plugin.py
+lib/calibre/calibre/gui2/store/stores/gutenberg_plugin.py
+lib/calibre/calibre/gui2/store/stores/amazon_de_plugin.py
+lib/calibre/calibre/gui2/store/stores/bn_plugin.py
+lib/calibre/calibre/gui2/store/stores/feedbooks_plugin.py
+lib/calibre/calibre/gui2/store/stores/kobo_plugin.py
+lib/calibre/calibre/gui2/store/stores/smashwords_plugin.py
+lib/calibre/calibre/gui2/store/stores/foyles_uk_plugin.py
+lib/calibre/calibre/gui2/store/stores/diesel_ebooks_plugin.py
+lib/calibre/calibre/gui2/store/stores/manybooks_plugin.py
+lib/calibre/calibre/gui2/store/stores/amazon_plugin.py
+lib/calibre/calibre/gui2/store/stores/amazon_uk_plugin.py
+lib/calibre/calibre/gui2/store/stores/legimi_plugin.py
+lib/calibre/calibre/gui2/store/stores/ebookshoppe_uk_plugin.py
+lib/calibre/calibre/gui2/store/stores/virtualo_plugin.py
+lib/calibre/calibre/gui2/store/stores/open_books_plugin.py
+lib/calibre/calibre/gui2/store/stores/libri_de_plugin.py
+lib/calibre/calibre/gui2/store/stores/google_books_plugin.py
 lib/calibre/calibre/gui2/store/config/__init__.py
 lib/calibre/calibre/gui2/store/config/search_widget_ui.py
 lib/calibre/calibre/gui2/store/config/store.py
@@ -754,17 +769,16 @@
 lib/calibre/calibre/gui2/store/config/chooser/adv_search_builder_ui.py
 lib/calibre/calibre/gui2/store/config/chooser/chooser_widget.py
 lib/calibre/calibre/gui2/store/config/chooser/chooser_widget_ui.py
-lib/calibre/calibre/gui2/store/google_books_plugin.py
-lib/calibre/calibre/gui2/store/mobileread/__init__.py
-lib/calibre/calibre/gui2/store/mobileread/adv_search_builder.py
-lib/calibre/calibre/gui2/store/mobileread/adv_search_builder_ui.py
-lib/calibre/calibre/gui2/store/mobileread/models.py
-lib/calibre/calibre/gui2/store/mobileread/store_dialog.py
-lib/calibre/calibre/gui2/store/mobileread/cache_progress_dialog_ui.py
-lib/calibre/calibre/gui2/store/mobileread/cache_update_thread.py
-lib/calibre/calibre/gui2/store/mobileread/cache_progress_dialog.py
-lib/calibre/calibre/gui2/store/mobileread/store_dialog_ui.py
-lib/calibre/calibre/gui2/store/mobileread/mobileread_plugin.py
+lib/calibre/calibre/gui2/store/stores/mobileread/__init__.py
+lib/calibre/calibre/gui2/store/stores/mobileread/adv_search_builder.py
+lib/calibre/calibre/gui2/store/stores/mobileread/adv_search_builder_ui.py
+lib/calibre/calibre/gui2/store/stores/mobileread/models.py
+lib/calibre/calibre/gui2/store/stores/mobileread/store_dialog.py
+lib/calibre/calibre/gui2/store/stores/mobileread/cache_progress_dialog_ui.py
+lib/calibre/calibre/gui2/store/stores/mobileread/cache_update_thread.py
+lib/calibre/calibre/gui2/store/stores/mobileread/cache_progress_dialog.py
+lib/calibre/calibre/gui2/store/stores/mobileread/store_dialog_ui.py
+lib/calibre/calibre/gui2/store/stores/mobileread/mobileread_plugin.py
 lib/calibre/calibre/gui2/store/search/results_view.py
 lib/calibre/calibre/gui2/store/search/search_ui.py
 lib/calibre/calibre/gui2/store/search/__init__.py
@@ -773,7 +787,10 @@
 lib/calibre/calibre/gui2/store/search/models.py
 lib/calibre/calibre/gui2/store/search/search.py
 lib/calibre/calibre/gui2/store/search/adv_search_builder_ui.py
-lib/calibre/calibre/gui2/tag_view.py
+lib/calibre/calibre/gui2/tag_browser/__init__.py
+lib/calibre/calibre/gui2/tag_browser/ui.py
+lib/calibre/calibre/gui2/tag_browser/view.py
+lib/calibre/calibre/gui2/tag_browser/model.py
 lib/calibre/calibre/gui2/threaded_jobs.py
 lib/calibre/calibre/gui2/throbber.py
 lib/calibre/calibre/gui2/tools.py
@@ -890,6 +907,7 @@
 lib/calibre/calibre/utils/ipc/job.py
 lib/calibre/calibre/utils/ipc/launch.py
 lib/calibre/calibre/utils/ipc/server.py
+lib/calibre/calibre/utils/ipc/proxy.py
 lib/calibre/calibre/utils/ipc/worker.py
 lib/calibre/calibre/utils/localization.py
 lib/calibre/calibre/utils/lock.py
@@ -902,6 +920,10 @@
 lib/calibre/calibre/utils/mreplace.py
 lib/calibre/calibre/utils/network.py
 lib/calibre/calibre/utils/ordered_dict.py
+lib/calibre/calibre/utils/opensearch/__init__.py
+lib/calibre/calibre/utils/opensearch/description.py
+lib/calibre/calibre/utils/opensearch/url.py
+lib/calibre/calibre/utils/opensearch/query.py
 lib/calibre/calibre/utils/osx_symlinks.py
 lib/calibre/calibre/utils/pdftk.py
 lib/calibre/calibre/utils/podofo/__init__.py
@@ -1381,8 +1403,9 @@
 @dirrm lib/calibre/calibre/utils/wmf
 @dirrm lib/calibre/calibre/utils/pyconsole
 @dirrm lib/calibre/calibre/utils/podofo
-@dirrm lib/calibre/calibre/utils/magick
+@dirrm lib/calibre/calibre/utils/opensearch
 @dirrm lib/calibre/calibre/utils/ipc
+@dirrm lib/calibre/calibre/utils/magick
 @dirrm lib/calibre/calibre/utils/fonts
 @dirrm lib/calibre/calibre/utils/chm
 @dirrm lib/calibre/calibre/utils
@@ -1397,11 +1420,13 @@
 @dirrm lib/calibre/calibre/library
 @dirrm lib/calibre/calibre/gui2/wizard
 @dirrm lib/calibre/calibre/gui2/viewer
-@dirrm lib/calibre/calibre/gui2/store/mobileread
+@dirrm lib/calibre/calibre/gui2/tag_browser
+@dirrm lib/calibre/calibre/gui2/store/stores/mobileread
 @dirrm lib/calibre/calibre/gui2/store/config/search
 @dirrm lib/calibre/calibre/gui2/store/config/chooser
 @dirrm lib/calibre/calibre/gui2/store/config
 @dirrm lib/calibre/calibre/gui2/store/search
+@dirrm lib/calibre/calibre/gui2/store/stores
 @dirrm lib/calibre/calibre/gui2/store
 @dirrm lib/calibre/calibre/gui2/progress_indicator
 @dirrm lib/calibre/calibre/gui2/preferences
@@ -1460,6 +1485,7 @@
 @dirrm lib/calibre/calibre/ebooks/chm
 @dirrm lib/calibre/calibre/ebooks/chardet
 @dirrm lib/calibre/calibre/ebooks
+@dirrm lib/calibre/calibre/db
 @dirrm lib/calibre/calibre/devices/usbobserver
 @dirrm lib/calibre/calibre/devices/usbms
 @dirrm lib/calibre/calibre/devices/user_defined
--- calibre.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?assp.01731d364e.201107112158.p6BLw5c0025557>