From d65dd1ab871df987d8daeed4f05e187f9c41902c Mon Sep 17 00:00:00 2001 From: Apprentice Harper Date: Fri, 7 Oct 2016 07:06:22 +0100 Subject: [PATCH] New obok fix that should work for stand-alone script and non-Windows machines. (Makes a tweaked copy of the database.) --- Obok_calibre_plugin/obok_plugin.zip | Bin 64447 -> 64664 bytes Obok_calibre_plugin/obok_plugin/obok/obok.py | 40 ++++++++++++++----- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Obok_calibre_plugin/obok_plugin.zip b/Obok_calibre_plugin/obok_plugin.zip index 943442123a15feef51b28d015a1518005b8f6b1a..1e47967b4a39d37c239558a8f685ec42b2aab72e 100644 GIT binary patch delta 8916 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 delta 8702 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 diff --git a/Obok_calibre_plugin/obok_plugin/obok/obok.py b/Obok_calibre_plugin/obok_plugin/obok/obok.py index 1e55499..e744c2b 100644 --- a/Obok_calibre_plugin/obok_plugin/obok/obok.py +++ b/Obok_calibre_plugin/obok_plugin/obok/obok.py @@ -1,6 +1,9 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# Version 3.2.2 October 2016 +# Change to the way the new database version is handled. +# # Version 3.2.1 September 2016 # Update for v4.0 of Windows Desktop app. # @@ -139,13 +142,13 @@ # """Manage all Kobo books, either encrypted or DRM-free.""" -__version__ = '3.2.1' +__version__ = '3.2.2' __about__ = u"Obok v{0}\nCopyright © 2012-2016 Physisticated et al.".format(__version__) import sys import os import subprocess -import apsw +import sqlite3 import base64 import binascii import re @@ -155,6 +158,7 @@ import xml.etree.ElementTree as ET import string import shutil import argparse +import tempfile can_parse_xml = True try: @@ -358,7 +362,18 @@ class KoboLibrary(object): if (self.kobodir != u""): self.bookdir = os.path.join(self.kobodir, u"kepub") - self.__sqlite = apsw.Connection(kobodb) + # make a copy of the database in a temporary file + # so we can ensure it's not using WAL logging which sqlite3 can't do. + self.newdb = tempfile.NamedTemporaryFile(mode='wb', delete=False) + print self.newdb.name + olddb = open(kobodb, 'rb') + self.newdb.write(olddb.read(18)) + self.newdb.write('\x01\x01') + olddb.read(2) + self.newdb.write(olddb.read()) + olddb.close() + self.newdb.close() + self.__sqlite = sqlite3.connect(self.newdb.name) self.__cursor = self.__sqlite.cursor() self._userkeys = [] self._books = [] @@ -369,6 +384,8 @@ class KoboLibrary(object): """Closes the database used by the library.""" self.__cursor.close() self.__sqlite.close() + # delete the temporary copy of the database + os.remove(self.newdb.name) @property def userkeys (self): @@ -393,13 +410,11 @@ class KoboLibrary(object): """Drm-free""" for f in os.listdir(self.bookdir): if(f not in self._volumeID): - try: - row = self.__cursor.execute("SELECT Title, Attribution, Series FROM content WHERE ContentID = '" + f + "'").next() + row = self.__cursor.execute("SELECT Title, Attribution, Series FROM content WHERE ContentID = '" + f + "'").fetchone() + if row is not None: fTitle = row[0] self._books.append(KoboBook(f, fTitle, self.__bookfile(f), 'drm-free', self.__cursor, author=row[1], series=row[2])) self._volumeID.append(f) - except StopIteration: - pass """Sort""" self._books.sort(key=lambda x: x.title) return self._books @@ -441,9 +456,14 @@ class KoboLibrary(object): def __getuserids (self): userids = [] cursor = self.__cursor.execute('SELECT UserID FROM user') - for row in cursor.next(): - userid = row - userids.append(userid) + row = cursor.fetchone() + while row is not None: + try: + userid = row[0] + userids.append(userid) + except: + pass + row = cursor.fetchone() return userids def __getuserkeys (self, macaddr):