phonebookengines/cntsimutility/src/cntsimutility.cpp
changeset 46 efe85016a067
parent 40 b46a585f6909
child 66 554fe4dbbb59
equal deleted inserted replaced
40:b46a585f6909 46:efe85016a067
    16 */
    16 */
    17 #include "cntsimutility.h"
    17 #include "cntsimutility.h"
    18 #include <mmtsy_names.h>
    18 #include <mmtsy_names.h>
    19 #include <startupdomainpskeys.h>
    19 #include <startupdomainpskeys.h>
    20 #include <e32property.h>
    20 #include <e32property.h>
       
    21 #include <centralrepository.h>
       
    22 
       
    23 // Number of keys used in central repository to keep latest import date
       
    24 // from SIM card: 5 IMSI strings and 5 dates. 
       
    25 const int KCenRepKeysNumber = 10; 
       
    26 const int KIMSISize = 15;
       
    27 const int KCenRepUid = 0x200315A8;
    21 
    28 
    22 CntSimUtility::CntSimUtility(StoreType type, int& error, QObject *parent)
    29 CntSimUtility::CntSimUtility(StoreType type, int& error, QObject *parent)
    23     : QObject(parent),
    30     : QObject(parent),
    24     m_etelStoreInfoPckg(m_etelStoreInfo),
    31     m_etelStoreInfoPckg(m_etelStoreInfo),
    25     m_serviceTablePckg(m_serviceTable),
    32     m_serviceTablePckg(m_serviceTable),
   163     }
   170     }
   164     TRequestStatus status;
   171     TRequestStatus status;
   165     m_etelPhone.SetFdnSetting(status, fdnStatus);
   172     m_etelPhone.SetFdnSetting(status, fdnStatus);
   166     User::WaitForRequest(status);
   173     User::WaitForRequest(status);
   167     return status.Int();
   174     return status.Int();
       
   175 }
       
   176 
       
   177 QDateTime CntSimUtility::getLastImportTime(int& error)
       
   178 {
       
   179     error = KErrNone;
       
   180     if (!isSimInserted()) {
       
   181         error = KErrAccessDenied;
       
   182         return QDateTime();
       
   183     }
       
   184     
       
   185     // get IMSI
       
   186     TBuf<KIMSISize> imsiBuf;
       
   187     TRequestStatus reqStatus;
       
   188     m_etelPhone.GetSubscriberId(reqStatus, imsiBuf);
       
   189     User::WaitForRequest(reqStatus);
       
   190     if (reqStatus.Int() != KErrNone) {
       
   191         error = reqStatus.Int();
       
   192         return QDateTime();
       
   193     }
       
   194     
       
   195     CRepository* cenrep = NULL;
       
   196     TRAPD(err, cenrep = CRepository::NewL(TUid::Uid(KCenRepUid)));
       
   197     if (err != KErrNone) {
       
   198         error = err;
       
   199         return QDateTime();
       
   200     }
       
   201     
       
   202     // find current IMSI in the stored values
       
   203     int lastImportDate = 0;
       
   204     for (int i = 1; i <= KCenRepKeysNumber; i+=2) {
       
   205         TBuf<KIMSISize> storedImsiBuf;
       
   206         if (cenrep->Get(i, storedImsiBuf) == KErrNone) {
       
   207             if (storedImsiBuf.Compare(imsiBuf) == 0) {
       
   208                 if (cenrep->Get(i+1, lastImportDate) == KErrNone) {
       
   209                     break;
       
   210                 }
       
   211             }
       
   212         }
       
   213     }
       
   214     delete cenrep;
       
   215     cenrep = NULL;
       
   216     
       
   217     if (lastImportDate == 0) {
       
   218         error = KErrNotFound;
       
   219         return QDateTime();
       
   220     }
       
   221     
       
   222     QDateTime retLastImportDate;
       
   223     retLastImportDate.setTime_t(lastImportDate);
       
   224     return retLastImportDate;
       
   225 }
       
   226 
       
   227 void CntSimUtility::setLastImportTime(int& error)
       
   228 {
       
   229     error = KErrNone;
       
   230     if (!isSimInserted()) {
       
   231         error = KErrAccessDenied;
       
   232         return;
       
   233     }
       
   234     
       
   235     // get IMSI
       
   236     TBuf<KIMSISize> imsiBuf;
       
   237     TRequestStatus reqStatus;
       
   238     m_etelPhone.GetSubscriberId(reqStatus, imsiBuf);
       
   239     User::WaitForRequest(reqStatus);
       
   240     if (reqStatus.Int() != KErrNone) {
       
   241         error = reqStatus.Int();
       
   242         return;
       
   243     }
       
   244     
       
   245     CRepository* cenrep = NULL;
       
   246     TRAPD(err, cenrep = CRepository::NewL(TUid::Uid(KCenRepUid)));
       
   247     if (err != KErrNone) {
       
   248         error = err;
       
   249         return;
       
   250     }
       
   251      
       
   252     // find current IMSI in the stored values
       
   253     int lastImportDate = QDateTime::currentDateTime().toTime_t();
       
   254     bool importDateUpdated = false;
       
   255     for (int i = 1; i <= KCenRepKeysNumber; i+=2) {
       
   256         TBuf<KIMSISize> storedImsiBuf;
       
   257         if (cenrep->Get(i, storedImsiBuf) == KErrNone) {
       
   258             if (storedImsiBuf.Compare(imsiBuf) == 0) {
       
   259                 //current IMSI already stored, update import date
       
   260                 if (cenrep->Set(i+1, lastImportDate) != KErrNone) {
       
   261                     error = KErrAccessDenied;
       
   262                 }
       
   263                 importDateUpdated = true;
       
   264                 break;
       
   265             }
       
   266         }
       
   267     }
       
   268     
       
   269     if (!importDateUpdated) {
       
   270         int oldestDate = 0;
       
   271         int key = 0;
       
   272         // contacts were not imported from this SIM before,
       
   273         // find oldest import date and replace it
       
   274         for (int j = 2; j <= KCenRepKeysNumber; j+=2) {
       
   275             int date;
       
   276             if (cenrep->Get(j, date) == KErrNone) {
       
   277                 if (date >= oldestDate ) {
       
   278                     oldestDate = date;
       
   279                     key = j;
       
   280                 }
       
   281             }
       
   282         }
       
   283     
       
   284         if (key == 0) {
       
   285             error = KErrAccessDenied;
       
   286         }
       
   287         else {
       
   288             if (cenrep->Set(key, lastImportDate) != KErrNone) {
       
   289                 error = KErrAccessDenied;
       
   290             }
       
   291             if (cenrep->Set(key-1, imsiBuf) != KErrNone) {
       
   292                 error = KErrAccessDenied;
       
   293             }
       
   294         }
       
   295     }
       
   296     
       
   297     delete cenrep;
       
   298     cenrep = NULL;
   168 }
   299 }
   169 
   300 
   170 bool CntSimUtility::startGetSimInfo()
   301 bool CntSimUtility::startGetSimInfo()
   171 {
   302 {
   172     if(m_asyncWorker->IsActive()) {
   303     if(m_asyncWorker->IsActive()) {