summaryrefslogtreecommitdiffstats
path: root/fbreader/src/networkActions/NetworkActions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fbreader/src/networkActions/NetworkActions.cpp')
-rw-r--r--fbreader/src/networkActions/NetworkActions.cpp357
1 files changed, 0 insertions, 357 deletions
diff --git a/fbreader/src/networkActions/NetworkActions.cpp b/fbreader/src/networkActions/NetworkActions.cpp
deleted file mode 100644
index 90a9725..0000000
--- a/fbreader/src/networkActions/NetworkActions.cpp
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * Copyright (C) 2009-2012 Geometer Plus <[email protected]>
- *
- * 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.
- */
-
-#include <ZLResource.h>
-#include <ZLFile.h>
-#include <ZLStringUtil.h>
-#include <ZLDialogManager.h>
-#include <ZLNetworkRequest.h>
-#include <ZLExecutionUtil.h>
-
-#include "../network/NetworkLinkCollection.h"
-#include "../network/NetworkErrors.h"
-#include "NetworkActions.h"
-#include "AuthenticationDialogManager.h"
-#include "NetworkOperationRunnable.h"
-
-#include "../network/NetworkItems.h"
-#include "../network/NetworkLink.h"
-#include "../network/authentication/NetworkAuthenticationManager.h"
-
-#include "../library/Book.h"
-#include "../fbreader/FBReader.h"
-
-NetworkBookReadAction::NetworkBookReadAction(const NetworkBookItem &book, bool demo) : myBook(book), myDemo(demo) {
-}
-
-ZLResourceKey NetworkBookReadAction::key() const {
- return ZLResourceKey(myDemo ? "readDemo" : "read");
-}
-
-bool NetworkBookReadAction::makesSense() const {
- if (myDemo) {
- if (!myBook.localCopyFileName().empty() ||
- !myBook.reference(BookReference::DOWNLOAD_FULL).isNull()) {
- return false;
- }
- shared_ptr<BookReference> reference =
- myBook.reference(BookReference::DOWNLOAD_DEMO);
- return !reference.isNull() && !reference->localCopyFileName().empty();
- } else {
- return !myBook.localCopyFileName().empty();
- }
-}
-
-void NetworkBookReadAction::run() {
- std::string fileName;
- if (myDemo) {
- shared_ptr<BookReference> reference =
- myBook.reference(BookReference::DOWNLOAD_DEMO);
- if (!reference.isNull()) {
- fileName = reference->localCopyFileName();
- }
- } else {
- fileName = myBook.localCopyFileName();
- }
- if (!fileName.empty()) {
- FBReader &fbreader = FBReader::Instance();
- shared_ptr<Book> bookPtr;
- fbreader.createBook(ZLFile(fileName), bookPtr);
- if (!bookPtr.isNull()) {
- fbreader.openBook(bookPtr);
- fbreader.setMode(FBReader::BOOK_TEXT_MODE);
- fbreader.refreshWindow();
- NetworkLibrary::Instance().refresh();
- }
- }
-}
-
-NetworkBookDownloadAction::NetworkBookDownloadAction(NetworkBookTree &tree, const NetworkBookItem &book, bool demo, const std::string &tag) : myTree(tree), myBook(book), myDemo(demo), myTag(tag) {
-}
-
-ZLResourceKey NetworkBookDownloadAction::key() const {
- return ZLResourceKey(myDemo ? "downloadDemo" : "download");
-}
-
-bool NetworkBookDownloadAction::makesSense() const {
- if (myDemo) {
- if (!myBook.localCopyFileName().empty() ||
- !myBook.reference(BookReference::DOWNLOAD_FULL).isNull()) {
- return false;
- }
- shared_ptr<BookReference> reference =
- myBook.reference(BookReference::DOWNLOAD_DEMO);
- return !reference.isNull() && reference->localCopyFileName().empty();
- } else {
- return
- myBook.localCopyFileName().empty() &&
- !myBook.reference(BookReference::DOWNLOAD_FULL).isNull();
- }
-}
-
-class NetworkBookDownloadActionListener : public ZLNetworkRequest::Listener {
-public:
- NetworkBookDownloadActionListener(NetworkBookDownloadAction *action) : myAction(action) {}
- void finished(const std::string &error) {
- myAction->onBookDownloaded(error);
- }
-
-private:
- NetworkBookDownloadAction *myAction;
-};
-
-void NetworkBookDownloadAction::run() {
-
- myTree.notifyDownloadStarted();
-
- if (!NetworkOperationRunnable::tryConnect()) {
- return;
- }
-
- shared_ptr<BookReference> reference = myBook.reference(
- myDemo ? BookReference::DOWNLOAD_DEMO : BookReference::DOWNLOAD_FULL
- );
- if (reference.isNull()) {
- return;
- }
- bool result = NetworkLinkCollection::Instance().downloadBook(*reference, myFileName, new NetworkBookDownloadActionListener(this));
- if (!result) {
- NetworkErrors::showErrorMessage(NetworkLinkCollection::Instance().errorMessage());
- }
-}
-
-void NetworkBookDownloadAction::onBookDownloaded(const std::string &error) {
-
- myTree.notifyDownloadStopped();
-
- if (!error.empty()) {
- NetworkErrors::showErrorMessage(error);
- }
- FBReader &fbreader = FBReader::Instance();
- shared_ptr<Book> downloaderBook;
- fbreader.createBook(ZLFile(myFileName), downloaderBook);
- if (downloaderBook.isNull()) {
- ZLFile(myFileName).remove();
- ZLResourceKey boxKey("cantOpenDownloadedFile");
- const std::string message = ZLStringUtil::printf(ZLDialogManager::dialogMessage(boxKey), myBook.Title);
- ZLDialogManager::Instance().errorBox(boxKey, message);
- fbreader.refreshWindow();
- NetworkLibrary::Instance().refresh();
- return;
- }
-
- downloaderBook->removeAllAuthors();
- for (std::vector<NetworkBookItem::AuthorData>::const_iterator it = myBook.Authors.begin(); it != myBook.Authors.end(); ++it) {
- downloaderBook->addAuthor(it->DisplayName, it->SortKey);
- }
- std::string bookTitle = myBook.Title;
- if (!myTag.empty()) {
- bookTitle += " (" + myTag + ")";
- }
- downloaderBook->setTitle(bookTitle);
- downloaderBook->setLanguage(myBook.Language);
- for (std::vector<std::string>::const_iterator it = myBook.Tags.begin(); it != myBook.Tags.end(); ++it) {
- downloaderBook->addTag(*it);
- }
- if (!myTag.empty()) {
- downloaderBook->addTag(myTag);
- }
- Library::Instance().addBook(downloaderBook);
-
- fbreader.openBook(downloaderBook);
- fbreader.setMode(FBReader::BOOK_TEXT_MODE);
- fbreader.refreshWindow();
- NetworkLibrary::Instance().refresh();
-}
-
-NetworkBookBuyDirectlyAction::NetworkBookBuyDirectlyAction(NetworkBookTree &tree, const NetworkBookItem &book) :NetworkBookDownloadAction(tree, book, false) {
-}
-
-ZLResourceKey NetworkBookBuyDirectlyAction::key() const {
- return ZLResourceKey("buy");
-}
-
-bool NetworkBookBuyDirectlyAction::makesSense() const {
- return
- myBook.localCopyFileName().empty() &&
- myBook.reference(BookReference::DOWNLOAD_FULL).isNull() &&
- !myBook.reference(BookReference::BUY).isNull();
-}
-
-std::string NetworkBookBuyDirectlyAction::text(const ZLResource &resource) const {
- const std::string text = ZLRunnableWithKey::text(resource);
- shared_ptr<BookReference> reference = myBook.reference(BookReference::BUY);
- if (!reference.isNull()) {
- return ZLStringUtil::printf(text, ((BuyBookReference&)*reference).Price);
- }
- return text;
-}
-
-void NetworkBookBuyDirectlyAction::run() {
- if (myBook.Link.authenticationManager().isNull()) {
- finished(std::string());
- return;
- }
- if (!NetworkOperationRunnable::tryConnect()) {
- finished(std::string());
- return;
- }
-
- NetworkAuthenticationManager &mgr = *myBook.Link.authenticationManager();
- myTree.notifyDownloadStarted();
- mgr.isAuthorised(ZLExecutionUtil::createListener(this, &NetworkBookBuyDirectlyAction::onAuthorisationCheck));
-}
-
-class BuyActionAuthListener : public ZLNetworkRequest::Listener {
-public:
- BuyActionAuthListener(NetworkBookBuyDirectlyAction &action) : myAction(action) {
- }
-
- void finished(const std::string &error) {
- myAction.onAuthorised(error);
- }
-
- void setUIStatus(bool enabled) {
- if (enabled) {
- myAction.myTree.notifyDownloadStarted();
- } else {
- myAction.myTree.notifyDownloadStopped();
- }
- }
-
-private:
- NetworkBookBuyDirectlyAction &myAction;
-};
-
-void NetworkBookBuyDirectlyAction::onAuthorisationCheck(ZLUserDataHolder &/*data*/, const std::string &error) {
- myTree.notifyDownloadStopped();
- if (error.empty()) {
- onAuthorised(error);
- } else {
- AuthenticationDialogManager::authAndInitAsync(
- *myBook.Link.authenticationManager(),
- new BuyActionAuthListener(*this)
- );
- }
-}
-
-void NetworkBookBuyDirectlyAction::onAuthorised(const std::string &error) {
- if (!error.empty()) {
- finished(std::string()); //ignore error message
- return;
- }
- NetworkAuthenticationManager &mgr = *myBook.Link.authenticationManager();
- if (!mgr.needPurchase(myBook)) {
- finished(std::string());
- return;
- }
- ZLResourceKey boxKey("purchaseConfirmBox");
- const std::string message = ZLStringUtil::printf(ZLDialogManager::dialogMessage(boxKey), myBook.Title);
- const int code = ZLDialogManager::Instance().questionBox(boxKey, message, ZLResourceKey("buy"), ZLResourceKey("buyAndDownload"), ZLDialogManager::CANCEL_BUTTON);
- if (code == 2) {
- finished(std::string());
- return;
- }
- bool downloadBook = code == 1;
- if (mgr.needPurchase(myBook)) {
- ZLUserDataHolder *bookData = new ZLUserDataHolder;
- if (downloadBook) {
- bookData->addUserData("downloadBook", new ZLUserData);
- }
- myTree.notifyDownloadStarted();
- mgr.purchaseBook(myBook, ZLExecutionUtil::createListener(bookData, this, &NetworkBookBuyDirectlyAction::onPurchased));
- } else if (downloadBook) {
- NetworkBookDownloadAction::run();
- }
-}
-
-void NetworkBookBuyDirectlyAction::onPurchased(ZLUserDataHolder &data, const std::string &error) {
- if (!error.empty()) {
- finished(error);
- return;
- }
- if (data.getUserData("downloadBook").isNull()) {
- finished(std::string());
- } else {
- NetworkBookDownloadAction::run();
- }
-}
-
-void NetworkBookBuyDirectlyAction::finished(const std::string &error) {
- myTree.notifyDownloadStopped();
- NetworkLibrary::Instance().refresh();
- if (!error.empty()) {
- ZLDialogManager::Instance().errorBox(ZLResourceKey("networkError"), error);
- }
-}
-
-NetworkBookBuyInBrowserAction::NetworkBookBuyInBrowserAction(const NetworkBookItem &book) : myBook(book) {
-}
-
-ZLResourceKey NetworkBookBuyInBrowserAction::key() const {
- return ZLResourceKey("buy");
-}
-
-bool NetworkBookBuyInBrowserAction::makesSense() const {
- return
- myBook.localCopyFileName().empty() &&
- myBook.reference(BookReference::DOWNLOAD_FULL).isNull() &&
- myBook.reference(BookReference::BUY).isNull() &&
- !myBook.reference(BookReference::BUY_IN_BROWSER).isNull();
-}
-
-std::string NetworkBookBuyInBrowserAction::text(const ZLResource &resource) const {
- const std::string text = ZLRunnableWithKey::text(resource);
- shared_ptr<BookReference> reference = myBook.reference(BookReference::BUY_IN_BROWSER);
- if (!reference.isNull()) {
- return ZLStringUtil::printf(text, ((BuyBookReference&)*reference).Price);
- }
- return text;
-}
-
-void NetworkBookBuyInBrowserAction::run() {
- shared_ptr<BookReference> reference = myBook.reference(BookReference::BUY_IN_BROWSER);
- if (!reference.isNull()) {
- FBReader::Instance().openLinkInBrowser(reference->URL);
- }
- NetworkLibrary::Instance().refresh();
-}
-
-NetworkBookDeleteAction::NetworkBookDeleteAction(const NetworkBookItem &book) : myBook(book) {
-}
-
-ZLResourceKey NetworkBookDeleteAction::key() const {
- return ZLResourceKey("delete");
-}
-
-bool NetworkBookDeleteAction::makesSense() const {
- return !myBook.localCopyFileName().empty();
-}
-
-void NetworkBookDeleteAction::run() {
- ZLResourceKey boxKey("deleteLocalCopyBox");
- const std::string message = ZLStringUtil::printf(ZLDialogManager::dialogMessage(boxKey), myBook.Title);
- if (ZLDialogManager::Instance().questionBox(boxKey, message, ZLDialogManager::YES_BUTTON, ZLDialogManager::NO_BUTTON) != 0) {
- return;
- }
-
- myBook.removeLocalFiles();
- FBReader::Instance().refreshWindow();
- NetworkLibrary::Instance().refresh();
-}