diff --git a/src/calibre/devices/usbms/books.py b/src/calibre/devices/usbms/books.py index 1ddc00729f..50756ef3ee 100644 --- a/src/calibre/devices/usbms/books.py +++ b/src/calibre/devices/usbms/books.py @@ -49,7 +49,7 @@ class Book(object): @property def db_id(self): '''The database id in the application database that this file corresponds to''' - match = re.search(r'_(\d+)$', self.rpath.rpartition('.')[0]) + match = re.search(r'_(\d+)$', self.path.rpartition('.')[0]) if match: return int(match.group(1)) diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index ef0070a91c..5a1baa09b5 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -788,6 +788,12 @@ class BooksModel(QAbstractTableModel): return self.bool_blank_icon return self.bool_no_icon + def ondevice_decorator(r, idx=-1): + text = self.db.data[r][idx] + if text: + return self.bool_yes_icon + return self.bool_blank_icon + def text_type(r, mult=False, idx=-1): text = self.db.data[r][idx] if text and mult: @@ -820,7 +826,11 @@ class BooksModel(QAbstractTableModel): 'ondevice' : functools.partial(text_type, idx=self.db.FIELD_MAP['ondevice'], mult=False), } - self.dc_decorator = {} + + self.dc_decorator = { + 'ondevice':functools.partial(ondevice_decorator, + idx=self.db.FIELD_MAP['ondevice']), + } # Add the custom columns to the data converters for col in self.custom_columns: @@ -1420,11 +1430,11 @@ class DeviceBooksModel(BooksModel): ''' Return indices into underlying database from rows ''' - return [ self.map[r.row()] for r in rows] + return [self.map[r.row()] for r in rows] def data(self, index, role): + row, col = index.row(), index.column() if role == Qt.DisplayRole or role == Qt.EditRole: - row, col = index.row(), index.column() if col == 0: text = self.db[self.map[row]].title if not text: @@ -1449,9 +1459,6 @@ class DeviceBooksModel(BooksModel): tags = self.db[self.map[row]].tags if tags: return QVariant(', '.join(tags)) - elif col == 5: - return QVariant(_('Yes')) \ - if self.db[self.map[row]].in_library else QVariant(_('No')) elif role == Qt.TextAlignmentRole and index.column() in [2, 3]: return QVariant(Qt.AlignRight | Qt.AlignVCenter) elif role == Qt.ToolTipRole and index.isValid(): @@ -1460,6 +1467,10 @@ class DeviceBooksModel(BooksModel): col = index.column() if col in [0, 1] or (col == 4 and self.db.supports_tags()): return QVariant(_("Double click to edit me

")) + elif role == Qt.DecorationRole and col == 5: + if self.db[self.map[row]].in_library: + return QVariant(self.bool_yes_icon) + return NONE def headerData(self, section, orientation, role):