diff -r 000000000000 -r d11fb78c4374 ImagePrint/ImagePrintEngine/DeviceProtocols/upnpprotocolfw2/src/cupprintfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ImagePrint/ImagePrintEngine/DeviceProtocols/upnpprotocolfw2/src/cupprintfactory.cpp Thu Dec 17 08:45:53 2009 +0200 @@ -0,0 +1,401 @@ +/* +* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declares CUPPrintFactory class +* +*/ + + + +#include + +#include "cupprintfactory.h" +#include "upconsts.h" +#include "cuplogger.h" + +_LIT( KHtmFileName, "UPnPPrint_%d.xhtml" ); +_LIT(KUPnPSettingsFile, "settings.txt"); + +// (TInt64 == 21 chars)*2 + , + \n --> must fit in 50 +const TInt KSettingsLength = 50; + + +// ----------------------------------------------------------------------------- +// CUPPrintFactory::NewL +// ----------------------------------------------------------------------------- +// +CUPPrintFactory* CUPPrintFactory::NewL( ) +{ + CUPPrintFactory* self = new (ELeave) CUPPrintFactory(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; +} + + +// ----------------------------------------------------------------------------- +// CUPPrintFactory::~CUPPrintFactory +// Destructor +// ----------------------------------------------------------------------------- +// +CUPPrintFactory::~CUPPrintFactory( ) +{ + // No can do if deleting fails -> ignore leave + TRAP_IGNORE( DeleteXhtmlFilesL() ); + iFileSession.Close(); + iCapabilities.Close(); +} + +// ----------------------------------------------------------------------------- +// CUPPrintFactory::CreateXhtmlFileL +// ----------------------------------------------------------------------------- +// +void CUPPrintFactory::CreateXhtmlFileL(const RArray& aJobURIs, const TInt aLayout, + const TInt aPaperSize, const TInt aQuality, + TDes& aXhtmlPrintFile, TInt& aPageCount) +{ + if ( aJobURIs.Count() < 1 ) + { + User::Leave( KErrArgument ); + } + + iFileCount++; + + //Create XHTML-print file + aXhtmlPrintFile.Format(KHtmFileName(), iFileCount); + + // parse XHTML-file + CXhtmlFileComposer *fileParser = CXhtmlFileComposer::NewLC(KUPnPXhtmlPath()); + fileParser->CreateXhtmlFileL(aJobURIs, aLayout, aPaperSize, aQuality, aXhtmlPrintFile, aPageCount); + CleanupStack::PopAndDestroy(fileParser); +} + +// ----------------------------------------------------------------------------- +// CUPPrintFactory::DeleteXhtmlFilesL +// ----------------------------------------------------------------------------- +// +void CUPPrintFactory::DeleteXhtmlFilesL( ) +{ + CFileMan* fileMan = CFileMan::NewL( iFileSession ); + CleanupStack::PushL( fileMan ); + fileMan->RmDir( KUPnPXhtmlPath() ); + CleanupStack::PopAndDestroy(fileMan); +} + + +// ----------------------------------------------------------------------------- +// CUPPrintFactory::FileCount +// ----------------------------------------------------------------------------- +// +TInt CUPPrintFactory::FileCount() +{ + return iFileCount; +} + +// ----------------------------------------------------------------------------- +// CUPPrintFactory::GetCapabilityIDs +// ----------------------------------------------------------------------------- +// +void CUPPrintFactory::GetCapabilityIDs(RArray& aCapabilityIDs ) +{ + for (TInt i=0; i < iCapabilities.Count(); i++) + { + aCapabilityIDs.Append(iCapabilities[i].iCapabilityID); + } +} + +// ----------------------------------------------------------------------------- +// CUPPrintFactory::GetCapability +// ----------------------------------------------------------------------------- +// +TInt CUPPrintFactory::GetCapability(const TInt aCapabilityID, TPrintCapability& aCapability) +{ + for (TInt i=0; i < iCapabilities.Count(); i++) + { + if (aCapabilityID == iCapabilities[i].iCapabilityID) + { + // copy capability to ouput param + aCapability.iCapabilityID = aCapabilityID; + aCapability.iDefaultValue = iCapabilities[i].iDefaultValue; + aCapability.iType = iCapabilities[i].iType; + aCapability.iEnumCount = 0; + + + for (TInt j=0; j < iCapabilities[i].iEnumCount; j++) + { + aCapability.iEnumCodes[j] = iCapabilities[i].iEnumCodes[j]; + aCapability.iEnumCount++; + } + + return KErrNone; + } + } + + return KErrNotSupported; +} + +//-------------------------------------------------------------------------------------------- +// CUPPrintFactory::GetPrintSetting +//-------------------------------------------------------------------------------------------- +TInt CUPPrintFactory::GetPrintSetting(TInt aCapabilityID, TInt& aValue) +{ + for (TInt i=0; i= fileSize) + fileSize = 250; + + // Create buffer + HBufC8* fileBuffer = HBufC8::NewL(fileSize); + CleanupStack::PushL(fileBuffer); + + TPtr8 bufferPtr( fileBuffer->Des() ); + bufferPtr.Zero(); + + User::LeaveIfError(file.Read(bufferPtr)); + LOG81("bufferPtr: %S", &bufferPtr); + + TInt stopper = 0; + TInt pos = bufferPtr.Find(KUPnPLineFeed8()); + while (pos > 0 && stopper < 20) + { + ++stopper; + LOG("----------------"); + + TLex8 lex(bufferPtr.Left(pos)); + LOG81("bufferPtr.Left(pos): %S", &(bufferPtr.Left(pos))); + + // get id + if ((lex.Peek()).IsDigit()) + { + TInt id; + TInt err = lex.Val(id); + LOG1("id: %d", id); + + bufferPtr = bufferPtr.Right(bufferPtr.Length() - lex.Offset()-1); + lex.Assign(bufferPtr); + + //get value + if ((lex.Peek()).IsDigit()) + { + switch( id ) + { + case EPrintCapabLayout: + User::LeaveIfError(lex.Val(aLayout)); + LOG1("aLayout: %d", aLayout); + break; + case EPrintCapabPaperSize: + User::LeaveIfError(lex.Val(aSize)); + LOG1("aSize: %d", aLayout); + break; + case EPrintCapabQuality: + User::LeaveIfError(lex.Val(aQuality)); + LOG1("aQuality: %d", aQuality); + break; + default: + break; + } + + bufferPtr = bufferPtr.Right(bufferPtr.Length() - lex.Offset()-1); + lex.Assign(bufferPtr); + } + } + // find next + pos = bufferPtr.Find(KUPnPLineFeed8()); + } + CleanupStack::PopAndDestroy(2); //fileBuffer, file +} + +//-------------------------------------------------------------------------------------------- +// CUPPrintFactory::SetDefaultSettingsL +//-------------------------------------------------------------------------------------------- +void CUPPrintFactory::SetDefaultSettingsL() +{ + LOG("[CUAPrintingJobContainer::SetDefaultSettingsL]\t"); + + // Create buffer + HBufC8* settingsBuf = HBufC8::NewL(KSettingsLength * iCapabilities.Count()); + CleanupStack::PushL(settingsBuf); + + for (TInt i=0; i settingsStr; + settingsStr.AppendNum(iCapabilities[i].iCapabilityID); + settingsStr.Append(KUPnPComma()); + settingsStr.AppendNum(iCapabilities[i].iDefaultValue); + settingsStr.Append(KUPnPLineFeed8()); + + settingsBuf->Des().Append(settingsStr); + } + + RFile file; + User::LeaveIfError(file.Replace(iFileSession, KUPnPSettingsFile, EFileWrite)); + CleanupClosePushL(file); + file.Write(settingsBuf->Des()); + + CleanupStack::PopAndDestroy(2); //file, settingsBuf +} + +// End of file