calendarui/globaldata/src/calenvcalexport.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 11 May 2010 16:12:24 +0300
branchRCL_3
changeset 16 55d60436f00b
parent 0 f979ecb2b13e
permissions -rw-r--r--
Revision: 201017 Kit: 201019

/*
* 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 "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:   Exports Agenda entry to vCalendar data
 *
*/



//debug
#include "calendarui_debug.h"

// INCLUDE FILES
#include "calenvcalexport.h"

#include <Calendar.rsg>

#include <calentry.h>
#include <CalenExporter.h>

#include <bldvariant.hrh> // For FeatureIds (lint warns without)
#include <eikenv.h>
#include <featmgr.h>
#include <StringLoader.h>
#include <vtoken.h>
#include <s32mem.h>

// LOCAL CONSTANTS AND MACROS
const TInt KDynBufExpandSize(100);

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

// ----------------------------------------------------------------------------
// TCalenVCalExport::TCalenVCalExport
// C++ default constructor can NOT contain any code, that
// might leave.
// (other items were commented in a header).
// ----------------------------------------------------------------------------
//
TCalenVCalExport::TCalenVCalExport(CCalSession& aCalSession, 
                                   RFs& aFileServerSession) 
    : iSession(aCalSession),
      iFs(aFileServerSession)
    {
    TRACE_ENTRY_POINT;
    TRACE_EXIT_POINT;
    }

// ----------------------------------------------------------------------------
// TCalenVCalExport::ExportVCalL
// Export an entry
// (other items were commented in a header).
// ----------------------------------------------------------------------------

HBufC8* TCalenVCalExport::ExportVCalLC(CCalEntry& aEntry)
    {
    TRACE_ENTRY_POINT;
    
    const TDesC& subject=aEntry.SummaryL();

    TBool emptySubject = subject.Length() ==0;
    if (emptySubject)
        {
        // If subject is empty, we add <unnamed> text to it
        HBufC* unnamed = StringLoader::LoadLC(R_CALEN_QTN_CALE_NO_SUBJECT, 
                                              CEikonEnv::Static());
        aEntry.SetSummaryL(*unnamed);
        CleanupStack::PopAndDestroy(unnamed);
        }

    CBufFlat* buf = CBufFlat::NewL(KDynBufExpandSize);
    CleanupStack::PushL(buf);
    ConvertVCalL(buf, aEntry);

    HBufC8* result = HBufC8::NewL( buf->Size() );
    result->Des().Copy(buf->Ptr(0));
    CleanupStack::PopAndDestroy(buf);
    CleanupStack::PushL(result);
    
    TRACE_EXIT_POINT;
    return result;
    }

// ---------------------------------------------------------
// TCalenVCalExpor::ConvertVCalL
// Converts from an Agnend entry to vCal data
// (other items were commented in a header).
// ---------------------------------------------------------
//
void TCalenVCalExport::ConvertVCalL(CBufFlat* aBuf, CCalEntry& aEntry)
    {
    TRACE_ENTRY_POINT;
    
    // CCalEntry is converted to VCal
    RBufWriteStream writeStream;
    writeStream.Open(*aBuf);
    CleanupClosePushL(writeStream);
    CCalenExporter* exporter=CCalenExporter::NewL(iSession);
    CleanupStack::PushL(exporter);
    exporter->ExportVCalL( aEntry, writeStream);
    CleanupStack::PopAndDestroy(exporter);
    CleanupStack::PopAndDestroy(&writeStream);
    
    TRACE_EXIT_POINT;
    }

// ---------------------------------------------------------
// TCalenVCalExpor::ConvertICalL
// Converts from an Agnend entry to iCal data
// (other items were commented in a header).
// ---------------------------------------------------------
//
void TCalenVCalExport::ConvertICalL(CBufFlat* aBuf, CCalEntry& aEntry)
    {
    TRACE_ENTRY_POINT;
    
    // CCalEntry is converted to iCal
    RBufWriteStream writeStream;
    writeStream.Open(*aBuf);
    CleanupClosePushL(writeStream);
    CCalenExporter* exporter=CCalenExporter::NewL(iSession);
    CleanupStack::PushL(exporter);
    exporter->ExportICalL( aEntry, writeStream);
    CleanupStack::PopAndDestroy(exporter);
    CleanupStack::PopAndDestroy(&writeStream);
    
    TRACE_EXIT_POINT;
    }

//  End of File