EngSrc/IEImageList.cpp
author jkauppin
Fri, 15 Oct 2010 10:18:29 +0900
changeset 3 93fff7023be8
permissions -rw-r--r--
Initial version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     1
/*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     3
* All rights reserved.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     4
* This component and the accompanying materials are made available
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     6
* which accompanies this distribution, and is available
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     8
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     9
* Initial Contributors:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    11
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    12
* Contributors: Juha Kauppinen, Mika Hokkanen
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    13
* 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    14
* Description: Photo Browser
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    15
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    16
*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    17
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    18
// INCLUDE FILES
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    19
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    20
#include <eikenv.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    21
#include <exifread.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    22
#include <f32file.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    23
#include <s32file.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    24
#include <bautils.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    25
#include "IEImageList.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    26
#include "IEImageData.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    27
#include "IEEngineImp.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    28
#include "IEEngineUtils.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    29
#include "ImageMonitorAO.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    30
#include "IEFileLoader.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    31
#ifdef _S60_5x_ACCELEROMETER_
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    32
#include "IESensorMonitor.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    33
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    34
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    35
#define LATETHUMBCHECK
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    36
//#define GROUP_FOLDERS_BY_NAME
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    37
#define CHECK_IF_IMAGE_IS_VISIBLE
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    38
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    39
_LIT(KDatabaseFileName, "photobrowser.db");
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    40
_LIT8(KDatabaseId, "IMGC0008");
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    41
const TInt KNumOfDrives = 3;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    42
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    43
EXPORT_C CIEImageList* CIEImageList::NewL(        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    44
        RArray<CImageData*>& aImageData, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    45
        CIEFileLoader* aCallback)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    46
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    47
    CIEImageList* self = new (ELeave) CIEImageList(aImageData, aCallback);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    48
    CleanupStack::PushL(self);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    49
    self->ConstructL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    50
    CleanupStack::Pop();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    51
    return self;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    52
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    53
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    54
CIEImageList::CIEImageList(
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    55
        RArray<CImageData*>& aImageData, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    56
        CIEFileLoader* aCallback) :
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    57
    iCallback(aCallback),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    58
    iImageDataList(aImageData),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    59
    iGridMode(EGridModeTime)	
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    60
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    61
    for (TInt i = 0;i < KNumOfDrives;i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    62
        iDatabaseChanged[i] = EFalse; 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    63
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    64
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    65
void CIEImageList::ConstructL() 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    66
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    67
    User::LeaveIfError(iCritical.CreateLocal());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    68
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    69
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    70
EXPORT_C CIEImageList::~CIEImageList()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    71
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    72
    iCritical.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    73
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    74
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    75
EXPORT_C void CIEImageList::SetGridMode(TGridMode aGridMode)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    76
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    77
    if (iGridMode != aGridMode) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    78
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    79
        iGridMode = aGridMode;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    80
        iCritical.Wait();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    81
        Rearrange(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    82
        iCritical.Signal();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    83
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    84
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    85
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    86
EXPORT_C TGridMode CIEImageList::GetGridMode() const
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    87
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    88
    return iGridMode; 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    89
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    90
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    91
EXPORT_C void CIEImageList::SetChanged(TDesC& aPath)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    92
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    93
    TImageListDrive drive = EImageListDriveC;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    94
    TRAPD(err, drive = GetPathDriveL(aPath));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    95
    if (err == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    96
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    97
        iDatabaseChanged[drive] = ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    98
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    99
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   100
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   101
void CIEImageList::SetChanged(CImageData* aImageData)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   102
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   103
    TFileName fileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   104
    aImageData->GetFileName(fileName, EFullSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   105
    SetChanged(fileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   106
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   107
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   108
CImageData* CIEImageList::CreateImageDataL(
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   109
        const TFileName& aFileName, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   110
        const TTime& aTime,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   111
        const TReal orientation)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   112
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   113
    DP0_IMAGIC(_L("CIEImageList::CreateImageDataL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   114
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   115
    // Create new image data instance
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   116
    CImageData* imageData = CImageData::NewL(
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   117
#ifdef LATETHUMBCHECK            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   118
            /*EFullSize|*/ESize512x512|ESize128x128|ESize32x32
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   119
#endif            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   120
            );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   121
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   122
    imageData->SetCreatedTime(aTime);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   123
    imageData->SetFileNameL(aFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   124
    imageData->SetOrientation(orientation);    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   125
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   126
#ifdef _S60_5x_ACCELEROMETER_
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   127
    // Portrait
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   128
    if(iCallback->DeviceOrientation() == TSensrvOrientationData::EOrientationDisplayUp)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   129
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   130
        imageData->iGridData.iTargetRotationAngle = 90 + orientation;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   131
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   132
    // Landscape
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   133
    else//(iCallback->DeviceOrientation() == TSensrvOrientationData::EOrientationDisplayRightUp)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   134
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   135
        imageData->iGridData.iTargetRotationAngle = orientation;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   136
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   137
    imageData->iGridData.iRotationAngle = orientation;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   138
#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   139
    imageData->iGridData.iRotationAngle = orientation;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   140
    imageData->iGridData.iTargetRotationAngle = orientation;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   141
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   142
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   143
    DP1_IMAGIC(_L("CIEImageList::AddImageL - filename: %S"), &aFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   144
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   145
#ifndef LATETHUMBCHECK    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   146
    //Check and mark to imageData which thumbnails exists
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   147
    CheckCreatedThumbnails(*imageData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   148
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   149
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   150
    DP0_IMAGIC(_L("CIEImageList::CreateImageDataL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   151
    return imageData;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   152
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   153
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   154
TBool CIEImageList::IsImageBefore(CImageData* aNewImageData, TInt aIndex) const
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   155
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   156
    if (aIndex >= iImageDataList.Count())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   157
        return ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   158
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   159
    // Use folder grouping
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   160
    if (iGridMode != EGridModeTime)      
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   161
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   162
        TFileName newPath, path;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   163
        aNewImageData->GetPath(newPath);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   164
        iImageDataList[aIndex]->GetPath(path);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   165
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   166
#ifdef GROUP_FOLDERS_BY_NAME
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   167
        // Folders are sorted by name
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   168
        if (newPath > path)      // TODO: should trim drive + base path (e.g. C:\data\)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   169
            return ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   170
        if (newPath < path)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   171
            return EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   172
#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   173
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   174
        if (iGridMode == EGridModePeople)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   175
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   176
            return (iImageDataList[aIndex]->iPersonId > 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   177
                    aNewImageData->iPersonId);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   178
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   179
        else if (iGridMode == EGridModeFolder && aIndex > 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   180
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   181
            // Current image path is not same
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   182
            if (path != newPath)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   183
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   184
                TFileName prevPath;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   185
                iImageDataList[aIndex - 1]->GetPath(prevPath);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   186
                  
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   187
                // Previous image path is same, add after that
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   188
                if (newPath == prevPath)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   189
                     return ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   190
                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   191
                // Compare only against the first image in the folder
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   192
                if (path == prevPath)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   193
                     return EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   194
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   195
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   196
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   197
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   198
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   199
    // Compare times
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   200
    return (aNewImageData->GetCreatedTime() > iImageDataList[aIndex]->GetCreatedTime());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   201
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   202
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   203
TInt CIEImageList::GetNewImageIndex(CImageData* aImageData) const
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   204
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   205
    TInt index = 0; 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   206
    while(index < iImageDataList.Count())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   207
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   208
        if(IsImageBefore(aImageData, index))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   209
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   210
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   211
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   212
        index++;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   213
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   214
    return index;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   215
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   216
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   217
void CIEImageList::Rearrange(TInt aStartIndex)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   218
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   219
    for (TInt i = aStartIndex;i < iImageDataList.Count();i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   220
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   221
        CImageData* imageData = iImageDataList[i];            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   222
        iImageDataList.Remove(i);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   223
        TInt newIndex = GetNewImageIndex(imageData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   224
        iImageDataList.Insert(imageData, newIndex);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   225
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   226
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   227
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   228
EXPORT_C void CIEImageList::AddImage(CImageData* aImageData)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   229
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   230
    DP0_IMAGIC(_L("CIEImageList::AddImageL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   231
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   232
    iCritical.Wait();  
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   233
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   234
    // Insert image to list
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   235
    TInt index = GetNewImageIndex(aImageData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   236
    iImageDataList.Insert(aImageData, index);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   237
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   238
    // Need to resort all items if use time based folder sort
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   239
#ifndef GROUP_FOLDERS_BY_NAME
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   240
    if (iGridMode != EGridModeTime)      
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   241
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   242
        Rearrange(index + 1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   243
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   244
#endif        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   245
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   246
    // Image is not added as last image
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   247
    if (index < iImageDataList.Count() - 1)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   248
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   249
        // Mark database as changed
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   250
        SetChanged(aImageData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   251
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   252
        // Inform UI
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   253
        //iCallback->ImageListChanged(index, ETrue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   254
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   255
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   256
    iCallback->ImageListChanged(index, ETrue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   257
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   258
    iCritical.Signal();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   259
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   260
    DP0_IMAGIC(_L("CIEImageList::AddImageL-- tmpImageData"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   261
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   262
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   263
#ifdef IMAGIC_DATABASE
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   264
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   265
void CIEImageList::GetDatabaseFileName(TFileName& aFileName, TImageListDrive aDrive)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   266
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   267
    switch (aDrive)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   268
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   269
        case EImageListDriveC:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   270
            aFileName.Copy(PathInfo::PhoneMemoryRootPath());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   271
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   272
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   273
        case EImageListDriveE:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   274
            aFileName.Copy(PathInfo::MemoryCardRootPath());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   275
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   276
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   277
        case EImageListDriveF:           
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   278
            aFileName.Copy(KRootPathFDrive);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   279
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   280
           
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   281
        default:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   282
            return;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   283
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   284
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   285
    aFileName.Append(KDatabaseFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   286
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   287
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   288
EXPORT_C void CIEImageList::ReadDatabaseL()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   289
    {  
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   290
    DP0_IMAGIC(_L("CIEImageList::ReadDatabaseL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   291
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   292
    RFileReadStream readStreams[KNumOfDrives];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   293
    TBool openStreams[KNumOfDrives];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   294
    CImageData* imageDatas[KNumOfDrives];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   295
    RFs fs;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   296
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   297
    User::LeaveIfError(fs.Connect());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   298
    CleanupClosePushL(fs);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   299
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   300
    // Open databases
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   301
    for (TInt i = 0;i < KNumOfDrives;i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   302
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   303
        openStreams[i] = EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   304
        imageDatas[i] = NULL;        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   305
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   306
        TFileName databaseFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   307
        GetDatabaseFileName(databaseFileName, TImageListDrive(i));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   308
        if (readStreams[i].Open(fs, databaseFileName, EFileShareAny) == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   309
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   310
            // Check file validity and version
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   311
            TUint8 buf[8];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   312
            TPtr8 ptr(buf, sizeof(buf));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   313
            readStreams[i].ReadL(ptr, KDatabaseId.iTypeLength);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   314
            if (ptr.Compare(KDatabaseId) != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   315
                readStreams[i].Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   316
            else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   317
                openStreams[i] = ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   318
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   319
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   320
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   321
    // Read databases
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   322
    while(iCallback->ImageFinderState() == CIEFileLoader::EImageFinderRunning)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   323
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   324
        // Read image datas from each database
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   325
        TBool endOfData = ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   326
        for(TInt i = 0;i < KNumOfDrives;i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   327
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   328
            // Database is open and no image data is left
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   329
            if (imageDatas[i] == NULL && openStreams[i])
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   330
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   331
                TRAPD(err, imageDatas[i] = ReadImageDataL(readStreams[i], fs));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   332
                if (err != KErrNone || imageDatas[i] == NULL) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   333
                    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   334
                    openStreams[i] = EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   335
                    readStreams[i].Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   336
                    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   337
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   338
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   339
            if (imageDatas[i])
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   340
                endOfData = EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   341
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   342
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   343
        if (endOfData)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   344
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   345
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   346
        // Pick the most leftmost image 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   347
        TInt index = -1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   348
        for (TInt i = 0;i < KNumOfDrives;i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   349
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   350
            if (imageDatas[i] && 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   351
                    (index < 0 || 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   352
                     IsImageBefore(imageDatas[i], index)))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   353
                index = i;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   354
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   355
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   356
        // Add image to list
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   357
        if (index >= 0) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   358
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   359
            AddImage(imageDatas[index]);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   360
            imageDatas[index] = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   361
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   362
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   363
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   364
    CleanupStack::Pop();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   365
    fs.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   366
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   367
    DP0_IMAGIC(_L("CIEImageList::ReadDatabaseL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   368
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   369
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   370
CImageData* CIEImageList::ReadImageDataL(RFileReadStream& readStream, RFs& aFs)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   371
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   372
    TUint8 buf[KMaxFileName * 2];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   373
    TPtr8 ptr(buf, sizeof(buf));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   374
    TFileName fileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   375
    TTime fileTime, createdTime;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   376
    TSize size;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   377
    TInt faces;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   378
    TUint16 orientation;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   379
    CImageData* imageData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   380
           
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   381
    // Read until get valid image data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   382
    while (imageData == NULL) {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   383
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   384
        // Read file name (1 byte length, unicode name)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   385
        TInt len = readStream.ReadUint8L();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   386
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   387
        // End of list
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   388
        if (len == 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   389
            return NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   390
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   391
        readStream.ReadL(ptr, len * 2);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   392
        TPtrC16 ptr16((const TUint16*)buf, len);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   393
        fileName.Copy(ptr16);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   394
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   395
        // Read file time
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   396
        readStream.ReadL(ptr, sizeof(TTime));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   397
        fileTime = *(TTime*)ptr.Ptr();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   398
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   399
        // Read created time
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   400
        readStream.ReadL(ptr, sizeof(TTime));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   401
        createdTime = *(TTime*)ptr.Ptr();                    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   402
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   403
        // Read orientation (in 90 degrees angles)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   404
        orientation = readStream.ReadUint8L() * 90L;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   405
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   406
        // Read resolution
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   407
        size.iWidth = readStream.ReadUint32L();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   408
        size.iHeight = readStream.ReadUint32L();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   409
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   410
        // Read number of faces
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   411
        faces = readStream.ReadInt8L();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   412
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   413
        TInt personId = readStream.ReadInt32L();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   414
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   415
        // Check that no multiple entries
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   416
        if ((imageData = GetImageData(fileName)) != NULL) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   417
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   418
            imageData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   419
            continue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   420
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   421
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   422
        // Check if image exist and not be hidden
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   423
        TInt error = KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   424
        TBool visible = ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   425
#ifdef CHECK_IF_IMAGE_IS_VISIBLE        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   426
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   427
        TRAP(error, visible = IsImageViewableL(fileName, aFs));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   428
#endif        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   429
        if (error == KErrNone && visible)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   430
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   431
            // Create image data object
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   432
            imageData = CreateImageDataL(
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   433
                    fileName, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   434
                    createdTime, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   435
                    orientation);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   436
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   437
            if (imageData) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   438
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   439
                imageData->SetFileTime(fileTime);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   440
                imageData->SetSize(size);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   441
                imageData->SetNumberOfFaces(faces);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   442
                imageData->iPersonId = personId;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   443
                //imageData->SetImageReady(EFullSize, ETrue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   444
                }        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   445
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   446
        else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   447
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   448
            // Delete thumbnails if file could not be read
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   449
            if (error != KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   450
                CIEEngineUtils::DeleteThumbnails(fileName, aFs);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   451
            SetChanged(fileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   452
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   453
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   454
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   455
    return imageData;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   456
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   457
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   458
EXPORT_C void CIEImageList::WriteDatabaseL() 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   459
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   460
    DP0_IMAGIC(_L("CIEImageList::WriteDatabaseL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   461
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   462
    RFs fs;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   463
    User::LeaveIfError(fs.Connect());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   464
    CleanupClosePushL(fs);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   465
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   466
    for (TInt i = 0;i < KNumOfDrives;i++) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   467
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   468
        if (iDatabaseChanged[i])
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   469
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   470
            TRAP_IGNORE(WriteDatabaseL(TImageListDrive(i), fs)); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   471
            iDatabaseChanged[i] = EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   472
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   473
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   474
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   475
    CleanupStack::Pop(); // fs
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   476
    fs.Close();    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   477
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   478
    DP0_IMAGIC(_L("CIEImageList::WriteDatabaseL--"));    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   479
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   480
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   481
void CIEImageList::WriteDatabaseL(TImageListDrive aDrive, RFs& aFs)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   482
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   483
    TUint8 buf[sizeof(TUint32)];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   484
    TPtr8 ptr(buf, sizeof(buf));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   485
    RFile f;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   486
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   487
    TFileName path, fileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   488
    GetDatabaseFileName(fileName, aDrive);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   489
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   490
    TParse parser;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   491
    parser.Set(fileName, NULL, NULL);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   492
    path = parser.DriveAndPath();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   493
    TRAP_IGNORE(BaflUtils::EnsurePathExistsL(aFs, path));    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   494
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   495
    if (f.Replace(
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   496
            aFs, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   497
            fileName, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   498
            EFileWrite) != KErrNone) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   499
        return;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   500
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   501
    CleanupClosePushL(f);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   502
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   503
    f.SetAtt(KEntryAttHidden, 0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   504
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   505
    RFileWriteStream writeStream(f); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   506
    CleanupClosePushL(writeStream); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   507
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   508
    writeStream.WriteL(KDatabaseId);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   509
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   510
    for (TInt32 i = 0;i < iImageDataList.Count();i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   511
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   512
        TFileName fileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   513
        TImageListDrive drive = EImageListDriveC;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   514
        iImageDataList[i]->GetFileName(fileName, EFullSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   515
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   516
        // Write only files that belong to this drive
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   517
        TRAPD(err, drive = GetPathDriveL(fileName));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   518
        if (err != KErrNone || drive != aDrive)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   519
            continue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   520
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   521
        // Write file name
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   522
        writeStream.WriteUint8L(fileName.Length());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   523
        writeStream.WriteL(fileName, fileName.Length());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   524
          
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   525
        // Write file time
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   526
        TTime fileTime = iImageDataList[i]->GetFileTime();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   527
        TPtrC8 fileTimeptr((const TUint8 *)&fileTime, sizeof(TTime));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   528
        writeStream.WriteL(fileTimeptr);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   529
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   530
        // Write created time
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   531
        TTime createdTime = iImageDataList[i]->GetCreatedTime();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   532
        TPtrC8 createdTimeptr((const TUint8 *)&createdTime, sizeof(TTime));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   533
        writeStream.WriteL(createdTimeptr);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   534
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   535
        // Write orientation (in 90 degrees)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   536
        writeStream.WriteUint8L(iImageDataList[i]->GetOrientation() / 90);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   537
                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   538
        // Write size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   539
        writeStream.WriteUint32L(iImageDataList[i]->GetSize().iWidth);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   540
        writeStream.WriteUint32L(iImageDataList[i]->GetSize().iHeight);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   541
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   542
        // Write number of faces
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   543
        writeStream.WriteInt8L(iImageDataList[i]->GetNumberOfFaces());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   544
        writeStream.WriteInt32L(iImageDataList[i]->iPersonId);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   545
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   546
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   547
    // End of stream notification
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   548
    writeStream.WriteUint8L(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   549
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   550
    writeStream.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   551
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   552
    CleanupStack::PopAndDestroy(); // write stream
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   553
    CleanupStack::PopAndDestroy(); // f
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   554
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   555
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   556
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   557
EXPORT_C TBool CIEImageList::IsImageViewableL(TDesC& aFileName, RFs& aFs) const 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   558
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   559
    TUint att;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   560
    //if(!IsFileExist(fileName))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   561
    TInt error = aFs.Att(aFileName, att);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   562
    if (error != KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   563
        User::Leave(error);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   564
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   565
    return ((att & KEntryAttHidden) == KEntryAttHidden) ? EFalse : ETrue;  
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   566
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   567
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   568
EXPORT_C TInt CIEImageList::GetImageIndex(CImageData* aImageData)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   569
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   570
    for (TInt i = 0;i < iImageDataList.Count();i++) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   571
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   572
        if (aImageData == iImageDataList[i])
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   573
            return i;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   574
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   575
    return -1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   576
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   577
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   578
EXPORT_C CImageData* CIEImageList::GetImageData(const TFileName& aFileName)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   579
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   580
    CImageData* imageData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   581
    iCritical.Wait();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   582
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   583
    for (TInt i = 0;i < iImageDataList.Count();i++) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   584
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   585
        TFileName fileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   586
        iImageDataList[i]->GetFileName(fileName, EFullSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   587
        if (fileName.Compare(aFileName) == 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   588
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   589
            imageData = iImageDataList[i];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   590
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   591
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   592
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   593
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   594
    iCritical.Signal();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   595
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   596
    return imageData;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   597
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   598
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   599
EXPORT_C void CIEImageList::RemoveNonExistImagesL(TDesC* aPath, RFs& aFs)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   600
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   601
    DP0_IMAGIC(_L("CIEImageList::RemoveNonExistImagesL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   602
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   603
    TInt i = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   604
    while (i < iImageDataList.Count()) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   605
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   606
        iCritical.Wait();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   607
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   608
        // File may not exist
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   609
        TBool bRemove = !iImageDataList[i]->IsImageReady(EFullSize); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   610
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   611
        // Start of path must be same
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   612
        if (bRemove && aPath) {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   613
            TFileName path;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   614
            iImageDataList[i]->GetPath(path);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   615
            bRemove = (aPath->Compare(path) == 0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   616
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   617
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   618
        iCritical.Signal();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   619
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   620
        // Remove from list
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   621
        if (bRemove)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   622
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   623
            Remove(i, aFs);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   624
            if (aPath)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   625
                SetChanged(*aPath);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   626
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   627
        else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   628
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   629
            i++;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   630
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   631
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   632
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   633
    DP0_IMAGIC(_L("CIEImageList::RemoveNonExistImagesL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   634
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   635
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   636
CIEImageList::TImageListDrive CIEImageList::GetPathDriveL(TDesC& aPath)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   637
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   638
    TParse parser;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   639
    parser.Set(aPath, NULL, NULL);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   640
    TPtrC drive = parser.Drive();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   641
    const TPtrC drives[] = { _L("C:"), _L("E:"), _L("F:") };
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   642
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   643
    for (TInt i = 0;i < sizeof(drives) / sizeof(TPtrC);i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   644
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   645
        if (drive.Compare(drives[i]) == 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   646
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   647
            return TImageListDrive(i);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   648
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   649
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   650
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   651
    User::Leave(KErrArgument);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   652
    return EImageListDriveC;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   653
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   654
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   655
EXPORT_C void CIEImageList::Remove(TInt aIndex, RFs& aFs)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   656
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   657
    TFileName fileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   658
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   659
    if (aIndex < 0 || aIndex >= iImageDataList.Count())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   660
        return;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   661
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   662
    // Delete thumbnails if original file doesn't exist anymore
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   663
    iImageDataList[aIndex]->GetFileName(fileName, EFullSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   664
    if(!BaflUtils::FileExists(aFs, fileName))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   665
        CIEEngineUtils::DeleteThumbnails(fileName, aFs);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   666
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   667
    iCritical.Wait();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   668
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   669
    // Remove from the list
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   670
    CImageData* pRemovedImageData = iImageDataList[aIndex];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   671
    iImageDataList.Remove(aIndex);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   672
    delete pRemovedImageData;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   673
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   674
    iCritical.Signal();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   675
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   676
    SetChanged(fileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   677
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   678
    iCallback->ImageListChanged(aIndex, EFalse);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   679
    }