/* Copyright (c) 2014 Montel Laurent This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "sieveeditorpagewidget.h" #include "editor/sieveeditorwidget.h" #include #include #include #include #include SieveEditorPageWidget::SieveEditorPageWidget(QWidget *parent) : QWidget(parent), mWasActive(false), mIsNewScript(false) { QVBoxLayout *vbox = new QVBoxLayout; setLayout(vbox); mSieveEditorWidget = new KSieveUi::SieveEditorWidget; connect(mSieveEditorWidget, SIGNAL(valueChanged(bool)), this, SLOT(slotValueChanged(bool))); vbox->addWidget(mSieveEditorWidget); connect(mSieveEditorWidget, SIGNAL(checkSyntax()), this, SLOT(slotCheckSyntaxClicked())); connect(mSieveEditorWidget, SIGNAL(modeEditorChanged(KSieveUi::SieveEditorWidget::EditorMode)), SIGNAL(modeEditorChanged(KSieveUi::SieveEditorWidget::EditorMode))); //qDebug()<<"SieveEditorPageWidget::SieveEditorPageWidget "<script(), mWasActive, mWasActive ); job->setInteractive( false ); connect( job, SIGNAL(errorMessage(KManageSieve::SieveJob*,bool,QString)), this, SLOT(slotPutResultDebug(KManageSieve::SieveJob*,bool,QString)) ); } void SieveEditorPageWidget::slotPutResultDebug(KManageSieve::SieveJob *,bool success ,const QString &errorMsg) { if ( success ) { mSieveEditorWidget->addOkMessage( i18n( "No errors found." ) ); } else { if ( errorMsg.isEmpty() ) mSieveEditorWidget->addFailedMessage( i18n( "An unknown error was encountered." ) ); else mSieveEditorWidget->addFailedMessage( errorMsg ); } //Put original script after check otherwise we will put a script even if we don't click on ok KManageSieve::SieveJob * job = KManageSieve::SieveJob::put( mCurrentURL, mSieveEditorWidget->originalScript(), mWasActive, mWasActive ); job->setInteractive( false ); mSieveEditorWidget->resultDone(); } void SieveEditorPageWidget::setIsNewScript(bool isNewScript) { mIsNewScript = isNewScript; } void SieveEditorPageWidget::loadScript(const KUrl &url, const QStringList &capabilities) { mCurrentURL = url; mSieveEditorWidget->setSieveCapabilities(capabilities); KManageSieve::SieveJob * job = KManageSieve::SieveJob::get( url ); connect( job, SIGNAL(result(KManageSieve::SieveJob*,bool,QString,bool)), this, SLOT(slotGetResult(KManageSieve::SieveJob*,bool,QString,bool)) ); } KUrl SieveEditorPageWidget::currentUrl() const { return mCurrentURL; } void SieveEditorPageWidget::slotGetResult( KManageSieve::SieveJob *, bool success, const QString & script, bool isActive ) { if ( !success ) return; mSieveEditorWidget->setScriptName( mCurrentURL.fileName() ); mSieveEditorWidget->setScript( script ); mWasActive = isActive; mSieveEditorWidget->setModified(false); } void SieveEditorPageWidget::saveScript(bool showInformation, bool forceSave) { if (mSieveEditorWidget->isModified() || forceSave) { KManageSieve::SieveJob * job = KManageSieve::SieveJob::put( mCurrentURL, mSieveEditorWidget->script(), mWasActive, mWasActive ); job->setProperty("showuploadinformation", showInformation); connect( job, SIGNAL(result(KManageSieve::SieveJob*,bool,QString,bool)), this, SLOT(slotPutResult(KManageSieve::SieveJob*,bool)) ); } } void SieveEditorPageWidget::slotPutResult( KManageSieve::SieveJob *job, bool success ) { if (mIsNewScript) Q_EMIT refreshList(); if ( success ) { if (job->property("showuploadinformation").toBool()) { KMessageBox::information( this, i18n( "The Sieve script was successfully uploaded." ), i18n( "Sieve Script Upload" ) ); } mIsNewScript = false; mSieveEditorWidget->setModified(false); } else { //TODO error } } bool SieveEditorPageWidget::needToSaveScript() { bool result = false; if (mIsNewScript) { const int resultQuestion = KMessageBox::warningYesNoCancel(this, i18n("Script '%1' is new. Do you want to save it?", mCurrentURL.fileName())); if (resultQuestion == KMessageBox::Yes) { saveScript(); result = true; } else if (resultQuestion == KMessageBox::Cancel) { result = true; } } else { if (mSieveEditorWidget->isModified()) { const int resultQuestion =KMessageBox::warningYesNoCancel(this, i18n("Script '%1' was changed. Do you want to save it ?", mCurrentURL.fileName())); if (resultQuestion == KMessageBox::Yes) { saveScript(); result = true; } else if (resultQuestion == KMessageBox::Cancel) { result = true; } } } return result; } void SieveEditorPageWidget::slotValueChanged(bool b) { Q_EMIT scriptModified(b, this); } bool SieveEditorPageWidget::isModified() const { return mSieveEditorWidget->isModified(); } void SieveEditorPageWidget::goToLine() { mSieveEditorWidget->goToLine(); } KSieveUi::SieveEditorWidget::EditorMode SieveEditorPageWidget::pageMode() const { return mSieveEditorWidget->mode(); }