--- a
+++ b/src/qtgui/rtitool.cpp
@@ -0,0 +1,172 @@
+/* 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 <unistd.h>
+#include <fcntl.h>
+#include <signal.h>
+
+#include <string>
+using std::string;
+
+#include <QCheckBox>
+#include <QMessageBox>
+
+#include "recoll.h"
+#include "rtitool.h"
+#include "smallut.h"
+#include "pathut.h"
+#include "copyfile.h"
+#include "readfile.h"
+#include "execmd.h"
+
+static const char *rautostartfile = ".config/autostart/recollindex.desktop";
+
+// Just in case we don't find the file in the shared dir, have a
+// default text ready
+static const char *desktopfiletext =
+ "[Desktop Entry]\n"
+ "Name=Recoll real time indexer\n"
+ "Comment=Runs in background to extract and index text from modified "
+ "documents\n"
+ "Icon=system-run\n"
+ "Exec=recollindex -w 60 -m\n"
+ "Terminal=false\n"
+ "TerminalOptions=\n"
+ "Type=Application\n"
+ "Categories=Utility;Filesystem;Database;\n"
+ "NoDisplay=true\n"
+ "X-GNOME-Autostart-enabled=true\n"
+ "X-KDE-autostart-after=panel\n"
+ "X-KDE-UniqueApplet=true\n"
+ ;
+
+void RTIToolW::init()
+{
+ connect(this->sesCB, SIGNAL(clicked(bool)),
+ this, SLOT(sesclicked(bool)));
+ string autostartfile = path_cat(path_home(), rautostartfile);
+ if (access(autostartfile.c_str(), 0) == 0) {
+ sesCB->setChecked(true);
+ }
+}
+
+void RTIToolW::sesclicked(bool on)
+{
+ nowCB->setEnabled(on);
+ if (!on)
+ nowCB->setChecked(false);
+}
+
+void RTIToolW::accept()
+{
+ bool exitdial = false;
+ string autostartfile = path_cat(path_home(), rautostartfile);
+
+ if (sesCB->isChecked()) {
+ // Setting up daemon indexing autostart
+
+ if (::access(autostartfile.c_str(), 0) == 0) {
+ QString msg = tr("Replacing: ") +
+ QString::fromLocal8Bit(autostartfile.c_str());
+
+ QMessageBox::Button rep =
+ QMessageBox::question(this, tr("Replacing file"), msg,
+ QMessageBox::Ok | QMessageBox::Cancel);
+ if (rep != QMessageBox::Ok) {
+ goto out;
+ }
+ }
+
+ string text;
+ if (theconfig) {
+ string sourcefile = path_cat(theconfig->getDatadir(), "examples");
+ sourcefile = path_cat(sourcefile, "recollindex.desktop");
+ if (::access(sourcefile.c_str(), 0) == 0) {
+ file_to_string(sourcefile, text);
+ }
+ }
+ if (text.empty())
+ text = desktopfiletext;
+
+ int fd = ::open(autostartfile.c_str(), O_WRONLY|O_CREAT, 0644);
+ if (fd < 0 || ::write(fd, text.c_str(), size_t(text.size()))
+ != ssize_t(text.size()) || ::close(fd) != 0) {
+ if (fd >=0)
+ ::close(fd);
+ QString msg = tr("Can't create: ") +
+ QString::fromLocal8Bit(autostartfile.c_str());
+ QMessageBox::warning(0, tr("Warning"), msg, QMessageBox::Ok);
+ return;
+ }
+ ::close(fd);
+
+ if (nowCB->isChecked()) {
+ ExecCmd cmd;
+ list<string> args;
+ int status;
+
+ args.push_back("-m");
+ args.push_back("-w");
+ args.push_back("0");
+ status = cmd.doexec("recollindex", args, 0, 0);
+ if (status) {
+ QMessageBox::warning(0, tr("Warning"),
+ tr("Could not execute recollindex"),
+ QMessageBox::Ok);
+ goto out;
+ }
+ }
+
+ exitdial = true;
+ } else {
+ // Turning autostart off
+ if (::access(autostartfile.c_str(), 0) == 0) {
+ QString msg = tr("Deleting: ") +
+ QString::fromLocal8Bit(autostartfile.c_str());
+
+ QMessageBox::Button rep =
+ QMessageBox::question(this, tr("Deleting file"), msg,
+ QMessageBox::Ok | QMessageBox::Cancel);
+ if (rep == QMessageBox::Ok) {
+ exitdial = true;
+ unlink(autostartfile.c_str());
+ if (theconfig) {
+ Pidfile pidfile(theconfig->getPidfile());
+ pid_t pid;
+ if ((pid = pidfile.open()) != 0) {
+ QMessageBox::Button rep =
+ QMessageBox::question(this,
+ tr("Removing autostart"),
+ tr("Autostart file deleted. Kill current process too ?"),
+ QMessageBox::Yes | QMessageBox::No);
+ if (rep == QMessageBox::Yes) {
+ kill(pid, SIGTERM);
+ }
+ }
+ }
+ }
+ } else {
+ exitdial = true;
+ }
+ }
+
+out:
+ if (exitdial)
+ QDialog::accept();
+}