--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/imageprintui/src/requestmanager.cpp Fri Jun 04 10:27:39 2010 +0100
@@ -0,0 +1,519 @@
+/*
+* Copyright (c) 2006, 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: Handles Dps Request call with AO
+*
+*/
+
+
+#include <e32base.h>
+#include <dpsdefs.h>
+#include <s32file.h>
+#include <f32file.h>
+#include <coeutils.h>
+#include <imageprintui.rsg>
+
+#include "requestmanager.h"
+#include "imageprintuiappui.h"
+#include "pictbridge.h"
+#include "notes.h"
+#include "capabilitymanager.h"
+#include "imageprintuidebug.h"
+
+// ---------------------------------------------------------------------------
+// constructor
+// ---------------------------------------------------------------------------
+//
+CRequestManager::CRequestManager(CDpsEngine* aDpsEngine,
+ CCapabilityManager* aCapabilityManager, CImagePrintUiAppUi* aAppUi)
+ : CActive(CActive::EPriorityStandard), iDpsEngine(aDpsEngine),
+ iCapabilityManager(aCapabilityManager), iAppUi(aAppUi), iNumberOfImages(0)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+
+// ---------------------------------------------------------------------------
+// 2nd phase construction
+// ---------------------------------------------------------------------------
+//
+
+void CRequestManager::ConstructL()
+ {
+ FLOG(_L("[IMAGEPRINTUI]>>> CRequestManager ConstructL"));
+ iFileExist = EFalse;
+ iCongFileName = HBufC::NewL(iDpsEngine->DpsFolder().Length() + KConfigLength);
+ iCongFileName->Des().Copy(iDpsEngine->DpsFolder());
+ iCongFileName->Des().Append(KConfigInfoFile);
+
+ // always start with configure, this is part of the DPS protocol
+ ChooseDpsRequestTypeL(EConfigurePrintService);
+
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager ConstructL"));
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CRequestManager* CRequestManager::NewL( CDpsEngine* aDpsEngine,
+ CCapabilityManager* aCapabilityManager,CImagePrintUiAppUi* aAppUi)
+ {
+ CRequestManager* self = CRequestManager::NewLC( aDpsEngine, aCapabilityManager, aAppUi);
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CRequestManager* CRequestManager::NewLC(CDpsEngine* aDpsEngine,
+ CCapabilityManager* aCapabilityManager,
+ CImagePrintUiAppUi* aAppUi)
+ {
+ CRequestManager* self = new( ELeave ) CRequestManager(aDpsEngine,
+ aCapabilityManager, aAppUi);
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CRequestManager::~CRequestManager()
+ {
+ FLOG(_L("[IMAGEPRINTUI]>>> CRequestManager Destructor called"));
+ delete iCongFileName;
+ Cancel();
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager Destructor END"));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::ReIssueDoDpsRequestL()
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager ReIssueDoDpsRequestL"));
+ FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CRequestManager::reissue request is %d"), iRequestType ));
+ ChooseDpsRequestTypeL(iRequestType);
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::RunL()
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager RunL"));
+ FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CRequestManager::RunL iStatus is %d"), iStatus.Int() ));
+ if(iStatus.Int() == KErrNone)
+ {
+ switch ( iRequestType )
+ {
+ case EConfigurePrintService:
+ FLOG(_L("[IMAGEPRINTUIENGINE]\t CRequestManager: RunL, Handle configure"));
+ HandleConfigureL();
+ break;
+
+ case EGetJobStatus:
+ FLOG(_L("[IMAGEPRINTUIENGINE]\t CRequestManager: RunL, HandleGetJobStatusL"));
+ HandleGetJobStatusL();
+ break;
+
+ case EGetDeviceStatus:
+ FLOG(_L("[IMAGEPRINTUIENGINE]\t CRequestManager: RunL, Handle Device Status"));
+ HandleDeviceStatusL();
+ break;
+
+ case EStartJob:
+ FLOG(_L("[IMAGEPRINTUIENGINE]\t CRequestManager: RunL, Handle Start Job"));
+ HandleStartJobL();
+ break;
+
+ case EAbortJob:
+ FLOG(_L("[IMAGEPRINTUIENGINE]\t CRequestManager: RunL, HandleAbortL"));
+ HandleAbortL();
+ break;
+
+ case EContinueJob:
+ FLOG(_L("[IMAGEPRINTUIENGINE]\t CRequestManager: RunL, EContinueJob"));
+ break;
+
+ default:
+ FLOG(_L("[IMAGEPRINTUIENGINE]\t CRequestManager: RunL, default branch"));
+ break;
+ }
+ }
+ else
+ {
+ FLOG(_L("[IMAGEPRINTUIENGINE]\t CRequestManager: RunL, call leave, it call RunError"));
+ User::LeaveIfError(iStatus.Int());
+ }
+ FLOG(_L("[IMAGEPRINTUI]>>> CRequestManager RunL"));
+ }
+
+
+// -----------------------------------------------------------------------------
+// CRequestManager::RunError
+// Standard active object error function.
+// -----------------------------------------------------------------------------
+//
+
+TInt CRequestManager::RunError(TInt aError)
+ {
+ FTRACE(FPrint(_L("[IMAGEPRINTUI] CRequestManager::RunError: err %d from RunL"), aError));
+ if(aError == KErrNotFound)
+ {
+ FLOG(_L("[IMAGEPRINTUI] CRequestManager Pictures not found when printing"));
+ TRAPD(err,iAppUi->NotifyRequestL(EPicturesNotFound));
+ if(err)
+ {
+ FLOG(_L("[IMAGEPRINTUI] CRequestManager err calling notify"));
+ }
+ }
+ else if(aError == KErrTimedOut || aError == KErrInUse)
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager; RunError, timed out or in use"));
+ iAppUi->HandleRequestTime(KRetryClose);
+ }
+
+ return KErrNone;
+ }
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::DoCancel()
+ {
+ FLOG(_L("[IMAGEPRINTUI]>>> CRequestManager DoCancel"));
+ iDpsEngine->CancelDpsRequest();
+ FLOG(_L("[IMAGEPRINTUI]>>> CRequestManager DoCancel complete"));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::ExecuteStartJobRequestL()
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager, ExecuteStartJobRequestL "));
+ iStart.iReqParam.Reset();
+
+ TUint layout = iCapabilityManager->Layout();
+ TUint quality = iCapabilityManager->Quality();
+ TUint paperSize = iCapabilityManager->PaperSize();
+
+ //fill request parameter by retrieved values
+ TDpsArgsInt req_quality,req_papersize, req_layout;
+
+ req_quality.iElement = EDpsArgQuality;
+ req_quality.iContent = quality;
+ iStart.iReqParam.iJobConfig.Append(req_quality);
+
+ req_papersize.iElement = EDpsArgPaperSize;
+ req_papersize.iContent = paperSize;
+ iStart.iReqParam.iJobConfig.Append(req_papersize);
+
+ req_layout.iElement = EDpsArgLayout;
+ req_layout.iContent = layout;
+ iStart.iReqParam.iJobConfig.Append(req_layout);
+
+
+ // retrieve images
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager, Get Images"));
+ iImageArrayFlat = iAppUi->ImagesToPrint(); // not taking ownership
+
+
+ iNumberOfImages = iImageArrayFlat->Count();
+ TDpsPrintInfo* helpTDpsPrintInfo = new (ELeave) TDpsPrintInfo[iNumberOfImages];
+ CleanupStack::PushL(helpTDpsPrintInfo);
+ // go through the list of images and add info for start job request
+
+ for(int i=0; i<iNumberOfImages; i++)
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager, Start job, append image"));
+ // check if file really exist, use may have delete it after choose print
+ // that will set printer unstable state
+ iFileExist = ConeUtils::FileExists(iImageArrayFlat->operator[](i));
+ if(iFileExist)
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager, Start job, file exist"));
+ helpTDpsPrintInfo[i].iFile.Copy(iImageArrayFlat->operator[](i));
+ iStart.iReqParam.iPrintInfo.Append(helpTDpsPrintInfo[i]);
+ }
+ }
+
+ FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CRequestManager iNumberOfImages is %d"), iNumberOfImages));
+ iAppUi->NumberOfImages(iNumberOfImages);
+ if(!iFileExist)
+ {
+ FLOG(_L("[IMAGEPRINTUI]>>> CRequestManager, ExecuteStartJobRequestL, file not exist "));
+ iAppUi->Notes()->ShowErrorMsgL(R_ERROR_FILE_NOT_FOUND);
+ }
+ else
+ {
+ iDpsEngine->DoDpsRequestL(&iStart, iStatus);
+ }
+
+ CleanupStack::PopAndDestroy(helpTDpsPrintInfo);
+
+
+ FLOG(_L("[IMAGEPRINTUI]>>> CRequestManager, ExecuteStartJobRequestL "));
+ }
+// ---------------------------------------------------------------------------
+// Choose DoDpsRequest type
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::ChooseDpsRequestTypeL(const TRequestType aType)
+ {
+ iRequestType = aType;
+ switch ( aType )
+ {
+
+ case EConfigurePrintService:
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager, ChooseDpsRequestType Configure"));
+ iConfig.iReqParam.Reset();
+ // retrieve current phone settings from DpsEngine and fill req param
+ iDpsEngine->GetDpsConfigL(iConfig.iReqParam);
+ iDpsEngine->DoDpsRequestL(&iConfig, iStatus);
+ break;
+
+
+ case EGetJobStatus:
+ // no need to fill parameter for this Dps request
+ iJobFinished = EFalse;
+ iDpsEngine->DoDpsRequestL(&iJob, iStatus);
+ break;
+
+ case EGetDeviceStatus:
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager, ChooseDpsRequestType Get Device status"));
+ // no need to fill parameter for this Dps request
+ iDpsEngine->DoDpsRequestL(&iPrinter, iStatus);
+ break;
+
+ case EStartJob:
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager, ChooseDpsRequestType Start Job"));
+ ExecuteStartJobRequestL();
+ break;
+
+ case EAbortJob:
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager, ChooseDpsRequestType Abort Job"));
+ // fill only abort style ref. PictBridge Spec. CIPA DC-001-2003 page 68.
+ iAbort.iReqParam.iAbortStyle = EDpsAbortStyleImmediately;
+ iDpsEngine->DoDpsRequestL(&iAbort, iStatus);
+ break;
+
+ case EContinueJob:
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager, ChooseDpsRequestType Continue Job"));
+ // no need to fill parameter for this Dps request
+ iDpsEngine->DoDpsRequestL(&iContinue, iStatus);
+ break;
+
+ default:
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager, ChooseDpsRequestType default branch"));
+ break;
+ }
+
+ if(!IsActive()) // check if active, user might try to print twice which is causing collision
+ {
+ if(!iFileExist && iRequestType == EStartJob)
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager, ChooseDpsRequestType, file not exist"));
+ }
+ else
+ {
+ SetActive();
+ }
+
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::HandleDeviceStatusL()
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager HandleDeviceStatus Start"));
+
+ if(!iPrinter.iRepParam.iNewJobOk)
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager,HandleDeviceStatus NOK "));
+ iAppUi->NotifyRequestL(EGetDeviceStatusNOK);
+ }
+ else
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager,HandleDeviceStatus OK "));
+ iAppUi->NotifyRequestL(EGetDeviceStatusOK);
+ ChooseDpsRequestTypeL(EStartJob);
+ }
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager HandleDeviceStatus End"));
+ }
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::HandleAbortL()
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager HandleAbort Start"));
+ if(iAbort.iResult.iMajorCode != EDpsResultOk)
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager HandleAbort EAbortJobNOK"));
+ iAppUi->NotifyRequestL(EAbortJobNOK);
+ }
+ else
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager HandleAbort EAbortJobOK"));
+ iAppUi->NotifyRequestL(EAbortJobOK);
+ }
+
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::HandleStartJobL()
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager HandleStartJob Start"));
+
+ if(iStart.iResult.iMajorCode == EDpsResultOk)
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager,HandleStartJob OK "));
+ iAppUi->NotifyRequestL(EStartJobOK);
+ }
+ else
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager,HandleStartJob NOK "));
+ iAppUi->NotifyRequestL(EStartJobNOK);
+ }
+
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager HandleStartJob End"));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::HandleGetJobStatusL()
+ {
+ if(iJob.iResult.iMajorCode == EDpsResultOk)
+ {
+ iAppUi->NotifyRequestL(EGetJobStatusOK);
+ }
+ else
+ {
+ iAppUi->NotifyRequestL(EGetJobStatusNOK);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::HandleConfigureL()
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager HandleConfigure Start"));
+ if(iConfig.iRepParam.iPrintAvailable == EDpsPrintServiceAvailableTrue)
+ {
+ // save name for AppUi
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager,HandleConfigure OK "));
+ iVendorName = iConfig.iRepParam.iVendorName;
+ iProductName = iConfig.iRepParam.iProductName;
+ SaveConfigInfoL();
+ iAppUi->NotifyRequestL(EConfigurePrintServiceOK);
+
+ }
+
+ else if(iConfig.iResult.iMajorCode == EDpsResultNotExecuted)
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager,HandleConfigure OK old session"));
+ ReadConfigInfoL();
+ iAppUi->NotifyRequestL(EConfigurePrintServiceOK);
+ }
+ else if(iConfig.iRepParam.iPrintAvailable == EDpsPrintServiceAvailableFalse)
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager,HandleConfigure NOK "));
+ iAppUi->NotifyRequestL(EConfigurePrintServiceNOK);
+ }
+
+ iConfig.iRepParam.Reset();
+ FLOG(_L("[IMAGEPRINTUI]<<< CRequestManager HandleConfigure End"));
+ }
+
+void CRequestManager::GetPrinterName(TDes8& aVendorName, TDes8& aProductName)
+ {
+ FLOG(_L("[IMAGEPRINTUI]\t CRequestManager::GetPrinterName BEGIN"));
+ aVendorName = iVendorName.Ptr();
+ aProductName = iProductName.Ptr();
+ FLOG(_L("[IMAGEPRINTUI]\t CRequestManager::GetPrinterName END"));
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+
+void CRequestManager::SaveConfigInfoL()
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CEventManager;SaveConfigInfoL "));
+ RFileWriteStream stream;
+ CleanupClosePushL(stream);
+ if((stream.Replace(CCoeEnv::Static()->FsSession(),iCongFileName->Des() ,EFileWrite)) == KErrNone)
+ {
+ ExternalizeL(stream);
+ }
+ CleanupStack::PopAndDestroy(&stream);
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::ExternalizeL(RWriteStream& aStream) const
+ {
+ FLOG(_L("[IMAGEPRINTUI]<<< CEventManager;ExternalizeL "));
+ aStream << iVendorName;
+ aStream << iProductName;
+ aStream.CommitL();
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CRequestManager::ReadConfigInfoL()
+ {
+ FLOG(_L("[IMAGEPRINTUI]\t CRequestManager::ReadConfogInfoL Sstart"));
+ RFileReadStream readStream;
+ User::LeaveIfError( readStream.Open(CCoeEnv::Static()->FsSession(),
+ iCongFileName->Des(), EFileRead) );
+ readStream.PushL();
+ readStream >> iVendorName;
+ readStream >> iProductName;
+
+ CleanupStack::PopAndDestroy(&readStream);
+
+ FLOG(_L("[IMAGEPRINTUI]\t CRequestManager::ReadConfogInfoL end"));
+ }
+
+// end of file