--- a/iaupdate/IAD/api/client/src/iaupdateclient.cpp Thu Aug 19 10:02:49 2010 +0300
+++ b/iaupdate/IAD/api/client/src/iaupdateclient.cpp Tue Aug 31 15:21:33 2010 +0300
@@ -11,7 +11,7 @@
*
* Contributors:
*
-* Description: This module contains the implementation of RIAUpdateClient
+* Description: This module contains the implementation of IAUpdateClient
* class member functions.
*
*/
@@ -22,390 +22,406 @@
#include <eikenv.h>
#include <apgcli.h>
#include <e32math.h>
+#include <iaupdateparameters.h>
+#include <iaupdateresult.h>
+#include <xqservicerequest.h>
+#include <xqserviceutil.h>
+#include <xqrequestinfo.h>
+
#include "iaupdateclient.h"
#include "iaupdateclientdefines.h"
-#include "iaupdatetools.h"
#include "iaupdatedebug.h"
// -----------------------------------------------------------------------------
-// RIAUpdateClient::RIAUpdateClient
+// IAUpdateClient::IAUpdateClient
//
// -----------------------------------------------------------------------------
//
-RIAUpdateClient::RIAUpdateClient()
-: iPtr1( NULL, 0 ),
- iPtr2( NULL, 0 ),
- iPtr3( NULL, 0 )
+IAUpdateClient::IAUpdateClient(MIAUpdateObserver& observer):
+ mObserver(observer)
{
+ mServiceRequest = NULL;
+ mCurrentRequestType = NoOperation;
+ }
+
+// -----------------------------------------------------------------------------
+// IAUpdateClient::~IAUpdateClient
+//
+// -----------------------------------------------------------------------------
+//
+IAUpdateClient::~IAUpdateClient()
+ {
+ if ( mServiceRequest)
+ {
+ delete mServiceRequest;
+ }
}
// -----------------------------------------------------------------------------
-// RIAUpdateClient::Open
+// IAUpdateClient::initRequest
//
// -----------------------------------------------------------------------------
//
-TInt RIAUpdateClient::Open()
+int IAUpdateClient::initRequest(const CIAUpdateParameters* updateParameters, const QString& message, bool toBackground)
+{
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::initRequest() begin");
+ int error(KErrNone);
+ if (mCurrentRequestType != NoOperation)
+ {
+ error = KErrServerBusy;
+ }
+ else if (!mServiceRequest)
{
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::Open() begin");
- TInt error( KErrNone );
+ mServiceRequest = new XQServiceRequest("com.nokia.services.swupdate.swupdate_interface", message, false);
+ if (mServiceRequest)
+ {
+ connect(mServiceRequest, SIGNAL(requestCompleted(QVariant)), this, SLOT(requestCompleted(QVariant)));
+ connect(mServiceRequest, SIGNAL(requestError(int)), this, SLOT(requestError(int)));
+ }
+ else
+ {
+ error = KErrNoMemory;
+ }
+ }
+ else
+ {
+ mServiceRequest->setMessage(message);
+ }
- if ( !iConnected )
+
+ if (error == KErrNone)
+ {
+ XQRequestInfo requestInfo;
+ requestInfo.setBackground(toBackground);
+ mServiceRequest->setInfo(requestInfo);
+ int wgId = 0;
+ CEikonEnv* eikEnv = CEikonEnv::Static();
+ if ( eikEnv )
{
- TRAP( error, ConnectNewAppL( ServiceUid() ) );
- if ( error == KErrNone )
- {
- iConnected = ETrue;
- CEikonEnv* eikEnv = CEikonEnv::Static();
- if ( eikEnv )
- {
- RWindowGroup owngroup;
- iOwnWgId = eikEnv->RootWin().Identifier();
-
- TPckg<TInt> wgId( iOwnWgId );
- delete iData;
- iData = NULL;
- TRAP_IGNORE( iData = wgId.AllocL() );
-
- TIpcArgs args;
- args.Set( 0, iData );
- SendReceive( IAUpdateClientDefines::EIAUpdateServerSendWgId, args );
- }
- }
+ RWindowGroup owngroup;
+ wgId = eikEnv->RootWin().Identifier();
}
- IAUPDATE_TRACE_1("[IAUPDATE] RIAUpdateClient::Open() end error code: %d", error );
+ IAUPDATE_TRACE_1("IAUpdateClient::initRequest() wgId: %d", wgId);
+ QString stringWgid;
+ stringWgid.setNum(wgId);
+ *mServiceRequest << stringWgid;
+ if (updateParameters)
+ {
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() UID: %d", updateParameters->Uid().iUid);
+ QString stringUid;
+ stringUid.setNum(updateParameters->Uid().iUid);
+ *mServiceRequest << stringUid;
+
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() searchcriteria: %S", &updateParameters->SearchCriteria());
+ *mServiceRequest << qStringFromTDesC(updateParameters->SearchCriteria());
+
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() executable: %S", &updateParameters->CommandLineExecutable());
+ *mServiceRequest << qStringFromTDesC(updateParameters->CommandLineExecutable());
+
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() arguments: %S8", &updateParameters->CommandLineArguments());
+ *mServiceRequest << qStringFromTDesC8(updateParameters->CommandLineArguments());
+
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() show progress: %d", updateParameters->ShowProgress());
+ QString stringShowProgress;
+ stringShowProgress.setNum(updateParameters->ShowProgress());
+ *mServiceRequest << stringShowProgress;
+
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() importance: %d", updateParameters->Importance());
+ QString stringImportance;
+ stringImportance.setNum(updateParameters->Importance());
+ *mServiceRequest << stringImportance;
+
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() type: %d", updateParameters->Type());
+ QString stringType;
+ stringType.setNum(updateParameters->Type());
+ *mServiceRequest << stringType;
+
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() refresh: %d", updateParameters->Refresh());
+ QString stringRefresh;
+ stringRefresh.setNum(updateParameters->Refresh());
+ *mServiceRequest << stringRefresh;
+ }
+ }
+
+
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() error code: %d", error );
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::initRequest() end");
return error;
- }
+}
// -----------------------------------------------------------------------------
-// RIAUpdateClient::OpenToBackroundAsync
-//
-// -----------------------------------------------------------------------------
-//
-TInt RIAUpdateClient::OpenToBackroundAsync( TRequestStatus& aStatus )
- {
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::OpenToBackroundAsync() begin");
- TInt error( KErrNone );
- if ( !iConnected )
- {
- TRAP( error, StartNewAppToBackgroundL( ServiceUid(), aStatus ) );
- }
- IAUPDATE_TRACE_1("[IAUPDATE] RIAUpdateClient::OpenToBackroundAsync() end error code: %d", error );
- return error;
- }
-
-// -----------------------------------------------------------------------------
-// RIAUpdateClient::ConnectToApp
+// IAUpdateClient::checkUpdates
//
// -----------------------------------------------------------------------------
//
-TInt RIAUpdateClient::ConnectToApp()
+void IAUpdateClient::checkUpdates(const CIAUpdateParameters& updateParameters)
{
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::ConnectToApp() begin");
- TInt error( KErrNone );
- TName serverName;
- ServerName(serverName, ServiceUid(), iDifferentiator);
- TRAP( error,ConnectExistingByNameL( serverName ) );
-
- if ( error == KErrNone )
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::checkUpdates()");
+ QString message("checkUpdates(QString,QString,QString,QString,QString,QString,QString,QString,QString)");
+ //QString message("checkUpdates(int,int)");
+ int ret = initRequest(&updateParameters,message,!updateParameters.ShowProgress());
+ if (ret == KErrNone)
{
- iConnected = ETrue;
- CEikonEnv* eikEnv = CEikonEnv::Static();
- if ( eikEnv )
+ if (mServiceRequest->send())
{
- RWindowGroup owngroup;
- iOwnWgId = eikEnv->RootWin().Identifier();
-
- TPckg<TInt> wgId( iOwnWgId );
- delete iData;
- iData = NULL;
- TRAP_IGNORE( iData = wgId.AllocL() );
-
- TIpcArgs args;
- args.Set( 0, iData );
- SendReceive( IAUpdateClientDefines::EIAUpdateServerSendWgId, args );
- }
+ mCurrentRequestType = CheckUpdates;
+ }
+ else
+ {
+ mObserver.CheckUpdatesComplete(ret,0);
+ }
}
- IAUPDATE_TRACE_1("[IAUPDATE] RIAUpdateClient::ConnectToApp() end error code: %d", error );
- return error;
}
-
-
-
// -----------------------------------------------------------------------------
-// RIAUpdateClient::Close
+// IAUpdateClient::showUpdates
//
// -----------------------------------------------------------------------------
//
-void RIAUpdateClient::Close()
- {
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::Close() begin");
- // Let the parent handle closing.
- RAknAppServiceBase::Close();
- iConnected = EFalse;
- delete iData;
- iData = NULL;
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::Close() end");
- }
-
-// -----------------------------------------------------------------------------
-// RIAUpdateClient::CheckUpdates
-//
-// -----------------------------------------------------------------------------
-//
-TInt RIAUpdateClient::CheckUpdates( const CIAUpdateParameters& aUpdateParameters,
- TInt& aAvailableUpdates,
- TRequestStatus& aStatus )
+void IAUpdateClient::showUpdates(const CIAUpdateParameters& updateParameters)
{
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::CheckUpdates()");
- // Inform the caller about the success of the request initializing.
- return SendCheckUpdatesRequest( IAUpdateClientDefines::EIAUpdateServerCheckUpdates,
- aUpdateParameters,
- aAvailableUpdates,
- aStatus );
- }
-
-// -----------------------------------------------------------------------------
-// RIAUpdateClient::ShowUpdates
-//
-// -----------------------------------------------------------------------------
-//
-TInt RIAUpdateClient::ShowUpdates( const CIAUpdateParameters& aUpdateParameters,
- TInt& aNumberOfSuccessfullUpdates,
- TInt& aNumberOfFailedUpdates,
- TInt& aNumberOfCancelledUpdates,
- TRequestStatus& aStatus )
- {
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::ShowUpdates()");
- // Inform the caller about the success of the request initializing.
- return SendUpdateRequest( IAUpdateClientDefines::EIAUpdateServerShowUpdates,
- aUpdateParameters,
- aNumberOfSuccessfullUpdates,
- aNumberOfFailedUpdates,
- aNumberOfCancelledUpdates,
- aStatus );
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::showUpdates()");
+ QString message("showUpdates(QString,QString,QString,QString,QString,QString,QString,QString,QString)");
+ int ret = initRequest(&updateParameters, message, false);
+ if (ret == KErrNone)
+ {
+ if (mServiceRequest->send())
+ {
+ mCurrentRequestType = ShowUpdates;
+ }
+ else
+ {
+ mObserver.UpdateComplete(ret,NULL);
+ }
+ }
}
// -----------------------------------------------------------------------------
-// RIAUpdateClient::UpdateQuery
+// IAUpdateClient::updateQuery
//
// -----------------------------------------------------------------------------
//
-TInt RIAUpdateClient::UpdateQuery( TBool& aUpdateNow, TRequestStatus& aStatus )
+void IAUpdateClient::updateQuery()
+{
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::updateQuery() begin");
+ QString message("updateQuery(QString)");
+ CIAUpdateParameters* nullParameters = NULL;
+ int ret = initRequest(nullParameters, message, false);
+ if (ret == KErrNone)
{
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::UpdateQuery() begin");
- TPckg<TBool> updateNow( aUpdateNow );
- iPtr1.Set( updateNow );
-
- TIpcArgs args;
- args.Set( 1, &iPtr1 );
-
- SendReceive( IAUpdateClientDefines::EIAUpdateServerShowUpdateQuery,
- args,
- aStatus );
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::UpdateQuery() begin");
- return KErrNone;
+ if (mServiceRequest->send())
+ {
+ mCurrentRequestType = UpdateQuery;
+ }
+ else
+ {
+ mObserver.UpdateQueryComplete(ret,false);
+ }
}
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::updateQuery() end");
+}
// -----------------------------------------------------------------------------
-// RIAUpdateClient::BroughtToForeground
+// IAUpdateClient::update
+//
+// -----------------------------------------------------------------------------
+//
+void IAUpdateClient::update()
+{
+ mObserver.UpdateComplete(KErrNotSupported,NULL);
+}
+
+// -----------------------------------------------------------------------------
+// IAUpdateClient::broughtToForeground
//
// -----------------------------------------------------------------------------
//
-void RIAUpdateClient::BroughtToForeground()
+void IAUpdateClient::broughtToForeground()
+{
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::broughtToForeground() begin");
+ if (mServiceRequest)
{
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::BroughtToForeground() begin");
- if ( iConnected )
+ QString message("broughtToForeground(int)");
+ CIAUpdateParameters* nullParameters = NULL;
+ int ret = initRequest(nullParameters, message, false);
+ if (ret == KErrNone)
{
- SendReceive( IAUpdateClientDefines::EIAUpdateServerToForeground );
+ if (mServiceRequest->send())
+ {
+ mCurrentRequestType = BroughtToForeground;
+ }
}
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::BroughtToForeground() end");
- }
-
+ }
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::broughtToForeground() end");
+}
// -----------------------------------------------------------------------------
-// RIAUpdateClient::CancelAsyncRequest
-//
-// -----------------------------------------------------------------------------
-//
-void RIAUpdateClient::CancelAsyncRequest()
- {
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::CancelAsyncRequest() begin");
- // We suppose that an active object will
- // wait for the cancellation to complete.
- // So, let the server know that operation is cancelled.
- // The server should set the correct status and complete
- // the request of the active object. So, the cancellation
- // can proceed to the end.
- if ( iConnected )
- {
- SendReceive( IAUpdateClientDefines::EIAUpdateServerCancel );
- }
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::CancelAsyncRequest() end");
- }
-
-
-
-// -----------------------------------------------------------------------------
-// RIAUpdateClient::ServiceUid()
-//
-// -----------------------------------------------------------------------------
-//
-TUid RIAUpdateClient::ServiceUid() const
- {
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::ServiceUid()");
- return IAUpdateClientDefines::KIAUpdateServiceUid;
- }
-
-// -----------------------------------------------------------------------------
-// RIAUpdateClient::SendCheckUpdatesRequest
+// IAUpdateClient::requestCompleted
//
// -----------------------------------------------------------------------------
//
-TInt RIAUpdateClient::SendCheckUpdatesRequest( TInt aUpdateFunction,
- const CIAUpdateParameters& aUpdateParameters,
- TInt& aCount,
- TRequestStatus& aStatus )
+void IAUpdateClient::requestCompleted(const QVariant& value)
+{
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::requestCompleted() begin");
+ RequestType requestType = mCurrentRequestType;
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::requestCompleted()request type: %d", requestType );
+ QList<QVariant> resultlist = value.toList();
+ int errorCode = resultlist.at(0).toInt();
+ CIAUpdateResult* updateResult(NULL);
+
+ if ( requestType == ShowUpdates )
{
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::SendCheckUpdatesRequest() begin");
-
- aStatus = KRequestPending;
-
- delete iData;
- iData = NULL;
-
- TInt error( KErrNone );
- TRAP( error,
- IAUpdateTools::ExternalizeParametersL( iData,
- aUpdateParameters ) );
- IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", error );
+ // Update result object is required.
+ // Notice that the ownership is transferred later.
+ // So, this function does not need to delete updateResult object.
+ TRAPD( trapError, updateResult = CIAUpdateResult::NewL() );
+ if ( updateResult )
+ {
+ updateResult->SetSuccessCount(resultlist.at(1).toInt());
+ updateResult->SetFailCount(resultlist.at(2).toInt());
+ updateResult->SetCancelCount(resultlist.at(3).toInt());
+ }
+ else
+ {
+ // Something went wrong when creating update result object.
+ // Update the error code accordingly.
+ errorCode = trapError;
+ }
+ // Let's assume that connection is not needed anymore
+ if (mServiceRequest)
+ {
+ delete mServiceRequest;
+ mServiceRequest= NULL;
+ }
+ }
+
+ // Inform that no operation is going on anymore.
+ // This is required for busy check.
+ mCurrentRequestType = NoOperation;
+
+ // Use the request type of the ongoing operation to check what callback
+ // function to call.
+ int countOfUpdates = 0;
+ bool updateNow = false;
+ switch (requestType)
+ {
+ case CheckUpdates:
+ countOfUpdates = resultlist.at(1).toInt();
+ if (countOfUpdates == 0)
+ {
+ // Let's assume that connection is not needed anymore
+ delete mServiceRequest;
+ mServiceRequest= NULL;
+ }
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::requestCompleted() count of updates: %d", countOfUpdates );
+ mObserver.CheckUpdatesComplete(errorCode, countOfUpdates);
+ break;
- // Because this function does not leave,
- // use error value to check if request can be done.
- if ( error == KErrNone )
+ case ShowUpdates:
+ // Notice that ownership of result object is transferred here.
+ IAUPDATE_TRACE_3("[IAUPDATE] IAUpdateClient::requestCompleted() success count: %d failed count: %d cancelled count: %d", updateResult->SuccessCount(), updateResult->FailCount(), updateResult->CancelCount() );
+ mObserver.UpdateComplete(errorCode, updateResult);
+ break;
+
+ case UpdateQuery:
+ updateNow = resultlist.at(1).toBool();
+ if ( !updateNow )
{
- TPckg<TInt> count( aCount );
- iPtr1.Set( count );
-
- TIpcArgs args;
- args.Set( 0, iData );
- args.Set( 1, &iPtr1 );
-
- // Start the asynchronous operation in the server side.
- SendReceive( aUpdateFunction, args, aStatus );
- }
-
- // Inform the caller about the success of the request initializing.
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::SendCheckUpdatesRequest() begin");
- return error;
+ // Let's assume that connection is not needed anymore
+ delete mServiceRequest;
+ mServiceRequest= NULL;
+ }
+ IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::requestCompleted() update now: %d", updateNow );
+ mObserver.UpdateQueryComplete(errorCode, updateNow);
+ break;
+
+ default:
+ // Should not ever come here.
+ break;
}
+
+ // Do not anything else than return after callback function is called because
+ // this instance can be deleted by a client in a callback function
+ //
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::requestCompleted() end");
+}
// -----------------------------------------------------------------------------
-// RIAUpdateClient::SendUpdateRequest
+// IAUpdateClient::requestError
//
// -----------------------------------------------------------------------------
//
-TInt RIAUpdateClient::SendUpdateRequest( TInt aUpdateFunction,
- const CIAUpdateParameters& aUpdateParameters,
- TInt& aNumberOfSuccessfullUpdates,
- TInt& aNumberOfFailedUpdates,
- TInt& aNumberOfCancelledUpdates,
- TRequestStatus& aStatus )
- {
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::SendUpdateRequest() begin");
- aStatus = KRequestPending;
-
- delete iData;
- iData = NULL;
-
- TInt error( KErrNone );
- TRAP( error,
- IAUpdateTools::ExternalizeParametersL( iData,
- aUpdateParameters ) );
- IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", error );
- // Because this function does not leave,
- // use error value to check if request can be done.
- if ( error == KErrNone )
+void IAUpdateClient::requestError(int /*err*/)
+{
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::requestError() begin");
+ if ( mServiceRequest)
{
- TPckg<TInt> successCount( aNumberOfSuccessfullUpdates );
- iPtr1.Set( successCount );
-
- TPckg<TInt> failCount( aNumberOfFailedUpdates );
- iPtr2.Set( failCount );
+ delete mServiceRequest;
+ mServiceRequest= NULL;
+ }
+ RequestType requestType = mCurrentRequestType;
+ mCurrentRequestType = NoOperation;
+ // because this method is called also when iaupdate is closed normally, error code is not passed to a client
+ CIAUpdateResult* updateResult(NULL);
+ switch (requestType)
+ {
+ case CheckUpdates:
+ mObserver.CheckUpdatesComplete(0, 0);
+ break;
- TPckg<TInt> cancelCount( aNumberOfCancelledUpdates );
- iPtr3.Set( cancelCount );
-
- TIpcArgs args;
- args.Set( 0, iData );
- args.Set( 1, &iPtr1 );
- args.Set( 2, &iPtr2 );
- args.Set( 3, &iPtr3 );
-
- // Start the asynchronous operation in the server side.
- SendReceive( aUpdateFunction, args, aStatus );
- }
-
- // Inform the caller about the success of the request initializing.
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::SendUpdateRequest() end");
- return error;
- }
+ case ShowUpdates:
+ // Notice that ownership of result object is transferred here.
+ TRAP_IGNORE( updateResult = CIAUpdateResult::NewL() );
+ mObserver.UpdateComplete(0, updateResult);
+ break;
+
+ case UpdateQuery:
+ mObserver.UpdateQueryComplete(0, false);
+ break;
+
+ default:
+ // Should not ever come here.
+ break;
+ }
+ IAUPDATE_TRACE("[IAUPDATE] IAUpdateClient::requestError() end");
+}
// -----------------------------------------------------------------------------
-// RIAUpdateClient::StartNewAppToBackgroundL
+// IAUpdateClient::qStringFromTDesC16
//
// -----------------------------------------------------------------------------
//
-void RIAUpdateClient::StartNewAppToBackgroundL( TUid aAppUid, TRequestStatus& aStatus )
- {
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::StartNewAppToBackgroundL() begin");
- TName notUsed;
- iDifferentiator = GenerateServerDifferentiatorAndName(notUsed, aAppUid);
-
- RApaLsSession apa;
- User::LeaveIfError(apa.Connect());
- CleanupClosePushL(apa);
-
- TApaAppInfo info;
- User::LeaveIfError(apa.GetAppInfo(info, aAppUid));
-
- CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
- cmdLine->SetExecutableNameL(info.iFullName);
- cmdLine->SetServerRequiredL( iDifferentiator );
- cmdLine->SetCommandL(EApaCommandBackground);
-
- TThreadId notUsedId;
- User::LeaveIfError(apa.StartApp(*cmdLine, notUsedId, &aStatus));
-
- CleanupStack::PopAndDestroy(2, &apa); // cmdLine and apa
- IAUPDATE_TRACE("[IAUPDATE] RIAUpdateClient::StartNewAppToBackgroundL() end");
- }
+QString IAUpdateClient::qStringFromTDesC16( const TDesC16& aDes16 )
+{
+ return QString::fromUtf16( aDes16.Ptr(), aDes16.Length() );
+}
+
+// -----------------------------------------------------------------------------
+// IAUpdateClient::qStringFromTDesC8
+//
+// -----------------------------------------------------------------------------
+//
+QString IAUpdateClient::qStringFromTDesC8( const TDesC8& aDes8 )
+{
+ return QString::fromUtf8( reinterpret_cast<const char*>( aDes8.Ptr() ), aDes8.Length() );
+}
+
+// -----------------------------------------------------------------------------
+// IAUpdateClient::qStringFromTDesC
+//
+// -----------------------------------------------------------------------------
+//
+QString IAUpdateClient::qStringFromTDesC( const TDesC& aDes )
+{
+#if defined(_UNICODE)
+ return qStringFromTDesC16( aDes );
+#else
+ return qStringFromTDesC8( aDes );
+#endif
+}
-void RIAUpdateClient::ServerName(TName& aServerName, TUid aAppServerUid, TUint aServerDifferentiator)
- {
- _LIT(KServerNameFormat, "%08x_%08x_AppServer");
- aServerName.Format(KServerNameFormat, aServerDifferentiator, aAppServerUid);
- }
-
-TUint RIAUpdateClient::GenerateServerDifferentiatorAndName(TName& aServerName, TUid aAppServerUid)
- {
- TUint r;
- FOREVER
- {
- r = Math::Random();
- if (r==0)
- continue;
- ServerName(aServerName, aAppServerUid, r);
- TFindServer find(aServerName);
- TFullName fullName;
- if (find.Next(fullName) == KErrNone)
- continue;
- break;
- }
- return r;
- }