musicservices/src/playmusicservice.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 03 May 2010 12:29:20 +0300
changeset 22 ecf06a08d4d9
child 29 8192e5b5c935
permissions -rw-r--r--
Revision: 201015 Kit: 201018

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/

#include <hbapplication.h>
#include <qstringlist.h>

#include "musicservices.h"
#include "playmusicservice.h"
#include "mptrace.h"




/*!
 Constructs play music service
 */
PlayMusicService::PlayMusicService( MusicServices* parent )
: XQServiceProvider(QLatin1String("musicplayer.com.nokia.symbian.IFileView"), parent),
  mRequestIndex( 0 ),
  mServiceApp( parent )
{
    TX_ENTRY
    publishAll();
    TX_EXIT
}

/*!
 Destructs play music service
 */
PlayMusicService::~PlayMusicService()
{
    TX_LOG
}


/*!
 Returns whether current service is still active
 */
bool PlayMusicService::isActive()
{
    return mRequestIndex > 0;
}

/*!
 Completes current request 
 */
void PlayMusicService::complete(QStringList filesList)
{   TX_ENTRY_ARGS("EmbeddeddoComplete: ");
    if ( isActive() ) {
        TX_ENTRY_ARGS("EmbeddeddoComplete2: ");
        connect(this, SIGNAL(returnValueDelivered()), qApp, SLOT(quit()));
        completeRequest(mRequestIndex, filesList);
        mRequestIndex=0;
    }
}

/*!
 Returns title of calling application
 */
QString PlayMusicService::contextTitle() const
{
    return mTitle;
}

/*!
    Embedded Playback service interface defined in service registration xml.

    Example usage:
    
    QFile file("c:\\audio.mp3");

    mReq = mAppMgr.create(file);
    if (mReq == NULL)
    {
           // No handlers for the URI
           return;
     }
    // By default operation is "view(QString)"

    // Set function parameters
   QList<QVariant> args;
   args << file.fileName();
   mReq->setArguments(args);
   QString title("WindowTitle");
   QVariant title2(QString("<app_name>View"));
   XQRequestInfo info;
   info.setInfo(title, title2);
   mReq->setInfo(info);
   // Send the request
   bool res = mReq->send();
   if  (!res) 
   {
       // Request failed. 
      int error = mReq->lastError();

      // Handle error
   }
 
   // If making multiple requests to same service, you can save the request as member variable
   // In this example all done.
   delete mReq;
 */

bool PlayMusicService::view(const QString& file)
{
    TX_ENTRY
	QString uri(file);
    uri.replace(QString("/"),QString("\\"));
    mTitle = requestInfo().info("WindowTitle").toString();
    mServiceApp->setCurrentService( MusicServices::EPlayback );
    TUid uid = TUid::Uid(requestInfo().clientSecureId()); 
    emit mServiceApp->serviceActive( uid );
    emit mServiceApp->playReady( uri );
    connect(this, SIGNAL( clientDisconnected() ), qApp, SLOT( quit() ) );
    mRequestIndex = setCurrentRequestAsync();
    
    return true;
    
}

/*!
    Embedded Playback service interface defined in service registration xml.

    Example usage:
    
   XQSharableFile sf;
    if (!sf.open("c:\\audio.mp3"))
    {
        // Failed to open sharable file
        return;
    }

    // Create request for the sharable file
    mReq = mAppMgr.create(sf);
    if (!mReq)
    {
         // No viewer app found for the file
         // As we opened the handle, we need to close it !
         sf.close(); 
         return;  
    }
    // By default operation is "view(XQSharableFile)"

    // Set function parameters
    // Not only one sharable handle supported,  otherwise upon send EArgumentError error occurs
    QList<QVariant> args;
    args << qVariantFromValue(sf);  
    mReq->setArguments(args);
    QString title("WindowTitle");
   QVariant title2(QString("<app_name>"));
   XQRequestInfo info;
   info.setInfo(title, title2);
   mReq->setInfo(info);
   // Send the request
   bool res = mReq->send();
   if  (!res) 
   {
       // Request failed. 
      int error = mReq->lastError();
      // Handle error
   }

    // As we opened the handle, we need to close it !
    sf.close(); 

   // If making multiple requests to same service, you can save the mReq as member variable
   // In this example all done.
   delete mReq;
 */
bool PlayMusicService::view(const XQSharableFile& file)
{
    TX_ENTRY
    mTitle = requestInfo().info("WindowTitle").toString();
    mServiceApp->setCurrentService( MusicServices::EPlayback );
    TUid uid = TUid::Uid(requestInfo().clientSecureId()); 
    emit mServiceApp->serviceActive( uid );
    emit mServiceApp->playReady( file );
    connect(this, SIGNAL( clientDisconnected() ), qApp, SLOT( quit() ) );
    mRequestIndex = setCurrentRequestAsync();
    return true;
}