summaryrefslogtreecommitdiffstats
path: root/kdeprint/cups/cupsinfos.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdeprint/cups/cupsinfos.cpp')
-rw-r--r--kdeprint/cups/cupsinfos.cpp166
1 files changed, 166 insertions, 0 deletions
diff --git a/kdeprint/cups/cupsinfos.cpp b/kdeprint/cups/cupsinfos.cpp
new file mode 100644
index 000000000..f96451d76
--- /dev/null
+++ b/kdeprint/cups/cupsinfos.cpp
@@ -0,0 +1,166 @@
+/*
+ * This file is part of the KDE libraries
+ * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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 "cupsinfos.h"
+#include "kmfactory.h"
+#include "kmtimer.h"
+#include "messagewindow.h"
+
+#include <kio/passdlg.h>
+#include <kio/authinfo.h>
+#include <klocale.h>
+#include <kconfig.h>
+#include <kapplication.h>
+#include <dcopclient.h>
+#include <kdebug.h>
+#include <kstringhandler.h>
+
+#include <cups/cups.h>
+#include <cups/ipp.h>
+
+const char* cupsGetPasswordCB(const char*)
+{
+ return CupsInfos::self()->getPasswordCB();
+}
+
+CupsInfos* CupsInfos::unique_ = 0;
+
+CupsInfos* CupsInfos::self()
+{
+ if (!unique_)
+ {
+ unique_ = new CupsInfos();
+ }
+ return unique_;
+}
+
+CupsInfos::CupsInfos()
+: KPReloadObject(true)
+{
+ count_ = 0;
+
+ load();
+/* host_ = cupsServer();
+ login_ = cupsUser();
+ if (login_.isEmpty()) login_ = QString::null;
+ port_ = ippPort();
+ password_ = QString::null;*/
+
+ cupsSetPasswordCB(cupsGetPasswordCB);
+}
+
+CupsInfos::~CupsInfos()
+{
+}
+
+QString CupsInfos::hostaddr() const
+{
+ if (host_[0] != '/')
+ return host_ + ":" + QString::number(port_);
+ return "localhost";
+}
+
+void CupsInfos::setHost(const QString& s)
+{
+ host_ = s;
+ cupsSetServer(s.latin1());
+}
+
+void CupsInfos::setPort(int p)
+{
+ port_ = p;
+ ippSetPort(p);
+}
+
+void CupsInfos::setLogin(const QString& s)
+{
+ login_ = s;
+ cupsSetUser(s.latin1());
+}
+
+void CupsInfos::setPassword(const QString& s)
+{
+ password_ = s;
+}
+
+void CupsInfos::setSavePassword( bool on )
+{
+ savepwd_ = on;
+}
+
+const char* CupsInfos::getPasswordCB()
+{
+ QPair<QString,QString> pwd = KMFactory::self()->requestPassword( count_, login_, host_, port_ );
+
+ if ( pwd.first.isEmpty() && pwd.second.isEmpty() )
+ return NULL;
+ setLogin( pwd.first );
+ setPassword( pwd.second );
+ return pwd.second.latin1();
+}
+
+void CupsInfos::load()
+{
+ KConfig *conf_ = KMFactory::self()->printConfig();
+ conf_->setGroup("CUPS");
+ host_ = conf_->readEntry("Host",QString::fromLatin1(cupsServer()));
+ port_ = conf_->readNumEntry("Port",ippPort());
+ login_ = conf_->readEntry("Login",QString::fromLatin1(cupsUser()));
+ savepwd_ = conf_->readBoolEntry( "SavePassword", false );
+ if ( savepwd_ )
+ {
+ password_ = KStringHandler::obscure( conf_->readEntry( "Password" ) );
+ KMFactory::self()->initPassword( login_, password_, host_, port_ );
+ }
+ else
+ password_ = QString::null;
+ if (login_.isEmpty()) login_ = QString::null;
+ reallogin_ = cupsUser();
+
+ // synchronize with CUPS
+ cupsSetServer(host_.latin1());
+ cupsSetUser(login_.latin1());
+ ippSetPort(port_);
+}
+
+void CupsInfos::save()
+{
+ KConfig *conf_ = KMFactory::self()->printConfig();
+ conf_->setGroup("CUPS");
+ conf_->writeEntry("Host",host_);
+ conf_->writeEntry("Port",port_);
+ conf_->writeEntry("Login",login_);
+ conf_->writeEntry( "SavePassword", savepwd_ );
+ if ( savepwd_ )
+ conf_->writeEntry( "Password", KStringHandler::obscure( password_ ) );
+ else
+ conf_->deleteEntry( "Password" );
+ conf_->sync();
+}
+
+void CupsInfos::reload()
+{
+ // do nothing, but needs to be implemented
+}
+
+void CupsInfos::configChanged()
+{
+ // we need to reload settings
+ load();
+}