00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include "kmrlprmanager.h"
00021
#include "kmprinter.h"
00022
00023
#include <qfile.h>
00024
#include <qfileinfo.h>
00025
#include <qtextstream.h>
00026
#include <qmap.h>
00027
00028
#include <kstandarddirs.h>
00029
#include <klocale.h>
00030
00031 KMRlprManager::KMRlprManager(
QObject *parent,
const char *name,
const QStringList & )
00032 : KMManager(parent,name)
00033 {
00034 setHasManagement(
true);
00035 setPrinterOperationMask(KMManager::PrinterCreation|KMManager::PrinterRemoval|KMManager::PrinterTesting);
00036 }
00037
00038 KMRlprManager::~KMRlprManager()
00039 {
00040 }
00041
00042
bool KMRlprManager::createPrinter(KMPrinter *p)
00043 {
00044
if (p->name().isEmpty())
00045 setErrorMsg(i18n(
"Empty printer name."));
00046
else if (p->option(
"host").isEmpty())
00047 setErrorMsg(i18n(
"Empty host name."));
00048
else if (p->option(
"queue").isEmpty())
00049 setErrorMsg(i18n(
"Empty queue name."));
00050
else
00051 {
00052 KMPrinter *pr =
new KMPrinter(*p);
00053 addPrinter(pr);
00054 savePrinters();
00055
return true;
00056 }
00057
return false;
00058 }
00059
00060
bool KMRlprManager::removePrinter(KMPrinter *p)
00061 {
00062
if (m_printers.findRef(p) == -1)
00063 setErrorMsg(i18n(
"Printer not found."));
00064
else
00065 {
00066 m_printers.removeRef(p);
00067 savePrinters();
00068
return true;
00069 }
00070
return false;
00071 }
00072
00073
bool KMRlprManager::testPrinter(KMPrinter *)
00074 {
00075 setErrorMsg(i18n(
"Not implemented yet."));
00076
return false;
00077 }
00078
00079
void KMRlprManager::listPrinters()
00080 {
00081
QFileInfo pfi(printerFile());
00082
if (pfi.
exists() && (!m_checktime.isValid() || m_checktime < pfi.
lastModified()))
00083 {
00084 loadPrintersConf(pfi.
absFilePath());
00085 m_checktime = pfi.
lastModified();
00086 }
00087
else
00088 discardAllPrinters(
false);
00089 }
00090
00091
void KMRlprManager::loadPrintersConf(
const QString& filename)
00092 {
00093
QFile f(filename);
00094
if (f.
exists() && f.
open(IO_ReadOnly))
00095 {
00096
QTextStream t(&f);
00097
QString line;
00098
while (!t.eof())
00099 {
00100 line = t.
readLine().stripWhiteSpace();
00101
if (line.
isEmpty() || line[0] ==
'#')
00102
continue;
00103
QStringList w =
QStringList::split(
'\t',line,
true);
00104
if (w.count() < 3)
00105
continue;
00106
00107 KMPrinter *printer =
new KMPrinter;
00108 printer->setName(w[0]);
00109 printer->setPrinterName(w[0]);
00110 printer->setType(KMPrinter::Printer);
00111 printer->setOption(
"host",w[1]);
00112 printer->setOption(
"queue",w[2]);
00113
if (w.count() > 3)
00114 {
00115 printer->setDescription(w[3]);
00116
if (w.count() > 4) printer->setLocation(w[4]);
00117 }
00118 printer->setState(KMPrinter::Idle);
00119 printer->setDevice(QString::fromLatin1(
"lpd://%1/%2").arg(w[1]).arg(w[2]));
00120
00121 addPrinter(printer);
00122 }
00123 }
00124 }
00125
00126
void KMRlprManager::savePrinters()
00127 {
00128 savePrintersConf(printerFile());
00129 }
00130
00131
void KMRlprManager::savePrintersConf(
const QString& filename)
00132 {
00133
QFile f(filename);
00134
if (f.
open(IO_WriteOnly))
00135 {
00136
QTextStream t(&f);
00137 t <<
"# File generated by KDE print system. Don't edit by hand." << endl;
00138
QPtrListIterator<KMPrinter> it(m_printers);
00139
for (;it.
current();++it)
00140 {
00141
if (!it.
current()->name().isEmpty() && it.
current()->instanceName().isEmpty())
00142 {
00143
QString host = it.
current()->option(
"host");
00144
QString queue = it.
current()->option(
"queue");
00145
if (!host.
isEmpty() && !queue.
isEmpty())
00146 {
00147 t << it.
current()->name() <<
'\t' << host <<
'\t' << queue;
00148 t <<
'\t' << it.
current()->description() <<
'\t' << it.
current()->location() << endl;
00149 }
00150 }
00151 }
00152 }
00153 }
00154
00155
QString KMRlprManager::printerFile()
00156 {
00157
return locateLocal(
"data",
"kdeprint/printers.conf");
00158 }