diff --git a/resources/library/interactive/ColorPicker.wgt/js/colorpicker.js b/resources/library/interactive/ColorPicker.wgt/js/colorpicker.js
index 404f018e..17e957cb 100644
--- a/resources/library/interactive/ColorPicker.wgt/js/colorpicker.js
+++ b/resources/library/interactive/ColorPicker.wgt/js/colorpicker.js
@@ -57,8 +57,8 @@
},
setNewColor = function (hsb, cal) {
$(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb));
- window.uniboard.setTool('pen');
- window.uniboard.setPenColor('#' + HSBToHex(hsb));
+ window.sankore.setTool('pen');
+ window.sankore.setPenColor('#' + HSBToHex(hsb));
},
keyDown = function (ev) {
var pressedKey = ev.charCode || ev.keyCode || -1;
diff --git a/resources/library/interactive/barre_prof.wgt/scripts/app.js b/resources/library/interactive/barre_prof.wgt/scripts/app.js
index 4bd9e1cd..dbe5ea97 100644
--- a/resources/library/interactive/barre_prof.wgt/scripts/app.js
+++ b/resources/library/interactive/barre_prof.wgt/scripts/app.js
@@ -1,4 +1,4 @@
-// uniboard = {
+// sankore = {
// preference : function(){},
// setPreference : function(){}
// }
@@ -14,7 +14,7 @@ $(document).ready(function()
function _init()
{
w.setSplashContent( '
' );
- w.setEditContent('');
+ w.setEditContent('');
w.elements.containerEdit.find( "textarea" ).tinymce(
{
script_url : 'tinymcejq/tiny_mce.js',
@@ -41,16 +41,16 @@ $(document).ready(function()
{
ed.onKeyUp.add(function(ed, e)
{
- if (window.uniboard)
+ if (window.sankore)
{
- window.uniboard.setPreference("text", ed.getContent());
+ window.sankore.setPreference("text", ed.getContent());
}
});
ed.onExecCommand.add(function(ed, e)
{
- if (window.uniboard)
+ if (window.sankore)
{
- window.uniboard.setPreference("text", ed.getContent());
+ window.sankore.setPreference("text", ed.getContent());
}
});
},
@@ -63,9 +63,9 @@ $(document).ready(function()
});
w.modeView(); // init view mode
w.modeEdit(); // init edit mode
- if (window.uniboard.preference("state") == 'view') // back to view mode if last state was it
+ if (window.sankore.preference("state") == 'view') // back to view mode if last state was it
w.modeView();
- if (window.uniboard.preference("is_splash") == '1')
+ if (window.sankore.preference("is_splash") == '1')
w.modeSplash(true);
w.allowResize = true;
};
@@ -84,15 +84,15 @@ $(document).ready(function()
w.getWidth = function()
{
var res = 360;
- if (window.uniboard && window.uniboard.preference("width"))
- res = parseInt(window.uniboard.preference("width"));
+ if (window.sankore && window.sankore.preference("width"))
+ res = parseInt(window.sankore.preference("width"));
return res;
};
w.getHeight = function()
{
var res = 230;
- if (window.uniboard && window.uniboard.preference("height"))
- res = parseInt(window.uniboard.preference("height"));
+ if (window.sankore && window.sankore.preference("height"))
+ res = parseInt(window.sankore.preference("height"));
return res;
};
@@ -121,24 +121,24 @@ $(document).ready(function()
w.elements.container.width(winwidth);
w.elements.container.height(winheight);
tinyMCE.activeEditor.theme.resizeTo(winwidth, winheight-98);
- if(window.uniboard)
+ if(window.sankore)
{
- window.uniboard.setPreference("width", winwidth);
- window.uniboard.setPreference("height", winheight-33);
+ window.sankore.setPreference("width", winwidth);
+ window.sankore.setPreference("height", winheight-33);
}
};
w.modeView = function()
{
if (w.allowResize)
- window.uniboard.setPreference("state", "view");
+ window.sankore.setPreference("state", "view");
return _super_modeView.call(this);
}
w.modeEdit = function()
{
if (w.allowResize)
- window.uniboard.setPreference("state", "edit");
+ window.sankore.setPreference("state", "edit");
return _super_modeEdit.call(this);
}
@@ -146,7 +146,7 @@ $(document).ready(function()
{
if (enable == undefined)
enable = true;
- window.uniboard.setPreference("is_splash", (w.allowResize && enable)?1:0);
+ window.sankore.setPreference("is_splash", (w.allowResize && enable)?1:0);
return _super_modeSplash.call(this, enable);
}
diff --git a/src/adaptors/UBImportDocument.cpp b/src/adaptors/UBImportDocument.cpp
index d46f5064..e6f7441b 100644
--- a/src/adaptors/UBImportDocument.cpp
+++ b/src/adaptors/UBImportDocument.cpp
@@ -175,11 +175,15 @@ UBDocumentProxy* UBImportDocument::importFile(const QFile& pFile, const QString&
QString documentRootFolder = expandFileToDir(pFile, path);
- UBDocumentProxy* newDocument = UBPersistenceManager::persistenceManager()->createDocumentFromDir(documentRootFolder);
-
- UBApplication::showMessage(tr("Import successful."));
-
- return newDocument;
+ if(!documentRootFolder.length()){
+ UBApplication::showMessage(tr("Import of file %1 failed.").arg(fi.baseName()));
+ return 0;
+ }
+ else{
+ UBDocumentProxy* newDocument = UBPersistenceManager::persistenceManager()->createDocumentFromDir(documentRootFolder);
+ UBApplication::showMessage(tr("Import successful."));
+ return newDocument;
+ }
}
diff --git a/src/adaptors/publishing/UBDocumentPublisher.cpp b/src/adaptors/publishing/UBDocumentPublisher.cpp
index b9d191c1..4f241cb1 100644
--- a/src/adaptors/publishing/UBDocumentPublisher.cpp
+++ b/src/adaptors/publishing/UBDocumentPublisher.cpp
@@ -38,7 +38,7 @@ UBDocumentPublisher::UBDocumentPublisher(UBDocumentProxy* pDocument, QObject *pa
, mPublishingDocument(0)
, mUsername("")
, mPassword("")
- , bLoginCookieSet(false)
+ , bLoginCookieSet(false)
{
mpWebView = new QWebView(0);
UBApplication::mainWindow->addSankoreWebDocumentWidget(mpWebView);
@@ -63,17 +63,23 @@ UBDocumentPublisher::~UBDocumentPublisher()
void UBDocumentPublisher::publish()
{
- //check that the username and password are stored on preferences
- UBSettings* settings = UBSettings::settings();
+ UBPublicationDlg dlg;
+ if(QDialog::Accepted == dlg.exec())
+ {
+ mDocInfos.title = dlg.title();
+ mDocInfos.description = dlg.description();
- mUsername = settings->communityUsername();
- mPassword = settings->communityPassword();
- buildUbwFile();
- UBApplication::showMessage(tr("Uploading Sankore File on Web."));
+ //check that the username and password are stored on preferences
+ UBSettings* settings = UBSettings::settings();
- login(mUsername, mPassword);
- //sendUbw();
+ mUsername = settings->communityUsername();
+ mPassword = settings->communityPassword();
+ buildUbwFile();
+ UBApplication::showMessage(tr("Uploading Sankore File on Web."));
+ login(mUsername, mPassword);
+ //sendUbw();
+ }
}
void UBDocumentPublisher::onLoginDone()
@@ -573,39 +579,44 @@ void UBDocumentPublisher::init()
{
mCrlf=0x0d;
mCrlf+=0x0a;
+ mDocInfos.title = "";
+ mDocInfos.description = "";
mpNetworkMgr = new QNetworkAccessManager(this);
- //mpCache = new QNetworkDiskCache(this);
- //mpCache->setCacheDirectory("cache");
- //mpNetworkMgr->setCache(mpCache);
mpCookieJar = new QNetworkCookieJar();
+// QNetworkProxy* pProxy = UBSettings::settings()->httpProxy();
+// if(NULL != pProxy)
+// {
+// mpNetworkMgr->setProxy(*pProxy);
+// qDebug() << "Proxy set!";
+// }
+
connect(mpNetworkMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*)));
+ connect(mpNetworkMgr, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), this, SLOT(onProxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
}
void UBDocumentPublisher::onFinished(QNetworkReply *reply)
{
- qDebug() << "[-[ Request finished! ]-]";
QByteArray response = reply->readAll();
- if (!bLoginCookieSet)
- {
- QVariant cookieHeader = reply->rawHeader("Set-Cookie");
- // First we concatenate all the Set-Cookie values (the packet can contains many of them)
- QStringList qslCookie = cookieHeader.toString().split("\n");
- QString qsCookieValue = qslCookie.at(0);
- for (int i = 1; i < qslCookie.size(); i++) {
- qsCookieValue += "; " +qslCookie.at(i);
- }
+ QVariant cookieHeader = reply->rawHeader("Set-Cookie");
+ // First we concatenate all the Set-Cookie values (the packet can contains many of them)
+ QStringList qslCookie = cookieHeader.toString().split("\n");
+ QString qsCookieValue = qslCookie.at(0);
+ for (int i = 1; i < qslCookie.size(); i++) {
+ qsCookieValue += "; " +qslCookie.at(i);
+ }
- // Now we isolate every cookie value
- QStringList qslCookieVals = qsCookieValue.split("; ");
+ // Now we isolate every cookie value
+ QStringList qslCookieVals = qsCookieValue.split("; ");
+ if (!bLoginCookieSet)
+ {
// Finally we create the cookies
for (int i = 0; i < qslCookieVals.size(); i++)
{
QString cookieString = qslCookieVals.at(i);
- //qDebug() << "qslCookieVals.at(i): " << cookieString.replace("\"", "");
QStringList qslCrntCookie = cookieString.split("=");
QNetworkCookie crntCookie;
if (qslCrntCookie.length() == 2)
@@ -630,11 +641,6 @@ void UBDocumentPublisher::onFinished(QNetworkReply *reply)
}
QNetworkCookie langCookie("language", "en");
mCookies << langCookie;
- // DEBUG : Verify
- for(int i = 0; i < mCookies.size(); i++)
- {
- qDebug() << mCookies.at(i).name() << "=" << mCookies.at(i).value();
- }
// Set the cookiejar : it set the cookies that will be sent with every packet.
mpCookieJar->setCookiesFromUrl(mCookies, QUrl(DOCPUBLICATION_URL)/*reply->url()*/);
@@ -645,19 +651,30 @@ void UBDocumentPublisher::onFinished(QNetworkReply *reply)
}
else
{
- if (!response.isEmpty()){
- // Display the iframe
- mpWebView->setHtml(response, reply->url());
- UBApplication::applicationController->showSankoreWebDocument();
- }
- else
+ if (response.isEmpty())
{
- // Redirect
- QVariant locationHeader = reply->rawHeader("Location");
-
- QNetworkRequest req(QUrl(locationHeader.toString()));
- mpNetworkMgr->get(req);
- qDebug() << mpWebView->url().toString();
+ // Verify that the UBW file has been sent correctly
+ bool bTransferOk = false;
+ for(int j = 0; j <= qslCookieVals.size(); j++)
+ {
+ if(qslCookieVals.at(j).startsWith("assetStatus"))
+ {
+ QStringList qslAsset = qslCookieVals.at(j).split("=");
+ if(qslAsset.at(1) == "UPLOADED")
+ {
+ bTransferOk = true;
+ break;
+ }
+ }
+ }
+ if(bTransferOk)
+ {
+ UBApplication::showMessage(tr("Document uploaded correctly on the web."));
+ }
+ else
+ {
+ UBApplication::showMessage(tr("Failed to upload document on the web."));
+ }
}
}
reply->deleteLater();
@@ -693,6 +710,15 @@ void UBDocumentPublisher::sendUbw()
request.setRawHeader("Accept-Language", "en-US,*");
request.setRawHeader("Referer", DOCPUBLICATION_URL);
+ QNetworkCookie titleCookie("title", mDocInfos.title.toAscii().constData());
+ QNetworkCookie descCookie("description", mDocInfos.description.remove("\n").toAscii().constData());
+
+ mCookies << titleCookie;
+ mCookies << descCookie;
+
+ mpCookieJar->setCookiesFromUrl(mCookies, QUrl(DOCPUBLICATION_URL));
+ mpNetworkMgr->setCookieJar(mpCookieJar);
+
// Send the file
mpNetworkMgr->post(request,datatoSend);
}
@@ -719,10 +745,189 @@ void UBDocumentPublisher::onLoadFinished(bool result)
Q_UNUSED(result);
// [Basic Auth] This line says: if the user click on a link, do not interpret it.
//mpWebView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
+
mpWebView->page()->setNetworkAccessManager(mpNetworkMgr);
}
+void UBDocumentPublisher::onProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
+{
+ Q_UNUSED(proxy);
+ UBProxyLoginDlg dlg;
+ if(QDialog::Accepted == dlg.exec())
+ {
+ authenticator->setUser(dlg.username());
+ authenticator->setPassword(dlg.password());
+ }
+}
+
+// ---------------------------------------------------------
+UBProxyLoginDlg::UBProxyLoginDlg(QWidget *parent, const char *name):QDialog(parent)
+ , mpLayout(NULL)
+ , mpUserLayout(NULL)
+ , mpPasswordLayout(NULL)
+ , mpButtons(NULL)
+ , mpUserLabel(NULL)
+ , mpPasswordLabel(NULL)
+ , mpUsername(NULL)
+ , mpPassword(NULL)
+{
+ setObjectName(name);
+ setFixedSize(400, 150);
+ setWindowTitle(tr("Proxy Login"));
+ mpLayout = new QVBoxLayout();
+ setLayout(mpLayout);
+ mpUserLayout = new QHBoxLayout();
+ mpLayout->addLayout(mpUserLayout);
+ mpPasswordLayout = new QHBoxLayout();
+ mpLayout->addLayout(mpPasswordLayout);
+ mpUserLabel = new QLabel(tr("Username:"), this);
+ mpUsername = new QLineEdit(this);
+ mpUserLayout->addWidget(mpUserLabel, 0);
+ mpUserLayout->addWidget(mpUsername, 1);
+ mpPasswordLabel = new QLabel(tr("Password:"), this);
+ mpPassword = new QLineEdit(this);
+ mpPasswordLayout->addWidget(mpPasswordLabel, 0);
+ mpPasswordLayout->addWidget(mpPassword, 1);
+
+ mpButtons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
+ mpLayout->addWidget(mpButtons);
+
+ connect(mpButtons, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(mpButtons, SIGNAL(rejected()), this, SLOT(reject()));
+
+}
+
+UBProxyLoginDlg::~UBProxyLoginDlg()
+{
+ if(NULL != mpLayout)
+ {
+ delete mpLayout;
+ mpLayout = NULL;
+ }
+ if(NULL != mpButtons)
+ {
+ delete mpButtons;
+ mpButtons = NULL;
+ }
+ if(NULL != mpUserLabel)
+ {
+ delete mpUserLabel;
+ mpUserLabel = NULL;
+ }
+ if(NULL != mpPasswordLabel)
+ {
+ delete mpPasswordLabel;
+ mpPasswordLabel = NULL;
+ }
+ if(NULL != mpUsername)
+ {
+ delete mpUsername;
+ mpUsername = NULL;
+ }
+ if(NULL != mpPassword)
+ {
+ delete mpPassword;
+ mpPassword = NULL;
+ }
+}
+
+// ---------------------------------------------------------
+UBPublicationDlg::UBPublicationDlg(QWidget *parent, const char *name):QDialog(parent)
+ , mpLayout(NULL)
+ , mpTitleLayout(NULL)
+ , mpTitleLabel(NULL)
+ , mpTitle(NULL)
+ , mpDescLabel(NULL)
+ , mpDescription(NULL)
+ , mpButtons(NULL)
+{
+ setObjectName(name);
+ setWindowTitle(tr("Publish document on the web"));
+
+ resize(500, 300);
+
+ mpLayout = new QVBoxLayout();
+ setLayout(mpLayout);
+
+ mpTitleLabel = new QLabel(tr("Title:"), this);
+ mpTitle = new QLineEdit(this);
+ mpTitleLayout = new QHBoxLayout();
+ mpTitleLayout->addWidget(mpTitleLabel, 0);
+ mpTitleLayout->addWidget(mpTitle, 1);
+ mpLayout->addLayout(mpTitleLayout, 0);
+
+ mpDescLabel = new QLabel(tr("Description:"), this);
+ mpLayout->addWidget(mpDescLabel, 0);
+
+ mpDescription = new QTextEdit(this);
+ mpLayout->addWidget(mpDescription, 1);
+
+ mpButtons = new QDialogButtonBox(QDialogButtonBox::Cancel | QDialogButtonBox::Ok, Qt::Horizontal, this);
+ mpButtons->button(QDialogButtonBox::Ok)->setText(tr("Publish"));
+ mpLayout->addWidget(mpButtons);
+
+ mpButtons->button(QDialogButtonBox::Ok)->setEnabled(false);
+
+ connect(mpButtons, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(mpButtons, SIGNAL(rejected()), this, SLOT(reject()));
+ connect(mpTitle, SIGNAL(textChanged(QString)), this, SLOT(onTextChanged()));
+ connect(mpDescription, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
+}
+
+UBPublicationDlg::~UBPublicationDlg()
+{
+ if(NULL != mpTitleLabel)
+ {
+ delete mpTitleLabel;
+ mpTitleLabel = NULL;
+ }
+ if(NULL != mpTitle)
+ {
+ delete mpTitle;
+ mpTitle = NULL;
+ }
+ if(NULL != mpDescLabel)
+ {
+ delete mpDescLabel;
+ mpDescLabel = NULL;
+ }
+ if(NULL != mpDescription)
+ {
+ delete mpDescription;
+ mpDescription = NULL;
+ }
+ if(NULL != mpButtons)
+ {
+ delete mpButtons;
+ mpButtons = NULL;
+ }
+ if(NULL != mpTitleLayout)
+ {
+ delete mpTitleLayout;
+ mpTitleLayout = NULL;
+ }
+ if(NULL != mpLayout)
+ {
+ delete mpLayout;
+ mpLayout = NULL;
+ }
+}
+
+void UBPublicationDlg::onTextChanged()
+{
+ bool bPublishButtonState = false;
+ if(mpTitle->text() != "" && mpDescription->document()->toPlainText() != "")
+ {
+ bPublishButtonState = true;
+ }
+ else
+ {
+ bPublishButtonState = false;
+ }
+
+ mpButtons->button(QDialogButtonBox::Ok)->setEnabled(bPublishButtonState);
+}
diff --git a/src/adaptors/publishing/UBDocumentPublisher.h b/src/adaptors/publishing/UBDocumentPublisher.h
index 8b4c289c..264c39b4 100644
--- a/src/adaptors/publishing/UBDocumentPublisher.h
+++ b/src/adaptors/publishing/UBDocumentPublisher.h
@@ -10,11 +10,62 @@
#define DOCPUBLICATION_URL "http://sankore.devxwiki.com/xwiki/bin/view/CreateResources/UniboardUpload"
#define XWIKI_ORIGIN_HEADER "http://sankore.devxwiki.com"
+typedef struct
+{
+ QString title;
+ QString description;
+} sDocumentInfos;
+
class UBDocumentProxy;
class UBServerXMLHttpRequest;
class UBGraphicsW3CWidgetItem;
class QWebView;
+class UBProxyLoginDlg : public QDialog
+{
+ Q_OBJECT
+public:
+ UBProxyLoginDlg(QWidget* parent=0, const char* name="ProxyLoginDlg");
+ ~UBProxyLoginDlg();
+
+ QString username(){return mpUsername->text();}
+ QString password(){return mpPassword->text();}
+
+private:
+ QVBoxLayout* mpLayout;
+ QHBoxLayout* mpUserLayout;
+ QHBoxLayout* mpPasswordLayout;
+ QDialogButtonBox* mpButtons;
+ QLabel* mpUserLabel;
+ QLabel* mpPasswordLabel;
+ QLineEdit* mpUsername;
+ QLineEdit* mpPassword;
+};
+
+class UBPublicationDlg : public QDialog
+{
+ Q_OBJECT
+public:
+ UBPublicationDlg(QWidget* parent=0, const char* name="UBPublicationDlg");
+ ~UBPublicationDlg();
+
+ QString title(){return mpTitle->text();}
+ QString description(){return mpDescription->document()->toPlainText();}
+
+private slots:
+ void onTextChanged();
+
+private:
+ QVBoxLayout* mpLayout;
+ QHBoxLayout* mpTitleLayout;
+ QLabel* mpTitleLabel;
+ QLineEdit* mpTitle;
+ QLabel* mpDescLabel;
+ QTextEdit* mpDescription;
+ QDialogButtonBox* mpButtons;
+};
+
+
class UBDocumentPublisher : public UBAbstractPublisher
{
Q_OBJECT;
@@ -42,6 +93,7 @@ private slots:
void onLinkClicked(const QUrl& url);
void onLoadFinished(bool result);
void onLoginDone();
+ void onProxyAuthenticationRequired(const QNetworkProxy & proxy, QAuthenticator * authenticator);
private:
@@ -65,6 +117,7 @@ private:
void login(QString username, QString password);
QString mTmpZipFile;
QList mCookies;
+ sDocumentInfos mDocInfos;
};
#endif // UBDOCUMENTPUBLISHER_H
diff --git a/src/core/main.cpp b/src/core/main.cpp
index 06bbad5f..4822c69e 100644
--- a/src/core/main.cpp
+++ b/src/core/main.cpp
@@ -73,10 +73,16 @@ int main(int argc, char *argv[])
#endif
UBApplication app("Sankore 3.1", argc, argv);
-
- QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
- QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
+
+ //BUGFIX:
+ //when importing a sankore file that contains a non standard character
+ //the codecForLocale or the codecForCString is used to convert the file path
+ //into a const char*. This is why in french windows setup the codec name shouldn't be
+ //set to UTF-8. For example, setting UTF-8, will convert "Haïti" into "HaÂ-ti.
+
+ QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
+ //QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
+ QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QStringList args = app.arguments();
diff --git a/src/gui/UBUpdateDlg.cpp b/src/gui/UBUpdateDlg.cpp
index d276a852..891ebe3c 100644
--- a/src/gui/UBUpdateDlg.cpp
+++ b/src/gui/UBUpdateDlg.cpp
@@ -6,62 +6,167 @@
#include "core/memcheck.h"
UBUpdateDlg::UBUpdateDlg(QWidget *parent, int nbFiles, const QString& bkpPath)
- : QDialog(parent)
- , mpDlgBttn(NULL)
+ : QDialog(parent)
+ , mMainLayout(NULL)
+ , mNbFilesLabel(NULL)
+ , mBkpLabel(NULL)
+ , mBkpPath(NULL)
+ , mBrowseBttn(NULL)
+ , mpDlgBttn(NULL)
+ , mLayout(NULL)
+ , mHLayout(NULL)
+ , mStackedWidget(NULL)
+ , mDialogWidget(NULL)
+ , mProgressWidget(NULL)
+ , mProgressLayout(NULL)
+ , mProgressLabel(NULL)
+
{
- setFixedSize(400, 110);
+ mDialogWidget = new QWidget(this);
+ mProgressWidget = new QWidget(this);
+
+ mStackedWidget = new QStackedWidget(this);
+ mStackedWidget->addWidget(mDialogWidget);
+ mStackedWidget->addWidget(mProgressWidget);
+
+ setFixedSize(450, 110);
setModal(true);
setWindowTitle(tr("Document updater"));
- setLayout(&mLayout);
+ mLayout = new QVBoxLayout();
+ setLayout(mLayout);
+
QString str = QString::number(nbFiles);
str.append(tr(" files require an update."));
- mNbFilesLabel.setText(str);
- mLayout.addWidget(&mNbFilesLabel);
- mBkpLabel.setText(tr("Backup path: "));
- mBkpPath.setText(bkpPath);
- mBrowseBttn.setText(tr("Browse"));
- mHLayout.addWidget(&mBkpLabel);
- mHLayout.addWidget(&mBkpPath, 1);
- mHLayout.addWidget(&mBrowseBttn);
- mLayout.addLayout(&mHLayout);
-
- mpDlgBttn = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
- mLayout.addWidget(mpDlgBttn);
+ mNbFilesLabel = new QLabel(mDialogWidget);
+ mNbFilesLabel->setText(str);
+
+ mLayout->addWidget(mNbFilesLabel);
+
+ mBkpLabel = new QLabel(mDialogWidget);
+ mBkpLabel->setText(tr("Backup path: "));
+
+ mBkpPath = new QLineEdit(mDialogWidget);
+ mBkpPath->setText(bkpPath);
+
+ mBrowseBttn = new QPushButton(mDialogWidget);
+ mBrowseBttn->setText(tr("Browse"));
+
+ mHLayout = new QHBoxLayout();
+ mHLayout->addWidget(mBkpLabel);
+ mHLayout->addWidget(mBkpPath, 1);
+ mHLayout->addWidget(mBrowseBttn);
+
+ mLayout->addLayout(mHLayout);
+
+ mpDlgBttn = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, mDialogWidget);
+ mLayout->addWidget(mpDlgBttn);
mpDlgBttn->button(QDialogButtonBox::Ok)->setText(tr("Update"));
mpDlgBttn->button(QDialogButtonBox::Cancel)->setText("Remind me later");
- QObject::connect(&mBrowseBttn, SIGNAL(clicked()), this, SLOT(onBrowse()));
+ QObject::connect(mBrowseBttn, SIGNAL(clicked()), this, SLOT(onBrowse()));
QObject::connect(mpDlgBttn, SIGNAL(accepted()), this, SLOT(onUpdate()));
QObject::connect(mpDlgBttn, SIGNAL(rejected()), this, SLOT(reject()));
+ mDialogWidget->setLayout(mLayout);
+ mStackedWidget->setCurrentWidget(mDialogWidget);
+
+ mMainLayout = new QVBoxLayout();
+ this->setLayout(mMainLayout);
+ mMainLayout->addWidget(mStackedWidget);
}
UBUpdateDlg::~UBUpdateDlg()
{
- if(NULL != mpDlgBttn)
+ if (NULL != mpDlgBttn)
{
delete mpDlgBttn;
mpDlgBttn = NULL;
}
+
+ if (mNbFilesLabel) {
+ delete mNbFilesLabel;
+ mNbFilesLabel = NULL;
+ }
+
+ if (mBkpLabel) {
+ delete mBkpLabel;
+ mBkpLabel = NULL;
+ }
+
+ if (mBkpPath) {
+ delete mBkpPath;
+ mBkpPath = NULL;
+ }
+
+ if (mBrowseBttn) {
+ delete mBrowseBttn;
+ mBrowseBttn = NULL;
+ }
+
+ if (mProgressLabel) {
+ delete mProgressLabel;
+ mProgressLabel = NULL;
+ }
+
+ if (mHLayout) {
+ delete mHLayout;
+ mHLayout = NULL;
+ }
+
+ if (mLayout) {
+ delete mLayout;
+ mLayout = NULL;
+ }
+
+ if (mProgressLayout) {
+ delete mProgressLayout;
+ mProgressLayout = NULL;
+ }
+
+ if (mDialogWidget) {
+ delete mDialogWidget;
+ mDialogWidget = NULL;
+ }
+
+ if (mProgressWidget) {
+ delete mProgressWidget;
+ mProgressWidget = NULL;
+ }
+
+ if (mStackedWidget) {
+ delete mStackedWidget;
+ mStackedWidget = NULL;
+ }
+
+ if (mMainLayout) {
+ delete mMainLayout;
+ mMainLayout = NULL;
+ }
}
void UBUpdateDlg::onBrowse()
{
QString qsSelectedDir;
- qsSelectedDir = QFileDialog::getExistingDirectory(this, tr("Select a backup folder"), mBkpPath.text());
- mBkpPath.setText(qsSelectedDir);
+ qsSelectedDir = QFileDialog::getExistingDirectory(this, tr("Select a backup folder"), mBkpPath->text());
+ mBkpPath->setText(qsSelectedDir);
}
void UBUpdateDlg::onUpdate()
{
+ mProgressLabel = new QLabel(mProgressWidget);
+ mProgressLayout = new QHBoxLayout();
+ mProgressLayout->addWidget(mProgressLabel);
+ mProgressWidget->setLayout(mProgressLayout);
+ mStackedWidget->setCurrentWidget(mProgressWidget);
emit updateFiles();
}
void UBUpdateDlg::onFilesUpdated(bool bResult)
{
+ this->hide();
QString qsMsg;
- if(bResult)
+ if (bResult)
{
qsMsg = tr("Files update successful!\nPlease reboot the application to access the updated documents.");
}
@@ -74,5 +179,11 @@ void UBUpdateDlg::onFilesUpdated(bool bResult)
QString UBUpdateDlg::backupPath()
{
- return mBkpPath.text();
+ return mBkpPath->text();
}
+
+void UBUpdateDlg::transitioningFile(QString fileName)
+{
+ mProgressLabel->setText(tr("Updating file ") + fileName);
+}
+
diff --git a/src/gui/UBUpdateDlg.h b/src/gui/UBUpdateDlg.h
index ea87d5ac..fda41bcb 100644
--- a/src/gui/UBUpdateDlg.h
+++ b/src/gui/UBUpdateDlg.h
@@ -8,6 +8,7 @@
#include
#include
#include
+#include
class UBUpdateDlg : public QDialog
{
@@ -27,15 +28,25 @@ signals:
private slots:
void onBrowse();
void onUpdate();
+ void transitioningFile(QString fileName);
private:
- QLabel mNbFilesLabel;
- QLabel mBkpLabel;
- QLineEdit mBkpPath;
- QPushButton mBrowseBttn;
+ QVBoxLayout* mMainLayout;
+
+ QLabel* mNbFilesLabel;
+ QLabel* mBkpLabel;
+ QLineEdit* mBkpPath;
+ QPushButton* mBrowseBttn;
QDialogButtonBox* mpDlgBttn;
- QVBoxLayout mLayout;
- QHBoxLayout mHLayout;
+ QVBoxLayout* mLayout;
+ QHBoxLayout* mHLayout;
+
+
+ QStackedWidget* mStackedWidget;
+ QWidget* mDialogWidget;
+ QWidget* mProgressWidget;
+ QHBoxLayout* mProgressLayout;
+ QLabel* mProgressLabel;
};
#endif // UBUPDATEDLG_H
diff --git a/src/transition/UniboardSankoreTransition.cpp b/src/transition/UniboardSankoreTransition.cpp
index 66f52a5f..5d4fe18e 100644
--- a/src/transition/UniboardSankoreTransition.cpp
+++ b/src/transition/UniboardSankoreTransition.cpp
@@ -7,10 +7,10 @@
UniboardSankoreTransition::UniboardSankoreTransition(QObject *parent) :
QObject(parent)
- , mTransitionDlg(NULL)
+ , mTransitionDlg(NULL)
+ , mThread(NULL)
{
mOldSankoreDirectory = UBFileSystemUtils::normalizeFilePath(UBDesktopServices::storageLocation(QDesktopServices::DataLocation));
- qDebug() << mOldSankoreDirectory;
mUniboardSourceDirectory = UBFileSystemUtils::normalizeFilePath(UBDesktopServices::storageLocation(QDesktopServices::DataLocation));
#if defined(Q_WS_MACX)
@@ -28,6 +28,11 @@ UniboardSankoreTransition::~UniboardSankoreTransition()
delete mTransitionDlg;
mTransitionDlg = NULL;
}
+
+ if(mThread){
+ delete mThread;
+ mThread = NULL;
+ }
}
void UniboardSankoreTransition::rollbackDocumentsTransition(QFileInfoList& fileInfoList)
@@ -56,7 +61,7 @@ void UniboardSankoreTransition::documentTransition()
QString backupDirectoryPath = UBFileSystemUtils::normalizeFilePath(UBDesktopServices::storageLocation(QDesktopServices::DesktopLocation));
if (fileInfoList.count() != 0){
- mTransitionDlg = new UBUpdateDlg(0, fileInfoList.count(), backupDirectoryPath);
+ mTransitionDlg = new UBUpdateDlg(NULL, fileInfoList.count(), backupDirectoryPath);
connect(mTransitionDlg, SIGNAL(updateFiles()), this, SLOT(startDocumentTransition()));
connect(this, SIGNAL(transitionFinished(bool)), mTransitionDlg, SLOT(onFilesUpdated(bool)));
mTransitionDlg->show();
@@ -65,6 +70,13 @@ void UniboardSankoreTransition::documentTransition()
}
void UniboardSankoreTransition::startDocumentTransition()
+{
+ mThread = new UniboardSankoreThread(this);
+ mThread->start();
+ connect(this,SIGNAL(transitioningFile(QString)),mTransitionDlg,SLOT(transitioningFile(QString)));
+}
+
+void UniboardSankoreTransition::executeTransition()
{
bool result = false;
QString backupDestinationPath = mTransitionDlg->backupPath() + "/OldSankoreAndUniboardVersionsBackup";
@@ -78,14 +90,12 @@ void UniboardSankoreTransition::startDocumentTransition()
QFileInfoList::iterator fileInfo;
QString sankoreDocumentDirectory = UBSettings::uniboardDocumentDirectory();
- QStringList qslNewDocs;
-
for (fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end() && result; fileInfo += 1) {
if (fileInfo->isDir() && (fileInfo->fileName().startsWith("Uniboard Document ") || fileInfo->fileName().startsWith("Sankore Document "))){
QString sankoreDocumentName = fileInfo->fileName();
+ emit transitioningFile(sankoreDocumentName);
sankoreDocumentName.replace("Uniboard","Sankore");
result = UBFileSystemUtils::copyDir(fileInfo->filePath(),sankoreDocumentDirectory + "/" + sankoreDocumentName);
- qslNewDocs << sankoreDocumentName;
}
}
@@ -100,6 +110,23 @@ void UniboardSankoreTransition::startDocumentTransition()
}
emit transitionFinished(result);
+}
+
+
+UniboardSankoreThread::UniboardSankoreThread(QObject* parent):QThread(parent)
+{
- mTransitionDlg->hide();
}
+
+UniboardSankoreThread::~UniboardSankoreThread()
+{
+
+}
+
+void UniboardSankoreThread::run()
+{
+ UniboardSankoreTransition* pTransition = dynamic_cast(parent());
+
+ pTransition->executeTransition();
+}
+
diff --git a/src/transition/UniboardSankoreTransition.h b/src/transition/UniboardSankoreTransition.h
index 0ba247a7..19dbcd38 100644
--- a/src/transition/UniboardSankoreTransition.h
+++ b/src/transition/UniboardSankoreTransition.h
@@ -3,9 +3,21 @@
#include
#include
+#include
#include "gui/UBUpdateDlg.h"
#include "document/UBDocumentProxy.h"
+class UniboardSankoreThread : public QThread
+{
+ Q_OBJECT
+public:
+ UniboardSankoreThread(QObject* parent = 0);
+ ~UniboardSankoreThread();
+
+ void run();
+
+};
+
class UniboardSankoreTransition : public QObject
{
Q_OBJECT
@@ -13,6 +25,7 @@ public:
explicit UniboardSankoreTransition(QObject *parent = 0);
~UniboardSankoreTransition();
void documentTransition();
+ void executeTransition();
private:
@@ -22,10 +35,12 @@ private:
protected:
QString mUniboardSourceDirectory;
QString mOldSankoreDirectory;
+ UniboardSankoreThread* mThread;
signals:
void transitionFinished(bool result);
void docAdded(UBDocumentProxy* doc);
+ void transitioningFile(QString documentName);
private slots:
void startDocumentTransition();