diff --git a/libprs500/gui/database.py b/libprs500/gui/database.py index 4477e7a077..ab81084700 100644 --- a/libprs500/gui/database.py +++ b/libprs500/gui/database.py @@ -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() diff --git a/libprs500/gui/widgets.py b/libprs500/gui/widgets.py index 6d4cd0b975..583e77fa52 100644 --- a/libprs500/gui/widgets.py +++ b/libprs500/gui/widgets.py @@ -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)) diff --git a/libprs500/lrf/meta.py b/libprs500/lrf/meta.py index 2eacf18988..13a69afce4 100644 --- a/libprs500/lrf/meta.py +++ b/libprs500/lrf/meta.py @@ -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)