usbuis/imageprintuiprovider/src/caiwimageprintIf.cpp
author Pat Downey <patd@symbian.org>
Fri, 04 Jun 2010 10:27:39 +0100
changeset 35 9d8b04ca6939
child 63 ef2686f7597e
permissions -rw-r--r--
Revert last code drop.

/*
* 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:  Check if file is OK for printing
*
*/



//External includes
#include <badesca.h>
#include <bautils.h>
#include <e32std.h>
#include <f32file.h>
#include <DRMCommon.h>
#include <imageconversion.h>
#include <pathinfo.h> 

//Internal includes
#include "caiwimageprintif.h"
#include "imageprintuidebug.h"


_LIT8( KJpegFileType, "image/jpeg" );
_LIT( KJpegFileType16, "image/jpeg" );


// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CAiwImagePrintIf::~CAiwImagePrintIf()
    {
    iEikEnv.FsSession().Delete(*iPrintFileName);
    iEikEnv.FsSession().Delete(*iUnsuppFileName);
    iEikEnv.DeleteResourceFile( iResourceOffset );
    delete iDRM;
    delete iPrintFileName;
    delete iUnsuppFileName;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CAiwImagePrintIf::CAiwImagePrintIf():iEikEnv( *CEikonEnv::Static() )
    {
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CAiwImagePrintIf::ConstructL()
    {
    
    TFileName file( KResource );
    file = PathInfo::RomRootPath();
    TBuf<KResource> length2(KResourceFile);    
    file.SetLength(KDriver + length2.Length());
    file.Replace(KDriver, length2.Length(), KResourceFile);
    
    BaflUtils::NearestLanguageFile( iEikEnv.FsSession(), file );
    iResourceOffset = iEikEnv.AddResourceFileL( file );
    iDRM = DRMCommon::NewL();
    User::LeaveIfError( iDRM->Connect() );
    iNumberOfUnSuppFiles = 0;
    
    
    TFileName printNameFile( KResource ); 
    printNameFile = PathInfo::PhoneMemoryRootPath(); 
    TBuf<KResource> length3(KParamFile);
    printNameFile.SetLength(KDriver + length3.Length());
    printNameFile.Replace(KDriver, length3.Length(), KParamFile); 
    
    iPrintFileName = HBufC::NewL(printNameFile.Length() );
    iPrintFileName->Des().Copy(printNameFile);
    
    TFileName unSuppFile( KResource ); 
    unSuppFile = PathInfo::PhoneMemoryRootPath(); 
    TBuf<KResource> lengthUn(KUnSuppFile);
    unSuppFile.SetLength(KDriver + lengthUn.Length());
    unSuppFile.Replace(KDriver, lengthUn.Length(), KUnSuppFile);
    
    iUnsuppFileName = HBufC::NewL(unSuppFile.Length() );
    iUnsuppFileName->Des().Copy(unSuppFile);
    
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
TBool CAiwImagePrintIf::IsPrintingSupported( const CAiwGenericParamList& aInParamList )
    {  
    TInt index(0);
    FLOG(_L("[CAiwImagePrintIf]  IsPrintingSupported "));
    const TAiwGenericParam* param = aInParamList.FindFirst( index, EGenericParamMIMEType );
	TBool printable( EFalse );
	
    if ( index == KErrNotFound )	
        {    
        index = 0;
   	    const TAiwGenericParam* param = aInParamList.FindFirst(index, EGenericParamFile, EVariantTypeDesC);

        //Check if there is any printable images available. At least image must be
        //JPEG and it also must be unprotected to be printable.
        while ( index != KErrNotFound && !printable)
            {
            FLOG(_L("[CAiwImagePrintIf]  IsPrintingSupported 3"));
            TRAP_IGNORE( printable = IsPrintingSupportedL( param->Value().AsDes() ));
   	        param = aInParamList.FindNext(index, EGenericParamFile, EVariantTypeDesC);        
            }
        FTRACE(FPrint(_L("[CAiwImagePrintIf] IsPrintingSupported  printable is  %d"), printable ));     
        return printable;    
        }
	
	while ( index != KErrNotFound && !printable )
		{
	   	if ( param->Value().TypeId() == EVariantTypeDesC &&
			 param->Value().AsDes() == KJpegFileType16 )
	    	{
	    	// MIME-type parameter follows filename parameter in parameter list.
	    	// Because of that previous item in list is used.
	    	if (index > 0)
	    	    {   
	    	    FLOG(_L("[CAiwImagePrintIf]  IsPrintingSupported 5")); 	    
    	      	printable = !IsProtected( aInParamList[index-1].Value().AsDes() );
	    	    }
	    	}

	    if ( !printable )
	        {        
    	   	param = aInParamList.FindNext(index, EGenericParamMIMEType);
	        }
       	}    
	FTRACE(FPrint(_L("[CAiwImagePrintIf] IsPrintingSupported 2 printable is  %d"), printable ));     
    return printable;	 
    }
    
// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
TBool CAiwImagePrintIf::IsPrintingSupportedL( const TDesC& aFileName )
    {       
    //1. check: Mimetype should be correct (JPEG)
    FLOG(_L("[CAiwImagePrintIf]  IsPrintingSupported TBool 1"));
    TBool printable = CheckMIMETypeL( KJpegFileType, aFileName ); 
       
    if (printable)
        {
        //2. check: file should not be protected
        printable = !IsProtected( aFileName ); 
        }     
    FTRACE(FPrint(_L("[CAiwImagePrintIf] IsPrintingSupportedL  TBool printable is  %d"), printable ));    
    return printable;                                      
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
TBool CAiwImagePrintIf::IsProtected( const TDesC& aFileName )
    {
    TBool fileProtect;
    TInt err = iDRM->IsProtectedFile( aFileName, fileProtect );
    FTRACE(FPrint(_L("[CAiwImagePrintIf] IsProtected   retVal is  %d"), err ? ETrue : fileProtect )); 
    return err ? ETrue : fileProtect;  
    }
    
// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//    
TBool CAiwImagePrintIf::CheckMIMETypeL( const TDesC8& aMimeType,
											   const TDesC& aFileName )
    {
    TBuf8<128> mimeType(0);
    CImageDecoder::GetMimeTypeFileL(iEikEnv.FsSession(), aFileName, mimeType);

    // Check that MIME-type matches (compare returns 0), otherwise return EFalse
    FTRACE(FPrint(_L("[CAiwImagePrintIf] CheckMIMETypeL   retVal is  %d"), mimeType.CompareF( aMimeType ) ? EFalse : ETrue )); 
    return mimeType.CompareF( aMimeType ) ? EFalse : ETrue;
    }

// End of file