summaryrefslogtreecommitdiffstats
path: root/kpilot/kpilotConfig.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kpilot/kpilotConfig.cpp')
-rw-r--r--kpilot/kpilotConfig.cpp346
1 files changed, 346 insertions, 0 deletions
diff --git a/kpilot/kpilotConfig.cpp b/kpilot/kpilotConfig.cpp
new file mode 100644
index 0000000..6c3cbba
--- /dev/null
+++ b/kpilot/kpilotConfig.cpp
@@ -0,0 +1,346 @@
+/* KPilot
+**
+** Copyright (C) 1998-2001 by Dan Pilone
+** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
+**
+** This is all of KPilot's config-handling stuff.
+*/
+
+/*
+** 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 in a file called COPYING; if not, write to
+** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+** MA 02110-1301, USA.
+*/
+
+/*
+** Bug reports and questions can be sent to kde-pim@kde.org
+*/
+
+#include "options.h"
+
+#include <stdlib.h>
+
+#include <tqlineedit.h>
+#include <tqcombobox.h>
+#include <tqcheckbox.h>
+
+#include <kstandarddirs.h>
+#include <tdeconfig.h>
+#include <ksimpleconfig.h>
+#include <tdecmdlineargs.h>
+#include <tdemessagebox.h>
+#include <tdeglobalsettings.h>
+
+#include "kpilotSettings.h"
+#include "kpilotConfig.h"
+
+
+// This is a number indicating what configuration version
+// we're dealing with. Whenever new configuration options are
+// added that make it imperative for the user to take a
+// look at the configuration of KPilot (for example the
+// skipDB setting really needs user attention) we can change
+// (increase) this number.
+//
+//
+/* static */ const uint KPilotConfig::ConfigurationVersion = 443;
+
+/* static */ int KPilotConfig::getConfigVersion()
+{
+ FUNCTIONSETUP;
+
+ uint version = KPilotSettings::configVersion();
+
+ if (version < ConfigurationVersion)
+ {
+ WARNINGKPILOT << "Config file has old version " << version << endl;
+ }
+ else
+ {
+#ifdef DEBUG
+ DEBUGKPILOT << fname
+ << ": Config file has version " << version << endl;
+#endif
+ }
+
+ return version;
+}
+
+/* static */ void KPilotConfig::updateConfigVersion()
+{
+ FUNCTIONSETUP;
+ KPilotSettings::setConfigVersion( ConfigurationVersion );
+}
+
+/* static */ TQString KPilotConfig::getDefaultDBPath()
+{
+ FUNCTIONSETUP;
+ TQString lastUser = KPilotSettings::userName();
+ TQString dbsubpath = CSL1("kpilot/DBBackup/");
+ TQString defaultDBPath = TDEGlobal::dirs()->
+ saveLocation("data", dbsubpath + lastUser + CSL1("/"));
+ return defaultDBPath;
+}
+
+/* static */ int KPilotConfig::getDebugLevel(TDECmdLineArgs *p)
+{
+ FUNCTIONSETUP;
+
+ if (p)
+ {
+ if (p->isSet("debug"))
+ {
+ debug_level = p->getOption("debug").toInt();
+ }
+ }
+
+ return debug_level;
+}
+
+static TQFont *thefont = 0L;
+
+/* static */ const TQFont & KPilotConfig::fixed()
+{
+ FUNCTIONSETUP;
+
+ if (!thefont)
+ thefont = new TQFont(TDEGlobalSettings::fixedFont());
+
+ return *thefont;
+}
+
+
+void KPilotConfig::addDirtyDatabase(TQString db)
+{
+ FUNCTIONSETUP;
+ TQStringList l(KPilotSettings::dirtyDatabases());
+ if (!l.contains(db))
+ {
+ l.append(db);
+ KPilotSettings::setDirtyDatabases(l);
+ }
+}
+
+
+void KPilotConfig::addAppBlockChangedDatabase(TQString db)
+{
+ TQStringList l(KPilotSettings::appBlockChangedDatabases());
+ if (!l.contains(db))
+ {
+ l.append(db);
+ KPilotSettings::setAppBlockChangedDatabases(l);
+ }
+}
+
+void KPilotConfig::addFlagsChangedDatabase(TQString db)
+{
+ TQStringList l(KPilotSettings::flagsChangedDatabases());
+ if (!l.contains(db))
+ {
+ l.append(db);
+ KPilotSettings::setFlagsChangedDatabases(l);
+ }
+}
+
+
+
+
+/* static */ TQString KPilotConfig::versionDetails(int fileversion, bool run)
+{
+ FUNCTIONSETUP;
+ TQString s = CSL1("<qt><p>");
+ s += i18n("The configuration file is outdated.");
+ s += ' ';
+ s += i18n("The configuration file has version %1, while KPilot "
+ "needs version %2.").arg(fileversion).arg(ConfigurationVersion);
+ if (run)
+ {
+ s += ' ';
+ s += i18n("Please run KPilot and check the configuration carefully "
+ "to update the file.");
+ }
+ s += CSL1("</p><p>");
+ s += i18n("Important changes to watch for are:");
+ s += ' ';
+ if (fileversion < 440)
+ {
+ s += i18n("Renamed conduits, Kroupware and file installer have "
+ "been made conduits as well.");
+ s += ' ';
+ s += i18n("Conflict resolution is now a global setting.");
+ s += ' ';
+ }
+ if (fileversion < 443)
+ {
+ s += i18n("Changed format of no-backup databases.");
+ s += ' ';
+ }
+ // Insert more recent additions here
+
+
+ return s;
+}
+
+/* static */ void KPilotConfig::sorryVersionOutdated(int fileversion)
+{
+ FUNCTIONSETUP;
+ KMessageBox::detailedSorry(0L,
+ i18n("The configuration file for KPilot is out-of "
+ "date. Please run KPilot to update it."),
+ KPilotConfig::versionDetails(fileversion,true),
+ i18n("Configuration File Out-of Date"));
+}
+
+static void update440()
+{
+ // Try to update conduit list
+ {
+ TQStringList conduits( KPilotSettings::installedConduits() );
+ TDEConfig*c = KPilotSettings::self()->config();
+/// c->resetGroup();
+ c->setGroup( TQString() );
+ bool installFiles = c->readBoolEntry("SyncFiles",true);
+ if (installFiles) conduits.append( CSL1("internal_fileinstall") );
+ c->deleteEntry("SyncFiles");
+ KPilotSettings::setInstalledConduits(conduits);
+ c->sync();
+ if (installFiles)
+ KMessageBox::information(0L,
+ i18n("The settings for the file installer have been moved to the "
+ "conduits configuration. Check the installed "
+ "conduits list."),
+ i18n("Settings Updated"));
+
+ }
+
+ // Check if individual conduits have conflict settings?
+
+ // Search for old conduit libraries.
+ {
+ TQStringList foundlibs ;
+ static const char *oldconduits[] = { "null", "address", "doc",
+ "knotes", "sysinfo", "time", "todo", "vcal", 0L } ;
+ const char **s = oldconduits;
+ while (*s)
+ {
+ TQString libname = CSL1("trinity/lib%1conduit.so").arg(TQString::fromLatin1(*s));
+ TQString foundlib = ::locate("lib",libname);
+ if (!foundlib.isEmpty())
+ {
+ foundlibs.append(foundlib);
+ }
+ s++;
+ }
+
+ if (!foundlibs.isEmpty())
+ KMessageBox::informationList(0L,
+ i18n("<qt>The following old conduits were found on "
+ "your system. It is a good idea to remove "
+ "them and the associated <tt>.la</tt> "
+ "and <tt>.so.0</tt> files.</qt>"),
+ foundlibs,
+ i18n("Old Conduits Found"));
+ }
+}
+
+static void update443()
+{
+ FUNCTIONSETUP;
+
+ TQStringList skip = KPilotSettings::skipBackupDB();
+ TQStringList fixSkip;
+ bool fixedSome = false;
+#ifdef DEBUG
+ DEBUGKPILOT << fname << ": Skip databases are: "
+ << skip.join(CSL1(",")) << endl;
+#endif
+
+ for (TQStringList::const_iterator i = skip.begin(); i!=skip.end(); ++i)
+ {
+ if ((*i).length()==4)
+ {
+ fixSkip.append(CSL1("[%1]").arg(*i));
+ fixedSome = true;
+ }
+ else
+ {
+ fixSkip.append(*i);
+ }
+ }
+
+ if (fixedSome)
+ {
+ KMessageBox::informationList(0L,
+ i18n("<qt>The no backup databases listed in your configuration file "
+ "have been adjusted to the new format. Database creator IDs "
+ "have been changed to use square brackets []."),
+ fixSkip,
+ i18n("No Backup Databases Updated"));
+ }
+}
+
+/* static */ KPilotConfig::RunMode KPilotConfig::interactiveUpdate()
+{
+ FUNCTIONSETUP;
+
+ int res = 0;
+ unsigned int fileVersion = KPilotSettings::configVersion();
+ // FIXME better config handling -> Move the config entries using tdeconf_update
+
+ // It's OK if we're already at the required level.
+ if (fileVersion >= KPilotConfig::ConfigurationVersion)
+ {
+ return Normal;
+ }
+
+ if (0 == fileVersion) // No config file at all
+ {
+ res = KMessageBox::questionYesNoCancel(0L,
+ i18n("KPilot is not configured for use. You may use "
+ "the configuration wizard or the normal configure dialog "
+ "to configure KPilot."),
+ i18n("Not Configured"),
+ i18n("Use &Wizard"),
+ i18n("Use &Dialog"));
+ if (res == KMessageBox::Yes) return WizardAndContinue;
+ if (res == KMessageBox::No) return ConfigureAndContinue;
+
+ return Cancel;
+ }
+
+ res = KMessageBox::warningContinueCancel(0L,
+ i18n("The configuration file for KPilot is out-of "
+ "date. KPilot can update some parts of the "
+ "configuration automatically. Do you wish to "
+ "continue?"),
+ i18n("Configuration File Out-of Date"));
+ if (res!=KMessageBox::Continue) return Cancel;
+
+#ifdef DEBUG
+ DEBUGKPILOT << fname << ": Updating from "
+ << fileVersion << " to " << ConfigurationVersion << endl;
+#endif
+
+ if (fileVersion < 440) update440();
+ if (fileVersion < 443) update443();
+
+ KPilotConfig::updateConfigVersion();
+ KPilotSettings::writeConfig();
+ return ConfigureAndContinue;
+}
+
+void KPilotConfig::sync()
+{
+ KPilotSettings::self()->config()->sync();
+}