mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-31 14:33:54 -04:00
Show number of books in library
This commit is contained in:
parent
fa7a8785a7
commit
8e114c3efa
@ -204,7 +204,7 @@ TITLEPAGE = '''\
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<img src="%s" alt="cover" />
|
<img src="%s" alt="cover" style="height: 100%%" />
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -168,7 +168,8 @@ class EbookIterator(object):
|
|||||||
if bookmarks is None:
|
if bookmarks is None:
|
||||||
bookmarks = self.bookmarks
|
bookmarks = self.bookmarks
|
||||||
dat = self.serialize_bookmarks(bookmarks)
|
dat = self.serialize_bookmarks(bookmarks)
|
||||||
if os.path.splitext(self.pathtoebook)[1].lower() == '.epub':
|
if os.path.splitext(self.pathtoebook)[1].lower() == '.epub' and \
|
||||||
|
os.access(self.pathtoebook, os.R_OK):
|
||||||
zf = open(self.pathtoebook, 'r+b')
|
zf = open(self.pathtoebook, 'r+b')
|
||||||
zipf = ZipFile(zf, mode='a')
|
zipf = ZipFile(zf, mode='a')
|
||||||
for name in zipf.namelist():
|
for name in zipf.namelist():
|
||||||
|
@ -163,11 +163,18 @@ class BooksModel(QAbstractTableModel):
|
|||||||
self.reset()
|
self.reset()
|
||||||
|
|
||||||
def add_books(self, paths, formats, metadata, uris=[], add_duplicates=False):
|
def add_books(self, paths, formats, metadata, uris=[], add_duplicates=False):
|
||||||
return self.db.add_books(paths, formats, metadata, uris,
|
ret = self.db.add_books(paths, formats, metadata, uris,
|
||||||
add_duplicates=add_duplicates)
|
add_duplicates=add_duplicates)
|
||||||
|
self.count_changed()
|
||||||
|
return ret
|
||||||
|
|
||||||
def add_news(self, path, recipe):
|
def add_news(self, path, recipe):
|
||||||
return self.db.add_news(path, recipe)
|
ret = self.db.add_news(path, recipe)
|
||||||
|
self.count_changed()
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def count_changed(self, *args):
|
||||||
|
self.emit(SIGNAL('count_changed(int)'), self.db.count())
|
||||||
|
|
||||||
def row_indices(self, index):
|
def row_indices(self, index):
|
||||||
''' Return list indices of all cells in index.row()'''
|
''' Return list indices of all cells in index.row()'''
|
||||||
@ -189,9 +196,11 @@ class BooksModel(QAbstractTableModel):
|
|||||||
self.beginRemoveRows(QModelIndex(), row, row)
|
self.beginRemoveRows(QModelIndex(), row, row)
|
||||||
self.db.delete_book(id)
|
self.db.delete_book(id)
|
||||||
self.endRemoveRows()
|
self.endRemoveRows()
|
||||||
|
self.count_changed()
|
||||||
self.clear_caches()
|
self.clear_caches()
|
||||||
self.reset()
|
self.reset()
|
||||||
|
|
||||||
|
|
||||||
def delete_books_by_id(self, ids):
|
def delete_books_by_id(self, ids):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
try:
|
try:
|
||||||
@ -203,12 +212,14 @@ class BooksModel(QAbstractTableModel):
|
|||||||
self.db.delete_book(id)
|
self.db.delete_book(id)
|
||||||
if row > -1:
|
if row > -1:
|
||||||
self.endRemoveRows()
|
self.endRemoveRows()
|
||||||
|
self.count_changed()
|
||||||
self.clear_caches()
|
self.clear_caches()
|
||||||
|
|
||||||
def books_added(self, num):
|
def books_added(self, num):
|
||||||
if num > 0:
|
if num > 0:
|
||||||
self.beginInsertRows(QModelIndex(), 0, num-1)
|
self.beginInsertRows(QModelIndex(), 0, num-1)
|
||||||
self.endInsertRows()
|
self.endInsertRows()
|
||||||
|
self.count_changed()
|
||||||
|
|
||||||
def search(self, text, refinement, reset=True):
|
def search(self, text, refinement, reset=True):
|
||||||
self.db.search(text)
|
self.db.search(text)
|
||||||
|
@ -297,6 +297,8 @@ class Main(MainWindow, Ui_MainWindow):
|
|||||||
self.connect(self.status_bar.tag_view_button, SIGNAL('toggled(bool)'), self.toggle_tags_view)
|
self.connect(self.status_bar.tag_view_button, SIGNAL('toggled(bool)'), self.toggle_tags_view)
|
||||||
self.connect(self.search, SIGNAL('search(PyQt_PyObject, PyQt_PyObject)'),
|
self.connect(self.search, SIGNAL('search(PyQt_PyObject, PyQt_PyObject)'),
|
||||||
self.tags_view.model().reinit)
|
self.tags_view.model().reinit)
|
||||||
|
self.connect(self.library_view.model(), SIGNAL('count_changed(int)'), self.location_view.count_changed)
|
||||||
|
self.library_view.model().count_changed()
|
||||||
########################### Cover Flow ################################
|
########################### Cover Flow ################################
|
||||||
self.cover_flow = None
|
self.cover_flow = None
|
||||||
if CoverFlow is not None:
|
if CoverFlow is not None:
|
||||||
|
@ -136,10 +136,11 @@ class LocationModel(QAbstractListModel):
|
|||||||
self.icons = [QVariant(QIcon(':/library')),
|
self.icons = [QVariant(QIcon(':/library')),
|
||||||
QVariant(QIcon(':/images/reader.svg')),
|
QVariant(QIcon(':/images/reader.svg')),
|
||||||
QVariant(QIcon(':/images/sd.svg'))]
|
QVariant(QIcon(':/images/sd.svg'))]
|
||||||
self.text = [_('Library'),
|
self.text = [_('Library\n%d\nbooks'),
|
||||||
_('Reader\n%s\navailable'),
|
_('Reader\n%s\navailable'),
|
||||||
_('Card\n%s\navailable')]
|
_('Card\n%s\navailable')]
|
||||||
self.free = [-1, -1]
|
self.free = [-1, -1]
|
||||||
|
self.count = 0
|
||||||
self.highlight_row = 0
|
self.highlight_row = 0
|
||||||
self.tooltips = [
|
self.tooltips = [
|
||||||
_('Click to see the list of books available on your computer'),
|
_('Click to see the list of books available on your computer'),
|
||||||
@ -155,7 +156,7 @@ class LocationModel(QAbstractListModel):
|
|||||||
data = NONE
|
data = NONE
|
||||||
if role == Qt.DisplayRole:
|
if role == Qt.DisplayRole:
|
||||||
text = self.text[row]%(human_readable(self.free[row-1])) if row > 0 \
|
text = self.text[row]%(human_readable(self.free[row-1])) if row > 0 \
|
||||||
else self.text[row]
|
else self.text[row]%self.count
|
||||||
data = QVariant(text)
|
data = QVariant(text)
|
||||||
elif role == Qt.DecorationRole:
|
elif role == Qt.DecorationRole:
|
||||||
data = self.icons[row]
|
data = self.icons[row]
|
||||||
@ -192,6 +193,10 @@ class LocationView(QListView):
|
|||||||
QObject.connect(self.selectionModel(), SIGNAL('currentChanged(QModelIndex, QModelIndex)'), self.current_changed)
|
QObject.connect(self.selectionModel(), SIGNAL('currentChanged(QModelIndex, QModelIndex)'), self.current_changed)
|
||||||
self.setCursor(Qt.PointingHandCursor)
|
self.setCursor(Qt.PointingHandCursor)
|
||||||
|
|
||||||
|
def count_changed(self, new_count):
|
||||||
|
self.model().count = new_count
|
||||||
|
self.model().reset()
|
||||||
|
|
||||||
def current_changed(self, current, previous):
|
def current_changed(self, current, previous):
|
||||||
i = current.row()
|
i = current.row()
|
||||||
location = 'library' if i == 0 else 'main' if i == 1 else 'card'
|
location = 'library' if i == 0 else 'main' if i == 1 else 'card'
|
||||||
|
@ -255,6 +255,9 @@ class ResultCache(SearchQueryParser):
|
|||||||
if id in self._map: self._map.remove(id)
|
if id in self._map: self._map.remove(id)
|
||||||
if id in self._map_filtered: self._map_filtered.remove(id)
|
if id in self._map_filtered: self._map_filtered.remove(id)
|
||||||
|
|
||||||
|
def count(self):
|
||||||
|
return len(self._map)
|
||||||
|
|
||||||
def refresh(self, db, field=None, ascending=True):
|
def refresh(self, db, field=None, ascending=True):
|
||||||
temp = db.conn.get('SELECT * FROM meta')
|
temp = db.conn.get('SELECT * FROM meta')
|
||||||
self._data = list(itertools.repeat(None, temp[-1][0]+2)) if temp else []
|
self._data = list(itertools.repeat(None, temp[-1][0]+2)) if temp else []
|
||||||
@ -375,6 +378,7 @@ class LibraryDatabase2(LibraryDatabase):
|
|||||||
self.refresh_ids = functools.partial(self.data.refresh_ids, self.conn)
|
self.refresh_ids = functools.partial(self.data.refresh_ids, self.conn)
|
||||||
self.row = self.data.row
|
self.row = self.data.row
|
||||||
self.has_id = self.data.has_id
|
self.has_id = self.data.has_id
|
||||||
|
self.count = self.data.count
|
||||||
|
|
||||||
self.refresh()
|
self.refresh()
|
||||||
|
|
||||||
@ -1191,9 +1195,6 @@ class LibraryDatabase2(LibraryDatabase):
|
|||||||
for i in iter(self):
|
for i in iter(self):
|
||||||
yield i['id']
|
yield i['id']
|
||||||
|
|
||||||
def count(self):
|
|
||||||
return len(self.data._map)
|
|
||||||
|
|
||||||
def get_data_as_dict(self, prefix=None, authors_as_string=False):
|
def get_data_as_dict(self, prefix=None, authors_as_string=False):
|
||||||
'''
|
'''
|
||||||
Return all metadata stored in the database as a dict. Includes paths to
|
Return all metadata stored in the database as a dict. Includes paths to
|
||||||
|
Loading…
x
Reference in New Issue
Block a user