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:
|
try:
|
||||||
data.seek(0)
|
data.seek(0)
|
||||||
data = data.read()
|
data = data.read()
|
||||||
except AttributeError: pass
|
except AttributeError: pass
|
||||||
if ext: ext = ext.strip().lower()
|
size = len(data)
|
||||||
|
if ext:
|
||||||
|
ext = ext.strip().lower()
|
||||||
data = sqlite.Binary(compress(data))
|
data = sqlite.Binary(compress(data))
|
||||||
cur = self.con.execute("select extension from books_data where id=? "+\
|
cur = self.con.execute("select extension from books_data where id=? "+\
|
||||||
"and extension=?", (_id, ext))
|
"and extension=?", (_id, ext))
|
||||||
present = True
|
present = True
|
||||||
try: cur.next()
|
try:
|
||||||
except: present = False
|
cur.next()
|
||||||
|
except:
|
||||||
|
present = False
|
||||||
if present:
|
if present:
|
||||||
self.con.execute("update books_data set data=? where id=? "+\
|
self.con.execute("update books_data set data=? where id=? "+\
|
||||||
"and extension=?", (data, _id, ext))
|
"and extension=?", (data, _id, ext))
|
||||||
else:
|
else:
|
||||||
self.con.execute("insert into books_data (id, extension, data) "+\
|
self.con.execute("insert into books_data (id, extension, data) "+\
|
||||||
"values (?, ?, ?)", (_id, ext, 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()
|
self.con.commit()
|
||||||
|
|
||||||
def get_meta_data(self, _id):
|
def get_meta_data(self, _id):
|
||||||
@ -201,7 +209,18 @@ class LibraryDatabase(object):
|
|||||||
lrf = LRFMetaFile(c)
|
lrf = LRFMetaFile(c)
|
||||||
lrf.thumbnail = cover
|
lrf.thumbnail = cover
|
||||||
self.add_format(_id, "lrf", c.getvalue())
|
self.add_format(_id, "lrf", c.getvalue())
|
||||||
|
self.update_max_size(_id)
|
||||||
self.commit()
|
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())
|
data = str(qb.data())
|
||||||
qb.close()
|
qb.close()
|
||||||
self.db.update_cover(_id, data)
|
self.db.update_cover(_id, data)
|
||||||
|
self.refresh_row(index.row())
|
||||||
|
|
||||||
def add_formats(self, paths, index):
|
def add_formats(self, paths, index):
|
||||||
for path in paths:
|
for path in paths:
|
||||||
f = open(path, "rb")
|
f = open(path, "rb")
|
||||||
title = os.path.basename(path)
|
title = os.path.basename(path)
|
||||||
ext = title[title.rfind(".")+1:].lower() if "." in title > -1 else None
|
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()
|
f.close()
|
||||||
|
self.refresh_row(index.row())
|
||||||
self.emit(SIGNAL('formats_added'), index)
|
self.emit(SIGNAL('formats_added'), index)
|
||||||
|
|
||||||
def rowCount(self, parent):
|
def rowCount(self, parent):
|
||||||
@ -519,11 +522,11 @@ class LibraryBooksModel(QAbstractTableModel):
|
|||||||
def id_from_row(self, row): return self._data[row]["id"]
|
def id_from_row(self, row): return self._data[row]["id"]
|
||||||
|
|
||||||
def refresh_row(self, row):
|
def refresh_row(self, row):
|
||||||
self._data[row] = self.db.get_row_by_id(self._data[row]["id"], \
|
datum = self.db.get_row_by_id(self._data[row]["id"], self.FIELDS)
|
||||||
self.FIELDS)
|
self._data[row:row+1] = [datum]
|
||||||
for i in range(len(self._orig_data)):
|
for i in range(len(self._orig_data)):
|
||||||
if self._orig_data[i]["id"] == self._data[row]["id"]:
|
if self._orig_data[i]["id"] == datum["id"]:
|
||||||
self._orig_data[i:i+1] = self._data[row]
|
self._orig_data[i:i+1] = [datum]
|
||||||
break
|
break
|
||||||
self.emit(SIGNAL("dataChanged(QModelIndex, QModelIndex)"), \
|
self.emit(SIGNAL("dataChanged(QModelIndex, QModelIndex)"), \
|
||||||
self.index(row, 0), self.index(row, self.columnCount(0)-1))
|
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
|
offset = self.unpack(fmt=DWORD, start=pos)[0] + delta
|
||||||
except struct.error:
|
except struct.error:
|
||||||
break
|
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:
|
try:
|
||||||
self._file.read(12)
|
self._file.read(12)
|
||||||
except EOFError:
|
except EOFError:
|
||||||
@ -397,7 +401,3 @@ def main():
|
|||||||
print str(f[1]) + ":", lrf.__getattribute__(f[0])
|
print str(f[1]) + ":", lrf.__getattribute__(f[0])
|
||||||
if options.get_thumbnail:
|
if options.get_thumbnail:
|
||||||
print "Thumbnail:", td
|
print "Thumbnail:", td
|
||||||
|
|
||||||
# This turns overflow warnings into errors
|
|
||||||
import warnings
|
|
||||||
warnings.simplefilter("error", DeprecationWarning)
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user