summaryrefslogtreecommitdiffstats
path: root/kmrml/kmrml/lib/kmrml_config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kmrml/kmrml/lib/kmrml_config.cpp')
-rw-r--r--kmrml/kmrml/lib/kmrml_config.cpp339
1 files changed, 339 insertions, 0 deletions
diff --git a/kmrml/kmrml/lib/kmrml_config.cpp b/kmrml/kmrml/lib/kmrml_config.cpp
new file mode 100644
index 00000000..a88e8404
--- /dev/null
+++ b/kmrml/kmrml/lib/kmrml_config.cpp
@@ -0,0 +1,339 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org>
+
+ 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, version 2.
+
+ 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; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qtextcodec.h>
+
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kglobal.h>
+#include <kprocess.h>
+#include <kstandarddirs.h>
+
+#include "kmrml_config.h"
+
+#include <kdeversion.h>
+#if KDE_VERSION < 307
+ #define QUOTE( x ) x
+#else
+ #define QUOTE( x ) KProcess::quote( x )
+#endif
+
+using namespace KMrml;
+
+// #define DEFAULT_ADDCOLLECTION_CMD "gift-add-collection.pl --thumbnail-dir=%t --local-encoding %d"
+#define DEFAULT_ADDCOLLECTION_CMD "gift-add-collection.pl --gift-home=%h --thumbnail-dir=%t --local-encoding=%e %d"
+#define DEFAULT_REMOVECOLLECTION_CMD "gift-add-collection.pl --gift-home=%h --local-encoding=%e --remove-collection %d"
+
+#define DEFAULT_MRMLD_CMD "gift --port %p --datadir %d"
+#define DEFAULT_MRMLD_CMD_AUTOPORT "gift --datadir %d"
+
+#define CONFIG_GROUP "MRML Settings"
+#define DEFAULT_HOST "localhost"
+#define DEFAULT_USER "kmrml"
+#define DEFAULT_PASS "none"
+#define DEFAULT_AUTH false
+#define DEFAULT_AUTOPORT true
+const int DEFAULT_PORT = 12789;
+
+Config::Config()
+{
+ m_ownConfig = new KConfig( "kio_mrmlrc", false, false );
+ m_config = m_ownConfig;
+
+ init();
+}
+
+Config::Config( KConfig *config )
+ : m_config( config ),
+ m_ownConfig( 0L )
+{
+ init();
+}
+
+Config::~Config()
+{
+ delete m_ownConfig;
+}
+
+void Config::init()
+{
+ m_config->setGroup( CONFIG_GROUP );
+ m_defaultHost = m_config->readEntry( "Default Host" );
+ if ( m_defaultHost.isEmpty() )
+ m_defaultHost = DEFAULT_HOST;
+
+ m_hostList = m_config->readListEntry( "Host List" );
+ if ( m_hostList.isEmpty() )
+ m_hostList.append( DEFAULT_HOST );
+
+ m_serverStartedIndividually =
+ m_config->readBoolEntry( "ServerStartedIndividually", false );
+}
+
+bool Config::sync()
+{
+ bool notifySlaves = m_config->isDirty();
+ m_config->sync();
+ return notifySlaves;
+
+ // This moved to kcontrol/MainPage::save() so we don't have to link against
+ // KIO and need a full KApplication instance to work (so that the tiny
+ // mrmlsearch binary can also use this class)
+ // tell the ioslaves about the new configuration
+// if ( notifySlaves )
+// KIO::SlaveConfig::self()->reset();
+}
+
+void Config::setDefaultHost( const QString& host )
+{
+ m_defaultHost = host.isEmpty() ?
+ QString::fromLatin1(DEFAULT_HOST) : host;
+
+ m_config->setGroup( CONFIG_GROUP );
+ m_config->writeEntry( "Default Host", m_defaultHost );
+}
+
+ServerSettings Config::settingsForLocalHost() const
+{
+ return settingsForHost( "localhost" );
+}
+
+ServerSettings Config::settingsForHost( const QString& host ) const
+{
+ KConfigGroup config( m_config, settingsGroup( host ) );
+ ServerSettings settings;
+
+ settings.host = host;
+ settings.configuredPort = config.readUnsignedNumEntry( "Port",
+ DEFAULT_PORT );
+ settings.autoPort = (host == "localhost") &&
+ config.readBoolEntry("Automatically determine Port",
+ DEFAULT_AUTOPORT );
+ settings.user = config.readEntry( "Username", DEFAULT_USER );
+ settings.pass = config.readEntry( "Password", DEFAULT_PASS );
+ settings.useAuth = config.readBoolEntry( "Perform Authentication",
+ DEFAULT_AUTH );
+
+ return settings;
+}
+
+void Config::addSettings( const ServerSettings& settings )
+{
+ QString host = settings.host;
+ if ( m_hostList.find( host ) == m_hostList.end() )
+ m_hostList.append( host );
+
+ m_config->setGroup( CONFIG_GROUP );
+ m_config->writeEntry( "Host List", m_hostList );
+
+ m_config->setGroup( settingsGroup( host ) );
+ m_config->writeEntry( "Host", host );
+ m_config->writeEntry( "Port", settings.configuredPort );
+ m_config->writeEntry( "Automatically determine Port", settings.autoPort );
+ m_config->writeEntry( "Username", settings.user );
+ m_config->writeEntry( "Password", settings.pass );
+ m_config->writeEntry( "Perform Authentication", settings.useAuth );
+}
+
+bool Config::removeSettings( const QString& host )
+{
+ bool success = m_config->deleteGroup( settingsGroup( host ) );
+ if ( success )
+ {
+ m_hostList.remove( host );
+ m_config->setGroup( CONFIG_GROUP );
+ }
+
+ return success;
+}
+
+QStringList Config::indexableDirectories() const
+{
+ m_config->setGroup( CONFIG_GROUP );
+ return m_config->readListEntry( "Indexable Directories" );
+}
+
+void Config::setIndexableDirectories( const QStringList& dirs )
+{
+ m_config->setGroup( CONFIG_GROUP );
+ m_config->writeEntry( "Indexable Directories", dirs );
+}
+
+QString Config::addCollectionCommandLine() const
+{
+ m_config->setGroup( CONFIG_GROUP );
+ QString cmd = m_config->readEntry( "AddCollection Commandline",
+ DEFAULT_ADDCOLLECTION_CMD );
+ int index = cmd.find( "%h" );
+ if ( index != -1 )
+ cmd.replace( index, 2, QUOTE( mrmldDataDir() ) );
+
+ index = cmd.find( "%e" );
+ if ( index != -1 )
+ cmd.replace( index, 2, QTextCodec::codecForLocale()->mimeName() );
+
+ return cmd;
+}
+
+void Config::setAddCollectionCommandLine( const QString& cmd )
+{
+ m_config->setGroup( CONFIG_GROUP );
+ m_config->writeEntry( "AddCollection Commandline", cmd );
+}
+
+QString Config::removeCollectionCommandLine() const
+{
+ m_config->setGroup( CONFIG_GROUP );
+ QString cmd = m_config->readEntry( "RemoveCollection Commandline",
+ DEFAULT_REMOVECOLLECTION_CMD );
+ int index = cmd.find( "%h" );
+ if ( index != -1 )
+ cmd.replace( index, 2, QUOTE( mrmldDataDir() ) );
+
+ index = cmd.find( "%e" );
+ if ( index != -1 )
+ cmd.replace( index, 2, QTextCodec::codecForLocale()->mimeName() );
+
+ return cmd;
+}
+
+void Config::setRemoveCollectionCommandLine( const QString& cmd )
+{
+ m_config->setGroup( CONFIG_GROUP );
+ m_config->writeEntry( "RemoveCollection Commandline", cmd );
+}
+
+QString Config::mrmldCommandline() const
+{
+ ServerSettings settings = settingsForLocalHost();
+
+ m_config->setGroup( CONFIG_GROUP );
+ QString cmd = m_config->readEntry( "MrmmlDaemon Commandline",
+ settings.autoPort ?
+ DEFAULT_MRMLD_CMD_AUTOPORT :
+ DEFAULT_MRMLD_CMD );
+
+ // add data directory and port to the commandline
+ int index = cmd.find( "%p" );
+ if ( index != -1 )
+ {
+ QString port = settings.autoPort ?
+ QString::null : QString::number( settings.configuredPort );
+ cmd.replace( index, 2, port );
+ }
+ index = cmd.find( "%d" );
+ if ( index != -1 )
+ {
+ cmd.replace( index, 2, QUOTE( mrmldDataDir() ) );
+ }
+
+ qDebug("***** commandline: %s", cmd.latin1());
+
+ return cmd;
+}
+
+QString Config::mrmldDataDir()
+{
+ QString dir = KGlobal::dirs()->saveLocation( "data",
+ "kmrml/mrmld-data/" );
+ if ( dir.isEmpty() ) // fallback
+ dir = QDir::homeDirPath() + "/";
+
+ return dir;
+}
+
+void Config::setMrmldCommandLine( const QString& cmd )
+{
+ m_config->setGroup( CONFIG_GROUP );
+ m_config->writeEntry( "MrmmlDaemon Commandline", cmd );
+}
+
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+
+ServerSettings::ServerSettings()
+ : configuredPort( 0 ),
+ autoPort( true ),
+ useAuth( false )
+{
+}
+
+ServerSettings::ServerSettings( const QString& host, unsigned short int port,
+ bool autoPort, bool useAuth,
+ const QString& user, const QString& pass )
+{
+ this->host = host;
+ this->configuredPort = port;
+ this->autoPort = autoPort;
+ this->useAuth = useAuth;
+ this->user = user;
+ this->pass = pass;
+}
+
+// static
+ServerSettings ServerSettings::defaults()
+{
+ return ServerSettings( DEFAULT_HOST, DEFAULT_PORT,
+ (!strcmp(DEFAULT_HOST, "localhost") && DEFAULT_PORT),
+ DEFAULT_AUTH, DEFAULT_USER, DEFAULT_PASS );
+}
+
+KURL ServerSettings::getUrl() const
+{
+ KURL url;
+ url.setProtocol( "mrml" );
+ url.setHost( host );
+ if ( !autoPort )
+ url.setPort( configuredPort );
+
+ if ( useAuth && user.isEmpty() )
+ {
+ url.setUser( user );
+ url.setPass( pass );
+ }
+
+ return url;
+}
+
+unsigned short int ServerSettings::port() const
+{
+ if ( autoPort )
+ {
+ QString portsFile = Config::mrmldDataDir() + "gift-port.txt";
+ QFile file( portsFile );
+ if ( file.open( IO_ReadOnly ) )
+ {
+ QString line;
+ (void) file.readLine( line, 6 );
+// qDebug("**** read: %s", line.latin1());
+
+ file.close();
+
+ bool ok;
+ unsigned short int p = line.toUShort( &ok );
+ if ( ok )
+ return p;
+ }
+ else
+ kdWarning() << "Can't open \"" << portsFile << "\" to automatically determine the gift port" << endl;
+ }
+
+ return configuredPort;
+}