Added program arguments to print labels in console mode
git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@65 cac9541e-1b8d-4bfa-827e-589bba606050
This commit is contained in:
+119
-15
@@ -20,34 +20,138 @@
|
||||
|
||||
#include <QApplication>
|
||||
#include <QMessageBox>
|
||||
#include <QMap>
|
||||
#include "mainwindow.h"
|
||||
#include "qcdscene.h"
|
||||
#include "qlightscribe.h"
|
||||
#include "qconsoleprintprogress.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
uid_t realUserId;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
std::ostream &operator<<( std::ostream &os, const QString &str )
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
return os << str.toAscii().data();
|
||||
}
|
||||
|
||||
void usage()
|
||||
{
|
||||
std::cout << "Usage: \n"
|
||||
<< "To run GUI: qlscribe [filename] [filename] ...\n"
|
||||
<< "To print label in console mode: qlscribe --print [--drive Index] [--replace KEY=VALUE] filename\n"
|
||||
<< "\tParameters:\n"
|
||||
<< "\t\t--help | -h - print this message\n"
|
||||
<< "\t\t--print | -p - switch to print mode\n"
|
||||
<< "\t\t--drive | -d NUMBER - use this drive, starts from 0, 0 is default\n"
|
||||
<< "\t\t--replace | -r KEY=VALUE - replace text from KEY to VALUE\n"
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
QApplication app( argc, argv );
|
||||
app.addLibraryPath( "/usr/lib32/qt4/plugins" );
|
||||
|
||||
bool doPrint = false;
|
||||
QStringList arguments = app.arguments();
|
||||
QStringList files;
|
||||
QCDScene::QString2String replacements;
|
||||
int driveIndex = 0;
|
||||
QLightScribe::PrintParameters params;
|
||||
bool labelModeOverriden = false;
|
||||
|
||||
for( int i = 1; i < arguments.size(); ++i ) {
|
||||
QString arg = arguments[i];
|
||||
if( arg == "--print" || arg == "-p" ) {
|
||||
doPrint = true;
|
||||
continue;
|
||||
}
|
||||
if( arg == "--help" || arg == "-h" ) {
|
||||
usage();
|
||||
return 0;
|
||||
}
|
||||
if( arg == "--replace" || arg == "-r" ) {
|
||||
if( i == arguments.size() - 1 ) {
|
||||
std::cerr << "Error: arg#" << i
|
||||
<< " argument expected for \"" << arg << "\" not enough parameters" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
QString param = arguments[ ++i ];
|
||||
int pos = param.indexOf( '=' );
|
||||
if( pos == -1 ) {
|
||||
std::cerr << "Error: arg#" << i
|
||||
<< " invalid argument for replacement, KEY=VALUE expected, missing =" << std::endl;
|
||||
return 2;
|
||||
}
|
||||
replacements[ param.left( pos ) ] = param.right( param.size() - pos - 1 );
|
||||
continue;
|
||||
}
|
||||
if( arg[0] != '-' )
|
||||
files.append( arg );
|
||||
}
|
||||
|
||||
if( doPrint && files.size() != 1 ) {
|
||||
if( files.size() )
|
||||
std::cerr << "Error: only one filename expected to print, got " << files.size() << " instead" << std::endl;
|
||||
else
|
||||
std::cerr << "Error: filename required to print" << std::endl;
|
||||
return 3;
|
||||
}
|
||||
|
||||
bool enablePrint = false;
|
||||
if( geteuid() ) {
|
||||
if( QMessageBox::question( 0,
|
||||
QObject::tr( "Confirmation" ),
|
||||
QObject::tr( "Print functionality requires setuid (sticky) flag set on the application\n"
|
||||
"This program does not seem to have it set, print functiionality will be disabled\n"
|
||||
"You still will be able to do print preview and edit documents\n"
|
||||
"Do you want to continue?" ),
|
||||
QMessageBox::Yes | QMessageBox::No,
|
||||
QMessageBox::No )
|
||||
== QMessageBox::No )
|
||||
return 1;
|
||||
if( !doPrint ) {
|
||||
if( QMessageBox::question( 0,
|
||||
QObject::tr( "Confirmation" ),
|
||||
QObject::tr( "Print functionality requires setuid (sticky) flag set on the application\n"
|
||||
"This program does not seem to have it set, print functionality will be disabled\n"
|
||||
"You still will be able to do print preview and edit documents\n"
|
||||
"Do you want to continue?" ),
|
||||
QMessageBox::Yes | QMessageBox::No,
|
||||
QMessageBox::No )
|
||||
== QMessageBox::No )
|
||||
return 4;
|
||||
} else {
|
||||
std::cerr << "Error: setuid flag is not set, cannot print" << std::endl;
|
||||
return 4;
|
||||
}
|
||||
} else {
|
||||
realUserId = getuid();
|
||||
setreuid( 0, realUserId );
|
||||
enablePrint = true;
|
||||
}
|
||||
MainWindow mwindow( enablePrint );
|
||||
mwindow.show();
|
||||
|
||||
return app.exec();
|
||||
int rez = 0;
|
||||
|
||||
if( doPrint ) {
|
||||
// print here
|
||||
QCDScene scene;
|
||||
QString err;
|
||||
if( !scene.load( files.front(), &err ) ) {
|
||||
std::cerr << "Error: cannot read \"" << files.front() << "\" - " << err << std::endl;
|
||||
return 5;
|
||||
}
|
||||
scene.replace( replacements );
|
||||
if( !labelModeOverriden )
|
||||
params.m_labelMode = scene.labelMode();
|
||||
|
||||
QLightScribe *scribe = QLightScribe::instance();
|
||||
QList< QLightDrive * > drives = scribe->getDrives();
|
||||
if( driveIndex >= drives.size() ) {
|
||||
std::cerr << "Error: drive " << driveIndex << " but there are only " << drives.size() << " drives" << std::endl;
|
||||
return 6;
|
||||
}
|
||||
QConsolePrintProgress progress;
|
||||
std::cout << "Printing label " << files.front() << std::endl;
|
||||
scribe->print( drives[driveIndex], params, &scene );
|
||||
rez = app.exec();
|
||||
} else {
|
||||
MainWindow mwindow( enablePrint );
|
||||
mwindow.show();
|
||||
mwindow.open( files );
|
||||
rez = app.exec();
|
||||
}
|
||||
|
||||
return rez;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user