messagingapp/smartmessaging/ringbc/src/ringbc_p.cpp
changeset 23 238255e8b033
child 27 e4592d119491
child 37 518b245aa84c
equal deleted inserted replaced
5:4697dfb2d7ad 23:238255e8b033
       
     1 /*
       
     2  * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3  * All rights reserved.
       
     4  * This component and the accompanying materials are made available
       
     5  * under the terms of "Eclipse Public License v1.0"
       
     6  * which accompanies this distribution, and is available
       
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8  *
       
     9  * Initial Contributors:
       
    10  * Nokia Corporation - initial contribution.
       
    11  *
       
    12  * Contributors:
       
    13  *
       
    14  * Description:  
       
    15  *     A class which takes care of reading the possible new
       
    16  *     service centres from SIM and adds them to pda-side Sms Settings.
       
    17  *
       
    18  */
       
    19 
       
    20 // SYSTEM INCLUDES
       
    21 #include <pathinfo.h>
       
    22 #include <f32file.h>
       
    23 #include <hbmessagebox.h>
       
    24 
       
    25 // USER INCLUDES
       
    26 #include "ringbc_p.h"
       
    27 #include "ringbctoneconverter.h"
       
    28 #include "s60qconversions.h"
       
    29 #include "debugtraces.h"
       
    30 
       
    31 //CONSTANTS 
       
    32 _LIT(KRingingToneFileExtension,".rng");
       
    33 
       
    34 
       
    35 // ----------------------------------------------------------------------------
       
    36 // RingBcPrivate::RingBcPrivate
       
    37 // @see ringbc_p.h
       
    38 // ----------------------------------------------------------------------------
       
    39 RingBcPrivate::RingBcPrivate()
       
    40 
       
    41     {
       
    42     QDEBUG_WRITE("RingBcPrivate::RingBcPrivate : Enter")
       
    43 
       
    44     TRAP_IGNORE(initL());
       
    45 
       
    46     QDEBUG_WRITE("RingBcPrivate::RingBcPrivate : Exit")
       
    47 
       
    48     }
       
    49 
       
    50 // ----------------------------------------------------------------------------
       
    51 // RingBcPrivate::~RingBcPrivate
       
    52 // @see ringbc_p.h
       
    53 // ----------------------------------------------------------------------------
       
    54 RingBcPrivate::~RingBcPrivate()
       
    55     {
       
    56     QDEBUG_WRITE("RingBcPrivate::~RingBcPrivate : Enter")
       
    57     
       
    58     delete mConverter;
       
    59     
       
    60     QDEBUG_WRITE("RingBcPrivate::~RingBcPrivate : Exit")
       
    61     }
       
    62 
       
    63 // ----------------------------------------------------------------------------
       
    64 // RingBcPrivate::initL
       
    65 // @see ringbc_p.h
       
    66 // ----------------------------------------------------------------------------
       
    67 void RingBcPrivate::initL()
       
    68     {
       
    69     QDEBUG_WRITE("RingBcPrivate::initL : Enter")
       
    70     
       
    71     mConverter = RingBCNSMConverter::NewL();
       
    72     
       
    73     QDEBUG_WRITE("RingBcPrivate::initL : Exit")
       
    74     }
       
    75 
       
    76 // ----------------------------------------------------------------------------
       
    77 // RingBcPrivate::saveTone
       
    78 // @see ringbc_p.h
       
    79 // ----------------------------------------------------------------------------
       
    80 void RingBcPrivate::saveTone(const QString &path)
       
    81     {
       
    82     QDEBUG_WRITE("RingBcPrivate::saveTone : Enter")
       
    83     
       
    84     int error(KErrNone);
       
    85     HBufC* fileName = S60QConversions::qStringToS60Desc(path);
       
    86     TRAP(error, error = saveToneL(*fileName));
       
    87     if(error)
       
    88         {
       
    89         QDEBUG_WRITE_FORMAT("RingBcPrivate::saveTone Error code =",error)
       
    90         
       
    91         if(error == KErrCorrupt)
       
    92             {
       
    93             HbMessageBox::information("Ringing Tone Corrupted");
       
    94             QDEBUG_WRITE("RingBcPrivate::saveTone : Ringing tone corrupted")
       
    95             }
       
    96         else if(error == KErrNoMemory || error == KErrDiskFull)
       
    97             {
       
    98             HbMessageBox::information("No memory to save");
       
    99             QDEBUG_WRITE("RingBcPrivate::saveTone : Low memory")
       
   100             }
       
   101         else
       
   102             {
       
   103             HbMessageBox::information("Error in Saving");
       
   104             QDEBUG_WRITE("RingBcPrivate::saveTone : Error in Saving")
       
   105             }
       
   106         }
       
   107     else
       
   108         {
       
   109         HbMessageBox::information("Saved succesfully");
       
   110         QDEBUG_WRITE("RingBcPrivate::saveTone : Ringing tone saved successfully")
       
   111         }
       
   112         
       
   113     delete fileName;
       
   114     
       
   115     QDEBUG_WRITE("RingBcPrivate::saveTone : Exit")
       
   116     }
       
   117     
       
   118 // ----------------------------------------------------------------------------
       
   119 // RingBcPrivate::saveToneL
       
   120 // @see ringbc_p.h
       
   121 // ----------------------------------------------------------------------------
       
   122 int  RingBcPrivate::saveToneL(const TDesC& aFileName)
       
   123     {
       
   124     QDEBUG_WRITE("RingBcPrivate::saveToneL : Enter")
       
   125     
       
   126     RFs fsSession;
       
   127     TInt error = fsSession.Connect();
       
   128     if( error == KErrNone)
       
   129         {
       
   130         CleanupClosePushL(fsSession);
       
   131 
       
   132         RFile file;
       
   133         error = file.Open(fsSession,aFileName, EFileRead);
       
   134 
       
   135         if(error == KErrNone)
       
   136             {
       
   137             CleanupClosePushL(file);
       
   138             TInt size;
       
   139             User::LeaveIfError(file.Size(size));
       
   140             if (size)
       
   141                 {
       
   142                 HBufC8* dataBuf = HBufC8::NewLC(size);
       
   143                 TPtr8 data(dataBuf->Des());
       
   144                 User::LeaveIfError(file.Read(data, size));             
       
   145              
       
   146                 TBool valid = mConverter->IsRingToneMimeTypeL(data);
       
   147                 if(valid)
       
   148                     {
       
   149                     HBufC* title = mConverter->TitleLC(data);
       
   150                     TFileName path = PathInfo::PhoneMemoryRootPath();
       
   151                     path.Append( PathInfo::SimpleSoundsPath() );
       
   152                     path.Append(*title);
       
   153                     path.Append(KRingingToneFileExtension);
       
   154 
       
   155                     CFileMan* fileMan = CFileMan::NewL(fsSession);
       
   156                     CleanupStack::PushL( fileMan );
       
   157                     error = fileMan->Copy( file, path );
       
   158                     CleanupStack::PopAndDestroy(2); // title,fileMan        
       
   159                     }
       
   160                 else 
       
   161                     {
       
   162                     error = KErrCorrupt;
       
   163                     }
       
   164                 CleanupStack::PopAndDestroy(); // dataBuf      
       
   165                 }   
       
   166             CleanupStack::PopAndDestroy(); //file
       
   167             }
       
   168         CleanupStack::PopAndDestroy(); //fsSession
       
   169         }
       
   170     
       
   171     QDEBUG_WRITE("RingBcPrivate::saveToneL : Exit")
       
   172     return error;
       
   173     }
       
   174 
       
   175 // ----------------------------------------------------------------------------
       
   176 // RingBcPrivate::toneTitle
       
   177 // @see ringbc_p.h
       
   178 // ----------------------------------------------------------------------------
       
   179  QString RingBcPrivate::toneTitle(const QString &path)
       
   180      {
       
   181      QDEBUG_WRITE("RingBcPrivate::toneTitle : Enter")
       
   182      
       
   183      QString title; 
       
   184      HBufC* fileName = S60QConversions::qStringToS60Desc(path);
       
   185      TRAP_IGNORE( title = titleL(*fileName));
       
   186      
       
   187      QDEBUG_WRITE("RingBcPrivate::toneTitle : Exit")
       
   188      return title;         
       
   189      }
       
   190 
       
   191  // ----------------------------------------------------------------------------
       
   192  // RingBcPrivate::titleL
       
   193  // @see ringbc_p.h
       
   194  // ----------------------------------------------------------------------------
       
   195  QString RingBcPrivate::titleL(const TDesC& aFileName)
       
   196      {
       
   197      QDEBUG_WRITE("RingBcPrivate::titleL : Enter")
       
   198      
       
   199      QString title; // initialize to null string
       
   200      RFs fsSession;
       
   201      TInt error = fsSession.Connect();
       
   202      if( error == KErrNone)
       
   203          {
       
   204          CleanupClosePushL(fsSession);
       
   205 
       
   206          RFile file;
       
   207          error = file.Open(fsSession,aFileName, EFileRead);
       
   208         
       
   209          if(error == KErrNone)
       
   210              {
       
   211              CleanupClosePushL(file);
       
   212              TInt size;
       
   213              User::LeaveIfError(file.Size(size));
       
   214              if (size)
       
   215                  {
       
   216                  HBufC8* dataBuf = HBufC8::NewLC(size);
       
   217                  TPtr8 data(dataBuf->Des());
       
   218                  User::LeaveIfError(file.Read(data, size));             
       
   219 
       
   220                  TBool valid = mConverter->IsRingToneMimeTypeL(data);
       
   221                  if(valid)
       
   222                      {
       
   223                      HBufC* toneTitle = mConverter->TitleLC(data);
       
   224                      title = S60QConversions::s60DescToQString(*toneTitle);
       
   225                      CleanupStack::PopAndDestroy(); //title
       
   226                      }
       
   227                  CleanupStack::PopAndDestroy(); //dataBuf
       
   228                  }
       
   229              CleanupStack::PopAndDestroy(); //file
       
   230              }
       
   231          CleanupStack::PopAndDestroy(); //fsSession
       
   232          }
       
   233      QDEBUG_WRITE("RingBcPrivate::titleL : Exit")
       
   234      return title;           
       
   235      }
       
   236  
       
   237 //  End of File