locationtriggering/ltcontainer/src/lbtdbtriggersmanager.cpp
branchRCL_3
changeset 44 2b4ea9893b66
parent 13 19bff11d6c18
child 45 6b6920c56e2f
equal deleted inserted replaced
42:02ba3f1733c6 44:2b4ea9893b66
   362     
   362     
   363     switch(iOperationState)
   363     switch(iOperationState)
   364         {
   364         {
   365         case EOpStateQuery:
   365         case EOpStateQuery:
   366             {
   366             {
   367             iView.FirstL();
   367              
   368             // check if view is empty, return KErrNotFound
   368             // check if view is empty, return KErrNotFound
   369             if( iView.IsEmptyL() || !iView.AtRow() )
   369             if( iView.IsEmptyL() || !iView.AtRow() || !iView.FirstL() )
   370                 {
   370                 {
   371                 CompleteClientRequest( KErrNotFound );
   371                 CompleteClientRequest( KErrNotFound );
   372                 break;
   372                 break;
   373                 }       
   373                 }       
   374             // Start iterating through all the triggers in view            
   374             // Start iterating through all the triggers in view            
   375             iOperationState = EOpStateIterating;
   375             iOperationState = EOpStateIterating;
   376             iView.FirstL();
   376                        
   377             }
   377             }
   378             // Omitting break is intentional
   378             // Omitting break is intentional
   379        case EOpStateIterating:
   379        case EOpStateIterating:
   380             {  
   380             {  
   381             TPtr sql = iSqlQuery->Des();
   381             TPtr sql = iSqlQuery->Des();
   761     switch(iOperationState)
   761     switch(iOperationState)
   762         {
   762         {
   763         case EOpStateQuery:
   763         case EOpStateQuery:
   764             {
   764             {
   765             // check if view is empty, return KErrNotFound
   765             // check if view is empty, return KErrNotFound
   766             if( iView.IsEmptyL() )
   766             if( iView.IsEmptyL() || !iView.FirstL())
   767                 {
   767                 {
   768                 CompleteClientRequest( KErrNotFound );
   768                 CompleteClientRequest( KErrNotFound );
   769                 break;
   769                 break;
   770                 }       
   770                 }       
   771             // Start iterating through all the triggers in view            
   771             // Start iterating through all the triggers in view            
   772             iOperationState = EOpStateIterating;
   772             iOperationState = EOpStateIterating;
   773             iView.FirstL();
   773            
   774             }
   774             }
   775             // Omitting break is intentional
   775             // Omitting break is intentional
   776         case EOpStateIterating:
   776         case EOpStateIterating:
   777             {            
   777             {            
   778             TUid ownerSid;
   778             TUid ownerSid;
   833                              iCountOfEnabledAndValidTrigger--;
   833                              iCountOfEnabledAndValidTrigger--;
   834                              }
   834                              }
   835                         }
   835                         }
   836                     CleanupStack::PopAndDestroy(entry);
   836                     CleanupStack::PopAndDestroy(entry);
   837                     }       
   837                     }       
   838                 iView.NextL();       
   838                  TBool res =iView.NextL();   
   839                 }
   839                  if (!res)
       
   840                  	break;
       
   841               }
   840             
   842             
   841             if( count >= KStepCount )
   843             if( count >= KStepCount )
   842                 {
   844                 {
   843                 // Self complete to process next request
   845                 // Self complete to process next request
   844                 SelfComplete();
   846                 SelfComplete();
   867     switch( iOperationState )
   869     switch( iOperationState )
   868         {
   870         {
   869         case EOpStateQuery:
   871         case EOpStateQuery:
   870             {
   872             {
   871             // check if view is empty, return KErrNotFound
   873             // check if view is empty, return KErrNotFound
   872             if( iView.IsEmptyL() )
   874             if( iView.IsEmptyL() || !iView.FirstL())
   873                 {
   875                 {
   874                 CompleteClientRequest( KErrNotFound );
   876                 CompleteClientRequest( KErrNotFound );
   875                 break;
   877                 break;
   876                 }
   878                 }
   877             
   879             
   878             // Start iterating through all the triggers in view            
   880             // Start iterating through all the triggers in view            
   879             iOperationState = EOpStateIterating;
   881             iOperationState = EOpStateIterating;
   880             iView.FirstL();
   882             
       
   883             
   881             }
   884             }
   882             // Omitting break is intentional
   885             // Omitting break is intentional
   883         case EOpStateIterating:
   886         case EOpStateIterating:
   884             {
   887             {
   885             TInt count = 0;
   888             TInt count = 0;
   922                             // TODO: Check if this will crash
   925                             // TODO: Check if this will crash
   923                             DeleteTriggerL( entry->TriggerEntry()->Id() );
   926                             DeleteTriggerL( entry->TriggerEntry()->Id() );
   924                             }
   927                             }
   925                         CleanupStack::PopAndDestroy( entry );
   928                         CleanupStack::PopAndDestroy( entry );
   926                         }
   929                         }
   927                     iView.NextL();
   930                     
       
   931                      TBool res = iView.NextL();
       
   932                       if(!res)
       
   933             	         break;
   928                     }                
   934                     }                
   929                 }
   935                 }
   930 
   936 
   931             if( !iView.AtRow() )
   937             if( !iView.AtRow() )
   932                 {
   938                 {
   980                 {
   986                 {
   981                 delete entry;
   987                 delete entry;
   982                 }
   988                 }
   983             }
   989             }
   984 
   990 
   985         iView.NextL();
   991         if(!iView.NextL())
       
   992         	break;
   986         }
   993         }
   987 
   994 
   988     if( count >= KStepCount )
   995     if( count >= KStepCount )
   989         {
   996         {
   990         // Self complete to process next request
   997         // Self complete to process next request
  1260                         User::Leave( KErrArgument );
  1267                         User::Leave( KErrArgument );
  1261                         break;
  1268                         break;
  1262                         }
  1269                         }
  1263                     }
  1270                     }
  1264                 areaBase->InternalizeL(readStream);
  1271                 areaBase->InternalizeL(readStream);
  1265                 areaArray.Append(areaBase);
  1272                 areaArray.AppendL(areaBase);
  1266                 CleanupStack::Pop(1); //areaBase                
  1273                 CleanupStack::Pop(1); //areaBase                
  1267                 }
  1274                 }
  1268             
  1275             
  1269             CLbtGeoHybrid* hybrid = CLbtGeoHybrid::NewLC(areaArray);
  1276             CLbtGeoHybrid* hybrid = CLbtGeoHybrid::NewLC(areaArray);
  1270             // Set the wlan area to the trigger
  1277             // Set the wlan area to the trigger
  1319     iCurrentOperation = EDbOpGetTriggers;
  1326     iCurrentOperation = EDbOpGetTriggers;
  1320     // Prepare view for triggers
  1327     // Prepare view for triggers
  1321     PrepareViewForTriggersL( aTriggerIds, iView );
  1328     PrepareViewForTriggersL( aTriggerIds, iView );
  1322  
  1329  
  1323     // rest of list triggers operation is in the method HandleGetTriggersEventL.
  1330     // rest of list triggers operation is in the method HandleGetTriggersEventL.
  1324     iView.FirstL();
  1331    if(!iView.FirstL())
       
  1332    {
       
  1333    	CompleteClientRequest( KErrNotFound );
       
  1334 	return;
       
  1335 	}
  1325     SelfComplete();
  1336     SelfComplete();
  1326 	}
  1337 	}
  1327 
  1338 
  1328 // ---------------------------------------------------------------------------
  1339 // ---------------------------------------------------------------------------
  1329 // List the triggers in database based on filter
  1340 // List the triggers in database based on filter
  1393 
  1404 
  1394     // Prepare view for listing
  1405     // Prepare view for listing
  1395     PrepareViewForListingL( iView );
  1406     PrepareViewForListingL( iView );
  1396     
  1407     
  1397     // rest of list triggers operation is in the method HandleListTriggersEventL.
  1408     // rest of list triggers operation is in the method HandleListTriggersEventL.
  1398     iView.FirstL();
  1409     
       
  1410 	if(!iView.FirstL())
       
  1411    {
       
  1412    	CompleteClientRequest( KErrNotFound );
       
  1413 	return;
       
  1414 	}
  1399     iFilterBase = LbtContainerUtilities::GetContainerFilterFromListOptionsLC(iFilter);
  1415     iFilterBase = LbtContainerUtilities::GetContainerFilterFromListOptionsLC(iFilter);
  1400     CleanupStack::Pop(1); // iFilterBase
  1416     CleanupStack::Pop(1); // iFilterBase
  1401     
  1417     
  1402     SelfComplete();    
  1418     SelfComplete();    
  1403     }
  1419     }
  1505     
  1521     
  1506     sql.Append( KLike );
  1522     sql.Append( KLike );
  1507     sql.AppendNum( aTriggerId );
  1523     sql.AppendNum( aTriggerId );
  1508     
  1524     
  1509     // Execute the query to delete the entry
  1525     // Execute the query to delete the entry
  1510     iDbOperation->ExecuteSyncQuery( view, sql );
  1526     TInt err =iDbOperation->ExecuteSyncQuery( view, sql );
  1511    	view.Close();
  1527     if( err != KErrNone )
  1512     }
  1528     	{
       
  1529     		LOG("err");
       
  1530     	}
       
  1531  	   	view.Close();
       
  1532        }
  1513 
  1533 
  1514 //---------------------------------------------------------------------------
  1534 //---------------------------------------------------------------------------
  1515 // CLbtDbTriggersManager::AddGeoCellIntoDbL
  1535 // CLbtDbTriggersManager::AddGeoCellIntoDbL
  1516 //---------------------------------------------------------------------------
  1536 //---------------------------------------------------------------------------
  1517 //        
  1537 //        
  1757         return;
  1777         return;
  1758         }
  1778         }
  1759 
  1779 
  1760     iIdArray.Reset();
  1780     iIdArray.Reset();
  1761     RDbView view;
  1781     RDbView view;
       
  1782      CleanupClosePushL( view );
  1762     PrepareViewForTriggersL( aTriggerIds, view );
  1783     PrepareViewForTriggersL( aTriggerIds, view );
  1763     
  1784     if(!view.FirstL())
  1764     CleanupClosePushL( view );
  1785 	   {
  1765     view.FirstL();
  1786 	     CompleteClientRequest( KErrNotFound );
       
  1787        return;
       
  1788 	   }
       
  1789    
       
  1790     
  1766     while(view.AtRow())
  1791     while(view.AtRow())
  1767         {
  1792         {
  1768         view.GetL();
  1793         view.GetL();
  1769         TLbtTriggerId triggerId = view.ColInt64(ELbtDbFieldId);
  1794         TLbtTriggerId triggerId = view.ColInt64(ELbtDbFieldId);
  1770         TInt index = aTriggerIds.Find(triggerId);
  1795         TInt index = aTriggerIds.Find(triggerId);
  1798                     view.PutL();
  1823                     view.PutL();
  1799                     
  1824                     
  1800                     TLbtTriggerModifiedInfo info;
  1825                     TLbtTriggerModifiedInfo info;
  1801                     info.iTriggerId = triggerId;
  1826                     info.iTriggerId = triggerId;
  1802                     info.iAreaType = static_cast<CLbtGeoAreaBase::TGeoAreaType>(view.ColInt8(ELbtDbTriggerAreaType));;
  1827                     info.iAreaType = static_cast<CLbtGeoAreaBase::TGeoAreaType>(view.ColInt8(ELbtDbTriggerAreaType));;
  1803                     iIdArray.Append(info);
  1828                     iIdArray.AppendL(info);
  1804                     
  1829                     
  1805                     if( currentValidity == TLbtTriggerDynamicInfo::EInvalid &&
  1830                     if( currentValidity == TLbtTriggerDynamicInfo::EInvalid &&
  1806                         aValidity == TLbtTriggerDynamicInfo::EValid)
  1831                         aValidity == TLbtTriggerDynamicInfo::EValid)
  1807                         {
  1832                         {
  1808                         iCountOfEnabledAndValidTrigger++;
  1833                         iCountOfEnabledAndValidTrigger++;
  1813                         iCountOfEnabledAndValidTrigger--;
  1838                         iCountOfEnabledAndValidTrigger--;
  1814                         }
  1839                         }
  1815                     }
  1840                     }
  1816                 }
  1841                 }
  1817             }
  1842             }
  1818         view.NextL();
  1843         if(!view.NextL())
       
  1844         	break;
  1819         }
  1845         }
  1820     CleanupStack::PopAndDestroy(); // view
  1846     CleanupStack::PopAndDestroy(); // view
  1821     User::RequestComplete( status, KErrNone );
  1847     User::RequestComplete( status, KErrNone );
  1822     }
  1848     }
  1823 
  1849 
  1851     RDbView view;
  1877     RDbView view;
  1852     PrepareViewForTriggersL( aTriggerIds, view );
  1878     PrepareViewForTriggersL( aTriggerIds, view );
  1853 
  1879 
  1854   	TBool found = EFalse;
  1880   	TBool found = EFalse;
  1855   	CleanupClosePushL( view );
  1881   	CleanupClosePushL( view );
  1856   	view.FirstL();
  1882   	
       
  1883 	if(!view.FirstL())
       
  1884 	{
       
  1885 	CompleteClientRequest( KErrNotFound );
       
  1886     return;
       
  1887 	}
  1857   	while(view.AtRow())
  1888   	while(view.AtRow())
  1858     	{
  1889     	{
  1859     	view.GetL();
  1890     	view.GetL();
  1860     	TLbtTriggerId triggerId = view.ColInt64(ELbtDbFieldId);
  1891     	TLbtTriggerId triggerId = view.ColInt64(ELbtDbFieldId);
  1861     	
  1892     	
  1868 	 	    	view.UpdateL();	
  1899 	 	    	view.UpdateL();	
  1869 	 	    	view.SetColL( ELbtDbFieldIsTriggerFired, aFireBool );
  1900 	 	    	view.SetColL( ELbtDbFieldIsTriggerFired, aFireBool );
  1870 	 	    	view.PutL();
  1901 	 	    	view.PutL();
  1871 	 	    	}
  1902 	 	    	}
  1872     		}
  1903     		}
  1873     	view.NextL();
  1904     	if(!view.NextL())
  1874     	}
  1905     		break;
       
  1906     			
       
  1907     }
  1875     CleanupStack::PopAndDestroy(); //view
  1908     CleanupStack::PopAndDestroy(); //view
  1876 
  1909 
  1877     TInt error = KErrNone;
  1910     TInt error = KErrNone;
  1878     if(!found)
  1911     if(!found)
  1879     	{
  1912     	{
  2034                 {
  2067                 {
  2035                 hybridView.Close();
  2068                 hybridView.Close();
  2036                 User::Leave(error);
  2069                 User::Leave(error);
  2037                 }
  2070                 }
  2038             CleanupClosePushL(hybridView);
  2071             CleanupClosePushL(hybridView);
  2039             hybridView.FirstL();
  2072             if(hybridView.FirstL())
       
  2073             	{
  2040             hybridView.GetL();
  2074             hybridView.GetL();
  2041             hybridView.DeleteL();
  2075             hybridView.DeleteL();
  2042             hybridView.Close();
  2076             hybridView.Close();
       
  2077               }
  2043             CleanupStack::PopAndDestroy(1); // hybridView            
  2078             CleanupStack::PopAndDestroy(1); // hybridView            
  2044             break;
  2079             break;
  2045             }
  2080             }
  2046         }
  2081         }
  2047 
  2082 
  2048     if(iIdArray.Count() == 0)
  2083     if(iIdArray.Count() == 0)
  2049     	{
  2084     	{
  2050     	MLbtTriggerStore::TLbtTriggerModifiedInfo info;
  2085     	MLbtTriggerStore::TLbtTriggerModifiedInfo info;
  2051     	info.iTriggerId = aTriggerId;
  2086     	info.iTriggerId = aTriggerId;
  2052     	info.iAreaType = areaType;
  2087     	info.iAreaType = areaType;
  2053     	iIdArray.Append(info);
  2088     	iIdArray.AppendL(info);
  2054     	}
  2089     	}
  2055     
  2090     
  2056     iView.DeleteL();
  2091     iView.DeleteL();
  2057     }
  2092     }
  2058 
  2093 
  2407 	else
  2442 	else
  2408 		{
  2443 		{
  2409 		info.iStartupProcess = KNullUid;
  2444 		info.iStartupProcess = KNullUid;
  2410 		}
  2445 		}
  2411         
  2446         
  2412     iIdArray.Append(info);
  2447     TInt error = iIdArray.Append(info);
       
  2448     if( error != KErrNone )
       
  2449         {
       
  2450         LOG1("Failed to appenf info to the array:%d",error);
       
  2451         }
  2413 	}
  2452 	}
  2414 	
  2453 	
  2415 
  2454 
  2416 // -----------------------------------------------------------------------------
  2455 // -----------------------------------------------------------------------------
  2417 // CLbtDbTriggersManager::TriggersModified
  2456 // CLbtDbTriggersManager::TriggersModified
  2419 // 
  2458 // 
  2420 void CLbtDbTriggersManager::TriggersModified(RArray<TLbtTriggerModifiedInfo>& aArray)
  2459 void CLbtDbTriggersManager::TriggersModified(RArray<TLbtTriggerModifiedInfo>& aArray)
  2421 	 {
  2460 	 {
  2422 	 for( TInt i = 0;i<iIdArray.Count();i++ )
  2461 	 for( TInt i = 0;i<iIdArray.Count();i++ )
  2423 		 {
  2462 		 {
  2424 		 aArray.Append(iIdArray[i]);	
  2463 		 TInt error = aArray.Append(iIdArray[i]);
       
  2464 	      if( error != KErrNone )
       
  2465              {
       
  2466              LOG1("Failed to append modified triggers:%d",error);
       
  2467              return;
       
  2468              }
  2425 	     }
  2469 	     }
  2426 	 iIdArray.Reset();
  2470 	 iIdArray.Reset();
  2427 	 } 
  2471 	 } 
  2428  
  2472  
  2429 // -----------------------------------------------------------------------------
  2473 // -----------------------------------------------------------------------------
  2578 	    		{
  2622 	    		{
  2579 	    		delete entry;
  2623 	    		delete entry;
  2580 	    		}
  2624 	    		}
  2581     		}
  2625     		}
  2582 
  2626 
  2583     	iView.NextL();
  2627     	if(!iView.NextL())
       
  2628     		break;
  2584     	}
  2629     	}
  2585     
  2630     
  2586     if( count >= KStepCount )
  2631     if( count >= KStepCount )
  2587         {
  2632         {
  2588         // Self complete to process next request
  2633         // Self complete to process next request