mirror of
https://github.com/YACReader/yacreader
synced 2025-07-21 14:34:42 -04:00
added support for removing elements from a list
This commit is contained in:
@ -801,16 +801,10 @@ void ComicModel::addComicsToFavorites(const QList<QModelIndex> & comicsList)
|
||||
{
|
||||
QList<ComicDB> comics = getComics(comicsList);
|
||||
|
||||
DBHelper::insertComicsInFavorites(comics, QSqlDatabase());
|
||||
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
|
||||
db.transaction();
|
||||
|
||||
DBHelper::insertComicsInFavorites(comics,db);
|
||||
|
||||
db.commit();
|
||||
|
||||
db.close();
|
||||
QSqlDatabase::removeDatabase(_databasePath);
|
||||
}
|
||||
@ -819,18 +813,71 @@ void ComicModel::addComicsToLabel(const QList<QModelIndex> &comicsList, qulonglo
|
||||
{
|
||||
QList<ComicDB> comics = getComics(comicsList);
|
||||
|
||||
DBHelper::insertComicsInFavorites(comics, QSqlDatabase());
|
||||
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
|
||||
db.transaction();
|
||||
|
||||
DBHelper::insertComicsInLabel(comics,labelId,db);
|
||||
|
||||
db.commit();
|
||||
db.close();
|
||||
QSqlDatabase::removeDatabase(_databasePath);
|
||||
}
|
||||
|
||||
void ComicModel::deleteComicsFromFavorites(const QList<QModelIndex> &comicsList)
|
||||
{
|
||||
QList<ComicDB> comics = getComics(comicsList);
|
||||
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
|
||||
DBHelper::deleteComicsFromFavorites(comics,db);
|
||||
|
||||
db.close();
|
||||
QSqlDatabase::removeDatabase(_databasePath);
|
||||
|
||||
deleteComicsFromModel(comicsList);
|
||||
|
||||
}
|
||||
|
||||
void ComicModel::deleteComicsFromLabel(const QList<QModelIndex> &comicsList, qulonglong labelId)
|
||||
{
|
||||
QList<ComicDB> comics = getComics(comicsList);
|
||||
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
|
||||
DBHelper::deleteComicsFromLabel(comics,labelId,db);
|
||||
|
||||
db.close();
|
||||
QSqlDatabase::removeDatabase(_databasePath);
|
||||
|
||||
deleteComicsFromModel(comicsList);
|
||||
}
|
||||
|
||||
void ComicModel::deleteComicsFromReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId)
|
||||
{
|
||||
QList<ComicDB> comics = getComics(comicsList);
|
||||
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
|
||||
DBHelper::deleteComicsFromReadingList(comics,readingListId,db);
|
||||
|
||||
db.close();
|
||||
QSqlDatabase::removeDatabase(_databasePath);
|
||||
|
||||
deleteComicsFromModel(comicsList);
|
||||
}
|
||||
|
||||
void ComicModel::deleteComicsFromModel(const QList<QModelIndex> &comicsList)
|
||||
{
|
||||
QListIterator<QModelIndex> it(comicsList);
|
||||
it.toBack();
|
||||
while(it.hasPrevious())
|
||||
{
|
||||
int row = it.previous().row();
|
||||
beginRemoveRows(QModelIndex(),row,row);
|
||||
_data.removeAt(row);
|
||||
endRemoveRows();
|
||||
}
|
||||
|
||||
if(_data.isEmpty())
|
||||
emit isEmpty();
|
||||
}
|
||||
|
||||
|
||||
|
@ -65,6 +65,12 @@ public:
|
||||
void addComicsToFavorites(const QList<QModelIndex> &comicsList);
|
||||
void addComicsToLabel(const QList<QModelIndex> &comicsList, qulonglong labelId);
|
||||
|
||||
void deleteComicsFromFavorites(const QList<QModelIndex> &comicsList);
|
||||
void deleteComicsFromLabel(const QList<QModelIndex> &comicsList, qulonglong labelId);
|
||||
void deleteComicsFromReadingList(const QList<QModelIndex> &comicsList, qulonglong readingListId);
|
||||
|
||||
void deleteComicsFromModel(const QList<QModelIndex> &comicsList);
|
||||
|
||||
QHash<int, QByteArray> roleNames() const;
|
||||
|
||||
enum Columns {
|
||||
|
@ -161,6 +161,62 @@ void DBHelper::removeListFromDB(qulonglong id, QSqlDatabase &db)
|
||||
query.exec();
|
||||
}
|
||||
|
||||
void DBHelper::deleteComicsFromFavorites(const QList<ComicDB> &comicsList, QSqlDatabase &db)
|
||||
{
|
||||
db.transaction();
|
||||
|
||||
QLOG_DEBUG() << "deleteComicsFromFavorites----------------------------------";
|
||||
|
||||
QSqlQuery query(db);
|
||||
query.prepare("DELETE FROM comic_default_reading_list WHERE comic_id = :comic_id AND default_reading_list_id = 1");
|
||||
foreach(ComicDB comic, comicsList)
|
||||
{
|
||||
query.bindValue(":comic_id", comic.id);
|
||||
query.exec();
|
||||
}
|
||||
|
||||
db.commit();
|
||||
}
|
||||
|
||||
void DBHelper::deleteComicsFromLabel(const QList<ComicDB> &comicsList, qulonglong labelId, QSqlDatabase &db)
|
||||
{
|
||||
db.transaction();
|
||||
|
||||
QLOG_DEBUG() << "deleteComicsFromLabel----------------------------------";
|
||||
|
||||
QSqlQuery query(db);
|
||||
query.prepare("DELETE FROM comic_label WHERE comic_id = :comic_id AND label_id = :label_id");
|
||||
foreach(ComicDB comic, comicsList)
|
||||
{
|
||||
query.bindValue(":comic_id", comic.id);
|
||||
query.bindValue(":label_id", labelId);
|
||||
query.exec();
|
||||
|
||||
QLOG_DEBUG() << "cid = " << comic.id << "lid = " << labelId;
|
||||
QLOG_DEBUG() << query.lastError().databaseText() << "-" << query.lastError().driverText();
|
||||
}
|
||||
|
||||
db.commit();
|
||||
}
|
||||
|
||||
void DBHelper::deleteComicsFromReadingList(const QList<ComicDB> &comicsList, qulonglong readingListId, QSqlDatabase &db)
|
||||
{
|
||||
db.transaction();
|
||||
|
||||
QLOG_DEBUG() << "deleteComicsFromReadingList----------------------------------";
|
||||
|
||||
QSqlQuery query(db);
|
||||
query.prepare("DELETE FROM comic_reading_list WHERE comic_id = :comic_id AND reading_list_id = :reading_list_id");
|
||||
foreach(ComicDB comic, comicsList)
|
||||
{
|
||||
query.bindValue(":comic_id", comic.id);
|
||||
query.bindValue(":reading_list_id", readingListId);
|
||||
query.exec();
|
||||
}
|
||||
|
||||
db.commit();
|
||||
}
|
||||
|
||||
//updates
|
||||
void DBHelper::update(ComicDB * comic, QSqlDatabase & db)
|
||||
{
|
||||
@ -423,6 +479,8 @@ void DBHelper::insertComicsInFavorites(const QList<ComicDB> &comicsList, QSqlDat
|
||||
QSqlRecord record = getNumComicsInFavoritesQuery.record();
|
||||
int numComics = record.value(0).toInt();*/
|
||||
|
||||
db.transaction();
|
||||
|
||||
QSqlQuery query(db);
|
||||
query.prepare("INSERT INTO comic_default_reading_list (default_reading_list_id, comic_id) "
|
||||
"VALUES (1, :comic_id)");
|
||||
@ -433,10 +491,14 @@ void DBHelper::insertComicsInFavorites(const QList<ComicDB> &comicsList, QSqlDat
|
||||
//query.bindValue(":order", numComics++);
|
||||
query.exec();
|
||||
}
|
||||
|
||||
db.commit();
|
||||
}
|
||||
|
||||
void DBHelper::insertComicsInLabel(const QList<ComicDB> &comicsList, qulonglong labelId, QSqlDatabase &db)
|
||||
{
|
||||
db.transaction();
|
||||
|
||||
QSqlQuery query(db);
|
||||
query.prepare("INSERT INTO comic_label (label_id, comic_id) "
|
||||
"VALUES (:label_id, :comic_id)");
|
||||
@ -447,6 +509,8 @@ void DBHelper::insertComicsInLabel(const QList<ComicDB> &comicsList, qulonglong
|
||||
query.bindValue(":comic_id", comic.id);
|
||||
query.exec();
|
||||
}
|
||||
|
||||
db.commit();
|
||||
}
|
||||
//queries
|
||||
QList<LibraryItem *> DBHelper::getFoldersFromParent(qulonglong parentId, QSqlDatabase & db, bool sort)
|
||||
|
@ -36,6 +36,10 @@ public:
|
||||
static void removeFromDB(ComicDB * comic, QSqlDatabase & db);
|
||||
static void removeLabelFromDB(qulonglong id, QSqlDatabase & db);
|
||||
static void removeListFromDB(qulonglong id, QSqlDatabase & db);
|
||||
//logic deletes
|
||||
static void deleteComicsFromFavorites(const QList<ComicDB> & comicsList, QSqlDatabase & db);
|
||||
static void deleteComicsFromLabel(const QList<ComicDB> & comicsList, qulonglong labelId, QSqlDatabase & db);
|
||||
static void deleteComicsFromReadingList(const QList<ComicDB> & comicsList, qulonglong readingListId, QSqlDatabase & db);
|
||||
//inserts
|
||||
static qulonglong insert(Folder * folder, QSqlDatabase & db);
|
||||
static qulonglong insert(ComicDB * comic, QSqlDatabase & db);
|
||||
|
@ -2510,26 +2510,38 @@ QModelIndexList LibraryWindow::getSelectedComics()
|
||||
|
||||
void LibraryWindow::deleteComics()
|
||||
{
|
||||
int ret = QMessageBox::question(this,tr("Delete comics"),tr("All the selected comics will be deleted from your disk. Are you sure?"),QMessageBox::Yes,QMessageBox::No);
|
||||
//TODO
|
||||
if(!listsView->selectionModel()->selectedRows().isEmpty())
|
||||
{
|
||||
deleteComicsFromList();
|
||||
}else
|
||||
{
|
||||
deleteComicsFromDisk();
|
||||
}
|
||||
}
|
||||
|
||||
if(ret == QMessageBox::Yes)
|
||||
{
|
||||
void LibraryWindow::deleteComicsFromDisk()
|
||||
{
|
||||
int ret = QMessageBox::question(this,tr("Delete comics"),tr("All the selected comics will be deleted from your disk. Are you sure?"),QMessageBox::Yes,QMessageBox::No);
|
||||
|
||||
QModelIndexList indexList = getSelectedComics();
|
||||
if(ret == QMessageBox::Yes)
|
||||
{
|
||||
|
||||
QModelIndexList indexList = getSelectedComics();
|
||||
|
||||
QList<ComicDB> comics = comicsModel->getComics(indexList);
|
||||
|
||||
QList<QString> paths;
|
||||
QString libraryPath = currentPath();
|
||||
foreach(ComicDB comic, comics)
|
||||
{
|
||||
QList<QString> paths;
|
||||
QString libraryPath = currentPath();
|
||||
foreach(ComicDB comic, comics)
|
||||
{
|
||||
paths.append(libraryPath + comic.path);
|
||||
QLOG_INFO() << comic.path;
|
||||
QLOG_INFO() << comic.id;
|
||||
QLOG_INFO() << comic.parentId;
|
||||
}
|
||||
}
|
||||
|
||||
ComicsRemover * remover = new ComicsRemover(indexList,paths);
|
||||
ComicsRemover * remover = new ComicsRemover(indexList,paths);
|
||||
QThread * thread = NULL;
|
||||
|
||||
thread = new QThread(this);
|
||||
@ -2545,7 +2557,7 @@ void LibraryWindow::deleteComics()
|
||||
|
||||
connect(remover, SIGNAL(finished()),this,SLOT(checkEmptyFolder()));
|
||||
connect(remover, SIGNAL(finished()),this,SLOT(checkRemoveError()));
|
||||
connect(remover, SIGNAL(finished()), remover, SLOT(deleteLater()));
|
||||
connect(remover, SIGNAL(finished()), remover, SLOT(deleteLater()));
|
||||
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
|
||||
|
||||
if(thread != NULL)
|
||||
@ -2553,6 +2565,37 @@ void LibraryWindow::deleteComics()
|
||||
}
|
||||
}
|
||||
|
||||
void LibraryWindow::deleteComicsFromList()
|
||||
{
|
||||
int ret = QMessageBox::question(this,tr("Remove comics"),tr("Comics will only be deleted from the current label/list. Are you sure?"),QMessageBox::Yes,QMessageBox::No);
|
||||
|
||||
if(ret == QMessageBox::Yes)
|
||||
{
|
||||
QModelIndexList indexList = getSelectedComics();
|
||||
if(indexList.isEmpty())
|
||||
return;
|
||||
|
||||
QModelIndex mi = listsModelProxy->mapToSource(listsView->currentIndex());
|
||||
|
||||
ReadingListModel::TypeList typeList = (ReadingListModel::TypeList)mi.data(ReadingListModel::TypeListsRole).toInt();
|
||||
|
||||
qulonglong id = mi.data(ReadingListModel::IDRole).toULongLong();
|
||||
switch (typeList) {
|
||||
case ReadingListModel::SpecialList:
|
||||
//by now only 'favorites'
|
||||
comicsModel->deleteComicsFromFavorites(indexList);
|
||||
break;
|
||||
case ReadingListModel::Label:
|
||||
comicsModel->deleteComicsFromLabel(indexList,id);
|
||||
break;
|
||||
case ReadingListModel::ReadingList:
|
||||
comicsModel->deleteComicsFromReadingList(indexList,id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void LibraryWindow::showFoldersContextMenu(const QPoint &point)
|
||||
{
|
||||
QModelIndex sourceMI = foldersModelProxy->mapToSource(foldersView->indexAt(point));
|
||||
|
@ -346,6 +346,8 @@ public slots:
|
||||
void manageOpeningLibraryError(const QString & error);
|
||||
QModelIndexList getSelectedComics();
|
||||
void deleteComics();
|
||||
void deleteComicsFromDisk();
|
||||
void deleteComicsFromList();
|
||||
//void showSocial();
|
||||
void showFoldersContextMenu(const QPoint & point);
|
||||
void libraryAlreadyExists(const QString & name);
|
||||
|
@ -209,6 +209,17 @@ void YACReaderNavigationController::reselectCurrentList()
|
||||
selectedList(libraryWindow->listsView->currentIndex());
|
||||
}
|
||||
|
||||
void YACReaderNavigationController::reselectCurrentSource()
|
||||
{
|
||||
if(!libraryWindow->listsView->selectionModel()->selectedRows().isEmpty())
|
||||
{
|
||||
reselectCurrentList();
|
||||
}else
|
||||
{
|
||||
reselectCurrentFolder();
|
||||
}
|
||||
}
|
||||
|
||||
void YACReaderNavigationController::selectedIndexFromHistory(const YACReaderLibrarySourceContainer &sourceContainer)
|
||||
{
|
||||
//TODO NO searching allowed, just disable backward/forward actions in searching mode
|
||||
@ -273,7 +284,7 @@ void YACReaderNavigationController::setupConnections()
|
||||
connect(libraryWindow->listsView,SIGNAL(clicked(QModelIndex)),this,SLOT(selectedList(QModelIndex)));
|
||||
connect(libraryWindow->historyController,SIGNAL(modelIndexSelected(YACReaderLibrarySourceContainer)),this,SLOT(selectedIndexFromHistory(YACReaderLibrarySourceContainer)));
|
||||
connect(libraryWindow->emptyFolderWidget,SIGNAL(subfolderSelected(QModelIndex,int)),this,SLOT(selectSubfolder(QModelIndex,int)));
|
||||
connect(libraryWindow->comicsModel,SIGNAL(isEmpty()),this,SLOT(reselectCurrentFolder()));
|
||||
connect(libraryWindow->comicsModel,SIGNAL(isEmpty()),this,SLOT(reselectCurrentSource()));
|
||||
}
|
||||
|
||||
qulonglong YACReaderNavigationController::folderModelIndexToID(const QModelIndex &mi)
|
||||
|
@ -22,6 +22,9 @@ public slots:
|
||||
//reading lists
|
||||
void selectedList(const QModelIndex & mi);
|
||||
void reselectCurrentList();
|
||||
|
||||
void reselectCurrentSource();
|
||||
|
||||
//history navigation
|
||||
void selectedIndexFromHistory(const YACReaderLibrarySourceContainer &sourceContainer);
|
||||
void loadIndexFromHistory(const YACReaderLibrarySourceContainer &sourceContainer);
|
||||
|
Reference in New Issue
Block a user