mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
parent
9f4a2c9d72
commit
77eeb1fe7a
@ -126,20 +126,28 @@ class LibraryDatabase(object):
|
||||
try:
|
||||
data.seek(0)
|
||||
data = data.read()
|
||||
except AttributeError: pass
|
||||
if ext: ext = ext.strip().lower()
|
||||
except AttributeError: pass
|
||||
size = len(data)
|
||||
if ext:
|
||||
ext = ext.strip().lower()
|
||||
data = sqlite.Binary(compress(data))
|
||||
cur = self.con.execute("select extension from books_data where id=? "+\
|
||||
"and extension=?", (_id, ext))
|
||||
present = True
|
||||
try: cur.next()
|
||||
except: present = False
|
||||
try:
|
||||
cur.next()
|
||||
except:
|
||||
present = False
|
||||
if present:
|
||||
self.con.execute("update books_data set data=? where id=? "+\
|
||||
"and extension=?", (data, _id, ext))
|
||||
else:
|
||||
self.con.execute("insert into books_data (id, extension, data) "+\
|
||||
"values (?, ?, ?)", (_id, ext, data))
|
||||
oldsize = self.get_row_by_id(_id, ['size'])['size']
|
||||
if size > oldsize:
|
||||
self.con.execute("update books_meta set size=? where id=? ", \
|
||||
(size, _id))
|
||||
self.con.commit()
|
||||
|
||||
def get_meta_data(self, _id):
|
||||
@ -201,7 +209,18 @@ class LibraryDatabase(object):
|
||||
lrf = LRFMetaFile(c)
|
||||
lrf.thumbnail = cover
|
||||
self.add_format(_id, "lrf", c.getvalue())
|
||||
self.update_max_size(_id)
|
||||
self.commit()
|
||||
|
||||
def update_max_size(self, _id):
|
||||
cur = self.con.execute("select length(data) from books_data where id=?", \
|
||||
(_id,))
|
||||
maxsize = 0
|
||||
for row in cur:
|
||||
maxsize = row[0] if row[0] > maxsize else maxsize
|
||||
self.con.execute("update books_meta set size=? where id=? ", \
|
||||
(maxsize, _id))
|
||||
self.con.commit()
|
||||
|
||||
|
||||
|
||||
|
@ -421,14 +421,17 @@ class LibraryBooksModel(QAbstractTableModel):
|
||||
data = str(qb.data())
|
||||
qb.close()
|
||||
self.db.update_cover(_id, data)
|
||||
self.refresh_row(index.row())
|
||||
|
||||
def add_formats(self, paths, index):
|
||||
for path in paths:
|
||||
f = open(path, "rb")
|
||||
title = os.path.basename(path)
|
||||
ext = title[title.rfind(".")+1:].lower() if "." in title > -1 else None
|
||||
self.db.add_format(self.id_from_index(index), ext, f)
|
||||
_id = self.id_from_index(index)
|
||||
self.db.add_format(_id, ext, f)
|
||||
f.close()
|
||||
self.refresh_row(index.row())
|
||||
self.emit(SIGNAL('formats_added'), index)
|
||||
|
||||
def rowCount(self, parent):
|
||||
@ -519,11 +522,11 @@ class LibraryBooksModel(QAbstractTableModel):
|
||||
def id_from_row(self, row): return self._data[row]["id"]
|
||||
|
||||
def refresh_row(self, row):
|
||||
self._data[row] = self.db.get_row_by_id(self._data[row]["id"], \
|
||||
self.FIELDS)
|
||||
datum = self.db.get_row_by_id(self._data[row]["id"], self.FIELDS)
|
||||
self._data[row:row+1] = [datum]
|
||||
for i in range(len(self._orig_data)):
|
||||
if self._orig_data[i]["id"] == self._data[row]["id"]:
|
||||
self._orig_data[i:i+1] = self._data[row]
|
||||
if self._orig_data[i]["id"] == datum["id"]:
|
||||
self._orig_data[i:i+1] = [datum]
|
||||
break
|
||||
self.emit(SIGNAL("dataChanged(QModelIndex, QModelIndex)"), \
|
||||
self.index(row, 0), self.index(row, self.columnCount(0)-1))
|
||||
|
@ -294,7 +294,11 @@ class LRFMetaFile(object):
|
||||
offset = self.unpack(fmt=DWORD, start=pos)[0] + delta
|
||||
except struct.error:
|
||||
break
|
||||
self.pack(offset, fmt=DWORD, start=pos)
|
||||
if offset >= (2**8)**4:
|
||||
# New offset is larger than a DWORD, so leave
|
||||
# offset unchanged
|
||||
offset -= delta
|
||||
self.pack(offset, fmt=DWORD, start=pos)
|
||||
try:
|
||||
self._file.read(12)
|
||||
except EOFError:
|
||||
@ -397,7 +401,3 @@ def main():
|
||||
print str(f[1]) + ":", lrf.__getattribute__(f[0])
|
||||
if options.get_thumbnail:
|
||||
print "Thumbnail:", td
|
||||
|
||||
# This turns overflow warnings into errors
|
||||
import warnings
|
||||
warnings.simplefilter("error", DeprecationWarning)
|
||||
|
Loading…
x
Reference in New Issue
Block a user