taskswitcher/server/src/tsservice.cpp
author hgs
Wed, 06 Oct 2010 16:00:22 +0300
changeset 125 26079c1bb561
parent 119 50e220be30d1
child 127 7b66bc3c6dc9
permissions -rw-r--r--
201039_01
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
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    30
LOCAL_C QVariantHash valueL( QObject *aModel, TInt aOffset )
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 ) );
hgs
parents:
diff changeset
    37
    if( aOffset >= items.count() ) 
hgs
parents:
diff changeset
    38
        {
hgs
parents:
diff changeset
    39
        User::Leave(KErrCorrupt);
hgs
parents:
diff changeset
    40
        }
hgs
parents:
diff changeset
    41
    return items.at(aOffset);
hgs
parents:
diff changeset
    42
    }
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// -----------------------------------------------------------------------------
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    45
CTsService* CTsService::NewLC(MTsResourceManager& resources, QObject* model)
116
hgs
parents:
diff changeset
    46
    {
hgs
parents:
diff changeset
    47
    CTsService *self = new (ELeave)CTsService();
hgs
parents:
diff changeset
    48
    CleanupStack::PushL(self);
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    49
    self->ConstructL(resources, model);
116
hgs
parents:
diff changeset
    50
    return self;
hgs
parents:
diff changeset
    51
    }
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    54
CTsService::CTsService()
hgs
parents:
diff changeset
    55
    {
hgs
parents:
diff changeset
    56
    //No implementation required
hgs
parents:
diff changeset
    57
    }
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
// -----------------------------------------------------------------------------
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    60
void CTsService::ConstructL( MTsResourceManager& resources, QObject* model )
116
hgs
parents:
diff changeset
    61
    {
hgs
parents:
diff changeset
    62
    iModel = model;
hgs
parents:
diff changeset
    63
    User::LeaveIfNull(iModel);
hgs
parents:
diff changeset
    64
    // @todo: add checking for all necessary methods
hgs
parents:
diff changeset
    65
    
hgs
parents:
diff changeset
    66
    iServiceObserver = new TsServiceObserver(*this);
hgs
parents:
diff changeset
    67
    User::LeaveIfNull(iServiceObserver);
hgs
parents:
diff changeset
    68
    QObject::connect(iModel, 
hgs
parents:
diff changeset
    69
                     SIGNAL(dataChanged()),
hgs
parents:
diff changeset
    70
                     iServiceObserver,
hgs
parents:
diff changeset
    71
                     SLOT(dataChanged()));
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    72
    QMetaObject::invokeMethod(iModel,
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    73
                              "setResources",
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    74
                              Q_ARG(MTsResourceManager&, resources));
116
hgs
parents:
diff changeset
    75
    }
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    78
CTsService::~CTsService()
hgs
parents:
diff changeset
    79
    {
hgs
parents:
diff changeset
    80
    delete iModel;
hgs
parents:
diff changeset
    81
    delete iServiceObserver;
hgs
parents:
diff changeset
    82
    delete iBuffer;
hgs
parents:
diff changeset
    83
    }
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    86
void CTsService::DataChanged()
hgs
parents:
diff changeset
    87
    {
hgs
parents:
diff changeset
    88
    if(0 != iModelObserver) 
hgs
parents:
diff changeset
    89
        {
hgs
parents:
diff changeset
    90
        iModelObserver->DataChanged(*this);
hgs
parents:
diff changeset
    91
        }
hgs
parents:
diff changeset
    92
    }
hgs
parents:
diff changeset
    93
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    94
TInt CTsService::Count() const
hgs
parents:
diff changeset
    95
    {
hgs
parents:
diff changeset
    96
    QList<QVariantHash> items;
hgs
parents:
diff changeset
    97
    QMetaObject::invokeMethod(iModel, 
hgs
parents:
diff changeset
    98
                              "taskList", 
hgs
parents:
diff changeset
    99
                              Q_RETURN_ARG(QList<QVariantHash>, items));
hgs
parents:
diff changeset
   100
    return items.count();
hgs
parents:
diff changeset
   101
    }
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   104
void CTsService::SetObserver( MTsModelObserver *aObserver )
hgs
parents:
diff changeset
   105
    {
hgs
parents:
diff changeset
   106
    iModelObserver = aObserver;
hgs
parents:
diff changeset
   107
    }
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   110
const TDesC& CTsService::DisplayNameL( TInt aOffset ) const
hgs
parents:
diff changeset
   111
    {
hgs
parents:
diff changeset
   112
    return StringValueL( aOffset, "TaskName" );
hgs
parents:
diff changeset
   113
    }
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   116
TInt CTsService::IconHandleL( TInt aOffset ) const
hgs
parents:
diff changeset
   117
    {
hgs
parents:
diff changeset
   118
    return IntValueL( aOffset, "TaskScreenshot" );
hgs
parents:
diff changeset
   119
    }
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   122
TTime CTsService::TimestampL( TInt aOffset ) const
hgs
parents:
diff changeset
   123
    {
hgs
parents:
diff changeset
   124
    return TimeValueL( aOffset, "TaskTimestamp" );
hgs
parents:
diff changeset
   125
    }
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   128
TTime CTsService::TimestampUpdateL(TInt offset) const
hgs
parents:
diff changeset
   129
{
hgs
parents:
diff changeset
   130
    return TimeValueL(offset, "TaskUpdateTimestamp");
hgs
parents:
diff changeset
   131
}
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
TTsModelItemKey CTsService::KeyL( TInt aOffset ) const
hgs
parents:
diff changeset
   134
    {
hgs
parents:
diff changeset
   135
    return TTsModelItemKey( IntValueL( aOffset, "TaskId" ), 
hgs
parents:
diff changeset
   136
                            reinterpret_cast<TInt>( this ) );
hgs
parents:
diff changeset
   137
    }
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   140
TBool CTsService::IsActiveL( TInt aOffset ) const
hgs
parents:
diff changeset
   141
    {
hgs
parents:
diff changeset
   142
    return IntValueL( aOffset, "TaskIsRunning" );
hgs
parents:
diff changeset
   143
    }
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   146
TBool CTsService::IsClosableL( TInt aOffset ) const
hgs
parents:
diff changeset
   147
    {
hgs
parents:
diff changeset
   148
    return IntValueL( aOffset, "TaskCanBeClosed" );
hgs
parents:
diff changeset
   149
    }
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
// -----------------------------------------------------------------------------
119
hgs
parents: 116
diff changeset
   152
TBool CTsService::IsMandatoryL( TInt aOffset ) const
hgs
parents: 116
diff changeset
   153
    {
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
   154
    const QVariantHash values(valueL(iModel, aOffset));
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
   155
    const QString key("TaskIsMandatory");
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
   156
    return values.contains(key) ? values.value(key).toInt() : ETrue;
119
hgs
parents: 116
diff changeset
   157
    }
hgs
parents: 116
diff changeset
   158
hgs
parents: 116
diff changeset
   159
// -----------------------------------------------------------------------------
116
hgs
parents:
diff changeset
   160
TBool CTsService::CloseL( TTsModelItemKey aKey ) const
hgs
parents:
diff changeset
   161
    {
hgs
parents:
diff changeset
   162
    bool result(false);
hgs
parents:
diff changeset
   163
    QMetaObject::invokeMethod( iModel, 
hgs
parents:
diff changeset
   164
                               "closeTask", 
hgs
parents:
diff changeset
   165
                               Q_RETURN_ARG(bool, result), 
hgs
parents:
diff changeset
   166
                               Q_ARG(QVariant, aKey.Key() ) );
hgs
parents:
diff changeset
   167
    return result;
hgs
parents:
diff changeset
   168
    }
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   171
TBool CTsService::LaunchL( TTsModelItemKey aKey ) const
hgs
parents:
diff changeset
   172
    {
hgs
parents:
diff changeset
   173
    bool result(false);
hgs
parents:
diff changeset
   174
    QMetaObject::invokeMethod( iModel, 
hgs
parents:
diff changeset
   175
                               "openTask", 
hgs
parents:
diff changeset
   176
                               Q_RETURN_ARG(bool, result), 
hgs
parents:
diff changeset
   177
                               Q_ARG(QVariant, aKey.Key() ) );
hgs
parents:
diff changeset
   178
    return result;
hgs
parents:
diff changeset
   179
    }
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   182
TInt CTsService::IntValueL( TInt aOffset, const char* aKey) const
hgs
parents:
diff changeset
   183
    {
hgs
parents:
diff changeset
   184
    return valueL(iModel, aOffset).value( aKey ).toInt();
hgs
parents:
diff changeset
   185
    }
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   188
TTime CTsService::TimeValueL(TInt aOffset, const char* aKey) const
hgs
parents:
diff changeset
   189
    {
hgs
parents:
diff changeset
   190
    // Conversion between TTime which counts from year 0, and QDateTime which uses unix epoch (1st Jan 1970)
hgs
parents:
diff changeset
   191
    QDateTime timestamp = valueL( iModel, aOffset ).value( aKey ).toDateTime();
hgs
parents:
diff changeset
   192
    
hgs
parents:
diff changeset
   193
    return TTime( _L( "19700000:" ) ) + TTimeIntervalSeconds( timestamp.toTime_t() ) +
hgs
parents:
diff changeset
   194
                         TTimeIntervalMicroSeconds( timestamp.time().msec() * 1000 );
hgs
parents:
diff changeset
   195
    }
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   198
const TDesC& CTsService::StringValueL( TInt aOffset, const char* aKey ) const
hgs
parents:
diff changeset
   199
    {
hgs
parents:
diff changeset
   200
    delete iBuffer;
hgs
parents:
diff changeset
   201
    const_cast<CTsService *>(this)->iBuffer = 0;
hgs
parents:
diff changeset
   202
    
hgs
parents:
diff changeset
   203
    const QVariantHash item(valueL(iModel, aOffset));
hgs
parents:
diff changeset
   204
    QT_TRYCATCH_LEAVING(
hgs
parents:
diff changeset
   205
    const_cast<CTsService *>(this)->iBuffer = 
hgs
parents:
diff changeset
   206
    XQConversions::qStringToS60Desc(item.value(aKey).toString()));
hgs
parents:
diff changeset
   207
    return *iBuffer;
hgs
parents:
diff changeset
   208
    }