contentstorage/caclient/s60/src/caclientsubsession.cpp
author hgs
Fri, 30 Apr 2010 15:22:08 +0300
changeset 93 82b66994846c
parent 85 7feec50967db
permissions -rw-r--r--
201017
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
85
7feec50967db 201003_02
hgs
parents:
diff changeset
     1
/*
7feec50967db 201003_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
7feec50967db 201003_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
7feec50967db 201003_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
7feec50967db 201003_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
7feec50967db 201003_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
7feec50967db 201003_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
7feec50967db 201003_02
hgs
parents:
diff changeset
     8
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
7feec50967db 201003_02
hgs
parents:
diff changeset
    11
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    12
 * Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    13
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    14
 * Description:
7feec50967db 201003_02
hgs
parents:
diff changeset
    15
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    16
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    17
7feec50967db 201003_02
hgs
parents:
diff changeset
    18
#include "caclientsubsession.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    19
#include "caclientnotifiersession.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    20
#include "caclientnotifier.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    21
#include "cainnernotifierfilter.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    22
#include "casrvdef.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    23
#include "cainnerentry.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    24
#include "caclientproxy.h"
93
hgs
parents: 85
diff changeset
    25
#include "caobserver.h"
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    26
#include "cautils.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    27
7feec50967db 201003_02
hgs
parents:
diff changeset
    28
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    29
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    30
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    31
RCaClientSubSession::RCaClientSubSession(
7feec50967db 201003_02
hgs
parents:
diff changeset
    32
        const RCaClientNotifierSession* aSession,
7feec50967db 201003_02
hgs
parents:
diff changeset
    33
        const IDataObserver* aObserver,
7feec50967db 201003_02
hgs
parents:
diff changeset
    34
        const CCaInnerNotifierFilter *aInnerNotifierFilter ) :
7feec50967db 201003_02
hgs
parents:
diff changeset
    35
    RSubSessionBase(), iSession( aSession ), iObserver( aObserver ),
7feec50967db 201003_02
hgs
parents:
diff changeset
    36
    iInnerNotifierFilter( aInnerNotifierFilter ),
93
hgs
parents: 85
diff changeset
    37
    iNotifier( NULL ), iMessageSize( NULL ), iChangedEntry( NULL ), 
hgs
parents: 85
diff changeset
    38
    iChangedEntryType( EAddChangeType )
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    39
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    40
7feec50967db 201003_02
hgs
parents:
diff changeset
    41
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    42
7feec50967db 201003_02
hgs
parents:
diff changeset
    43
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    44
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    45
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    46
void RCaClientSubSession::CreateL()
7feec50967db 201003_02
hgs
parents:
diff changeset
    47
    {
93
hgs
parents: 85
diff changeset
    48
    if( iNotifier )
hgs
parents: 85
diff changeset
    49
        {
hgs
parents: 85
diff changeset
    50
        delete iNotifier;
hgs
parents: 85
diff changeset
    51
        iNotifier = NULL;
hgs
parents: 85
diff changeset
    52
        }
hgs
parents: 85
diff changeset
    53
    if( iMessageSize )
hgs
parents: 85
diff changeset
    54
        {
hgs
parents: 85
diff changeset
    55
        delete iMessageSize;
hgs
parents: 85
diff changeset
    56
        iMessageSize = NULL;
hgs
parents: 85
diff changeset
    57
        }
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    58
    iMessageSize = new ( ELeave ) TPckgBuf<TInt> ();
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
    User::LeaveIfError( CreateSubSession( *iSession,
7feec50967db 201003_02
hgs
parents:
diff changeset
    60
        static_cast<TInt>( EContentArsenalNotifierOpen ) ) );
7feec50967db 201003_02
hgs
parents:
diff changeset
    61
    iNotifier = CCaClientNotifier::NewL( this );
93
hgs
parents: 85
diff changeset
    62
    iChangedEntry = CCaInnerEntry::NewL();    
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    63
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    64
7feec50967db 201003_02
hgs
parents:
diff changeset
    65
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    66
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    67
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    68
void RCaClientSubSession::Close()
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
    {
93
hgs
parents: 85
diff changeset
    70
    delete iChangedEntry;
hgs
parents: 85
diff changeset
    71
    iChangedEntry = NULL;
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
    delete iMessageSize;
7feec50967db 201003_02
hgs
parents:
diff changeset
    73
    iMessageSize = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
    74
    delete iNotifier;
7feec50967db 201003_02
hgs
parents:
diff changeset
    75
    iNotifier = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
    76
    CloseSubSession( EContentArsenalNotifierClose );
7feec50967db 201003_02
hgs
parents:
diff changeset
    77
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    78
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    81
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
void RCaClientSubSession::RegisterForNotificationsL(
7feec50967db 201003_02
hgs
parents:
diff changeset
    83
        TRequestStatus& aStatus ) const
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    85
    TIpcArgs args;
7feec50967db 201003_02
hgs
parents:
diff changeset
    86
    HBufC8* inbuf = MenuUtils::MarshalDataL( *iInnerNotifierFilter,
7feec50967db 201003_02
hgs
parents:
diff changeset
    87
            KDefaultExpandSize );
7feec50967db 201003_02
hgs
parents:
diff changeset
    88
    args.Set( KInputPosition1, inbuf );
7feec50967db 201003_02
hgs
parents:
diff changeset
    89
    args.Set( KOutputPosition, iMessageSize );
7feec50967db 201003_02
hgs
parents:
diff changeset
    90
    RSubSessionBase::SendReceive( EContentArsenalNotifierNotify, args,
7feec50967db 201003_02
hgs
parents:
diff changeset
    91
            aStatus );
7feec50967db 201003_02
hgs
parents:
diff changeset
    92
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
    93
7feec50967db 201003_02
hgs
parents:
diff changeset
    94
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    95
//
7feec50967db 201003_02
hgs
parents:
diff changeset
    96
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
    97
void RCaClientSubSession::UnregisterForNotifications() const
7feec50967db 201003_02
hgs
parents:
diff changeset
    98
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
    99
    RSubSessionBase::SendReceive( EContentArsenalNotifierCancel );
7feec50967db 201003_02
hgs
parents:
diff changeset
   100
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   101
7feec50967db 201003_02
hgs
parents:
diff changeset
   102
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   103
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   104
// -----------------------------------------------------------------------------
93
hgs
parents: 85
diff changeset
   105
void RCaClientSubSession::NotifyObserver() const
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   106
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   107
    switch( iInnerNotifierFilter->GetNotifierType() )
7feec50967db 201003_02
hgs
parents:
diff changeset
   108
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   109
        case CCaInnerNotifierFilter::EEntryChangedWithId:
7feec50967db 201003_02
hgs
parents:
diff changeset
   110
            {
93
hgs
parents: 85
diff changeset
   111
            iObserver->entryChanged( iChangedEntry->GetId(), iChangedEntryType );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   112
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   113
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   114
        case CCaInnerNotifierFilter::EEntryChangedWithEntry:
7feec50967db 201003_02
hgs
parents:
diff changeset
   115
            {
93
hgs
parents: 85
diff changeset
   116
            iObserver->entryChanged( *iChangedEntry, iChangedEntryType );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   117
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   118
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   119
        case CCaInnerNotifierFilter::EEntryTouched:
7feec50967db 201003_02
hgs
parents:
diff changeset
   120
            {
93
hgs
parents: 85
diff changeset
   121
            iObserver->entryTouched( iChangedEntry->GetId() );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   122
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   123
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   124
        case CCaInnerNotifierFilter::EGroupContentChanged:
7feec50967db 201003_02
hgs
parents:
diff changeset
   125
            {
93
hgs
parents: 85
diff changeset
   126
            iObserver->groupContentChanged( iChangedEntry->GetId() );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   127
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   128
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
        default:
7feec50967db 201003_02
hgs
parents:
diff changeset
   130
            {
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
            break;
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
            }
7feec50967db 201003_02
hgs
parents:
diff changeset
   133
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   135
7feec50967db 201003_02
hgs
parents:
diff changeset
   136
// -----------------------------------------------------------------------------
7feec50967db 201003_02
hgs
parents:
diff changeset
   137
//
7feec50967db 201003_02
hgs
parents:
diff changeset
   138
// -----------------------------------------------------------------------------
93
hgs
parents: 85
diff changeset
   139
void RCaClientSubSession::GetChangeInfoL() const
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   140
    {
7feec50967db 201003_02
hgs
parents:
diff changeset
   141
    TIpcArgs args;
7feec50967db 201003_02
hgs
parents:
diff changeset
   142
    RBuf8 outbuf;
7feec50967db 201003_02
hgs
parents:
diff changeset
   143
    outbuf.CleanupClosePushL();
7feec50967db 201003_02
hgs
parents:
diff changeset
   144
    outbuf.CreateL( ( *iMessageSize )() );
7feec50967db 201003_02
hgs
parents:
diff changeset
   145
    TPckg<TChangeType> changeTypePckg( EAddChangeType );
7feec50967db 201003_02
hgs
parents:
diff changeset
   146
    args.Set( KInputPosition1, &outbuf );
7feec50967db 201003_02
hgs
parents:
diff changeset
   147
    args.Set( KInputPosition2, &changeTypePckg );
7feec50967db 201003_02
hgs
parents:
diff changeset
   148
    TInt error = RSubSessionBase::SendReceive(
7feec50967db 201003_02
hgs
parents:
diff changeset
   149
            EContentArsenalGetChangeInfo, args );
7feec50967db 201003_02
hgs
parents:
diff changeset
   150
    if( error == KErrNone )
7feec50967db 201003_02
hgs
parents:
diff changeset
   151
        {
7feec50967db 201003_02
hgs
parents:
diff changeset
   152
        RDesReadStream stream( outbuf );
7feec50967db 201003_02
hgs
parents:
diff changeset
   153
        CleanupClosePushL( stream );
93
hgs
parents: 85
diff changeset
   154
        iChangedEntry->InternalizeL( stream );
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   155
        CleanupStack::PopAndDestroy( &stream );
93
hgs
parents: 85
diff changeset
   156
        iChangedEntryType = changeTypePckg();
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   157
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   158
    CleanupStack::PopAndDestroy( &outbuf );
7feec50967db 201003_02
hgs
parents:
diff changeset
   159
    }