taskswitcher/server/src/tsservice.cpp
author hgs
Mon, 18 Oct 2010 10:44:15 +0300
changeset 127 7b66bc3c6dc9
parent 125 26079c1bb561
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
116
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 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
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
#include <QObject>
hgs
parents:
diff changeset
    18
#include <QDateTime>
hgs
parents:
diff changeset
    19
#include <QVariantHash>
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#include <xqconversions.h>
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include "tsservice.h"
hgs
parents:
diff changeset
    24
#include "tsmodelobserver.h"
hgs
parents:
diff changeset
    25
#include "tsserviceobserver.h"
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    26
#include "tsresourcemanager.h"
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    27
116
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
    30
LOCAL_C QVariantHash value( QObject *aModel, TInt aOffset )
116
hgs
parents:
diff changeset
    31
    {
hgs
parents:
diff changeset
    32
    QList<QVariantHash> items;
hgs
parents:
diff changeset
    33
    QMetaObject::invokeMethod( aModel, 
hgs
parents:
diff changeset
    34
                               "taskList", 
hgs
parents:
diff changeset
    35
                               Q_RETURN_ARG(QList<QVariantHash>, 
hgs
parents:
diff changeset
    36
                               items ) );
127
hgs
parents: 125
diff changeset
    37
    return (items.count() > aOffset) ? items.at(aOffset) : QVariantHash();
116
hgs
parents:
diff changeset
    38
    }
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
// -----------------------------------------------------------------------------
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    41
CTsService* CTsService::NewLC(MTsResourceManager& resources, QObject* model)
116
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
    CTsService *self = new (ELeave)CTsService();
hgs
parents:
diff changeset
    44
    CleanupStack::PushL(self);
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    45
    self->ConstructL(resources, model);
116
hgs
parents:
diff changeset
    46
    return self;
hgs
parents:
diff changeset
    47
    }
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
CTsService::CTsService()
hgs
parents:
diff changeset
    51
    {
hgs
parents:
diff changeset
    52
    //No implementation required
hgs
parents:
diff changeset
    53
    }
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
// -----------------------------------------------------------------------------
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    56
void CTsService::ConstructL( MTsResourceManager& resources, QObject* model )
116
hgs
parents:
diff changeset
    57
    {
hgs
parents:
diff changeset
    58
    iModel = model;
hgs
parents:
diff changeset
    59
    User::LeaveIfNull(iModel);
hgs
parents:
diff changeset
    60
    // @todo: add checking for all necessary methods
hgs
parents:
diff changeset
    61
    
hgs
parents:
diff changeset
    62
    iServiceObserver = new TsServiceObserver(*this);
hgs
parents:
diff changeset
    63
    User::LeaveIfNull(iServiceObserver);
hgs
parents:
diff changeset
    64
    QObject::connect(iModel, 
hgs
parents:
diff changeset
    65
                     SIGNAL(dataChanged()),
hgs
parents:
diff changeset
    66
                     iServiceObserver,
hgs
parents:
diff changeset
    67
                     SLOT(dataChanged()));
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    68
    QMetaObject::invokeMethod(iModel,
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    69
                              "setResources",
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    70
                              Q_ARG(MTsResourceManager&, resources));
116
hgs
parents:
diff changeset
    71
    }
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    74
CTsService::~CTsService()
hgs
parents:
diff changeset
    75
    {
hgs
parents:
diff changeset
    76
    delete iModel;
hgs
parents:
diff changeset
    77
    delete iServiceObserver;
hgs
parents:
diff changeset
    78
    delete iBuffer;
hgs
parents:
diff changeset
    79
    }
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    82
void CTsService::DataChanged()
hgs
parents:
diff changeset
    83
    {
hgs
parents:
diff changeset
    84
    if(0 != iModelObserver) 
hgs
parents:
diff changeset
    85
        {
hgs
parents:
diff changeset
    86
        iModelObserver->DataChanged(*this);
hgs
parents:
diff changeset
    87
        }
hgs
parents:
diff changeset
    88
    }
hgs
parents:
diff changeset
    89
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    90
TInt CTsService::Count() const
hgs
parents:
diff changeset
    91
    {
hgs
parents:
diff changeset
    92
    QList<QVariantHash> items;
hgs
parents:
diff changeset
    93
    QMetaObject::invokeMethod(iModel, 
hgs
parents:
diff changeset
    94
                              "taskList", 
hgs
parents:
diff changeset
    95
                              Q_RETURN_ARG(QList<QVariantHash>, items));
hgs
parents:
diff changeset
    96
    return items.count();
hgs
parents:
diff changeset
    97
    }
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   100
void CTsService::SetObserver( MTsModelObserver *aObserver )
hgs
parents:
diff changeset
   101
    {
hgs
parents:
diff changeset
   102
    iModelObserver = aObserver;
hgs
parents:
diff changeset
   103
    }
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   106
const TDesC& CTsService::DisplayName( TInt aOffset ) const
116
hgs
parents:
diff changeset
   107
    {
127
hgs
parents: 125
diff changeset
   108
    return StringValue( aOffset, "TaskName" );
116
hgs
parents:
diff changeset
   109
    }
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   112
TInt CTsService::IconHandle( TInt aOffset ) const
116
hgs
parents:
diff changeset
   113
    {
127
hgs
parents: 125
diff changeset
   114
    return IntValue( aOffset, "TaskScreenshot" );
116
hgs
parents:
diff changeset
   115
    }
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   118
TTime CTsService::Timestamp( TInt aOffset ) const
116
hgs
parents:
diff changeset
   119
    {
127
hgs
parents: 125
diff changeset
   120
    return TimeValue( aOffset, "TaskTimestamp" );
116
hgs
parents:
diff changeset
   121
    }
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   124
TTime CTsService::TimestampUpdate(TInt offset) const
116
hgs
parents:
diff changeset
   125
{
127
hgs
parents: 125
diff changeset
   126
    return TimeValue(offset, "TaskUpdateTimestamp");
116
hgs
parents:
diff changeset
   127
}
hgs
parents:
diff changeset
   128
127
hgs
parents: 125
diff changeset
   129
TTsEntryKey CTsService::Key( TInt aOffset ) const
116
hgs
parents:
diff changeset
   130
    {
127
hgs
parents: 125
diff changeset
   131
    return TTsEntryKey( IntValue( aOffset, "TaskId" ), 
hgs
parents: 125
diff changeset
   132
                        reinterpret_cast<TInt>( this ) );
116
hgs
parents:
diff changeset
   133
    }
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   136
TBool CTsService::IsActive( TInt aOffset ) const
116
hgs
parents:
diff changeset
   137
    {
127
hgs
parents: 125
diff changeset
   138
    return IntValue( aOffset, "TaskIsRunning" );
116
hgs
parents:
diff changeset
   139
    }
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   142
TBool CTsService::IsClosable( TInt aOffset ) const
116
hgs
parents:
diff changeset
   143
    {
127
hgs
parents: 125
diff changeset
   144
    return IntValue( aOffset, "TaskCanBeClosed" );
116
hgs
parents:
diff changeset
   145
    }
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   148
TBool CTsService::IsMandatory( TInt aOffset ) const
119
hgs
parents: 116
diff changeset
   149
    {
127
hgs
parents: 125
diff changeset
   150
    const QVariantHash values(value(iModel, aOffset));
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
   151
    const QString key("TaskIsMandatory");
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
   152
    return values.contains(key) ? values.value(key).toInt() : ETrue;
119
hgs
parents: 116
diff changeset
   153
    }
hgs
parents: 116
diff changeset
   154
hgs
parents: 116
diff changeset
   155
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   156
TBool CTsService::Close( TTsEntryKey aKey ) const
116
hgs
parents:
diff changeset
   157
    {
hgs
parents:
diff changeset
   158
    bool result(false);
hgs
parents:
diff changeset
   159
    QMetaObject::invokeMethod( iModel, 
hgs
parents:
diff changeset
   160
                               "closeTask", 
hgs
parents:
diff changeset
   161
                               Q_RETURN_ARG(bool, result), 
hgs
parents:
diff changeset
   162
                               Q_ARG(QVariant, aKey.Key() ) );
hgs
parents:
diff changeset
   163
    return result;
hgs
parents:
diff changeset
   164
    }
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   167
TBool CTsService::Launch( TTsEntryKey aKey ) const
116
hgs
parents:
diff changeset
   168
    {
hgs
parents:
diff changeset
   169
    bool result(false);
hgs
parents:
diff changeset
   170
    QMetaObject::invokeMethod( iModel, 
hgs
parents:
diff changeset
   171
                               "openTask", 
hgs
parents:
diff changeset
   172
                               Q_RETURN_ARG(bool, result), 
hgs
parents:
diff changeset
   173
                               Q_ARG(QVariant, aKey.Key() ) );
hgs
parents:
diff changeset
   174
    return result;
hgs
parents:
diff changeset
   175
    }
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   178
TInt CTsService::IntValue( TInt aOffset, const char* aKey) const
116
hgs
parents:
diff changeset
   179
    {
127
hgs
parents: 125
diff changeset
   180
    return value(iModel, aOffset).value( aKey ).toInt();
116
hgs
parents:
diff changeset
   181
    }
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   184
TTime CTsService::TimeValue(TInt aOffset, const char* aKey) const
116
hgs
parents:
diff changeset
   185
    {
hgs
parents:
diff changeset
   186
    // Conversion between TTime which counts from year 0, and QDateTime which uses unix epoch (1st Jan 1970)
127
hgs
parents: 125
diff changeset
   187
    QDateTime timestamp = value( iModel, aOffset ).value( aKey ).toDateTime();
116
hgs
parents:
diff changeset
   188
    
hgs
parents:
diff changeset
   189
    return TTime( _L( "19700000:" ) ) + TTimeIntervalSeconds( timestamp.toTime_t() ) +
hgs
parents:
diff changeset
   190
                         TTimeIntervalMicroSeconds( timestamp.time().msec() * 1000 );
hgs
parents:
diff changeset
   191
    }
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
// -----------------------------------------------------------------------------
127
hgs
parents: 125
diff changeset
   194
const TDesC& CTsService::StringValue( TInt aOffset, const char* aKey ) const
116
hgs
parents:
diff changeset
   195
    {
hgs
parents:
diff changeset
   196
    delete iBuffer;
127
hgs
parents: 125
diff changeset
   197
    iBuffer = 0;
116
hgs
parents:
diff changeset
   198
    
127
hgs
parents: 125
diff changeset
   199
    const QVariantHash item(value(iModel, aOffset));
hgs
parents: 125
diff changeset
   200
    try {
hgs
parents: 125
diff changeset
   201
        iBuffer = XQConversions::qStringToS60Desc(item.value(aKey).toString());
hgs
parents: 125
diff changeset
   202
    } catch(...) {
116
hgs
parents:
diff changeset
   203
    }
127
hgs
parents: 125
diff changeset
   204
    return iBuffer ? *iBuffer : KNullDesC();
hgs
parents: 125
diff changeset
   205
    }