kdeprint Library API Documentation

lpqhelper.cpp

00001 /* 00002 * This file is part of the KDE libraries 00003 * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be> 00004 * 00005 * This library is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU Library General Public 00007 * License version 2 as published by the Free Software Foundation. 00008 * 00009 * This library is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 * Library General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU Library General Public License 00015 * along with this library; see the file COPYING.LIB. If not, write to 00016 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 * Boston, MA 02111-1307, USA. 00018 **/ 00019 00020 #include "lpqhelper.h" 00021 #include "kmjob.h" 00022 #include "kpipeprocess.h" 00023 #include "lprsettings.h" 00024 00025 #include <kstandarddirs.h> 00026 #include <kprocess.h> 00027 #include <kdebug.h> 00028 00029 LpqHelper::LpqHelper(QObject *parent, const char *name) 00030 : QObject(parent, name) 00031 { 00032 m_exepath = KStandardDirs::findExe("lpq"); 00033 } 00034 00035 LpqHelper::~LpqHelper() 00036 { 00037 } 00038 00039 KMJob* LpqHelper::parseLineLpr(const QString& line) 00040 { 00041 QString rank = line.left(7); 00042 if (!rank[0].isDigit() && rank != "active") 00043 return NULL; 00044 KMJob *job = new KMJob; 00045 job->setState((rank[0].isDigit() ? KMJob::Queued : KMJob::Printing)); 00046 job->setOwner(line.mid(7, 11).stripWhiteSpace()); 00047 job->setId(line.mid(18, 5).toInt()); 00048 job->setName(line.mid(23, 38).stripWhiteSpace()); 00049 int p = line.find(' ', 61); 00050 if (p != -1) 00051 { 00052 job->setSize(line.mid(61, p-61).toInt() / 1000); 00053 } 00054 return job; 00055 } 00056 00057 KMJob* LpqHelper::parseLineLPRng(const QString& line) 00058 { 00059 QString rank = line.left(7).stripWhiteSpace(); 00060 if (!rank[0].isDigit() && rank != "active" && rank != "hold") 00061 return NULL; 00062 KMJob *job = new KMJob; 00063 job->setState((rank[0].isDigit() ? KMJob::Queued : (rank == "hold" ? KMJob::Held : KMJob::Printing))); 00064 int p = line.find('@', 7), q = line.find(' ', 7); 00065 job->setOwner(line.mid(7, QMIN(p,q)-7)); 00066 while (line[q].isSpace()) 00067 q++; 00068 q++; 00069 while (line[q].isSpace()) 00070 q++; 00071 p = line.find(' ', q); 00072 job->setId(line.mid(q, p-q).toInt()); 00073 while (line[p].isSpace()) 00074 p++; 00075 q = p+25; 00076 while (line[q].isDigit()) 00077 q--; 00078 job->setName(line.mid(p, q-p).stripWhiteSpace()); 00079 job->setSize(line.mid(q+1, p+26-q).toInt() / 1000); 00080 return job; 00081 } 00082 00083 void LpqHelper::listJobs(QPtrList<KMJob>& jobs, const QString& prname, int limit) 00084 { 00085 KPipeProcess proc; 00086 if (!m_exepath.isEmpty() && proc.open(m_exepath + " -P " + KProcess::quote(prname))) 00087 { 00088 QTextStream t(&proc); 00089 QString line; 00090 bool lprng = (LprSettings::self()->mode() == LprSettings::LPRng); 00091 int count = 0; 00092 00093 while (!t.atEnd()) 00094 { 00095 line = t.readLine().stripWhiteSpace(); 00096 if (line.startsWith("Rank")) 00097 break; 00098 } 00099 while (!t.atEnd()) 00100 { 00101 line = t.readLine(); 00102 if ( limit > 0 && count >= limit ) 00103 continue; 00104 KMJob *job = (lprng ? parseLineLPRng(line) : parseLineLpr(line)); 00105 if (job) 00106 { 00107 job->setPrinter(prname); 00108 job->setUri("lpd://"+prname+"/"+QString::number(job->id())); 00109 jobs.append(job); 00110 count++; 00111 } 00112 else 00113 break; 00114 } 00115 proc.close(); 00116 } 00117 }
KDE Logo
This file is part of the documentation for kdeprint Library Version 3.3.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sun Oct 17 11:32:42 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003