From bba50327e5ff9777521a1219ba7547e147ca8cf8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mateusz=20P=C3=B3=C5=82rola?= Date: Wed, 29 Sep 2010 11:19:16 +0200 Subject: [PATCH] Added downloads of xdxf dicts --- src/plugins/xdxf/XdxfDialog.cpp | 11 ++++- src/plugins/xdxf/XdxfDialog.h | 1 + .../xdxf/XdxfDictDownloadProgressDialog.cpp | 35 +++------------ src/plugins/xdxf/XdxfDictDownloadProgressDialog.h | 5 +-- src/plugins/xdxf/XdxfDictDownloader.cpp | 47 +++++++++++++++++++- src/plugins/xdxf/XdxfDictDownloader.h | 13 ++++++ src/plugins/xdxf/XdxfDictSelectDialog.cpp | 9 +++- 7 files changed, 85 insertions(+), 36 deletions(-) diff --git a/src/plugins/xdxf/XdxfDialog.cpp b/src/plugins/xdxf/XdxfDialog.cpp index 6949e9a..da304b7 100644 --- a/src/plugins/xdxf/XdxfDialog.cpp +++ b/src/plugins/xdxf/XdxfDialog.cpp @@ -57,6 +57,9 @@ XdxfDialog::XdxfDialog(XdxfPlugin *plugin, connect(downloadButton, SIGNAL(clicked()), this, SLOT(downloadFile())); + + connect(&XdxfPlugin::dictDownloader, SIGNAL(fileDownloaded(QString)), + this, SLOT(fileDownloaded(QString))); } connect(confirmButton, SIGNAL(clicked()), @@ -64,6 +67,12 @@ XdxfDialog::XdxfDialog(XdxfPlugin *plugin, } +void XdxfDialog::fileDownloaded(QString name) { + infoLabel->setText(tr("Dictionary file: %1").arg(XdxfPlugin::dictDownloader.downloadedFile())); + _dictionaryFilePath = XdxfPlugin::dictDownloader.downloadedFile(); + updateGeometry(); +} + void XdxfDialog::initializeUI() { mainVerticalLayout = new QVBoxLayout; @@ -80,7 +89,7 @@ void XdxfDialog::initializeUI() { QHBoxLayout* buttonLayout = new QHBoxLayout; browseButton = new QPushButton(tr("Browse")); - browseButton->setMaximumWidth(150); + browseButton->setMaximumWidth(100); downloadButton = new QPushButton(tr("Download")); downloadButton->setMaximumWidth(150); diff --git a/src/plugins/xdxf/XdxfDialog.h b/src/plugins/xdxf/XdxfDialog.h index f6d7e7c..fffb78d 100644 --- a/src/plugins/xdxf/XdxfDialog.h +++ b/src/plugins/xdxf/XdxfDialog.h @@ -94,6 +94,7 @@ private Q_SLOTS: void downloadFile(); void setGenerateCache(bool); void setAccents(bool); + void fileDownloaded(QString); #ifdef Q_WS_MAEMO_5 //! on maemo shows information about checkboxes diff --git a/src/plugins/xdxf/XdxfDictDownloadProgressDialog.cpp b/src/plugins/xdxf/XdxfDictDownloadProgressDialog.cpp index d42bca3..f4962ad 100644 --- a/src/plugins/xdxf/XdxfDictDownloadProgressDialog.cpp +++ b/src/plugins/xdxf/XdxfDictDownloadProgressDialog.cpp @@ -23,38 +23,28 @@ #include "XdxfDictDownloadProgressDialog.h" -XdxfDictDownloadProgressDialog::XdxfDictDownloadProgressDialog(QWidget*parent): +XdxfDictDownloadProgressDialog::XdxfDictDownloadProgressDialog(QString title, QWidget*parent): QDialog(parent) { verticalLayout = new QVBoxLayout(this); setLayout(verticalLayout); - setWindowTitle(tr("Downloading dictionary, please wait")); + setWindowTitle(title); downloadProgressBar = new QProgressBar(this); downloadProgressBar->setMinimum(0); - downloadProgressBar->setMaximum(100); + downloadProgressBar->setMaximum(0); downloadProgressBar->setTextVisible(true); - cancelButton = new QPushButton(tr("Cancel"),this); + // cancelButton = new QPushButton(tr("Cancel"),this); - downloadTimeLabel = new QLabel(this); - downloadTimeLabel->hide(); - #ifndef Q_WS_MAEMO_5 downloadLabel = new QLabel(this); - downloadLabel->setText(tr("Downloading dictionary, please wait")); + downloadLabel->setText(title); verticalLayout->addWidget(downloadLabel, 0, Qt::AlignCenter); #endif - - verticalLayout->addWidget(downloadTimeLabel); verticalLayout->addWidget(downloadProgressBar); - verticalLayout->addWidget(cancelButton); - - connect(cancelButton, SIGNAL(clicked()), - this, SIGNAL(cancelDownloading())); - - time.start(); + //erticalLayout->addWidget(cancelButton); setModal(true); } @@ -63,16 +53,3 @@ XdxfDictDownloadProgressDialog::XdxfDictDownloadProgressDialog(QWidget*parent): void XdxfDictDownloadProgressDialog::reject() { return; } - -void XdxfDictDownloadProgressDialog::updateDownloadProgress(int progress, - int time) { - if(!downloadTimeLabel->isVisible()) - downloadTimeLabel->show(); - - int seconds = float((100 - progress)*time) / (5*1000); - - downloadTimeLabel->setText(tr("Estimated time left: ") + - tr("%n second(s)", "", seconds)); - if(progress >= 100) - this->accept(); -} diff --git a/src/plugins/xdxf/XdxfDictDownloadProgressDialog.h b/src/plugins/xdxf/XdxfDictDownloadProgressDialog.h index 69e6439..05c10e6 100644 --- a/src/plugins/xdxf/XdxfDictDownloadProgressDialog.h +++ b/src/plugins/xdxf/XdxfDictDownloadProgressDialog.h @@ -30,11 +30,10 @@ class XdxfDictDownloadProgressDialog : public QDialog { Q_OBJECT public: - XdxfDictDownloadProgressDialog(QWidget *parent = 0); + XdxfDictDownloadProgressDialog(QString title, QWidget *parent = 0); public Q_SLOTS: void reject(); - void updateDownloadProgress(int, int); Q_SIGNALS: //! signal emitted when user cancels downloading of a dictionary @@ -42,12 +41,10 @@ Q_SIGNALS: private: QLabel* downloadLabel; - QLabel* downloadTimeLabel; QProgressBar* downloadProgressBar; QPushButton* cancelButton; QVBoxLayout* verticalLayout; //! used to check the progress of dictionary downloading - QTime time; }; #endif // XDXFDICTDOWNLOADPROGRESSDIALOG_H diff --git a/src/plugins/xdxf/XdxfDictDownloader.cpp b/src/plugins/xdxf/XdxfDictDownloader.cpp index 918d533..d5ce72b 100644 --- a/src/plugins/xdxf/XdxfDictDownloader.cpp +++ b/src/plugins/xdxf/XdxfDictDownloader.cpp @@ -29,6 +29,10 @@ XdxfDictDownloader::XdxfDictDownloader(QObject *parent) : QObject(parent) { parentDialog = 0; + process = new QProcess(this); + + connect(process, SIGNAL(finished(int)), + this, SLOT(processFinished(int))); } @@ -41,11 +45,42 @@ void XdxfDictDownloader::download(QWidget *parent) { this, SLOT(dictListReceived(QNetworkReply*))); manager->get(QNetworkRequest(QUrl("http://xdxf.revdanica.com/down/"))); + + progressDialog = new XdxfDictDownloadProgressDialog(tr("Downloading dictionaries list"), parent); + progressDialog->show(); +} + +QString XdxfDictDownloader::downloadedFile() { + return _downloadedFile; +} + +void XdxfDictDownloader::processFinished(int exitcode) { + if(++currentCommandstart(commands[currentCommand]); + } + else { + downloadComplete(); + } } +void XdxfDictDownloader::downloadComplete() { + QDir dir("/tmp/mdict"); + QString dictDirName = dir.entryList().at(2); + QFile dictFile("/tmp/mdict/" + dictDirName + "/dict.xdxf"); + dictFile.copy(QDir::homePath() + "/.mdictionary/" + dictDirName + ".xdxf"); + QFile::remove("/tmp/" + _fileName); + + _downloadedFile = QDir::homePath() + "/.mdictionary/" + dictDirName + ".xdxf"; + + progressDialog->accept(); + delete progressDialog; + emit fileDownloaded(_downloadedFile); +} void XdxfDictDownloader::dictListReceived(QNetworkReply *reply) { + progressDialog->accept(); + delete progressDialog; QString page(QString::fromUtf8(reply->readAll())); QRegExp regOuter("IconNameArchive filenameArchive file sizeDict file sizeNumber of articlesFromToSubmitted bySubmition date(.*)"); regOuter.setMinimal(true); @@ -64,10 +99,20 @@ void XdxfDictDownloader::dictListReceived(QNetworkReply *reply) { XdxfDictSelectDialog selectDialog(dicts, parentDialog); - if(selectDialog.exec()==QDialog::accept()) { + if(selectDialog.exec()==QDialog::Accepted) { + + progressDialog = new XdxfDictDownloadProgressDialog(tr("Downloading dictionary"), parentDialog); + progressDialog->show(); QString url = selectDialog.link(); + _fileName = url.split('/').last(); + commands.clear(); + commands.push_back("rm -rf /tmp/mdict"); + commands.push_back("mkdir /tmp/mdict"); + commands.push_back("wget --quiet -P /tmp/ " + url); + commands.push_back(QString("tar -xjvf /tmp/") + _fileName + QString(" -C /tmp/mdict")); + process->start(commands[0]); } } diff --git a/src/plugins/xdxf/XdxfDictDownloader.h b/src/plugins/xdxf/XdxfDictDownloader.h index 0672864..3f16509 100644 --- a/src/plugins/xdxf/XdxfDictDownloader.h +++ b/src/plugins/xdxf/XdxfDictDownloader.h @@ -30,21 +30,34 @@ #include #include #include +#include "XdxfDictDownloadProgressDialog.h" class XdxfDictDownloader : public QObject { Q_OBJECT public: XdxfDictDownloader(QObject *parent = 0); + QString downloadedFile(); public Q_SLOTS: void download(QWidget* parent); +Q_SIGNALS: + void fileDownloaded(QString); + private Q_SLOTS: void dictListReceived(QNetworkReply*); + void processFinished(int); private: + void downloadComplete(); QList dicts; QWidget* parentDialog; + QString _downloadedFile; + XdxfDictDownloadProgressDialog* progressDialog; + QStringList commands; + int currentCommand; + QProcess* process; + QString _fileName; }; #endif // XDXFDICTDOWNLOADER_H diff --git a/src/plugins/xdxf/XdxfDictSelectDialog.cpp b/src/plugins/xdxf/XdxfDictSelectDialog.cpp index 543f03b..9fc1968 100644 --- a/src/plugins/xdxf/XdxfDictSelectDialog.cpp +++ b/src/plugins/xdxf/XdxfDictSelectDialog.cpp @@ -55,6 +55,13 @@ XdxfDictSelectDialog::XdxfDictSelectDialog(QList dicts, treeView->setExpandsOnDoubleClick(false); treeView->setSortingEnabled(true); + treeView->sortByColumn(0, Qt::AscendingOrder); + + treeView->resizeColumnToContents(0); + treeView->resizeColumnToContents(1); + treeView->resizeColumnToContents(2); + treeView->resizeColumnToContents(3); + // treeView->sortByColumn(0); layout->addWidget(treeView); @@ -124,6 +131,6 @@ void XdxfDictSelectDialog::refreshDictList() { } void XdxfDictSelectDialog::itemClicked(QModelIndex index) { - _link = index.model()->data(index, Qt::UserRole); + _link = index.model()->data(index, Qt::UserRole).toString(); accept(); } -- 1.7.9.5