summaryrefslogtreecommitdiff
path: root/src/frontend/bookshelfmanager/installpage/btinstallthread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/bookshelfmanager/installpage/btinstallthread.cpp')
-rw-r--r--src/frontend/bookshelfmanager/installpage/btinstallthread.cpp185
1 files changed, 0 insertions, 185 deletions
diff --git a/src/frontend/bookshelfmanager/installpage/btinstallthread.cpp b/src/frontend/bookshelfmanager/installpage/btinstallthread.cpp
deleted file mode 100644
index 3b25f02..0000000
--- a/src/frontend/bookshelfmanager/installpage/btinstallthread.cpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/*********
-*
-* This file is part of BibleTime's source code, http://www.bibletime.info/.
-*
-* Copyright 1999-2011 by the BibleTime developers.
-* The BibleTime source code is licensed under the GNU General Public License version 2.0.
-*
-**********/
-
-#include "frontend/bookshelfmanager/installpage/btinstallthread.h"
-
-#include <QApplication>
-#include <QDebug>
-#include <QDir>
-#include <QString>
-#include <QThread>
-#include "backend/managers/cswordbackend.h"
-#include "frontend/bookshelfmanager/btinstallmgr.h"
-#include "backend/btinstallbackend.h"
-
-// Sword includes:
-#include <filemgr.h>
-
-
-BtInstallThread::BtInstallThread(const QString &moduleName, const QString &sourceName,
- const QString &destinationName, QObject *parent)
- : QThread(parent),
- done(false),
- m_module(moduleName),
- m_destination(destinationName),
- m_source(sourceName),
- m_cancelled(false) {
- m_iMgr = new BtInstallMgr();
-}
-
-
-BtInstallThread::~BtInstallThread() {
- delete m_iMgr;
-}
-
-void BtInstallThread::run() {
- qDebug() << "****************************************\nBtInstallThread::run, mod:" << m_module << "\n************************************";
-
-
- emit preparingInstall(m_module, m_source);
- //This is 0 before set here - remember when using the value when cancelling
- // the installation before this has been run
- m_installSource = QSharedPointer<sword::InstallSource>(new sword::InstallSource(BtInstallBackend::source(m_source)));
- m_backendForSource = QSharedPointer<CSwordBackend>(BtInstallBackend::backend(*m_installSource));
-
- //make sure target/mods.d and target/modules exist
- /// \todo move this to some common precondition
- QDir dir(m_destination);
- if (!dir.exists()) {
- dir.mkdir(m_destination);
- qDebug() << "made directory" << m_destination;
- }
- if (!dir.exists("modules")) {
- dir.mkdir("modules");
- qDebug() << "made directory" << m_destination << "/modules";
- }
- if (!dir.exists("mods.d")) {
- dir.mkdir("mods.d");
- qDebug() << "made directory" << m_destination << "/mods.d";
- }
-
- QObject::connect(m_iMgr, SIGNAL(percentCompleted(int, int)), this, SLOT(slotManagerStatusUpdated(int, int)), Qt::QueuedConnection);
- QObject::connect(m_iMgr, SIGNAL(downloadStarted()), this, SLOT(slotDownloadStarted()), Qt::QueuedConnection);
-
- //check whether it's an update. If yes, remove existing module first
- /// \todo silently removing without undo if the user cancels the update is WRONG!!!
- removeModule();
-
- // manager for the destination path
- sword::SWMgr lMgr( m_destination.toLatin1() );
-
- if (BtInstallBackend::isRemote(*m_installSource)) {
- int status = m_iMgr->installModule(&lMgr, 0, m_module.toLatin1(), m_installSource.data());
- if (status != 0) {
- qWarning() << "Error with install: " << status << "module:" << m_module;
- }
- else {
- done = true;
- emit installCompleted(m_module, m_source, status);
- }
- }
- else { //local source
- emit statusUpdated(m_module, 0);
- int status = m_iMgr->installModule(&lMgr, m_installSource->directory.c_str(), m_module.toLatin1());
- if (status > 0) {
- qWarning() << "Error with install: " << status << "module:" << m_module;
- }
- else if (status == -1) {
- // it was terminated, do nothing
- }
- else {
- emit statusUpdated(m_module, 100);
- done = true;
- emit installCompleted(m_module, m_source, status);
- }
- }
-}
-
-void BtInstallThread::slotStopInstall() {
- qDebug() << "*************************************\nBtInstallThread::slotStopInstall" << m_module << "\n********************************";
- if (!done) {
- done = true;
- qDebug() << "*********************************\nBtInstallThread::slotStopInstall, installing" << m_module << "was cancelled\n**************************************";
- m_iMgr->terminate();
- //this->terminate(); // It's dangerous to forcibly stop, but we will clean up the files
- //qApp->processEvents();
- // wait to terminate for some secs. We rather let the execution go on and cleaning up to fail than the app to freeze
- int notRun = this->wait(25000);
- if (notRun) {
- this->terminate();
- this->wait(10000);
- qDebug() << "installthread (" << m_module << ") terminated, delete m_iMgr";
- delete m_iMgr; // this makes sure the ftp library will be cleaned up in the destroyer
- m_iMgr = 0;
- }
- // cleanup: remove the module, remove the temp files
- // if installation has already started
- if (m_installSource.data() != 0) {
- // remove the installed module, just to be sure because mgr may
- // have been terminated when copying files
- removeModule();
- removeTempFiles();
- qDebug() << "BtInstallThread::slotStopInstall will emit installStopped...";
- }
- emit installStopped(m_module, m_source);
- }
-}
-
-void BtInstallThread::slotManagerStatusUpdated(int totalProgress, int /*fileProgress*/) {
- emit statusUpdated(m_module, totalProgress);
-}
-
-void BtInstallThread::slotDownloadStarted() {
- emit downloadStarted(m_module);
-}
-
-void BtInstallThread::removeModule() {
- CSwordModuleInfo* m;
- m = CSwordBackend::instance()->findModuleByName(m_module);
- if (!m) {
- m = BtInstallBackend::backend(BtInstallBackend::source(m_destination.toLatin1()))->findModuleByName(m_module);
- }
- if (m) { //module found?
- qDebug() << "BtInstallThread::removeModule, module" << m_module << "found";
- QString prefixPath = m->config(CSwordModuleInfo::AbsoluteDataPath) + "/";
- QString dataPath = m->config(CSwordModuleInfo::DataPath);
- if (dataPath.left(2) == "./") {
- dataPath = dataPath.mid(2);
- }
-
- if (prefixPath.contains(dataPath)) {
- prefixPath.remove( prefixPath.indexOf(dataPath), dataPath.length() );
- }
- else {
- prefixPath = QString::fromLatin1(CSwordBackend::instance()->prefixPath);
- }
-
- sword::SWMgr mgr(prefixPath.toLatin1());
- BtInstallMgr iMgr;
- iMgr.removeModule(&mgr, m->name().toLatin1());
- }
- else {
- qDebug() << "BtInstallThread::removeModule, module" << m_module << "not found";
- }
-}
-
-void BtInstallThread::removeTempFiles() {
- // (take the remote conf file for this module, take DataPath,
- // take the absolute path of the InstallMgr)
-
- //sword::InstallSource is = BtInstallBackend::source(m_source);
- if (BtInstallBackend::isRemote(*m_installSource)) {
- // get the path for the module temp files
- CSwordModuleInfo* mInfo = m_backendForSource->findModuleByName(m_module);
- QString dataPath = mInfo->config(CSwordModuleInfo::AbsoluteDataPath);
- qDebug() << "Delete path:" << dataPath;
- // it's easier to use sword than qt
- sword::FileMgr::removeDir(dataPath.toLatin1().data());
- }
-}