/* * Copyright (C) 2009-2012 Geometer Plus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifndef __DBRUNNABLES_H__ #define __DBRUNNABLES_H__ #include #include #include "../../fbreader/ReadingState.h" #include "../sqldb/DBConnection.h" #include "../sqldb/DBCommand.h" #include "../sqldb/DBRunnable.h" #include "BooksDBQuery.h" #include "../../library/Lists.h" class FindFileIdRunnable; class LoadFileEntriesRunnable; class DeleteFileEntriesRunnable; /* * Save Runnables */ class InitBooksDBRunnable : public DBRunnable { public: InitBooksDBRunnable(DBConnection &connection); bool run(); private: DBConnection &myConnection; }; class ClearBooksDBRunnable : public DBRunnable { public: ClearBooksDBRunnable(DBConnection &connection); bool run(); private: DBConnection &myConnection; }; class SaveTableBookRunnable : public DBRunnable { public: SaveTableBookRunnable(DBConnection &connection); bool run(); void setBook(shared_ptr book); private: bool addTableBook(const shared_ptr book, int fileId); bool updateTableBook(const shared_ptr book); private: shared_ptr myBook; shared_ptr myFindBookId; shared_ptr myAddBook; shared_ptr myUpdateBook; shared_ptr myFindFileId; }; class SaveAuthorsRunnable : public DBRunnable { public: SaveAuthorsRunnable(DBConnection &connection); bool run(); void setBook(shared_ptr book); private: shared_ptr myBook; shared_ptr mySetBookAuthor; shared_ptr myTrimBookAuthors; shared_ptr myFindAuthorId; shared_ptr myAddAuthor; }; class SaveTagsRunnable : public DBRunnable { public: SaveTagsRunnable(DBConnection &connection); bool run(); void setBook(shared_ptr book); private: int findTagId(shared_ptr tag); private: shared_ptr myBook; shared_ptr myAddBookTag; shared_ptr myDeleteBookTag; shared_ptr myFindTagId; shared_ptr myAddTag; shared_ptr myLoadBookTags; }; class SaveSeriesRunnable : public DBRunnable { public: SaveSeriesRunnable(DBConnection &connection); bool run(); void setBook(shared_ptr book); private: shared_ptr myBook; shared_ptr mySetBookSeries; shared_ptr myDeleteBookSeries; shared_ptr myFindSeriesId; shared_ptr myAddSeries; }; class SaveBookRunnable : public DBRunnable { public: SaveBookRunnable(SaveTableBookRunnable &saveTableBook, SaveAuthorsRunnable &saveAuthors, SaveSeriesRunnable &saveSeries, SaveTagsRunnable &saveTags); bool run(); void setBook(shared_ptr book); private: SaveTableBookRunnable &mySaveTableBook; SaveAuthorsRunnable &mySaveAuthors; SaveSeriesRunnable &mySaveSeries; SaveTagsRunnable &mySaveTags; }; class SaveFileEntriesRunnable : public DBRunnable { public: SaveFileEntriesRunnable(DBConnection &connection); bool run(); void setEntries(const std::string &fileName, const std::vector &entries); private: std::string myFileName; std::vector myEntries; shared_ptr myAddFile; shared_ptr myFindFileId; shared_ptr myDeleteFileEntries; }; class SaveRecentBooksRunnable : public DBRunnable { public: SaveRecentBooksRunnable(DBConnection &connection); bool run(); void setBooks(const BookList &books); private: BookList myBooks; shared_ptr myClearRecentBooks; shared_ptr myInsertRecentBooks; }; class SaveBookStateStackRunnable : public DBRunnable { public: SaveBookStateStackRunnable(DBConnection &connection); bool run(); void setState(int bookId, const std::deque &stack); private: int myBookId; std::deque myStack; shared_ptr myTrimBookStateStack; shared_ptr mySetBookStateStack; }; class DeleteFileEntriesRunnable : public DBRunnable { public: DeleteFileEntriesRunnable(DBConnection &connection); bool run(); void setFileId(int fileId); private: bool doDelete(int fileId); private: int myFileId; shared_ptr myDeleteFileEntries; shared_ptr myLoadFileEntryIds; }; class DeleteBookRunnable : public DBRunnable { public: DeleteBookRunnable(DBConnection &connection); bool run(); void setFileName(const std::string &fileName); private: std::string myFileName; shared_ptr myFindFileId; shared_ptr myDeleteFile; }; inline InitBooksDBRunnable::InitBooksDBRunnable(DBConnection &connection) : myConnection(connection) {} inline ClearBooksDBRunnable::ClearBooksDBRunnable(DBConnection &connection) : myConnection(connection) {} inline void SaveFileEntriesRunnable::setEntries(const std::string &fileName, const std::vector &entries) { myFileName = fileName; myEntries = entries; // copy vector } inline void SaveBookStateStackRunnable::setState(int bookId, const std::deque &stack) { myBookId = bookId; myStack = stack; // copy deque } inline void DeleteFileEntriesRunnable::setFileId(int fileId) { myFileId = fileId; } inline void DeleteBookRunnable::setFileName(const std::string &fileName) { myFileName = fileName; } /* * Load & Modify Runnables */ class FindFileIdRunnable : public DBRunnable { public: FindFileIdRunnable(DBConnection &connection); bool run(); void setFileName(const std::string &fileName, bool add = false); int fileId() const; private: std::string myFileName; bool myAdd; int myFileId; shared_ptr myFindFileId; shared_ptr myAddFile; }; /* * Load Runnables */ class LoadFileEntriesRunnable : public DBRunnable { public: LoadFileEntriesRunnable(DBConnection &connection); bool run(); void setFileName(const std::string &fileName); void collectEntries(std::vector &entries); private: std::string myFileName; std::vector myEntries; shared_ptr myFindFileId; shared_ptr myLoadFileEntries; }; class LoadRecentBooksRunnable : public DBRunnable { public: LoadRecentBooksRunnable(DBConnection &connection); bool run(); void collectFileIds(std::vector &fileIds); private: std::vector myFileIds; shared_ptr myLoadRecentBooks; }; #endif /* __DBRUNNABLES_H__ */