mobilemessaging/unieditor/model/src/UniObject.cpp
author hgs
Wed, 03 Nov 2010 22:55:44 +0530
changeset 80 8b14b30db193
parent 79 2981cb3aa489
permissions -rw-r--r--
201044_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  
hgs
parents:
diff changeset
    15
*       CUniObject, Storage for single attachment in presentation. 
hgs
parents:
diff changeset
    16
*
hgs
parents:
diff changeset
    17
*/
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
// ========== INCLUDE FILES ================================
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include <e32def.h>     // for basic types
hgs
parents:
diff changeset
    24
#include <eikenv.h>     // for CBase
hgs
parents:
diff changeset
    25
#include <mtclbase.h>   // for CBaseMtm
hgs
parents:
diff changeset
    26
#include <msvids.h>     // for KMsvTempIndexEntryId
hgs
parents:
diff changeset
    27
#include <msvstore.h>
hgs
parents:
diff changeset
    28
#include <mmsvattachmentmanager.h>
hgs
parents:
diff changeset
    29
#include <mmsvattachmentmanagersync.h>
hgs
parents:
diff changeset
    30
#include <cmsvattachment.h>
hgs
parents:
diff changeset
    31
#include <miutmsg.h>
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
// Features
hgs
parents:
diff changeset
    34
#include <featmgr.h>    
hgs
parents:
diff changeset
    35
#include <bldvariant.hrh>
hgs
parents:
diff changeset
    36
#include <DRMNotifier.h>
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
// DRM
hgs
parents:
diff changeset
    39
#include <fileprotectionresolver.h>
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
#include <msgtextutils.h>
hgs
parents:
diff changeset
    42
#include <MsgMimeTypes.h>
hgs
parents:
diff changeset
    43
#include <MsgMediaInfo.h>
hgs
parents:
diff changeset
    44
#include <MsgTextInfo.h>
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
#include "UniModelConst.h"
hgs
parents:
diff changeset
    47
#include "UniMimeInfo.h"
hgs
parents:
diff changeset
    48
#include "UniDrmInfo.h"
hgs
parents:
diff changeset
    49
#include "UniObject.h"
hgs
parents:
diff changeset
    50
#include "UniDataUtils.h"
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
// ========== EXTERNAL DATA STRUCTURES =====================
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
// ========== EXTERNAL FUNCTION PROTOTYPES =================
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
// ========== CONSTANTS ====================================
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
// ========== MACROS =======================================
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
// ========== LOCAL CONSTANTS AND MACROS ===================
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
// ========== MODULE DATA STRUCTURES =======================
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
// ========== LOCAL FUNCTION PROTOTYPES ====================
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
// ========== LOCAL FUNCTIONS ==============================
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
// ========== MEMBER FUNCTIONS =============================
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
// ---------------------------------------------------------
hgs
parents:
diff changeset
    72
// CUniObject::NewLC
hgs
parents:
diff changeset
    73
//
hgs
parents:
diff changeset
    74
// Factory method.
hgs
parents:
diff changeset
    75
// ---------------------------------------------------------
hgs
parents:
diff changeset
    76
//
hgs
parents:
diff changeset
    77
EXPORT_C CUniObject* CUniObject::NewLC( RFs& aFs,
hgs
parents:
diff changeset
    78
                                       CBaseMtm& aMtm,
hgs
parents:
diff changeset
    79
                                       CUniDataUtils& aData,
hgs
parents:
diff changeset
    80
                                       CMsgMediaInfo* aMedia,
hgs
parents:
diff changeset
    81
                                       MMsvAttachmentManager& aManager,
hgs
parents:
diff changeset
    82
                                       CMsvAttachment& aAttachment )
hgs
parents:
diff changeset
    83
    {
hgs
parents:
diff changeset
    84
    CUniObject* self = 
hgs
parents:
diff changeset
    85
        new ( ELeave ) CUniObject( aFs, aMtm, aData, aMedia );
hgs
parents:
diff changeset
    86
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    87
    self->ConstructL();
hgs
parents:
diff changeset
    88
    self->ConstructFromAttachmentL( aManager, aAttachment );
hgs
parents:
diff changeset
    89
    return self;
hgs
parents:
diff changeset
    90
    }
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
// ---------------------------------------------------------
hgs
parents:
diff changeset
    93
// CUniObject::NewL
hgs
parents:
diff changeset
    94
//
hgs
parents:
diff changeset
    95
// Factory method.
hgs
parents:
diff changeset
    96
// ---------------------------------------------------------
hgs
parents:
diff changeset
    97
//
hgs
parents:
diff changeset
    98
EXPORT_C CUniObject* CUniObject::NewL( RFs& aFs,
hgs
parents:
diff changeset
    99
                                      CBaseMtm& aMtm,
hgs
parents:
diff changeset
   100
                                      CUniDataUtils& aData,
hgs
parents:
diff changeset
   101
                                      CMsgMediaInfo* aMedia,
hgs
parents:
diff changeset
   102
                                      MMsvAttachmentManager& aManager,
hgs
parents:
diff changeset
   103
                                      CMsvAttachment& aAttachment )
hgs
parents:
diff changeset
   104
    {
hgs
parents:
diff changeset
   105
    CUniObject* self = NewLC( aFs, aMtm, aData, aMedia, aManager, aAttachment );
hgs
parents:
diff changeset
   106
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
   107
    return self;
hgs
parents:
diff changeset
   108
    }
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
// ---------------------------------------------------------
hgs
parents:
diff changeset
   111
// CUniObject::NewLC
hgs
parents:
diff changeset
   112
//
hgs
parents:
diff changeset
   113
// Factory method.
hgs
parents:
diff changeset
   114
// ---------------------------------------------------------
hgs
parents:
diff changeset
   115
//
hgs
parents:
diff changeset
   116
EXPORT_C CUniObject* CUniObject::NewLC( RFs& aFs,
hgs
parents:
diff changeset
   117
                                       CBaseMtm& aMtm,
hgs
parents:
diff changeset
   118
                                       CUniDataUtils& aData,
hgs
parents:
diff changeset
   119
                                       CMsgMediaInfo* aMedia )
hgs
parents:
diff changeset
   120
    {
hgs
parents:
diff changeset
   121
    CUniObject* self = 
hgs
parents:
diff changeset
   122
        new ( ELeave ) CUniObject( aFs, aMtm, aData, aMedia );
hgs
parents:
diff changeset
   123
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   124
    self->ConstructL();
hgs
parents:
diff changeset
   125
    self->CreateMimeInfoL();
hgs
parents:
diff changeset
   126
    return self;
hgs
parents:
diff changeset
   127
    }
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
// ---------------------------------------------------------
hgs
parents:
diff changeset
   130
// CUniObject::NewL
hgs
parents:
diff changeset
   131
//
hgs
parents:
diff changeset
   132
// Factory method.
hgs
parents:
diff changeset
   133
// ---------------------------------------------------------
hgs
parents:
diff changeset
   134
//
hgs
parents:
diff changeset
   135
EXPORT_C CUniObject* CUniObject::NewL( RFs& aFs,
hgs
parents:
diff changeset
   136
                                      CBaseMtm& aMtm,
hgs
parents:
diff changeset
   137
                                      CUniDataUtils& aData,
hgs
parents:
diff changeset
   138
                                      CMsgMediaInfo* aMedia )
hgs
parents:
diff changeset
   139
    {
hgs
parents:
diff changeset
   140
    CUniObject* self = NewLC( aFs, aMtm, aData, aMedia );
hgs
parents:
diff changeset
   141
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
   142
    return self;
hgs
parents:
diff changeset
   143
    }
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
// ---------------------------------------------------------
hgs
parents:
diff changeset
   146
// CUniObject::CUniObject
hgs
parents:
diff changeset
   147
//
hgs
parents:
diff changeset
   148
// Constructor.
hgs
parents:
diff changeset
   149
// ---------------------------------------------------------
hgs
parents:
diff changeset
   150
//
hgs
parents:
diff changeset
   151
CUniObject::CUniObject( RFs& aFs,
hgs
parents:
diff changeset
   152
                       CBaseMtm& aMtm,
hgs
parents:
diff changeset
   153
                       CUniDataUtils& aData,
hgs
parents:
diff changeset
   154
                       CMsgMediaInfo* aMedia ) :
hgs
parents:
diff changeset
   155
    CActive( EPriorityStandard ),
hgs
parents:
diff changeset
   156
    iFs( aFs ),
hgs
parents:
diff changeset
   157
    iMtm( aMtm ),
hgs
parents:
diff changeset
   158
    iData( aData ),
hgs
parents:
diff changeset
   159
    iAttachmentId( KMsvNullIndexEntryId ),
hgs
parents:
diff changeset
   160
    iMimeInfo( NULL ),
hgs
parents:
diff changeset
   161
    iMediaInfo( aMedia ),
hgs
parents:
diff changeset
   162
    iReferenceCount( 0 ),
hgs
parents:
diff changeset
   163
    iRegion( EUniRegionUnresolved ),
hgs
parents:
diff changeset
   164
    iMediaTypeBySmilTag( EMsgMediaUnknown ),
hgs
parents:
diff changeset
   165
    iUniqueControlHandle( KErrNotFound )
hgs
parents:
diff changeset
   166
    {
hgs
parents:
diff changeset
   167
    CActiveScheduler::Add( this );
hgs
parents:
diff changeset
   168
    }
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
// ---------------------------------------------------------
hgs
parents:
diff changeset
   172
// CUniObject::CUniObject
hgs
parents:
diff changeset
   173
//
hgs
parents:
diff changeset
   174
// Destructor.
hgs
parents:
diff changeset
   175
// ---------------------------------------------------------
hgs
parents:
diff changeset
   176
//
hgs
parents:
diff changeset
   177
CUniObject::~CUniObject()
hgs
parents:
diff changeset
   178
    {
hgs
parents:
diff changeset
   179
    Cancel();
hgs
parents:
diff changeset
   180
    if ( iDrmNotifier )
hgs
parents:
diff changeset
   181
        {
hgs
parents:
diff changeset
   182
        // When one observer left, remove
hgs
parents:
diff changeset
   183
        TRAP_IGNORE( iDrmNotifier->UnRegisterEventObserverL( *this,
hgs
parents:
diff changeset
   184
                                                            KEventAddRemove,
hgs
parents:
diff changeset
   185
                                                            *iMediaInfo->DRMContentURI() ) );   
hgs
parents:
diff changeset
   186
        TRAP_IGNORE( iDrmNotifier->UnRegisterEventObserverL( *this, 
hgs
parents:
diff changeset
   187
                                                KEventModify,
hgs
parents:
diff changeset
   188
                                                *iMediaInfo->DRMContentURI() ) );
hgs
parents:
diff changeset
   189
        }
hgs
parents:
diff changeset
   190
    delete iEditStore;
hgs
parents:
diff changeset
   191
    delete iDrmInfo;
hgs
parents:
diff changeset
   192
    delete iMediaInfo;
hgs
parents:
diff changeset
   193
    delete iMimeInfo;
hgs
parents:
diff changeset
   194
    
hgs
parents:
diff changeset
   195
    iFileHandle.Close();
hgs
parents:
diff changeset
   196
    delete iDrmNotifier;
hgs
parents:
diff changeset
   197
    delete iObservers;
hgs
parents:
diff changeset
   198
    }
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
// ---------------------------------------------------------
hgs
parents:
diff changeset
   201
// CUniObject::Save
hgs
parents:
diff changeset
   202
// ---------------------------------------------------------
hgs
parents:
diff changeset
   203
//
hgs
parents:
diff changeset
   204
void CUniObject::Save( MUniObjectSaveObserver& aObserver,
hgs
parents:
diff changeset
   205
                       CMsvAttachment::TMsvAttachmentType aSaveType )
hgs
parents:
diff changeset
   206
    {
hgs
parents:
diff changeset
   207
    iObserver = &aObserver;
hgs
parents:
diff changeset
   208
    iSaveType = aSaveType;
hgs
parents:
diff changeset
   209
    iSaveState = EObjectSavingIdle;
hgs
parents:
diff changeset
   210
    CompleteSelf();
hgs
parents:
diff changeset
   211
    }
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
// ---------------------------------------------------------
hgs
parents:
diff changeset
   214
// CUniObject::DoSaveL
hgs
parents:
diff changeset
   215
// ---------------------------------------------------------
hgs
parents:
diff changeset
   216
//
hgs
parents:
diff changeset
   217
void CUniObject::DoSaveL()
hgs
parents:
diff changeset
   218
    {
hgs
parents:
diff changeset
   219
    switch ( iSaveState )
hgs
parents:
diff changeset
   220
        {
hgs
parents:
diff changeset
   221
        case EObjectSavingIdle:
hgs
parents:
diff changeset
   222
            {
hgs
parents:
diff changeset
   223
            StartObjectSaveL();
hgs
parents:
diff changeset
   224
            break;
hgs
parents:
diff changeset
   225
            }
hgs
parents:
diff changeset
   226
        case EObjectCreatingAttachment:
hgs
parents:
diff changeset
   227
            {
hgs
parents:
diff changeset
   228
            FinalizeObjectSaveL();
hgs
parents:
diff changeset
   229
            break;
hgs
parents:
diff changeset
   230
            }
hgs
parents:
diff changeset
   231
        default:
hgs
parents:
diff changeset
   232
            break;
hgs
parents:
diff changeset
   233
        }
hgs
parents:
diff changeset
   234
    }
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
// ---------------------------------------------------------
hgs
parents:
diff changeset
   237
// CUniObject::InitializeObjectSaveL
hgs
parents:
diff changeset
   238
// ---------------------------------------------------------
hgs
parents:
diff changeset
   239
//
hgs
parents:
diff changeset
   240
void CUniObject::StartObjectSaveL()
hgs
parents:
diff changeset
   241
    {
hgs
parents:
diff changeset
   242
    if ( iAttachmentId != KMsvNullIndexEntryId )
hgs
parents:
diff changeset
   243
        {
hgs
parents:
diff changeset
   244
        if ( iSaveType == CMsvAttachment::EMsvLinkedFile )
hgs
parents:
diff changeset
   245
            {
hgs
parents:
diff changeset
   246
            iObserver->ObjectSaveReady( KErrNone );
hgs
parents:
diff changeset
   247
            return;
hgs
parents:
diff changeset
   248
            }
hgs
parents:
diff changeset
   249
        else
hgs
parents:
diff changeset
   250
            {
hgs
parents:
diff changeset
   251
            CMsvStore* readStore = iMtm.Entry().ReadStoreL();
hgs
parents:
diff changeset
   252
            MMsvAttachmentManager& manager = readStore->AttachmentManagerL();
hgs
parents:
diff changeset
   253
            CleanupStack::PushL( readStore );
hgs
parents:
diff changeset
   254
            CMsvAttachment* attachment = manager.GetAttachmentInfoL( iAttachmentId );
hgs
parents:
diff changeset
   255
            CMsvAttachment::TMsvAttachmentType type = attachment->Type();
hgs
parents:
diff changeset
   256
            delete attachment;
hgs
parents:
diff changeset
   257
            CleanupStack::PopAndDestroy( readStore );
hgs
parents:
diff changeset
   258
            if ( type == CMsvAttachment::EMsvLinkedFile )
hgs
parents:
diff changeset
   259
                {
hgs
parents:
diff changeset
   260
                // Remove the "linked attachment" from store & create new "file attachment"
hgs
parents:
diff changeset
   261
                RemoveFromStoreL();
hgs
parents:
diff changeset
   262
                CreateAttachmentL();
hgs
parents:
diff changeset
   263
                }
hgs
parents:
diff changeset
   264
            else
hgs
parents:
diff changeset
   265
                {
hgs
parents:
diff changeset
   266
                // Already a "file attachment"
hgs
parents:
diff changeset
   267
                iObserver->ObjectSaveReady( KErrNone );
hgs
parents:
diff changeset
   268
                return;
hgs
parents:
diff changeset
   269
                }
hgs
parents:
diff changeset
   270
            }
hgs
parents:
diff changeset
   271
        }
hgs
parents:
diff changeset
   272
    else
hgs
parents:
diff changeset
   273
        {
hgs
parents:
diff changeset
   274
        // Create new attachment
hgs
parents:
diff changeset
   275
        CreateAttachmentL();
hgs
parents:
diff changeset
   276
        }
hgs
parents:
diff changeset
   277
    }
hgs
parents:
diff changeset
   278
    
hgs
parents:
diff changeset
   279
hgs
parents:
diff changeset
   280
// ---------------------------------------------------------
hgs
parents:
diff changeset
   281
// CUniObject::InitializeObjectSaveL
hgs
parents:
diff changeset
   282
// ---------------------------------------------------------
hgs
parents:
diff changeset
   283
//
hgs
parents:
diff changeset
   284
void CUniObject::FinalizeObjectSaveL()
hgs
parents:
diff changeset
   285
    {
hgs
parents:
diff changeset
   286
    // TODO: Cleanup attachment in some cases?
hgs
parents:
diff changeset
   287
    //       -> Just use Revert() instead of CommitL()?
hgs
parents:
diff changeset
   288
    iAttachmentId = iAttachment->Id();
hgs
parents:
diff changeset
   289
    iMimeInfo->SaveMimeInfoL( *iManager, *iAttachment );
hgs
parents:
diff changeset
   290
    
hgs
parents:
diff changeset
   291
    CMsvAttachment::TMsvAttachmentType type = iAttachment->Type();
hgs
parents:
diff changeset
   292
    if ( type == CMsvAttachment::EMsvLinkedFile )
hgs
parents:
diff changeset
   293
        {
hgs
parents:
diff changeset
   294
        iFileHandle.Close();
hgs
parents:
diff changeset
   295
        iFileHandle = iManager->GetAttachmentFileL( iAttachmentId  );
hgs
parents:
diff changeset
   296
        }
hgs
parents:
diff changeset
   297
    
hgs
parents:
diff changeset
   298
    iAttachment = NULL;
hgs
parents:
diff changeset
   299
    iEditStore->CommitL();
hgs
parents:
diff changeset
   300
hgs
parents:
diff changeset
   301
    if ( iSaveType == CMsvAttachment::EMsvFile )
hgs
parents:
diff changeset
   302
        {
hgs
parents:
diff changeset
   303
        // Update media info
hgs
parents:
diff changeset
   304
        RFile attachmentFile = iManager->GetAttachmentFileL( iAttachmentId );
hgs
parents:
diff changeset
   305
        CleanupClosePushL( attachmentFile );
hgs
parents:
diff changeset
   306
        iMediaInfo->SetFileL( attachmentFile );
hgs
parents:
diff changeset
   307
        CleanupStack::PopAndDestroy( &attachmentFile );
hgs
parents:
diff changeset
   308
        }
hgs
parents:
diff changeset
   309
hgs
parents:
diff changeset
   310
    delete iEditStore;
hgs
parents:
diff changeset
   311
    iEditStore = NULL;
hgs
parents:
diff changeset
   312
    iManager = NULL;
hgs
parents:
diff changeset
   313
    
hgs
parents:
diff changeset
   314
    //DoSaveL();
hgs
parents:
diff changeset
   315
    iObserver->ObjectSaveReady( KErrNone );
hgs
parents:
diff changeset
   316
    }
hgs
parents:
diff changeset
   317
    
hgs
parents:
diff changeset
   318
hgs
parents:
diff changeset
   319
// ---------------------------------------------------------
hgs
parents:
diff changeset
   320
// CUniObject::CreateAttachmentL
hgs
parents:
diff changeset
   321
//
hgs
parents:
diff changeset
   322
// Create attachment to message store
hgs
parents:
diff changeset
   323
// ---------------------------------------------------------
hgs
parents:
diff changeset
   324
//
hgs
parents:
diff changeset
   325
void CUniObject::CreateAttachmentL()
hgs
parents:
diff changeset
   326
    {
hgs
parents:
diff changeset
   327
    if ( !( iMediaInfo->FullFilePath().Length() ) )
hgs
parents:
diff changeset
   328
        {
hgs
parents:
diff changeset
   329
        User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   330
        }
hgs
parents:
diff changeset
   331
    TParsePtrC fileParse( iMediaInfo->FullFilePath() );
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
    iEditStore = iMtm.Entry().EditStoreL();
hgs
parents:
diff changeset
   334
    iManager = &( iEditStore->AttachmentManagerL() );
hgs
parents:
diff changeset
   335
    CMsvAttachment* attachment = CMsvAttachment::NewL( iSaveType );
hgs
parents:
diff changeset
   336
    CleanupStack::PushL( attachment );
hgs
parents:
diff changeset
   337
    
hgs
parents:
diff changeset
   338
    attachment->SetSize( iMediaInfo->FileSize() );
hgs
parents:
diff changeset
   339
    attachment->SetMimeTypeL( iMimeInfo->ContentType() );
hgs
parents:
diff changeset
   340
    //TODO: Set complete flag?
hgs
parents:
diff changeset
   341
    //attachment->SetComplete( iSaveType != EHiddenSave );
hgs
parents:
diff changeset
   342
    
hgs
parents:
diff changeset
   343
    attachment->SetIntAttributeL( KUidAttachmentIndication, Attachment() );
hgs
parents:
diff changeset
   344
    
hgs
parents:
diff changeset
   345
    if ( iSaveType == CMsvAttachment::EMsvLinkedFile )
hgs
parents:
diff changeset
   346
        {
hgs
parents:
diff changeset
   347
        iManager->AddLinkedAttachmentL( fileParse.FullName(), attachment, iStatus );
hgs
parents:
diff changeset
   348
        }
hgs
parents:
diff changeset
   349
    else
hgs
parents:
diff changeset
   350
        {
hgs
parents:
diff changeset
   351
        iManager->AddAttachmentL( fileParse.FullName(), attachment, iStatus );
hgs
parents:
diff changeset
   352
        }
hgs
parents:
diff changeset
   353
        
hgs
parents:
diff changeset
   354
    CleanupStack::Pop( attachment );
hgs
parents:
diff changeset
   355
    iAttachment = attachment;
hgs
parents:
diff changeset
   356
    iSaveState = EObjectCreatingAttachment;
hgs
parents:
diff changeset
   357
    SetActive();
hgs
parents:
diff changeset
   358
    }
hgs
parents:
diff changeset
   359
hgs
parents:
diff changeset
   360
// ---------------------------------------------------------
hgs
parents:
diff changeset
   361
// CUniObject::SetVisibleL
hgs
parents:
diff changeset
   362
//
hgs
parents:
diff changeset
   363
// Set "Visible" and "InPreparation" flags
hgs
parents:
diff changeset
   364
// ---------------------------------------------------------
hgs
parents:
diff changeset
   365
//
hgs
parents:
diff changeset
   366
/*
hgs
parents:
diff changeset
   367
void CUniObject::SetHiddenL( TBool aHidden )
hgs
parents:
diff changeset
   368
    {
hgs
parents:
diff changeset
   369
    // TODO: Use Complete flag?!
hgs
parents:
diff changeset
   370
    
hgs
parents:
diff changeset
   371
    if ( iAttachmentId == KMsvNullIndexEntryId )
hgs
parents:
diff changeset
   372
        {
hgs
parents:
diff changeset
   373
        return;
hgs
parents:
diff changeset
   374
        }
hgs
parents:
diff changeset
   375
    CMsvEntry* cAttEntry = iMtm.Entry().ChildEntryL( iAttachmentId );
hgs
parents:
diff changeset
   376
    CleanupStack::PushL( cAttEntry );
hgs
parents:
diff changeset
   377
    TMsvEntry tAttEntry = cAttEntry->Entry();
hgs
parents:
diff changeset
   378
    tAttEntry.SetInPreparation( aHidden );
hgs
parents:
diff changeset
   379
    cAttEntry->ChangeL( tAttEntry );
hgs
parents:
diff changeset
   380
    CleanupStack::PopAndDestroy( cAttEntry );
hgs
parents:
diff changeset
   381
    }
hgs
parents:
diff changeset
   382
*/
hgs
parents:
diff changeset
   383
hgs
parents:
diff changeset
   384
hgs
parents:
diff changeset
   385
// ---------------------------------------------------------
hgs
parents:
diff changeset
   386
// CUniObject::RemoveFromStoreL
hgs
parents:
diff changeset
   387
//
hgs
parents:
diff changeset
   388
// Remove from store.
hgs
parents:
diff changeset
   389
// ---------------------------------------------------------
hgs
parents:
diff changeset
   390
//
hgs
parents:
diff changeset
   391
void CUniObject::RemoveFromStoreL()
hgs
parents:
diff changeset
   392
    {
hgs
parents:
diff changeset
   393
    if ( iAttachmentId == KMsvNullIndexEntryId )
hgs
parents:
diff changeset
   394
        {
hgs
parents:
diff changeset
   395
        return;
hgs
parents:
diff changeset
   396
        }
hgs
parents:
diff changeset
   397
    
hgs
parents:
diff changeset
   398
    iFileHandle.Close();
hgs
parents:
diff changeset
   399
    
hgs
parents:
diff changeset
   400
    CMsvStore* store = iMtm.Entry().EditStoreL();
hgs
parents:
diff changeset
   401
    CleanupStack::PushL( store );
hgs
parents:
diff changeset
   402
    MMsvAttachmentManager& manager = store->AttachmentManagerL();
hgs
parents:
diff changeset
   403
    MMsvAttachmentManagerSync& managerSync = store->AttachmentManagerExtensionsL();    
hgs
parents:
diff changeset
   404
    managerSync.RemoveAttachmentL( CUniDataUtils::IndexPositionOfAttachmentL( manager, iAttachmentId ) );
hgs
parents:
diff changeset
   405
    store->CommitL();
hgs
parents:
diff changeset
   406
    CleanupStack::PopAndDestroy( store );
hgs
parents:
diff changeset
   407
    iAttachmentId = KMsvNullIndexEntryId;
hgs
parents:
diff changeset
   408
    }
hgs
parents:
diff changeset
   409
hgs
parents:
diff changeset
   410
hgs
parents:
diff changeset
   411
// ---------------------------------------------------------
hgs
parents:
diff changeset
   412
// CUniObject::CreateMimeInfoL
hgs
parents:
diff changeset
   413
// 
hgs
parents:
diff changeset
   414
// ---------------------------------------------------------
hgs
parents:
diff changeset
   415
//
hgs
parents:
diff changeset
   416
void CUniObject::CreateMimeInfoL()
hgs
parents:
diff changeset
   417
    {
hgs
parents:
diff changeset
   418
    // Content-type
hgs
parents:
diff changeset
   419
    iMimeInfo->SetContentTypeL( iMediaInfo->MimeType() );
hgs
parents:
diff changeset
   420
hgs
parents:
diff changeset
   421
    HBufC* fileName = NULL;
hgs
parents:
diff changeset
   422
    if ( iMediaInfo->FullFilePath().Length() )
hgs
parents:
diff changeset
   423
        {
hgs
parents:
diff changeset
   424
        TParsePtrC parse( iMediaInfo->FullFilePath() );
hgs
parents:
diff changeset
   425
        fileName = parse.NameAndExt().AllocLC();
hgs
parents:
diff changeset
   426
        }
hgs
parents:
diff changeset
   427
hgs
parents:
diff changeset
   428
    if ( fileName )
hgs
parents:
diff changeset
   429
        {
hgs
parents:
diff changeset
   430
        // Content-location
hgs
parents:
diff changeset
   431
        TPtr ptr = fileName->Des();
hgs
parents:
diff changeset
   432
        CMsgTextUtils::TrimAndRemoveNonAlphaDigit( ptr );
hgs
parents:
diff changeset
   433
        iMimeInfo->SetContentLocationL( *fileName );
hgs
parents:
diff changeset
   434
        CleanupStack::PopAndDestroy( fileName );
hgs
parents:
diff changeset
   435
        
hgs
parents:
diff changeset
   436
        // Character set. Recognize charset if atta is text. 
hgs
parents:
diff changeset
   437
        if ( iMediaInfo->MediaType() == EMsgMediaText ||
hgs
parents:
diff changeset
   438
             iMediaInfo->MediaType() == EMsgMediaXhtml )
hgs
parents:
diff changeset
   439
            {
hgs
parents:
diff changeset
   440
            CMsgTextInfo* info = static_cast<CMsgTextInfo*>( iMediaInfo );
hgs
parents:
diff changeset
   441
            TUint charConvCharset = info->CharacterSet();
hgs
parents:
diff changeset
   442
            TUint mibCharset( 0 );
hgs
parents:
diff changeset
   443
            if ( charConvCharset == 0 )
hgs
parents:
diff changeset
   444
                {
hgs
parents:
diff changeset
   445
                // UCS2
hgs
parents:
diff changeset
   446
                mibCharset = KCharacterSetMIBEnumIso10646Ucs2;
hgs
parents:
diff changeset
   447
                }
hgs
parents:
diff changeset
   448
            else
hgs
parents:
diff changeset
   449
                {
hgs
parents:
diff changeset
   450
                mibCharset = iData.CharconvIdToMibIdL( charConvCharset );
hgs
parents:
diff changeset
   451
                }
hgs
parents:
diff changeset
   452
            iMimeInfo->SetCharset( mibCharset );
hgs
parents:
diff changeset
   453
            }
hgs
parents:
diff changeset
   454
        }
hgs
parents:
diff changeset
   455
    }
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
// ---------------------------------------------------------
hgs
parents:
diff changeset
   458
// CUniObject::Size
hgs
parents:
diff changeset
   459
//
hgs
parents:
diff changeset
   460
// Accessor.
hgs
parents:
diff changeset
   461
// ---------------------------------------------------------
hgs
parents:
diff changeset
   462
//
hgs
parents:
diff changeset
   463
TInt CUniObject::Size( TBool aWithoutHeaders )
hgs
parents:
diff changeset
   464
    {
hgs
parents:
diff changeset
   465
    return ( aWithoutHeaders 
hgs
parents:
diff changeset
   466
        ? iMediaInfo->FileSize()
hgs
parents:
diff changeset
   467
        : iMediaInfo->FileSize() + iMimeInfo->Size() );
hgs
parents:
diff changeset
   468
    }
hgs
parents:
diff changeset
   469
hgs
parents:
diff changeset
   470
// ---------------------------------------------------------
hgs
parents:
diff changeset
   471
// CUniObject::MimeType
hgs
parents:
diff changeset
   472
// ---------------------------------------------------------
hgs
parents:
diff changeset
   473
//
hgs
parents:
diff changeset
   474
EXPORT_C TPtrC8 CUniObject::MimeType() const
hgs
parents:
diff changeset
   475
    {
hgs
parents:
diff changeset
   476
    if ( iMediaInfo->MediaType() == EMsgMediaAudio ||
hgs
parents:
diff changeset
   477
         iMediaInfo->MediaType() == EMsgMediaImage ||
hgs
parents:
diff changeset
   478
         iMediaInfo->MediaType() == EMsgMediaVideo ||
hgs
parents:
diff changeset
   479
#ifdef RD_SVGT_IN_MESSAGING
hgs
parents:
diff changeset
   480
         iMediaInfo->MediaType() == EMsgMediaSvg ||
hgs
parents:
diff changeset
   481
#endif
hgs
parents:
diff changeset
   482
#ifdef RD_MSG_XHTML_SUPPORT
hgs
parents:
diff changeset
   483
         iMediaInfo->MediaType() == EMsgMediaXhtml ||
hgs
parents:
diff changeset
   484
#endif
hgs
parents:
diff changeset
   485
         ( iMediaInfo->Protection() &
hgs
parents:
diff changeset
   486
           ( EFileProtForwardLocked | EFileProtSuperDistributable ) ) )
hgs
parents:
diff changeset
   487
        {
hgs
parents:
diff changeset
   488
        return iMediaInfo->MimeType();
hgs
parents:
diff changeset
   489
        }
hgs
parents:
diff changeset
   490
    else
hgs
parents:
diff changeset
   491
        {
hgs
parents:
diff changeset
   492
        return iMimeInfo->ContentType();
hgs
parents:
diff changeset
   493
        }
hgs
parents:
diff changeset
   494
    }
hgs
parents:
diff changeset
   495
hgs
parents:
diff changeset
   496
// ---------------------------------------------------------
hgs
parents:
diff changeset
   497
// CUniObject::MediaType
hgs
parents:
diff changeset
   498
// ---------------------------------------------------------
hgs
parents:
diff changeset
   499
//
hgs
parents:
diff changeset
   500
EXPORT_C TMsgMediaType CUniObject::MediaType() const
hgs
parents:
diff changeset
   501
    {
hgs
parents:
diff changeset
   502
    if ( iMediaInfo->MediaType() == EMsgMediaText &&
hgs
parents:
diff changeset
   503
        iMimeInfo->ContentType().CompareF( KMsgMimeTextPlain ) != 0 )
hgs
parents:
diff changeset
   504
        {
hgs
parents:
diff changeset
   505
        return EMsgMediaUnknown;
hgs
parents:
diff changeset
   506
        }
hgs
parents:
diff changeset
   507
    else
hgs
parents:
diff changeset
   508
        {
hgs
parents:
diff changeset
   509
        return iMediaInfo->MediaType();
hgs
parents:
diff changeset
   510
        }
hgs
parents:
diff changeset
   511
    }
hgs
parents:
diff changeset
   512
hgs
parents:
diff changeset
   513
// ---------------------------------------------------------
hgs
parents:
diff changeset
   514
// CUniObject::ConstructL
hgs
parents:
diff changeset
   515
//
hgs
parents:
diff changeset
   516
// 2nd phase constructor.
hgs
parents:
diff changeset
   517
// ---------------------------------------------------------
hgs
parents:
diff changeset
   518
//
hgs
parents:
diff changeset
   519
void CUniObject::ConstructL()
hgs
parents:
diff changeset
   520
    {
hgs
parents:
diff changeset
   521
    iMimeInfo = new ( ELeave ) CUniMimeInfo;
hgs
parents:
diff changeset
   522
    
hgs
parents:
diff changeset
   523
    if ( iMediaInfo )
hgs
parents:
diff changeset
   524
        {
hgs
parents:
diff changeset
   525
        if ( iMediaInfo->Corrupt() )
hgs
parents:
diff changeset
   526
            {
hgs
parents:
diff changeset
   527
            SetCorrupted( ETrue );
hgs
parents:
diff changeset
   528
            }
hgs
parents:
diff changeset
   529
            
hgs
parents:
diff changeset
   530
        if ( iMediaInfo->DRMContentURI() )
hgs
parents:
diff changeset
   531
            {
hgs
parents:
diff changeset
   532
            iDrmInfo = CUniDrmInfo::NewL( iFs, iMtm, iAttachmentId, *iMediaInfo );
hgs
parents:
diff changeset
   533
            iDrmNotifier = CDRMNotifier::NewL( );
hgs
parents:
diff changeset
   534
            iDrmNotifier->RegisterEventObserverL( *this, 
hgs
parents:
diff changeset
   535
                                                    KEventAddRemove,
hgs
parents:
diff changeset
   536
                                                    *iMediaInfo->DRMContentURI() ); 
hgs
parents:
diff changeset
   537
            iDrmNotifier->RegisterEventObserverL( *this, 
hgs
parents:
diff changeset
   538
                                                    KEventModify,
hgs
parents:
diff changeset
   539
                                                    *iMediaInfo->DRMContentURI() ); 
hgs
parents:
diff changeset
   540
            }
hgs
parents:
diff changeset
   541
        }
hgs
parents:
diff changeset
   542
hgs
parents:
diff changeset
   543
    iObservers = new( ELeave ) CArrayPtrFlat<MUniObjectObserver>( 1 );
hgs
parents:
diff changeset
   544
hgs
parents:
diff changeset
   545
    }
hgs
parents:
diff changeset
   546
hgs
parents:
diff changeset
   547
// ---------------------------------------------------------
hgs
parents:
diff changeset
   548
// CUniObject::ConstructFromAttachmentL
hgs
parents:
diff changeset
   549
//
hgs
parents:
diff changeset
   550
// 2nd phase constructor.
hgs
parents:
diff changeset
   551
// ---------------------------------------------------------
hgs
parents:
diff changeset
   552
//
hgs
parents:
diff changeset
   553
void CUniObject::ConstructFromAttachmentL(
hgs
parents:
diff changeset
   554
        MMsvAttachmentManager& aManager,
hgs
parents:
diff changeset
   555
        CMsvAttachment& aAttachment )
hgs
parents:
diff changeset
   556
    {    
hgs
parents:
diff changeset
   557
    iAttachmentId = aAttachment.Id();
hgs
parents:
diff changeset
   558
    TPtrC8 dummy;
hgs
parents:
diff changeset
   559
    TInt err = aAttachment.GetDesC8Attribute( KUidMimeHeaders, dummy );
hgs
parents:
diff changeset
   560
    if( err == KErrNone )
hgs
parents:
diff changeset
   561
        {
hgs
parents:
diff changeset
   562
        iMimeInfo->ReadMimeInfoL( aAttachment );
hgs
parents:
diff changeset
   563
hgs
parents:
diff changeset
   564
        if ( iMediaInfo->MediaType() == EMsgMediaText )
hgs
parents:
diff changeset
   565
            {
hgs
parents:
diff changeset
   566
            TUint mibCharset = iMimeInfo->Charset();            
hgs
parents:
diff changeset
   567
            if ( !mibCharset )
hgs
parents:
diff changeset
   568
                {
hgs
parents:
diff changeset
   569
                //assume US-ASCII - mandated by RFC 2046
hgs
parents:
diff changeset
   570
                mibCharset = KCharacterSetMIBEnumUsAscii;
hgs
parents:
diff changeset
   571
                }
hgs
parents:
diff changeset
   572
            TUint charConvCharset = iData.MibIdToCharconvIdL( mibCharset );
hgs
parents:
diff changeset
   573
hgs
parents:
diff changeset
   574
            CMsgTextInfo* info = static_cast<CMsgTextInfo*>( iMediaInfo );
hgs
parents:
diff changeset
   575
            info->SetCharacterSet( charConvCharset );
hgs
parents:
diff changeset
   576
            }
hgs
parents:
diff changeset
   577
hgs
parents:
diff changeset
   578
        //iStoreState = EMmsStoreStateAttachment;
hgs
parents:
diff changeset
   579
        }
hgs
parents:
diff changeset
   580
    else
hgs
parents:
diff changeset
   581
        {
hgs
parents:
diff changeset
   582
        CreateMimeInfoL();
hgs
parents:
diff changeset
   583
        aAttachment.SetMimeTypeL( iMimeInfo->ContentType() );
hgs
parents:
diff changeset
   584
        iMimeInfo->SaveMimeInfoL( aManager, aAttachment );
hgs
parents:
diff changeset
   585
        // TODO: Set hidden
hgs
parents:
diff changeset
   586
        //SetHiddenL( ETrue );
hgs
parents:
diff changeset
   587
        //iStoreState = EMmsStoreStateHidden;
hgs
parents:
diff changeset
   588
        //iStoreState = EMmsStoreStateAttachment;
hgs
parents:
diff changeset
   589
        }
hgs
parents:
diff changeset
   590
    
hgs
parents:
diff changeset
   591
    TInt isAttachment( 0 );
hgs
parents:
diff changeset
   592
    err = aAttachment.GetIntAttribute( KUidAttachmentIndication, isAttachment );
hgs
parents:
diff changeset
   593
    
hgs
parents:
diff changeset
   594
    if ( err == KErrNone )
hgs
parents:
diff changeset
   595
        {
hgs
parents:
diff changeset
   596
        SetAttachment( isAttachment );
hgs
parents:
diff changeset
   597
        }
hgs
parents:
diff changeset
   598
hgs
parents:
diff changeset
   599
    iSaveType = aAttachment.Type();
hgs
parents:
diff changeset
   600
    if ( iSaveType == CMsvAttachment::EMsvLinkedFile )
hgs
parents:
diff changeset
   601
        {
hgs
parents:
diff changeset
   602
        iFileHandle = aManager.GetAttachmentFileL( iAttachmentId  );
hgs
parents:
diff changeset
   603
        }
hgs
parents:
diff changeset
   604
    }
hgs
parents:
diff changeset
   605
hgs
parents:
diff changeset
   606
// ---------------------------------------------------------
hgs
parents:
diff changeset
   607
// CUniObject::DoCancel
hgs
parents:
diff changeset
   608
//
hgs
parents:
diff changeset
   609
// ---------------------------------------------------------
hgs
parents:
diff changeset
   610
//
hgs
parents:
diff changeset
   611
void CUniObject::DoCancel()
hgs
parents:
diff changeset
   612
    {
hgs
parents:
diff changeset
   613
    if ( iManager )
hgs
parents:
diff changeset
   614
        {        
hgs
parents:
diff changeset
   615
        iManager->CancelRequest();
hgs
parents:
diff changeset
   616
        }
hgs
parents:
diff changeset
   617
    }
hgs
parents:
diff changeset
   618
hgs
parents:
diff changeset
   619
// ---------------------------------------------------------
hgs
parents:
diff changeset
   620
// CUniObject::RunL
hgs
parents:
diff changeset
   621
//
hgs
parents:
diff changeset
   622
// ---------------------------------------------------------
hgs
parents:
diff changeset
   623
//
hgs
parents:
diff changeset
   624
void CUniObject::RunL()
hgs
parents:
diff changeset
   625
    {
hgs
parents:
diff changeset
   626
    DoSaveL();
hgs
parents:
diff changeset
   627
    }
hgs
parents:
diff changeset
   628
hgs
parents:
diff changeset
   629
// ---------------------------------------------------------
hgs
parents:
diff changeset
   630
// CUniObject::RunError
hgs
parents:
diff changeset
   631
//
hgs
parents:
diff changeset
   632
// ---------------------------------------------------------
hgs
parents:
diff changeset
   633
//
hgs
parents:
diff changeset
   634
TInt CUniObject::RunError( TInt aError )
hgs
parents:
diff changeset
   635
    {
hgs
parents:
diff changeset
   636
    delete iEditStore;
hgs
parents:
diff changeset
   637
    iEditStore = NULL;
hgs
parents:
diff changeset
   638
    iManager = NULL;
hgs
parents:
diff changeset
   639
    iAttachmentId = NULL;
hgs
parents:
diff changeset
   640
    
hgs
parents:
diff changeset
   641
    iObserver->ObjectSaveReady( aError );
hgs
parents:
diff changeset
   642
    return KErrNone;
hgs
parents:
diff changeset
   643
    }
hgs
parents:
diff changeset
   644
hgs
parents:
diff changeset
   645
// ---------------------------------------------------------
hgs
parents:
diff changeset
   646
// CUniObject::CompleteSelf
hgs
parents:
diff changeset
   647
//
hgs
parents:
diff changeset
   648
// ---------------------------------------------------------
hgs
parents:
diff changeset
   649
//
hgs
parents:
diff changeset
   650
void CUniObject::CompleteSelf()
hgs
parents:
diff changeset
   651
    {
hgs
parents:
diff changeset
   652
    iStatus = KRequestPending;
hgs
parents:
diff changeset
   653
    TRequestStatus* pStatus = &iStatus;
hgs
parents:
diff changeset
   654
    SetActive();
hgs
parents:
diff changeset
   655
    User::RequestComplete( pStatus, KErrNone );
hgs
parents:
diff changeset
   656
    }
hgs
parents:
diff changeset
   657
hgs
parents:
diff changeset
   658
hgs
parents:
diff changeset
   659
// ---------------------------------------------------------
hgs
parents:
diff changeset
   660
// CUniObject::ResolveDrmRightsWhenLoadedL
hgs
parents:
diff changeset
   661
//
hgs
parents:
diff changeset
   662
// ---------------------------------------------------------
hgs
parents:
diff changeset
   663
//
hgs
parents:
diff changeset
   664
EXPORT_C void CUniObject::ResolveDrmRightsWhenLoadedL()
hgs
parents:
diff changeset
   665
    {
hgs
parents:
diff changeset
   666
    iObjectFlags &= ~EObjectDrmRightsWhenLoaded;
hgs
parents:
diff changeset
   667
    
hgs
parents:
diff changeset
   668
    if ( iDrmInfo )
hgs
parents:
diff changeset
   669
        {
hgs
parents:
diff changeset
   670
        TBool alreadyConsumed( EFalse );                
hgs
parents:
diff changeset
   671
        TBool result = ( iDrmInfo->EvaluateRights( alreadyConsumed ) == KErrNone ? ETrue : 
hgs
parents:
diff changeset
   672
                                                                                   EFalse );
hgs
parents:
diff changeset
   673
        if (    alreadyConsumed 
hgs
parents:
diff changeset
   674
            ||  result )
hgs
parents:
diff changeset
   675
            {
hgs
parents:
diff changeset
   676
            iObjectFlags |= EObjectDrmRightsWhenLoaded;
hgs
parents:
diff changeset
   677
            }
hgs
parents:
diff changeset
   678
        }
hgs
parents:
diff changeset
   679
                             
hgs
parents:
diff changeset
   680
    }
hgs
parents:
diff changeset
   681
hgs
parents:
diff changeset
   682
// ---------------------------------------------------------
hgs
parents:
diff changeset
   683
// CUniObject::SetDrmRightsWhenLoaded
hgs
parents:
diff changeset
   684
//
hgs
parents:
diff changeset
   685
// ---------------------------------------------------------
hgs
parents:
diff changeset
   686
//
hgs
parents:
diff changeset
   687
EXPORT_C void CUniObject::SetDrmRightsWhenLoaded( TBool aRights )
hgs
parents:
diff changeset
   688
    {
hgs
parents:
diff changeset
   689
    aRights ? ( iObjectFlags |= EObjectDrmRightsWhenLoaded ) : ( iObjectFlags &= ~EObjectDrmRightsWhenLoaded );
hgs
parents:
diff changeset
   690
    }
hgs
parents:
diff changeset
   691
hgs
parents:
diff changeset
   692
// ---------------------------------------------------------
hgs
parents:
diff changeset
   693
// CUniObject::SetDrmRightsWhenLoadedObjects
hgs
parents:
diff changeset
   694
//
hgs
parents:
diff changeset
   695
// ---------------------------------------------------------
hgs
parents:
diff changeset
   696
//
hgs
parents:
diff changeset
   697
EXPORT_C void CUniObject::SetDrmRightsWhenLoadedObjects( TBool aRights )
hgs
parents:
diff changeset
   698
    {
hgs
parents:
diff changeset
   699
    aRights ? ( iObjectFlags |= EObjectDrmRightsWhenLoadedObjects ) : ( iObjectFlags &= ~EObjectDrmRightsWhenLoadedObjects );
hgs
parents:
diff changeset
   700
    }
hgs
parents:
diff changeset
   701
hgs
parents:
diff changeset
   702
hgs
parents:
diff changeset
   703
// ---------------------------------------------------------
hgs
parents:
diff changeset
   704
// CUniObject::HandleEventL from MDRMEventObserver         
hgs
parents:
diff changeset
   705
//
hgs
parents:
diff changeset
   706
// ---------------------------------------------------------
hgs
parents:
diff changeset
   707
//
hgs
parents:
diff changeset
   708
void CUniObject::HandleEventL( MDRMEvent* aEvent )
hgs
parents:
diff changeset
   709
    {
hgs
parents:
diff changeset
   710
    TDRMEventType event = KEventNone;
hgs
parents:
diff changeset
   711
    if ( aEvent )
hgs
parents:
diff changeset
   712
        {            
hgs
parents:
diff changeset
   713
        aEvent->GetEventType( event );
hgs
parents:
diff changeset
   714
hgs
parents:
diff changeset
   715
        switch ( event )
hgs
parents:
diff changeset
   716
            {
hgs
parents:
diff changeset
   717
            case KEventNone:
hgs
parents:
diff changeset
   718
                break;
hgs
parents:
diff changeset
   719
            case KEventAddRemove:
hgs
parents:
diff changeset
   720
            case KEventModify:
hgs
parents:
diff changeset
   721
            case KEventTimeChange:
hgs
parents:
diff changeset
   722
            default:
hgs
parents:
diff changeset
   723
                {
hgs
parents:
diff changeset
   724
                for ( TInt current = 0; current < iObservers->Count(); current++ )
hgs
parents:
diff changeset
   725
                    {
hgs
parents:
diff changeset
   726
                    if ( iObservers->At( current ) )
hgs
parents:
diff changeset
   727
                        {
hgs
parents:
diff changeset
   728
                        iObservers->At( current )->HandleUniObjectEvent(    
hgs
parents:
diff changeset
   729
                            *this,
hgs
parents:
diff changeset
   730
                            EUniObjectEventDrmRightsChanged );
hgs
parents:
diff changeset
   731
                        }
hgs
parents:
diff changeset
   732
                    }
hgs
parents:
diff changeset
   733
                }
hgs
parents:
diff changeset
   734
            }
hgs
parents:
diff changeset
   735
        }
hgs
parents:
diff changeset
   736
    }
hgs
parents:
diff changeset
   737
hgs
parents:
diff changeset
   738
// ---------------------------------------------------------
hgs
parents:
diff changeset
   739
// CUniObject::SetObserverL
hgs
parents:
diff changeset
   740
//
hgs
parents:
diff changeset
   741
// ---------------------------------------------------------
hgs
parents:
diff changeset
   742
//
hgs
parents:
diff changeset
   743
EXPORT_C void CUniObject::SetObserverL( MUniObjectObserver* aObserver )
hgs
parents:
diff changeset
   744
    {
hgs
parents:
diff changeset
   745
    iObservers->AppendL( aObserver );
hgs
parents:
diff changeset
   746
    }
hgs
parents:
diff changeset
   747
hgs
parents:
diff changeset
   748
// ---------------------------------------------------------
hgs
parents:
diff changeset
   749
// CUniObject::RemoveObserver
hgs
parents:
diff changeset
   750
//
hgs
parents:
diff changeset
   751
// ---------------------------------------------------------
hgs
parents:
diff changeset
   752
//
hgs
parents:
diff changeset
   753
EXPORT_C void CUniObject::RemoveObserver( MUniObjectObserver* aObserver )
hgs
parents:
diff changeset
   754
    {
hgs
parents:
diff changeset
   755
    for ( TInt current = 0; current < iObservers->Count(); current++ )
hgs
parents:
diff changeset
   756
        {
hgs
parents:
diff changeset
   757
        if ( iObservers->At( current ) == aObserver )
hgs
parents:
diff changeset
   758
            {
hgs
parents:
diff changeset
   759
            iObservers->Delete( current );
hgs
parents:
diff changeset
   760
            break;
hgs
parents:
diff changeset
   761
            }
hgs
parents:
diff changeset
   762
        }
hgs
parents:
diff changeset
   763
    }
hgs
parents:
diff changeset
   764
hgs
parents:
diff changeset
   765
// ---------------------------------------------------------
hgs
parents:
diff changeset
   766
// CUniObject::IsValid
hgs
parents:
diff changeset
   767
//
hgs
parents:
diff changeset
   768
// ---------------------------------------------------------
hgs
parents:
diff changeset
   769
//
hgs
parents:
diff changeset
   770
EXPORT_C TBool CUniObject::IsValid() const
hgs
parents:
diff changeset
   771
    {
hgs
parents:
diff changeset
   772
    TBool bFlag = ETrue;
hgs
parents:
diff changeset
   773
    if ( iSaveType == CMsvAttachment::EMsvLinkedFile )
hgs
parents:
diff changeset
   774
        {
hgs
parents:
diff changeset
   775
        TParsePtrC fileParse( iMediaInfo->FullFilePath() );
hgs
parents:
diff changeset
   776
        
hgs
parents:
diff changeset
   777
        RFile file;     
hgs
parents:
diff changeset
   778
        TInt err = file.Open( iFs, fileParse.FullName(), EFileShareAny );
hgs
parents:
diff changeset
   779
      
hgs
parents:
diff changeset
   780
        if(err == KErrNotReady)
hgs
parents:
diff changeset
   781
            {
hgs
parents:
diff changeset
   782
            bFlag = EFalse;
hgs
parents:
diff changeset
   783
            }
hgs
parents:
diff changeset
   784
        if(err == KErrNone)
hgs
parents:
diff changeset
   785
            {
hgs
parents:
diff changeset
   786
            file.Close();
hgs
parents:
diff changeset
   787
            }
hgs
parents:
diff changeset
   788
        }
hgs
parents:
diff changeset
   789
    return bFlag;
hgs
parents:
diff changeset
   790
    }
hgs
parents:
diff changeset
   791
hgs
parents:
diff changeset
   792
// EOF