/*
* 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, either version 3 of the License, or
* (at your option) any later version.
*
* 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. If not, see .
*/
#include "UBImportVirtualPrinter.h"
#include "core/UBApplication.h"
#include "core/UBPersistenceManager.h"
#include "core/UBDocumentManager.h"
#include "document/UBDocumentProxy.h"
#include "UBIniFileParser.h"
#include
#include "core/memcheck.h"
QString UBImportVirtualPrinter::sOriginalDefaultPrintername = "";
QPointer UBImportVirtualPrinter::pendingDocument;
UBImportVirtualPrinter::UBImportVirtualPrinter(QObject* parent)
: UBImportAdaptor(parent)
{
// NOOP
}
UBImportVirtualPrinter::~UBImportVirtualPrinter()
{
// NOOP
}
QStringList UBImportVirtualPrinter::supportedExtentions()
{
return QStringList("ini");
}
QString UBImportVirtualPrinter::importFileFilter()
{
// we don't want user import manually ini file.
return "";
}
QString UBImportVirtualPrinter::pdfFileName(const QFile& pFile)
{
UBIniFileParser iniParser(pFile.fileName());
// check if we have 1 PDF file to import
QString totalPdfString = iniParser.getStringValue("PDF", "Count");
bool ok;
int totalPdf = totalPdfString.toInt(&ok);
QString pdfFilename;
if (ok && totalPdf > 0)
{
pdfFilename = iniParser.getStringValue("PDF", "File0");
if (pdfFilename == "")
{
qWarning() << "Unable to retreive PDF file name from ini file " << pFile.fileName();
}
}
return pdfFilename;
}
QStringList UBImportVirtualPrinter::emfFileNames(const QFile& pFile)
{
UBIniFileParser iniParser(pFile.fileName());
// check if we have 1 PDF file to import
QString totalEmfString = iniParser.getStringValue("EMF", "Count");
bool ok;
int totalEmf = totalEmfString.toInt(&ok);
QStringList emfFilenames;
if (ok)
{
for(int i = 0; i < totalEmf; i++)
{
emfFilenames << iniParser.getStringValue("EMF", QString("File%1").arg(i));
}
}
return emfFilenames;
}
void UBImportVirtualPrinter::cleanUp(const QFile& pFile, const QString& pPdfFileName, QStringList pEmfFilenames)
{
//restore default printer if needed
if (UBImportVirtualPrinter::sOriginalDefaultPrintername != "")
{
LPTSTR wDefaultPrinterName = new TCHAR[255];
int i = UBImportVirtualPrinter::sOriginalDefaultPrintername.toWCharArray(wDefaultPrinterName);
wDefaultPrinterName[i] = 0;
SetDefaultPrinter(wDefaultPrinterName);
UBImportVirtualPrinter::sOriginalDefaultPrintername = "";
delete[] wDefaultPrinterName;
}
// delete tmp ini file
if (!QFile::remove(pFile.fileName()))
{
qWarning() << "Unable to remove file " << pFile.fileName();
}
// delete tmp PDF file
if (pPdfFileName != "" && !QFile::remove(pPdfFileName))
{
qWarning() << "Unable to remove file " << pPdfFileName;
}
foreach(QString f, pEmfFilenames)
{
QFile::remove(f);
}
}
UBDocumentProxy* UBImportVirtualPrinter::importFile(const QFile& pFile, const QString& pGroup)
{
UBApplication::showMessage(tr("Importing Sankore printer file ..."));
UBDocumentProxy *document = 0;
QString pdfFilename = pdfFileName(pFile);
if (pdfFilename.size() > 0)
{
QFile pdfFile(pdfFilename);
document = UBDocumentManager::documentManager()->importFile(pdfFile, pGroup);
UBIniFileParser iniParser(pFile.fileName());
QString documentName = iniParser.getStringValue("Document", "Name");
// we must update the document name otherwise the imported document will have the name of the tmp PDF file.
if (document)
{
if (documentName != "")
document->setMetaData(UBSettings::documentName, documentName);
UBPersistenceManager::persistenceManager()->persistDocumentMetadata(document);
}
}
if (!document)
{
UBApplication::showMessage(tr("Error while importing Sankore printer file."));
}
cleanUp(pFile, pdfFilename, emfFileNames(pFile));
return document;
}
bool UBImportVirtualPrinter::addFileToDocument(UBDocumentProxy* pDocument, const QFile& pFile)
{
UBApplication::showMessage(tr("Importing Sankore printer file ..."));
bool result = false;
QString pdfFilename = pdfFileName(pFile);
if (pdfFilename.size() > 0)
{
QFile pdfFile(pdfFilename);
result = UBDocumentManager::documentManager()->addFileToDocument(pDocument, pdfFile);
}
if (!result)
{
UBApplication::showMessage(tr("Error while importing Sankore printer file."));
}
cleanUp(pFile, pdfFilename, emfFileNames(pFile));
return result;
}