imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailfetchedchecker.cpp
changeset 54 48dd0f169f0d
parent 42 2e2a89493e2b
equal deleted inserted replaced
42:2e2a89493e2b 54:48dd0f169f0d
     1 /*
       
     2 * Copyright (c) 2006-2007 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  *
       
    16 */
       
    17 
       
    18 #include "thumbnailfetchedchecker.h"
       
    19 #include "thumbnaillog.h"
       
    20 #include "OstTraceDefinitions.h"
       
    21 #ifdef OST_TRACE_COMPILER_IN_USE
       
    22 #include "thumbnailfetchedcheckerTraces.h"
       
    23 #endif
       
    24 
       
    25 
       
    26 const int KMaxStoredEntries = 100;
       
    27 
       
    28 // -----------------------------------------------------------------------------
       
    29 // CThumbnailFetchedChecker::CThumbnailFetchedChecker()
       
    30 // -----------------------------------------------------------------------------
       
    31 //
       
    32 CThumbnailFetchedChecker* CThumbnailFetchedChecker::NewL()
       
    33     {
       
    34     return new (ELeave) CThumbnailFetchedChecker();
       
    35     }
       
    36 
       
    37 // -----------------------------------------------------------------------------
       
    38 // CThumbnailFetchedChecker::CThumbnailFetchedChecker()
       
    39 // -----------------------------------------------------------------------------
       
    40 //
       
    41 CThumbnailFetchedChecker::CThumbnailFetchedChecker()
       
    42     {
       
    43     }
       
    44 
       
    45 // -----------------------------------------------------------------------------
       
    46 // CThumbnailFetchedChecker::~CThumbnailFetchedChecker()
       
    47 // -----------------------------------------------------------------------------
       
    48 //
       
    49 CThumbnailFetchedChecker::~CThumbnailFetchedChecker()
       
    50     {
       
    51     iNotFetched.ResetAndDestroy();
       
    52     }
       
    53 
       
    54 // -----------------------------------------------------------------------------
       
    55 // CThumbnailFetchedChecker::LastFetchResult()
       
    56 // -----------------------------------------------------------------------------
       
    57 //
       
    58 TInt CThumbnailFetchedChecker::LastFetchResult( const TDesC& aUri, const TThumbnailSize aThumbnailSize )
       
    59     {
       
    60     TN_DEBUG3( "CThumbnailFetchedChecker::LastFetchResult(aUri=%S aThumbnailSize=%d)", &aUri, aThumbnailSize);
       
    61     OstTraceExt2( TRACE_NORMAL, CTHUMBNAILFETCHEDCHECKER_LASTFETCHRESULT, "CThumbnailFetchedChecker::LastFetchResult;aUri=%S;aThumbnailSize=%hu", aUri, aThumbnailSize );
       
    62 
       
    63     CEntry* entry = NULL;
       
    64     TRAPD( err, entry = CEntry::NewL( aUri, aThumbnailSize, KErrNone ) );
       
    65     if ( !err && entry )
       
    66         {
       
    67         TInt ret = iNotFetched.FindInOrder( entry, CEntry::FindCB );
       
    68         if ( ret != KErrNotFound )
       
    69             {
       
    70             TN_DEBUG1( "CThumbnailFetchedChecker::LastFetchResult() -> error found");
       
    71             OstTrace0( TRACE_NORMAL, DUP1_CTHUMBNAILFETCHEDCHECKER_LASTFETCHRESULT, "CThumbnailFetchedChecker::LastFetchResult  - error found" );
       
    72             delete entry;
       
    73             entry = NULL;
       
    74             return iNotFetched[ ret ]->iError;
       
    75             }
       
    76         }
       
    77 
       
    78     delete entry;        
       
    79     entry = NULL;
       
    80         
       
    81     return KErrNone;
       
    82     }
       
    83 
       
    84 // -----------------------------------------------------------------------------
       
    85 // CThumbnailFetchedChecker::SetFetchResult()
       
    86 // -----------------------------------------------------------------------------
       
    87 //
       
    88 void CThumbnailFetchedChecker::SetFetchResult( const TDesC& aUri, const TThumbnailSize aThumbnailSize, TInt aError )
       
    89     {
       
    90     TN_DEBUG4( "CThumbnailFetchedChecker::SetFetchResult(aUri=%S aThumbnailSize=%d aError=%d)", &aUri, aThumbnailSize, aError);
       
    91     OstTraceExt3( TRACE_NORMAL, CTHUMBNAILFETCHEDCHECKER_SETFETCHRESULT, "CThumbnailFetchedChecker::SetFetchResult;aUri=%S;aThumbnailSize=%u;aError=%d", aUri, aThumbnailSize, aError );
       
    92     if ( aError == KErrNone )
       
    93         {
       
    94         // Remove successful results from store
       
    95         CEntry* entry = NULL;
       
    96         TRAPD( err, entry = CEntry::NewL( aUri, aThumbnailSize, aError ) );
       
    97         if ( !err && entry )
       
    98             {
       
    99             TInt i = iNotFetched.FindInOrder( entry, CEntry::FindCB );
       
   100             if ( i >= 0 )
       
   101                 {
       
   102                 TN_DEBUG2( "CThumbnailFetchedChecker::LastFetchResult() -> Remove successful results from store %d",  iNotFetched.Count() );
       
   103                 OstTrace1( TRACE_NORMAL, DUP1_CTHUMBNAILFETCHEDCHECKER_SETFETCHRESULT, "CThumbnailFetchedChecker::SetFetchResult;iNotFetched.Count()=%d", iNotFetched.Count() );
       
   104                 delete iNotFetched[ i ];
       
   105                 iNotFetched[ i ] = NULL;
       
   106                 iNotFetched.Remove( i );
       
   107                 }
       
   108             }
       
   109         entry = NULL;
       
   110         delete entry;
       
   111         }
       
   112     else
       
   113         {
       
   114 
       
   115         // Add or update
       
   116         CEntry* entry = NULL;
       
   117         TRAPD( err, entry = CEntry::NewL( aUri, aThumbnailSize, aError ) );
       
   118         OstTraceExt3( TRACE_NORMAL, DUP4_CTHUMBNAILFETCHEDCHECKER_SETFETCHRESULT, "CThumbnailFetchedChecker::SetFetchResult;aUri=%S;aThumbnailSize=%u;aError=%d", aUri, aThumbnailSize, aError );
       
   119         if ( !err && entry )
       
   120             {
       
   121             err = iNotFetched.Find( entry );
       
   122             if ( err != KErrNotFound )
       
   123                 {
       
   124                 // update existing fetch result
       
   125                 TInt i = iNotFetched.FindInOrder( entry, CEntry::FindCB );
       
   126                 if ( i >= 0 )
       
   127                     {
       
   128                     TN_DEBUG1( "CThumbnailFetchedChecker::LastFetchResult() -> Update fetched tn error" );
       
   129                     OstTrace0( TRACE_NORMAL, DUP2_CTHUMBNAILFETCHEDCHECKER_SETFETCHRESULT, "CThumbnailFetchedChecker::SetFetchResult - Update fetched tn error" );
       
   130                     iNotFetched[ i ]->iError = aError;
       
   131                     }
       
   132                 }
       
   133             else 
       
   134                 {
       
   135                 if( iNotFetched.Count() < KMaxStoredEntries )
       
   136                     {
       
   137                     // insert new fetch result
       
   138                     TInt err = iNotFetched.InsertInOrder( entry, CEntry::InsertCB );
       
   139                     if ( err == KErrNone )
       
   140                         {
       
   141                         TN_DEBUG2( "CThumbnailFetchedChecker::LastFetchResult() -> Inserted new fetched tn error %d", iNotFetched.Count());	
       
   142                         OstTrace1( TRACE_NORMAL, DUP3_CTHUMBNAILFETCHEDCHECKER_SETFETCHRESULT, "CThumbnailFetchedChecker::SetFetchResult;iNotFetched.Count()=%d", iNotFetched.Count() );
       
   143                         entry = NULL; // owned by array now
       
   144                         }
       
   145                     }
       
   146                 }
       
   147             
       
   148             delete entry;
       
   149             entry = NULL;
       
   150             }
       
   151         }
       
   152     }
       
   153 
       
   154 // -----------------------------------------------------------------------------
       
   155 // CThumbnailFetchedChecker::DeleteFetchResult()
       
   156 // -----------------------------------------------------------------------------
       
   157 //
       
   158 void CThumbnailFetchedChecker::DeleteFetchResult( const TDesC& aUri )
       
   159     {
       
   160     TN_DEBUG2( "CThumbnailFetchedChecker::DeleteFetchResult(%S)", &aUri);
       
   161     OstTraceExt1( TRACE_NORMAL, CTHUMBNAILFETCHEDCHECKER_DELETEFETCHRESULT, "CThumbnailFetchedChecker::DeleteFetchResult;aUri=%S", aUri );
       
   162     // delete all entries of passed uri
       
   163     TInt ret;
       
   164     do
       
   165         {
       
   166         ret = iNotFetched.FindInOrder( aUri, CEntry::FindCBUri );
       
   167         if ( ret >= 0 )
       
   168             {
       
   169             TN_DEBUG1( "CThumbnailFetchedChecker::DeleteFetchResult() -> Deteled URI from fetched list" );	
       
   170             OstTrace0( TRACE_NORMAL, DUP1_CTHUMBNAILFETCHEDCHECKER_DELETEFETCHRESULT, "CThumbnailFetchedChecker::DeleteFetchResult - Deteled URI from fetched list" );
       
   171             delete iNotFetched[ ret ];
       
   172             iNotFetched[ ret ] = NULL;
       
   173             iNotFetched.Remove( ret );
       
   174             }
       
   175         }
       
   176     while(ret != KErrNotFound );
       
   177     
       
   178     }
       
   179 
       
   180 // -----------------------------------------------------------------------------
       
   181 // CThumbnailFetchedChecker::LastFetchResult()
       
   182 // -----------------------------------------------------------------------------
       
   183 //
       
   184 void CThumbnailFetchedChecker::RenameFetchResultL( const TDesC& aNewUri, const TDesC& aOldUri )
       
   185     {
       
   186     TN_DEBUG3( "CThumbnailFetchedChecker::RenameFetchResult(aNewUri=%S aOldUri=%S)", &aNewUri, &aOldUri);
       
   187     OstTraceExt2( TRACE_NORMAL, CTHUMBNAILFETCHEDCHECKER_RENAMEFETCHRESULTL, "CThumbnailFetchedChecker::RenameFetchResultL;aNewUri=%S;aOldUri=%S", aNewUri, aOldUri );
       
   188     // change every occurence of passed uri
       
   189     TInt ret;
       
   190     do
       
   191         {
       
   192         ret = iNotFetched.FindInOrder( aOldUri, CEntry::FindCBUri );
       
   193         if ( ret >= 0 )
       
   194             {
       
   195             delete iNotFetched[ ret ]->iUri;
       
   196             iNotFetched[ ret ]->iUri = NULL;
       
   197 
       
   198             iNotFetched[ ret ]->iUri = aNewUri.AllocL();
       
   199             TN_DEBUG1( "CThumbnailFetchedChecker::RenameeFetchResult() -> Renamed URI in fetched list" );	
       
   200             OstTrace0( TRACE_NORMAL, DUP1_CTHUMBNAILFETCHEDCHECKER_RENAMEFETCHRESULTL, "CThumbnailFetchedChecker::RenameFetchResultL - Renamed URI in fetched list" );
       
   201             }
       
   202         }
       
   203     while(ret != KErrNotFound );
       
   204     
       
   205     }
       
   206 
       
   207 // -----------------------------------------------------------------------------
       
   208 // CThumbnailFetchedChecker::Reset()
       
   209 // -----------------------------------------------------------------------------
       
   210 //
       
   211 void CThumbnailFetchedChecker::Reset()
       
   212     {
       
   213     TN_DEBUG1( "CThumbnailFetchedChecker::Reset()");
       
   214     OstTrace0( TRACE_NORMAL, CTHUMBNAILFETCHEDCHECKER_RESET, "CThumbnailFetchedChecker::Reset" );
       
   215     iNotFetched.ResetAndDestroy();
       
   216     }
       
   217 
       
   218 // -----------------------------------------------------------------------------
       
   219 // CThumbnailFetchedChecker::CEntry::NewL()
       
   220 // -----------------------------------------------------------------------------
       
   221 //
       
   222 CThumbnailFetchedChecker::CEntry* CThumbnailFetchedChecker::CEntry::NewL(
       
   223         const TDesC& aUri, const TThumbnailSize aThumbnailSize, TInt aError )
       
   224     {
       
   225     TN_DEBUG4( "CThumbnailFetchedChecker::CEntry::NewL(aUri=%S aThumbnailSize=%d aError=%d)", &aUri, aThumbnailSize, aError);
       
   226     OstTraceExt3( TRACE_NORMAL, CENTRY_NEWL, "CEntry::NewL;aUri=%S;aThumbnailSize=%u;aError=%d", aUri, aThumbnailSize, aError );
       
   227     CEntry* self  = new (ELeave) CEntry();
       
   228     if ( self )
       
   229         {
       
   230         self->iUri = aUri.AllocL();
       
   231         self->iSize = aThumbnailSize;
       
   232         self->iError = aError;
       
   233         if ( !self->iUri )
       
   234             {
       
   235             delete self;
       
   236             self = NULL;
       
   237             }
       
   238         }
       
   239     return self;
       
   240     }
       
   241 
       
   242 // -----------------------------------------------------------------------------
       
   243 // CThumbnailFetchedChecker::CEntry::FindCB()
       
   244 // -----------------------------------------------------------------------------
       
   245 //
       
   246 TInt CThumbnailFetchedChecker::CEntry::FindCB(
       
   247         const CThumbnailFetchedChecker::CEntry& aEntry, const CThumbnailFetchedChecker::CEntry& aEntry1 )
       
   248     {
       
   249     TN_DEBUG1( "CThumbnailFetchedChecker::CEntry::FindCB");
       
   250     OstTrace0( TRACE_NORMAL, CENTRY_FINDCB, "CEntry::FindCB" );
       
   251     if( aEntry1.iSize == aEntry.iSize)
       
   252         {
       
   253         // return index if size and uri matches
       
   254         return aEntry.iUri->CompareF( *( aEntry1.iUri ) );
       
   255         }
       
   256     else 
       
   257         {
       
   258         return KErrNotFound;
       
   259         }
       
   260     }
       
   261 
       
   262 // -----------------------------------------------------------------------------
       
   263 // CThumbnailFetchedChecker::CEntry::FindCBUri()
       
   264 // -----------------------------------------------------------------------------
       
   265 //
       
   266 TInt CThumbnailFetchedChecker::CEntry::FindCBUri(
       
   267         const TDesC* aUri, const CThumbnailFetchedChecker::CEntry& aEntry )
       
   268     {
       
   269     TN_DEBUG2( "CThumbnailFetchedChecker::CEntry::FindCBUri(aUri=%S", &aUri);
       
   270     OstTrace0( TRACE_NORMAL, CENTRY_FINDCBURI, "CEntry::FindCBUri" );
       
   271     return aUri->CompareF( *( aEntry.iUri ) );
       
   272     }
       
   273 
       
   274 // -----------------------------------------------------------------------------
       
   275 // CThumbnailFetchedChecker::CEntry::InsertCB()
       
   276 // -----------------------------------------------------------------------------
       
   277 //
       
   278 TInt CThumbnailFetchedChecker::CEntry::InsertCB(
       
   279         const CThumbnailFetchedChecker::CEntry& aEntry1,
       
   280         const CThumbnailFetchedChecker::CEntry& aEntry2 )
       
   281     {
       
   282     TN_DEBUG1( "CThumbnailFetchedChecker::CEntry::InsertCB");
       
   283     OstTrace0( TRACE_NORMAL, CENTRY_INSERTCB, "CEntry::InsertCB" );
       
   284     if( aEntry1.iSize == aEntry2.iSize)
       
   285         {
       
   286         // return index if size and uri matches
       
   287         return aEntry1.iUri->CompareF( *( aEntry2.iUri ) );
       
   288         }
       
   289     else 
       
   290         {
       
   291         return KErrNotFound;
       
   292         }
       
   293     }
       
   294 
       
   295 // -----------------------------------------------------------------------------
       
   296 // CThumbnailFetchedChecker::CEntry::CEntry()
       
   297 // -----------------------------------------------------------------------------
       
   298 //
       
   299 CThumbnailFetchedChecker::CEntry::CEntry()
       
   300     {
       
   301     }
       
   302 
       
   303 // -----------------------------------------------------------------------------
       
   304 // CThumbnailFetchedChecker::CEntry::~CEntry()
       
   305 // -----------------------------------------------------------------------------
       
   306 //
       
   307 CThumbnailFetchedChecker::CEntry::~CEntry()
       
   308     {
       
   309     delete iUri;
       
   310     iUri = NULL;
       
   311     }