/************************************************************************ * $Id: imagecachingdialog.cpp 661 2011-04-05 13:16:53Z elzubeir $ * * ------------ * Description: * ------------ * * (C) Copyright 2009-2011 ALLCONTENT. All rights reserved. * * ----------------- * Revision Details: (Updated by Revision Control System) * ----------------- * $Date: 2011-04-05 17:16:53 +0400 (Tue, 05 Apr 2011) $ * $Author: elzubeir $ * $Revision: 661 $ * $HeadURL: file:///opt/svn/socialhose/trunk/app/ClippingStation/imagecachingdialog.cpp $ * ************************************************************************/ #include "imagecachingdialog.h" #include "ui_imagecachingdialog.h" #include #include ImageCachingDialog::ImageCachingDialog(QWidget *parent, QHash &cachedImages) : QDialog(parent), m_ui(new Ui::ImageCachingDialog), m_thread(this), m_cachedImages(cachedImages) { m_ui->setupUi(this); //initalize the bool values m_generalError = false; m_terminated = false; m_completedSuccessfully = false; //connect the termianted signal connect(&m_thread, SIGNAL(terminated()), this, SLOT(threadTerminated()) ); m_timer = new QTimer(); //create a timer and connect it's timeout signal to the update slot connect(m_timer, SIGNAL(timeout()), this, SLOT(update())); readSettings(); } ImageCachingDialog::~ImageCachingDialog() { delete m_ui; if(m_thread.isRunning()) m_thread.quit(); m_timer->stop(); delete m_timer; m_timer = 0; } void ImageCachingDialog::setValues(QStringList srcFiles, QStringList dstFiles) { //m_srcPath = srcPath; m_srcFiles = srcFiles; //m_dstPath = dstPath; m_dstFiles = dstFiles; m_totalFiles = srcFiles.count(); } bool ImageCachingDialog::createCacheDirectory(QString dstPath) { //QString QDir dir(dstPath); if( dir.exists() ) return true; //make the directory if it does not exist return dir.mkpath( dstPath ); } /* bool ImageCachingDialog::recursiveDelete(const QDir &dir) { QString abspath = dir.absolutePath(); qDebug() < infLst = dir.entryInfoList(QStringList("*.jpg"), QDir::NoSymLinks); QStringList flist = dir.entryList(QStringList("*.jpg"), QDir::NoSymLinks | QDir::Files ); qDebug ("File list is %d", flist.count() ); //foreach(QFileInfo finfo, infLst ) foreach (QString fname, flist) { // if(finfo.isDir() ) { QDir subDir(finfo.absolutePath()); if (recursiveDelete(subDir) ) return dir.rmdir(subDir.absolutePath()); return false; } else { //file QDir dir; if( !dir.remove(abspath + "/" + fname)) return false; } } return true; } */ /* void ImageCachingDialog::changeEvent(QEvent *e) { QDialog::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: m_ui->retranslateUi(this); break; default: break; } }*/ void ImageCachingDialog::keyPressEvent(QKeyEvent *key) { if(key->key() == Qt::Key_Escape)//ignore the escape key pressed return; QDialog::keyPressEvent(key); } void ImageCachingDialog::startCaching() { //m_cachedImages.clear(); m_resume = true; QDir dir; //QString dstPath = dir.filePath(m_srcFiles[0]); for(int i=0; i< m_dstFiles.count(); i++) { int index = m_dstFiles[i].lastIndexOf("/"); QString path = m_dstFiles[i].left(index); if(!createCacheDirectory(path)) { qDebug() << "error creating dst Directory"; return; } } populateFilesFromCacheDirectory(); m_ui->progressBar->setRange(0, m_totalFiles); //m_thread.setValues(m_srcPath, m_srcFiles, m_dstPath); m_thread.setValues("", m_srcFiles, "", m_dstFiles); m_thread.start(); //start the read, if(m_timer->isActive() ) m_timer->stop(); m_timer->start(1000); //and the timer with 1 sec timeout } void ImageCachingDialog::stopCaching() { m_thread.terminate(); } void ImageCachingDialog::pause() { m_resume = false; } void ImageCachingDialog::resume() { m_resume = true; } bool ImageCachingDialog::cacheOnePage(QString srcPage, QString dstPage) { //m_srcPath = srcpath; QDir dir; //QString path = dir.filePath(dstPage); int index = dstPage.lastIndexOf("/"); QString path = dstPage.left(index); if (!createCacheDirectory(path) ) return false; //after we checked the cache directory if( !m_cachedImages[ dstPage ] ) { bool ret = false; if(m_useFtp) ret = m_thread.cacheFromFtpServer(srcPage, dstPage); else ret = m_thread.cacheFromFileServer(srcPage, dstPage); m_cachedImages[ dstPage ] = ret; m_totalFilesCompleted++; } return true; } void ImageCachingDialog::threadTerminated() { m_terminated = true; //the user has termianted the process m_completedSuccessfully = false; //and it has not completed successfully m_timer->stop(); done(QDialog::Accepted); } void ImageCachingDialog::update() { if(m_generalError) //if general error has occured, then close the dialog { done(QDialog::Accepted); } m_ui->progressBar->setValue(m_totalFilesCompleted); //values from the ftp thread if(m_totalFilesCompleted == m_totalFiles) //if thread is finished with the ftp operation, then close the ImporterDialog box { m_timer->stop(); m_thread.wait(); m_completedSuccessfully = true; //set the flag to completed successfully done(QDialog::Accepted); //qDebug() << "Thread completed successfully"; } if( !m_resume) { m_timer->stop(); //m_thread.wait(); m_completedSuccessfully = true; //set the flag to completed successfully done(QDialog::Accepted); qDebug() << "Thread exited pre-complition"; } } bool ImageCachingDialog::completedSuccessfully() { return m_completedSuccessfully; } bool ImageCachingDialog::terminated() { return m_terminated; } QString ImageCachingDialog::lastError() { return m_errorString; } int ImageCachingDialog::cachedFilesCount() { return m_totalFilesCompleted; } bool ImageCachingDialog::cachingThreadStarted() { return m_thread.isRunning(); } void ImageCachingDialog::populateFilesFromCacheDirectory() { QDir dir; foreach (QString fname, m_dstFiles) { if( dir.exists(fname) ) m_cachedImages[fname] = true; else m_cachedImages[fname] = false; } } bool ImageCachingDialog::readSettings() { QString ftp_ini = QApplication::applicationDirPath()+ "/config.ini"; QSettings settings(QString(ftp_ini), QSettings::IniFormat); m_useFtp = settings.value("ftp access/useftp").toInt(); //if its set to 0, its false, otherwise it true if(m_useFtp) { m_address = settings.value("ftp access/server").toString(); m_username = settings.value("ftp access/username").toString(); m_password = settings.value("ftp access/password").toString(); m_port = settings.value("ftp access/port").toInt(); if(m_address.isEmpty() || m_username.isEmpty() || m_password.isEmpty() || (m_port == 0)) return false; } else return false; return true; } bool ImageCachingDialog::useFtp() { return m_useFtp; } QString ImageCachingDialog::address() { return m_address; } QString ImageCachingDialog::username() { return m_username; } QString ImageCachingDialog::password() { return m_password; } int ImageCachingDialog::port() { return m_port; }