/*
* Copyright (c) 2010 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:
*
*
*/
// SYSTEM INCLUDES
#include <pathinfo.h>
#include <f32file.h>
#include <hbmessagebox.h>
// USER INCLUDES
#include "ringbc_p.h"
#include "ringbctoneconverter.h"
#include <xqconversions.h>
#include "debugtraces.h"
//CONSTANTS
_LIT(KRingingToneFileExtension,".rng");
// ----------------------------------------------------------------------------
// RingBcPrivate::RingBcPrivate
// @see ringbc_p.h
// ----------------------------------------------------------------------------
RingBcPrivate::RingBcPrivate()
{
QDEBUG_WRITE("RingBcPrivate::RingBcPrivate : Enter")
initL();
QDEBUG_WRITE("RingBcPrivate::RingBcPrivate : Exit")
}
// ----------------------------------------------------------------------------
// RingBcPrivate::~RingBcPrivate
// @see ringbc_p.h
// ----------------------------------------------------------------------------
RingBcPrivate::~RingBcPrivate()
{
QDEBUG_WRITE("RingBcPrivate::~RingBcPrivate : Enter")
delete mConverter;
QDEBUG_WRITE("RingBcPrivate::~RingBcPrivate : Exit")
}
// ----------------------------------------------------------------------------
// RingBcPrivate::initL
// @see ringbc_p.h
// ----------------------------------------------------------------------------
void RingBcPrivate::initL()
{
QDEBUG_WRITE("RingBcPrivate::initL : Enter")
mConverter = RingBCNSMConverter::NewL();
QDEBUG_WRITE("RingBcPrivate::initL : Exit")
}
// ----------------------------------------------------------------------------
// RingBcPrivate::saveTone
// @see ringbc_p.h
// ----------------------------------------------------------------------------
void RingBcPrivate::saveTone(const QString &path)
{
QDEBUG_WRITE("RingBcPrivate::saveTone : Enter")
int error(KErrNone);
TRAP(error, saveToneL(path));
if (error)
{
QDEBUG_WRITE_FORMAT("RingBcPrivate::saveTone Error code =",error)
if(error == KErrCorrupt)
{
HbMessageBox::information("Ringing Tone Corrupted", 0, 0, HbMessageBox::Ok);
QDEBUG_WRITE("RingBcPrivate::saveTone : Ringing tone corrupted")
}
else if(error == KErrNoMemory || error == KErrDiskFull)
{
HbMessageBox::information("No memory to save", 0, 0, HbMessageBox::Ok);
QDEBUG_WRITE("RingBcPrivate::saveTone : Low memory")
}
else
{
HbMessageBox::information("Error in Saving", 0, 0, HbMessageBox::Ok);
QDEBUG_WRITE("RingBcPrivate::saveTone : Error in Saving")
}
}
else
{
HbMessageBox::information("Saved succesfully", 0, 0, HbMessageBox::Ok);
QDEBUG_WRITE("RingBcPrivate::saveTone : Ringing tone saved successfully")
}
QDEBUG_WRITE("RingBcPrivate::saveTone : Exit")
}
// ----------------------------------------------------------------------------
// RingBcPrivate::saveToneL
// @see ringbc_p.h
// ----------------------------------------------------------------------------
void RingBcPrivate::saveToneL(const QString& path)
{
QDEBUG_WRITE("RingBcPrivate::saveToneL : Enter")
QStringList pathList = path.split(".");
QString extension = QString(".") + pathList.at(pathList.count() - 1);
RFs fsSession;
User::LeaveIfError(fsSession.Connect());
CleanupClosePushL(fsSession);
HBufC* fileName = XQConversions::qStringToS60Desc(path);
RFile file;
User::LeaveIfError(file.Open(fsSession, fileName->Des(),
EFileShareReadersOnly));
CleanupClosePushL(file);
TInt size;
User::LeaveIfError(file.Size(size));
HBufC8* dataBuf = HBufC8::NewLC(size);
TPtr8 data(dataBuf->Des());
User::LeaveIfError(file.Read(data, size));
TBool valid = mConverter->IsRingToneMimeTypeL(data);
if (valid)
{
HBufC* title = mConverter->TitleLC(data);
TFileName path = PathInfo::PhoneMemoryRootPath();
path.Append(PathInfo::SimpleSoundsPath());
path.Append(*title);
HBufC* fileExtension = XQConversions::qStringToS60Desc(extension);
path.Append(fileExtension->Des());
CFileMan* fileMan = CFileMan::NewL(fsSession);
CleanupStack::PushL(fileMan);
if(fileMan)
{
TInt err = fileMan->Copy(fileName->Des(), path, CFileMan::ECopy | CFileMan::EOverWrite);
User::LeaveIfError(err);
}
CleanupStack::PopAndDestroy(2); // title,fileMan
}
else
{
User::Leave(KErrCorrupt);
}
CleanupStack::PopAndDestroy(); // dataBuf
CleanupStack::PopAndDestroy(); //file
CleanupStack::PopAndDestroy(); //fsSession
QDEBUG_WRITE("RingBcPrivate::saveToneL : Exit")
}
// ----------------------------------------------------------------------------
// RingBcPrivate::toneTitle
// @see ringbc_p.h
// ----------------------------------------------------------------------------
QString RingBcPrivate::toneTitle(const QString &path)
{
QDEBUG_WRITE("RingBcPrivate::toneTitle : Enter")
QString title;
QStringList pathList = path.split(".");
QString extension = pathList.at(pathList.count() - 1);
HBufC* fileName = XQConversions::qStringToS60Desc(path);
TRAPD(err, title = titleL(*fileName));
if(err == KErrNone)
{
title.append(QChar('.'));
title.append(extension);
}
QDEBUG_WRITE("RingBcPrivate::toneTitle : Exit")
return title;
}
// ----------------------------------------------------------------------------
// RingBcPrivate::titleL
// @see ringbc_p.h
// ----------------------------------------------------------------------------
QString RingBcPrivate::titleL(const TDesC& aFileName)
{
QDEBUG_WRITE("RingBcPrivate::titleL : Enter")
QString title; // initialize to null string
RFs fsSession;
TInt error = fsSession.Connect();
if (error == KErrNone)
{
CleanupClosePushL(fsSession);
RFile file;
error = file.Open(fsSession, aFileName, EFileRead);
if (error == KErrNone)
{
CleanupClosePushL(file);
TInt size;
User::LeaveIfError(file.Size(size));
if (size)
{
HBufC8* dataBuf = HBufC8::NewLC(size);
TPtr8 data(dataBuf->Des());
User::LeaveIfError(file.Read(data, size));
TBool valid = mConverter->IsRingToneMimeTypeL(data);
if (valid)
{
HBufC* toneTitle = mConverter->TitleLC(data);
title = XQConversions::s60DescToQString(*toneTitle);
CleanupStack::PopAndDestroy(); //tonetitle
}
else
{
User::Leave(KErrCorrupt);
}
CleanupStack::PopAndDestroy(); //dataBuf
}
CleanupStack::PopAndDestroy(); //file
}
CleanupStack::PopAndDestroy(); //fsSession
}
QDEBUG_WRITE("RingBcPrivate::titleL : Exit")
return title;
}
// End of File