videocollection/mpxmyvideoscollection/tsrc/mpxmvcolltest/src/VCXMyVideosTestUtils.cpp
author hgs
Thu, 24 Jun 2010 09:49:13 +0300
changeset 41 229f037ce963
parent 34 bbb98528c666
permissions -rw-r--r--
201025

/*
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:
*/

// INCLUDE FILES
#include "VCXMyVideosTestUtils.h"
#include "VCXTestLog.h"

// CONSTANTS

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CVCXMyVideosTestUtils::NewL
// -----------------------------------------------------------------------------
//
CVCXMyVideosTestUtils* CVCXMyVideosTestUtils::NewL()
    {
    VCXLOGLO1(">>>CVCXMyVideosTestUtils::NewL");
    CVCXMyVideosTestUtils* self = new (ELeave) CVCXMyVideosTestUtils();
    CleanupStack::PushL(self);
    self->ConstructL( );
    CleanupStack::Pop(self);
    VCXLOGLO1("<<<CVCXMyVideosTestUtils::NewL");
    return self;
    }

// -----------------------------------------------------------------------------
// CVCXMyVideosTestUtils::CVCXMyVideosTestUtils
// -----------------------------------------------------------------------------
//
CVCXMyVideosTestUtils::CVCXMyVideosTestUtils()
    {
    }

// -----------------------------------------------------------------------------
// CVCXMyVideosTestUtils::~CVCXMyVideosTestUtils
// -----------------------------------------------------------------------------
//
CVCXMyVideosTestUtils::~CVCXMyVideosTestUtils( )
    {
    delete iFileMan;
    iFileMan = NULL;
    iFs.Close();
    }

// -----------------------------------------------------------------------------
// CVCXMyVideosTestUtils::ConstructL
// -----------------------------------------------------------------------------
//
void CVCXMyVideosTestUtils::ConstructL( )
    {
    VCXLOGLO1(">>>CVCXMyVideosTestUtils::ConstructL");
    User::LeaveIfError( iFs.Connect() );
    iFileMan = CFileMan::NewL( iFs );
    VCXLOGLO1("<<<CVCXMyVideosTestUtils::ConstructL");
    }

// -----------------------------------------------------------------------------
// CVCXMyVideosTestUtils::EnsureFileIsNotInUse
// -----------------------------------------------------------------------------
//
TInt CVCXMyVideosTestUtils::EnsureFileIsNotInUse( const TPtrC& aFileName )
    {
    TInt error( KErrNone );
    RFile file;
 
    for(TInt retry = 0; retry < 6; retry++)
        {
        error = file.Open(iFs, aFileName, EFileShareExclusive);
        if( error == KErrInUse )
            {
            User::After( 1000000 * 10 );
            }
        else
            {
            break;
            }
        }

    file.Close();
    VCXLOGLO2("CVCXTestCommon::EnsureFileIsNotInUse: %d", error);
    return error;
    }


// -----------------------------------------------------------------------------
// CVCXMyVideosTestUtils::CreateVideoFileL
// -----------------------------------------------------------------------------
//
void CVCXMyVideosTestUtils::CreateVideoFileL( TVcxTestVideoType aVideoType, TDesC& aFileName, TInt aSize, TBool aUniqueName )
    {
    VCXLOGLO1(">>>CVcxTestVideoCreator::CreateVideoL");

    // Resolve source filename
    TBuf<256> srcFileName;

    GetVideoFile( srcFileName, aVideoType, _L("C") );
    if( !BaflUtils::FileExists(iFs, srcFileName) )
        {
        VCXLOGLO2("CVcxTestVideoCreator:: %S does not exist.", &srcFileName);
        GetVideoFile( srcFileName, aVideoType, _L("E") );
        if( !BaflUtils::FileExists(iFs, srcFileName) )
            {
            VCXLOGLO2("CVcxTestVideoCreator:: %S does not exist.", &srcFileName);
            VCXLOGLO2("CVcxTestVideoCreator:: test video file %S missing! PANIC.", &srcFileName);
            User::Panic(_L("Video files missing!"), KErrNotFound);
            }
        }
    
    BaflUtils::EnsurePathExistsL( iFs, aFileName.Left( aFileName.LocateReverse('\\') ) );

    HBufC* newFileName = HBufC::NewL( 256 );
    CleanupStack::PushL( newFileName );
    
    if(!aUniqueName)
    {
        newFileName->Des().Copy( aFileName );
        BaflUtils::DeleteFile( iFs, aFileName );
    }
    else
    {
        newFileName->Des().Copy( aFileName );
        TInt dotPos = aFileName.LocateReverse('.');
        int count = 0;
        while( BaflUtils::FileExists( iFs, *newFileName ) )
        {
            newFileName->Des().Copy( aFileName.Left( aFileName.LocateReverse('\\') ) );
            newFileName->Des().Copy( aFileName.Left( dotPos ) );
            newFileName->Des().Append( _L("_") );
            newFileName->Des().AppendNum( count++ );
            newFileName->Des().Append( aFileName.Right( aFileName.Length() - dotPos ) );
        }
    }
    
    VCXLOGLO2("CVcxTestVideoCreator:: aSize = %d", aSize);
    
    TInt64 wantedSize( 0 );
    
    // Check the size
    if( aSize == KVcxTestLargeFile3GB ) {
        wantedSize = 1024*1024*1024 * 3;
    }
    else {
        wantedSize = aSize;
    }
    
    //wantedSize = wantedSize == 0 ? wantedSize -1 : wantedSize;
    
    VCXLOGLO2("CVcxTestVideoCreator:: Wanted file size: %Ld", wantedSize);

    // Read source file into memory, won't work on huge files.
    RFile64 srcFile;
    VCXLOGLO2("CVcxTestVideoCreator:: Opening %S", &srcFileName);
    User::LeaveIfError( srcFile.Open( iFs, srcFileName, EFileRead ) );
    CleanupClosePushL( srcFile );

    TInt64 srcSize(0);
    VCXLOGLO2("CVcxTestVideoCreator:: Getting size of %S", &srcFileName);
    User::LeaveIfError( srcFile.Size( srcSize ) );

    HBufC8* data = HBufC8::NewL( srcSize );
    TPtr8 ptr( data->Des() );
    srcFile.Read( ptr, srcSize );
    CleanupStack::PopAndDestroy( &srcFile );

    CleanupStack::PushL( data );

    // Write new file.
    RFile64 dstFile;
    VCXLOGLO1("CVcxTestVideoCreator:: Replace");
    User::LeaveIfError( dstFile.Replace( iFs, *newFileName, EFileWrite ) );
    CleanupClosePushL(dstFile);

    if( wantedSize <= srcSize )
        {
        if( wantedSize == -1 )
            {
            VCXLOGLO2("CVcxTestVideoCreator:: Writing %Ld", srcSize);
            User::LeaveIfError( dstFile.Write( *data, srcSize ) );
            }
        else
            {
            VCXLOGLO2("CVcxTestVideoCreator:: Writing %Ld", wantedSize);
            User::LeaveIfError( dstFile.Write( *data, wantedSize ) );
            }
        }
    else
        {
        VCXLOGLO2("CVcxTestVideoCreator:: Writing %Ld", srcSize);
        User::LeaveIfError( dstFile.Write( *data, srcSize ) );

        const TInt KVcxTest200Kilos = 1024*200;
        HBufC8* buff = HBufC8::NewL( KVcxTest200Kilos );
        buff->Des().SetLength( KVcxTest200Kilos );
        CleanupStack::PushL( buff );
        TInt64 bytesToWrite = wantedSize - srcSize;
        while( bytesToWrite > 0 )
            {
            if( bytesToWrite >= KVcxTest200Kilos )
                {
                bytesToWrite -= KVcxTest200Kilos;
                User::LeaveIfError( dstFile.Write( *buff ) );
                }
            else
                {
                User::LeaveIfError( dstFile.Write( *buff, bytesToWrite ) );
                bytesToWrite = 0;
                }
            }
        CleanupStack::PopAndDestroy( buff );
        }

    CleanupStack::PopAndDestroy( &dstFile );
    CleanupStack::PopAndDestroy( data );
    
    CleanupStack::PopAndDestroy( newFileName );

    VCXLOGLO1("<<<CVcxTestVideoCreator::CreateVideoL");
    }


// -----------------------------------------------------------------------------
// CVCXMyVideosTestUtils::CreateVideoFilesL
// -----------------------------------------------------------------------------
//
void CVCXMyVideosTestUtils::CreateVideoFilesL( TVcxTestVideoType aVideoType, TDesC& aFileName, TInt aCount, RPointerArray<HBufC>& aFileArray )
    {
    VCXLOGLO1(">>>CVcxTestVideoCreator::CreateVideosL");

    // Resolve source filename
    TBuf<256> srcFileName;

    GetVideoFile( srcFileName, aVideoType, _L("C") );

    if( !BaflUtils::FileExists(iFs, srcFileName) )
        {
        VCXLOGLO2("CVcxTestVideoCreator:: %S does not exist.", &srcFileName);
        GetVideoFile( srcFileName, aVideoType, _L("E") );
        if( !BaflUtils::FileExists(iFs, srcFileName) )
            {
            VCXLOGLO2("CVcxTestVideoCreator:: %S does not exist.", &srcFileName);
            VCXLOGLO2("CVcxTestVideoCreator:: test video file %S missing! PANIC.", &srcFileName);
            // Comment next line if you want dummy files to be created. They won't be recognized by MDS.
            User::Panic(_L("Video files missing!"), KErrNotFound);
            }
        }

    TBool fileExists = BaflUtils::FileExists(iFs, srcFileName);

    HBufC* newFileName = HBufC::NewL( 256 );
    CleanupStack::PushL( newFileName );

    newFileName->Des().Copy( aFileName.Left( aFileName.LocateReverse('\\') ) );
    BaflUtils::EnsurePathExistsL(iFs, *newFileName);

    TInt dotPos = aFileName.LocateReverse('.');

    for( TInt i = 0; i < aCount; i++ )
        {
        newFileName->Des().Copy( aFileName.Left( dotPos ) );
        newFileName->Des().Append( _L("_") );
        newFileName->Des().AppendNum( i );
        newFileName->Des().Append( aFileName.Right( aFileName.Length() - dotPos ) );

        HBufC* fileForClient = newFileName->Des().AllocL();
        aFileArray.Append( fileForClient );

        if( fileExists )
            {
            User::LeaveIfError( iFileMan->Copy(srcFileName, *newFileName) );
            VCXLOGLO2("CVcxTestVideoCreator:: copy file: '%S'", newFileName);
            }
        else
            {
            VCXLOGLO2("CVcxTestVideoCreator:: new fake file: '%S'", newFileName);
            RFile file;
            CleanupClosePushL(file);
            User::LeaveIfError( file.Replace(iFs, *newFileName, EFileWrite) );
            User::LeaveIfError( file.SetSize( 1024*10 ) );
            CleanupStack::PopAndDestroy( &file );
            }
        User::After( 100000 ); // Wait tenth of a second.
        }

    CleanupStack::PopAndDestroy( newFileName );

    VCXLOGLO1("<<<CVcxTestVideoCreator::CreateVideosL");
    }

// -----------------------------------------------------------------------------
// CVCXMyVideosTestUtils::GetVideoFile
// -----------------------------------------------------------------------------
//
void CVCXMyVideosTestUtils::GetVideoFile( TDes& aFileName, CVCXMyVideosTestUtils::TVcxTestVideoType aVideoType, const TDesC& aDrive )
    {
    VCXLOGLO1(">>>CVcxTestVideoCreator::GetVideoFile");
    aFileName.Copy( aDrive );

    _LIT(KVcxTestVideoBasePath, ":\\testing\\data\\");

    aFileName.Append( KVcxTestVideoBasePath );
    
    VCXLOGLO2("CVcxTestVideoCreator::GetVideoFile -- using %S", &aFileName);

    switch (aVideoType)
        {
        case VcxTestVideo3Gp:
            {
            aFileName.Append( _L("video_3gp.xxx") );
            }
            break;

        case VcxTestVideoMpeg4:
            {
            aFileName.Append( _L("video_mpeg4.xxx") );
            }
            break;

        case VcxTestVideoWmv:
            {
            aFileName.Append( _L("video_wmv.xxx") );
            }
            break;

        default:
            User::Panic(_L("VcxMyVideosApiTest: Unknown video type!"), KErrCorrupt);
        }
    VCXLOGLO1("<<<CVcxTestVideoCreator::GetVideoFile");
    }

//  End of File