From ad08f4291a0e521a1b8b0c249b76bda06dd8707d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Tue, 28 May 2013 16:18:16 +0200 Subject: [PATCH] a?adida la funci?n de borrar c?mics del disco --- YACReaderLibrary/db/tablemodel.cpp | 16 ++++++++++++++ YACReaderLibrary/db/tablemodel.h | 1 + YACReaderLibrary/images.qrc | 1 + YACReaderLibrary/library_window.cpp | 31 ++++++++++++++++++++++++++++ YACReaderLibrary/library_window.h | 2 ++ images/trash.png | Bin 0 -> 23526 bytes 6 files changed, 51 insertions(+) create mode 100644 images/trash.png diff --git a/YACReaderLibrary/db/tablemodel.cpp b/YACReaderLibrary/db/tablemodel.cpp index 62b8f1d3..0a8a3be2 100644 --- a/YACReaderLibrary/db/tablemodel.cpp +++ b/YACReaderLibrary/db/tablemodel.cpp @@ -433,4 +433,20 @@ QModelIndex TableModel::getIndexFromId(quint64 id) } return index(i,0); +} + +void TableModel::remove(ComicDB * comic, int row) +{ + beginRemoveRows(QModelIndex(),row,row); + QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath); + + DBHelper::removeFromDB(comic,db); + + removeRow(row); + delete _data.at(row); + _data.removeAt(row); + + db.close(); + QSqlDatabase::removeDatabase(_databasePath); + endRemoveRows(); } \ No newline at end of file diff --git a/YACReaderLibrary/db/tablemodel.h b/YACReaderLibrary/db/tablemodel.h index 62b80960..ecd9d945 100644 --- a/YACReaderLibrary/db/tablemodel.h +++ b/YACReaderLibrary/db/tablemodel.h @@ -45,6 +45,7 @@ public: //setComicInfoForSelectedComis(QList list); -->inserta la información común para los comics seleccionados QVector setComicsRead(QList list,bool read); qint64 asignNumbers(QList list,int startingNumber); + void remove(ComicDB * comic, int row); private: void setupModelData( QSqlQuery &sqlquery); ComicDB _getComic(const QModelIndex & mi); diff --git a/YACReaderLibrary/images.qrc b/YACReaderLibrary/images.qrc index c5a2bafa..ad413386 100644 --- a/YACReaderLibrary/images.qrc +++ b/YACReaderLibrary/images.qrc @@ -70,5 +70,6 @@ ../images/readRibbon.png ../images/shownCovers.png ../images/hiddenCovers.png + ../images/trash.png \ No newline at end of file diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index fc13d04f..001357d9 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -477,6 +477,10 @@ void LibraryWindow::createActions() forceConverExtractedAction->setText(tr("Update cover")); forceConverExtractedAction->setIcon(QIcon(":/images/importCover.png")); + deleteComicsAction = new QAction(this); + deleteComicsAction->setText(tr("Delete selected comics")); + deleteComicsAction->setIcon(QIcon(":/images/trash.png")); + hideComicViewAction = new QAction(this); hideComicViewAction->setText(tr("Hide comic flow")); hideComicViewAction->setIcon(QIcon(":/images/hideComicFlow.png")); @@ -620,6 +624,10 @@ void LibraryWindow::createToolBars() editInfoToolBar->addAction(showHideMarksAction); + editInfoToolBar->addSeparator(); + + editInfoToolBar->addAction(deleteComicsAction); + editInfoToolBar->addWidget(new QToolBarStretch()); editInfoToolBar->addAction(hideComicViewAction); @@ -734,6 +742,8 @@ void LibraryWindow::createConnections() connect(editSelectedComicsAction,SIGNAL(triggered()),this,SLOT(showProperties())); connect(asignOrderActions,SIGNAL(triggered()),this,SLOT(asignNumbers())); + connect(deleteComicsAction,SIGNAL(triggered()),this,SLOT(deleteComics())); + connect(hideComicViewAction, SIGNAL(toggled(bool)),this, SLOT(hideComicFlow(bool))); } @@ -1475,4 +1485,25 @@ QModelIndexList LibraryWindow::getSelectedComics() selection = comicView->selectionModel()->selectedRows(); } return selection; +} + +void LibraryWindow::deleteComics() +{ + //TODO move this to another thread + QModelIndexList indexList = getSelectedComics(); + + QString currentComicPath; + QListIterator i(indexList); + i.toBack(); + while (i.hasPrevious()) + { + QModelIndex mi = i.previous(); + ComicDB comic = dmCV->getComic(mi); + currentComicPath = currentPath() + comic.path; + if(QFile::remove(currentComicPath)) + { + dmCV->remove(&comic,mi.row()); + comicFlow->remove(mi.row()); + } + } } \ No newline at end of file diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index 18254aa3..df63ec0a 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -139,6 +139,7 @@ private: QAction * editSelectedComicsAction; QAction * asignOrderActions; QAction * forceConverExtractedAction; + QAction * deleteComicsAction; QAction * hideComicViewAction; @@ -233,6 +234,7 @@ public: void manageUpdatingError(const QString & error); void manageOpeningLibraryError(const QString & error); QModelIndexList getSelectedComics(); + void deleteComics(); }; #endif diff --git a/images/trash.png b/images/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..e4e7b0750b515e82614f76a7549729b2b95a933a GIT binary patch literal 23526 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