Switch to side-by-side view

--- a
+++ b/src/qtgui/crontool.cpp
@@ -0,0 +1,94 @@
+/* Copyright (C) 2005 J.F.Dockes
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program 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 General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#include "autoconfig.h"
+
+#include <stdio.h>
+
+#include <QPushButton>
+#include <QMessageBox>
+
+#include "recoll.h"
+#include "crontool.h"
+#include "ecrontab.h"
+#include "smallut.h"
+
+static string marker;
+
+static string idstring(const string& confdir)
+{
+    // Quote conf dir, there may be spaces and whatelse in there
+    return string("RECOLL_CONFDIR=") + escapeShell(confdir);
+}
+
+void CronToolW::init()
+{
+    marker = "RCLCRON_RCLINDEX=";
+
+    enableButton = new QPushButton(tr("Enable"));
+    disableButton = new QPushButton(tr("Disable"));
+    buttonBox->addButton(enableButton, QDialogButtonBox::ActionRole);
+    buttonBox->addButton(disableButton, QDialogButtonBox::ActionRole);
+    connect(enableButton, SIGNAL(clicked()), this, SLOT(enableCron()));
+    connect(disableButton, SIGNAL(clicked()), this, SLOT(disableCron()));
+
+    // Try to read the current values
+    if (!theconfig)
+	return;
+    string id = idstring(theconfig->getConfDir());
+    vector<string> sched;
+    if (getCrontabSched(marker, id, sched)) {
+	minsLE->setText(QString::fromAscii(sched[0].c_str()));
+	hoursLE->setText(QString::fromAscii(sched[1].c_str()));
+	daysLE->setText(QString::fromAscii(sched[4].c_str()));
+    }
+}
+
+void CronToolW::enableCron()
+{
+    changeCron(true);
+}
+void CronToolW::disableCron()
+{
+    changeCron(false);
+}
+
+void CronToolW::changeCron(bool enable)
+{
+    if (!theconfig)
+	return;
+
+    string id = idstring(theconfig->getConfDir());
+    string cmd("recollindex -m -w 60");
+
+    string reason;
+
+    if (!enable) {
+	editCrontab(marker, id, "", "", reason);
+	accept();
+    } else {
+	string mins((const char *)minsLE->text().toAscii());
+	string hours((const char *)hoursLE->text().toAscii());
+	string days((const char *)daysLE->text().toAscii());
+	string sched = mins + " " + hours + "  * * " + days;
+	if (editCrontab(marker, id, sched, cmd, reason)) {
+	    accept();
+	}  else {
+	    QMessageBox::warning(0, "Recoll", 
+			     tr("Error installing cron entry. Bad syntax in fields ? "));
+	}	    
+    }
+}