mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp
branchRCL_3
changeset 13 c8156a91d13c
parent 9 13afc0e517bd
child 14 c54d95799c80
equal deleted inserted replaced
12:171e07ac910f 13:c8156a91d13c
    50 const TInt KUnknownAlbumID = 1770790356;
    50 const TInt KUnknownAlbumID = 1770790356;
    51 // UniqueID column in Uris requests
    51 // UniqueID column in Uris requests
    52 const TInt KColUniqueID = 0;
    52 const TInt KColUniqueID = 0;
    53 // URI column in Uris requests
    53 // URI column in Uris requests
    54 const TInt KColUri = 1;
    54 const TInt KColUri = 1;
       
    55 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
    56 _LIT( KAbstractAlbumExt, ".alb" );
       
    57 #endif // ABSTRACTAUDIOALBUM_INCLUDED
       
    58 
    55 
    59 
    56 // ============================ MEMBER FUNCTIONS ==============================
    60 // ============================ MEMBER FUNCTIONS ==============================
    57 
    61 
    58 // ----------------------------------------------------------------------------
    62 // ----------------------------------------------------------------------------
    59 // Two-phased constructor.
    63 // Two-phased constructor.
   173     time.HomeTime();
   177     time.HomeTime();
   174     HBufC* timeAdded = MPXDbCommonUtil::TTimeToDesLC(time);
   178     HBufC* timeAdded = MPXDbCommonUtil::TTimeToDesLC(time);
   175     MPXDbCommonUtil::AppendValueL(*fields, *values, KMCMusicTimeAdded, *timeAdded);
   179     MPXDbCommonUtil::AppendValueL(*fields, *values, KMCMusicTimeAdded, *timeAdded);
   176     CleanupStack::PopAndDestroy(timeAdded);
   180     CleanupStack::PopAndDestroy(timeAdded);
   177 
   181 
       
   182 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
   183     //update ContainEmbeddedArt
       
   184     const TDesC& albumArtFilename = aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Left(KMCMaxTextLen);
       
   185     if (albumArtFilename.Length() > 0)
       
   186         {
       
   187         MPXDbCommonUtil::AppendValueL(*fields, *values, KMCMusicContainEmbeddedArt, 1);
       
   188         }
       
   189 #endif // ABSTRACTAUDIOALBUM_INCLUDED
   178     // process the media parameter and construct the fields and values array
   190     // process the media parameter and construct the fields and values array
   179     TBool visible(GenerateMusicFieldsValuesL(aSongId, aMedia, aItemChangedMessages,
   191     TBool visible(GenerateMusicFieldsValuesL(aSongId, aMedia, aItemChangedMessages,
   180         NULL, *fields, *values, aDrive));
   192         NULL, *fields, *values, aDrive));
   181 
   193 
   182     // create the fields and values strings
   194     // create the fields and values strings
   240           recordset.ColumnInt64(EMusicVolumeId)));
   252           recordset.ColumnInt64(EMusicVolumeId)));
   241         visible = DoUpdateSongL(aSongId, aMedia, driveUnit, aItemChangedMessages,
   253         visible = DoUpdateSongL(aSongId, aMedia, driveUnit, aItemChangedMessages,
   242           recordset);
   254           recordset);
   243 
   255 
   244         // Update Album table
   256         // Update Album table
   245 		if (aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName) || aMedia.IsSupported(KMPXMediaMusicArtist))
   257         if (aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName) || aMedia.IsSupported(KMPXMediaMusicArtist))
   246 			{
   258             {
   247 			TUint32 albumId = recordset.ColumnInt64(EMusicAlbum);
   259             TUint32 albumId = recordset.ColumnInt64(EMusicAlbum);
   248 			iObserver.UpdateCategoryItemL(EMPXAlbum, albumId, aMedia, driveUnit, aItemChangedMessages);
   260             iObserver.UpdateCategoryItemL(EMPXAlbum, albumId, aMedia, driveUnit, aItemChangedMessages);
   249 			}
   261             }
   250 
   262 
   251         // Update Artist table
   263         // Update Artist table
   252         if ( aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName) )
   264         if ( aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName) )
   253             {
   265             {
   254             TUint32 artistId = recordset.ColumnInt64(EMusicArtist);
   266             TUint32 artistId = recordset.ColumnInt64(EMusicArtist);
   421     TUint32 aSongId,
   433     TUint32 aSongId,
   422     TUint32& aArtistId,
   434     TUint32& aArtistId,
   423     TUint32& aAlbumId,
   435     TUint32& aAlbumId,
   424     TUint32& aGenreId,
   436     TUint32& aGenreId,
   425     TUint32& aComposerId,
   437     TUint32& aComposerId,
       
   438 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
   439     TUint32& aAbstractAlbumId,
       
   440 #endif // ABSTRACTAUDIOALBUM_INCLUDED
   426     TInt& aDriveId)
   441     TInt& aDriveId)
   427     {
   442     {
   428     MPX_FUNC("CMPXDbMusic::GetSongInfoL");
   443     MPX_FUNC("CMPXDbMusic::GetSongInfoL");
   429 
   444 
   430     RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(KQueryMusicInfo, aSongId));
   445     RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(KQueryMusicInfo, aSongId));
   439         recordset.ColumnInt64(EMusicVolumeId));
   454         recordset.ColumnInt64(EMusicVolumeId));
   440     aArtistId = recordset.ColumnInt64(EMusicArtist);
   455     aArtistId = recordset.ColumnInt64(EMusicArtist);
   441     aAlbumId = recordset.ColumnInt64(EMusicAlbum);
   456     aAlbumId = recordset.ColumnInt64(EMusicAlbum);
   442     aGenreId = recordset.ColumnInt64(EMusicGenre);
   457     aGenreId = recordset.ColumnInt64(EMusicGenre);
   443     aComposerId = recordset.ColumnInt64(EMusicComposer);
   458     aComposerId = recordset.ColumnInt64(EMusicComposer);
       
   459 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
   460     aAbstractAlbumId = recordset.ColumnInt64(EMusicAbstractAlbum);
       
   461 #endif // ABSTRACTAUDIOALBUM_INCLUDED
   444     HBufC* uri = ConstructUriL(recordset);
   462     HBufC* uri = ConstructUriL(recordset);
   445 
   463 
   446     CleanupStack::PopAndDestroy(&recordset);
   464     CleanupStack::PopAndDestroy(&recordset);
   447 
   465 
   448     return uri;
   466     return uri;
   786     ExecuteMediaQueryL(aAttrs, aMediaArray, ExtraFieldsRequired(aAttrs) ?
   804     ExecuteMediaQueryL(aAttrs, aMediaArray, ExtraFieldsRequired(aAttrs) ?
   787         KQueryMusicGetSongsForComposer() : KQueryMusicGetSongsForComposerNoCategories(),
   805         KQueryMusicGetSongsForComposer() : KQueryMusicGetSongsForComposerNoCategories(),
   788         aComposerId);
   806         aComposerId);
   789     }
   807     }
   790 
   808 
       
   809 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
   810 // ----------------------------------------------------------------------------
       
   811 // CMPXDbMusic::GetAllSongsForAbstractAlbumL
       
   812 // ----------------------------------------------------------------------------
       
   813 //
       
   814 void CMPXDbMusic::GetAllSongsForAbstractAlbumL(
       
   815     TInt aDrive,
       
   816     TInt aAbstractAlbumId,
       
   817     const TArray<TMPXAttribute>& aAttrs,
       
   818     CMPXMediaArray& aMediaArray)
       
   819     {
       
   820     MPX_FUNC("CMPXDbMusic::GetAllSongsL");
       
   821     ExecuteMediaQueryL(aDrive, aAttrs, aMediaArray, KQueryMusicGetSongsForAbstractAlbum(), aAbstractAlbumId);
       
   822     }
       
   823 #endif // ABSTRACTAUDIOALBUM_INCLUDED
       
   824 
   791 // ----------------------------------------------------------------------------
   825 // ----------------------------------------------------------------------------
   792 // CMPXDbMusic::AllSongsDurationL
   826 // CMPXDbMusic::AllSongsDurationL
   793 // ----------------------------------------------------------------------------
   827 // ----------------------------------------------------------------------------
   794 //
   828 //
   795 TInt CMPXDbMusic::AllSongsDurationL()
   829 TInt CMPXDbMusic::AllSongsDurationL()
  1129         TInt columnCount(aMusicTable.ColumnCount());
  1163         TInt columnCount(aMusicTable.ColumnCount());
  1130         if(columnCount == 37 && aMusicTable.ColumnIndex(_L("PlUId"))==35)
  1164         if(columnCount == 37 && aMusicTable.ColumnIndex(_L("PlUId"))==35)
  1131             {
  1165             {
  1132             TUint32 pListUId(aMusicTable.ColumnInt64(35));
  1166             TUint32 pListUId(aMusicTable.ColumnInt64(35));
  1133             aMedia.SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, TMPXItemId(pListUId, songId));
  1167             aMedia.SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, TMPXItemId(pListUId, songId));
  1134         	}
  1168             }
  1135         else
  1169         else
  1136         	{
  1170             {
  1137         	aMedia.SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, songId);
  1171             aMedia.SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, songId);
  1138         	}
  1172             }
  1139         MPX_DEBUG2("    SongId[%d]", songId);
  1173         MPX_DEBUG2("    SongId[%d]", songId);
  1140         }
  1174         }
  1141     // FIX ME temporary always fetch URI
  1175     // FIX ME temporary always fetch URI
  1142     if (aAttrId & EMPXMediaGeneralUri)
  1176     if (aAttrId & EMPXMediaGeneralUri)
  1143         {
  1177         {
  1188         TPtrC title(MPXDbCommonUtil::GetColumnTextL(aMusicTable, EMusicTitle));
  1222         TPtrC title(MPXDbCommonUtil::GetColumnTextL(aMusicTable, EMusicTitle));
  1189         aMedia.SetTextValueL(KMPXMediaGeneralTitle, title);
  1223         aMedia.SetTextValueL(KMPXMediaGeneralTitle, title);
  1190         MPX_DEBUG2("    Title[%S]", &title);
  1224         MPX_DEBUG2("    Title[%S]", &title);
  1191         }
  1225         }
  1192     if ( aAttrId & EMPXMediaGeneralDate)
  1226     if ( aAttrId & EMPXMediaGeneralDate)
  1193 		{
  1227         {
  1194 		MPX_DEBUG1("    EMPXMediaGeneralDate");
  1228         MPX_DEBUG1("    EMPXMediaGeneralDate");
  1195 		const TDesC& dateStr(MPXDbCommonUtil::GetColumnTextL (aMusicTable,
  1229         const TDesC& dateStr(MPXDbCommonUtil::GetColumnTextL (aMusicTable,
  1196 				EMusicTimeAdded));
  1230                 EMusicTimeAdded));
  1197 		if ( dateStr.Compare (KNullDesC)!= 0)
  1231         if ( dateStr.Compare (KNullDesC)!= 0)
  1198 			{
  1232             {
  1199 			TTime dateTime(MPXDbCommonUtil::DesToTTimeL (dateStr));
  1233             TTime dateTime(MPXDbCommonUtil::DesToTTimeL (dateStr));
  1200 			aMedia.SetTObjectValueL<TInt64> (KMPXMediaGeneralDate,
  1234             aMedia.SetTObjectValueL<TInt64> (KMPXMediaGeneralDate,
  1201 					dateTime.Int64 ());
  1235                     dateTime.Int64 ());
  1202 			}
  1236             }
  1203 		MPX_DEBUG2("    Date[%S]", &dateStr);
  1237         MPX_DEBUG2("    Date[%S]", &dateStr);
  1204 		}
  1238         }
  1205     if (aAttrId & EMPXMediaGeneralComment)
  1239     if (aAttrId & EMPXMediaGeneralComment)
  1206         {
  1240         {
  1207         MPX_DEBUG1("    EMPXMediaGeneralComment");
  1241         MPX_DEBUG1("    EMPXMediaGeneralComment");
  1208         TPtrC comment(MPXDbCommonUtil::GetColumnTextL(aMusicTable, EMusicComment));
  1242         TPtrC comment(MPXDbCommonUtil::GetColumnTextL(aMusicTable, EMusicComment));
  1209         aMedia.SetTextValueL(KMPXMediaGeneralComment, comment);
  1243         aMedia.SetTextValueL(KMPXMediaGeneralComment, comment);
  1329         TPtrC album(MPXDbCommonUtil::GetColumnTextL(aMusicTable, EMusicAlbumName));
  1363         TPtrC album(MPXDbCommonUtil::GetColumnTextL(aMusicTable, EMusicAlbumName));
  1330         aMedia.SetTextValueL(KMPXMediaMusicAlbum, album);
  1364         aMedia.SetTextValueL(KMPXMediaMusicAlbum, album);
  1331         MPX_DEBUG2("    Album[%S]", &album);
  1365         MPX_DEBUG2("    Album[%S]", &album);
  1332         }
  1366         }
  1333     if ( aAttrId & EMPXMediaMusicYear)
  1367     if ( aAttrId & EMPXMediaMusicYear)
  1334 		{
  1368         {
  1335 		const TDesC& dateStr(MPXDbCommonUtil::GetColumnTextL (aMusicTable,
  1369         const TDesC& dateStr(MPXDbCommonUtil::GetColumnTextL (aMusicTable,
  1336 				EMusicReleaseDate));
  1370                 EMusicReleaseDate));
  1337 		if ( dateStr.Compare (KNullDesC)!= 0)
  1371         if ( dateStr.Compare (KNullDesC)!= 0)
  1338 			{
  1372             {
  1339 			TTime dateTime(MPXDbCommonUtil::DesToTTimeL (dateStr));
  1373             TTime dateTime(MPXDbCommonUtil::DesToTTimeL (dateStr));
  1340 			aMedia.SetTObjectValueL<TInt64> (KMPXMediaMusicYear,
  1374             aMedia.SetTObjectValueL<TInt64> (KMPXMediaMusicYear,
  1341 					dateTime.Int64 ());
  1375                     dateTime.Int64 ());
  1342 			MPX_DEBUG2("    Year[%d]", dateTime.Int64());
  1376             MPX_DEBUG2("    Year[%d]", dateTime.Int64());
  1343 			}
  1377             }
  1344 		MPX_DEBUG2("    ReleaseDate[%S]", &dateStr);
  1378         MPX_DEBUG2("    ReleaseDate[%S]", &dateStr);
  1345 		}
  1379         }
  1346     if (aAttrId & EMPXMediaMusicAlbumTrack)
  1380     if (aAttrId & EMPXMediaMusicAlbumTrack)
  1347         {
  1381         {
  1348         TInt32 track(aMusicTable.ColumnInt(EMusicAlbumTrack));
  1382         TInt32 track(aMusicTable.ColumnInt(EMusicAlbumTrack));
  1349         HBufC* hbuf = HBufC::NewLC(KMCIntegerLen);
  1383         HBufC* hbuf = HBufC::NewLC(KMCIntegerLen);
  1350         if (track != KMaxTInt)
  1384         if (track != KMaxTInt)
  1382     if (aAttrId & EMPXMediaMusicOriginalAlbumArtFileName)
  1416     if (aAttrId & EMPXMediaMusicOriginalAlbumArtFileName)
  1383         {
  1417         {
  1384         // Always set original album art to be file path
  1418         // Always set original album art to be file path
  1385         // Maybe add a new column to db for future if services like rhapsody pushes jpgs to us
  1419         // Maybe add a new column to db for future if services like rhapsody pushes jpgs to us
  1386         if (aMedia.IsSupported(KMPXMediaGeneralUri))
  1420         if (aMedia.IsSupported(KMPXMediaGeneralUri))
       
  1421 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
  1422             {    
       
  1423             TUint32 abstractAlbumId(aMusicTable.ColumnInt64(EMusicAbstractAlbum));
       
  1424             TInt containEmbeddedArt = aMusicTable.ColumnInt( EMusicContainEmbeddedArt);
       
  1425             //embedded with art, no art
       
  1426             if (containEmbeddedArt || (!containEmbeddedArt && !abstractAlbumId)) //embedded with art case, no art
       
  1427                 {
       
  1428                 const TDesC& art(aMedia.ValueText(KMPXMediaGeneralUri));
       
  1429                 aMedia.SetTextValueL(KMPXMediaMusicOriginalAlbumArtFileName, art);
       
  1430                 MPX_DEBUG2("    Music Original Album Art FullPath[%S]", &art);
       
  1431                 }
       
  1432             //for abstractalbum case, originalAlbumArt from AbstractAlbum table
       
  1433             else if ( abstractAlbumId )
       
  1434                 {
       
  1435                 HBufC* art = iObserver.HandleGetAlbumNameFromIdL(abstractAlbumId);
       
  1436                 CleanupStack::PushL(art);
       
  1437                 aMedia.SetTextValueL(KMPXMediaMusicOriginalAlbumArtFileName, *art);
       
  1438                 MPX_DEBUG2("    Music Original Album Art FullPath[%S]", art);
       
  1439                 CleanupStack::PopAndDestroy(art);
       
  1440                 }
       
  1441             }
       
  1442 #else
  1387             {
  1443             {
  1388             const TDesC& uri(aMedia.ValueText(KMPXMediaGeneralUri));
  1444             const TDesC& uri(aMedia.ValueText(KMPXMediaGeneralUri));
  1389             aMedia.SetTextValueL(KMPXMediaMusicOriginalAlbumArtFileName, uri);
  1445             aMedia.SetTextValueL(KMPXMediaMusicOriginalAlbumArtFileName, uri);
  1390             MPX_DEBUG2("    Music Original Album Art FullPath[%S]", &uri);
  1446             MPX_DEBUG2("    Music Original Album Art FullPath[%S]", &uri);
  1391             }
  1447             }
  1392         else
  1448 #endif // ABSTRACTAUDIOALBUM_INCLUDED
  1393             {
  1449        else
  1394             HBufC* fullPath = ConstructUriL(aMusicTable);
  1450            {
  1395             CleanupStack::PushL(fullPath);
  1451            HBufC* fullPath = ConstructUriL(aMusicTable);
  1396             aMedia.SetTextValueL(KMPXMediaMusicOriginalAlbumArtFileName, *fullPath);
  1452            CleanupStack::PushL(fullPath);
  1397             MPX_DEBUG2("    Music Original Album Art FullPath[%S]", fullPath);
  1453            aMedia.SetTextValueL(KMPXMediaMusicOriginalAlbumArtFileName, *fullPath);
  1398             CleanupStack::PopAndDestroy(fullPath);
  1454            MPX_DEBUG2("    Music Original Album Art FullPath[%S]", fullPath);
  1399             }
  1455            CleanupStack::PopAndDestroy(fullPath);
  1400         }
  1456            }
       
  1457       }
       
  1458 #ifdef ABSTRACTAUDIOALBUM_INCLUDED    
       
  1459      if (aAttrId & EMPXMediaMusicAlbumArtist)
       
  1460         {
       
  1461         TPtrC albumartist(MPXDbCommonUtil::GetColumnTextL(aMusicTable, EMusicAlbumArtist));
       
  1462         aMedia.SetTextValueL(KMPXMediaMusicAlbumArtist, albumartist);
       
  1463         MPX_DEBUG2("    Music AlbumArtist[%S]", &albumartist);
       
  1464         }
       
  1465 #endif // ABSTRACTAUDIOALBUM_INCLUDED
  1401     }
  1466     }
  1402 
  1467 
  1403 // ----------------------------------------------------------------------------
  1468 // ----------------------------------------------------------------------------
  1404 // CMPXDbMusic::UpdateMediaAudioL
  1469 // CMPXDbMusic::UpdateMediaAudioL
  1405 // ----------------------------------------------------------------------------
  1470 // ----------------------------------------------------------------------------
  1798                     MPX_DEBUG2("    Rating[%d]", rating);
  1863                     MPX_DEBUG2("    Rating[%d]", rating);
  1799                     }
  1864                     }
  1800 
  1865 
  1801                 if (attributeId & EMPXMediaMusicAlbumArtFileName)
  1866                 if (attributeId & EMPXMediaMusicAlbumArtFileName)
  1802                     {
  1867                     {
       
  1868 #ifdef ABSTRACTAUDIOALBUM_INCLUDED     
       
  1869                     TInt containEmbeddedArt(0);                   
       
  1870                     if (aMusicTable )
       
  1871                         {                        
       
  1872                         containEmbeddedArt = aMusicTable->ColumnInt(EMusicContainEmbeddedArt);                    
       
  1873                         }
       
  1874 #endif // ABSTRACTAUDIOALBUM_INCLUDED
  1803                     const TDesC& albumArtFilename = aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Left(KMCMaxTextLen);
  1875                     const TDesC& albumArtFilename = aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Left(KMCMaxTextLen);
  1804                     if (!aMusicTable || (albumArtFilename != MPXDbCommonUtil::GetColumnTextL(*aMusicTable, EMusicArt)))
  1876 #ifdef ABSTRACTAUDIOALBUM_INCLUDED 
  1805                         {
  1877                     TParsePtrC parse(albumArtFilename);
  1806                         MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicArt, albumArtFilename);
  1878                     TPtrC ext(parse.Ext());
       
  1879                           
       
  1880                     if ( ((ext.CompareF(KAbstractAlbumExt)== 0) && !containEmbeddedArt) || (ext.CompareF(KAbstractAlbumExt)!= 0))                    
       
  1881                         {
       
  1882 #endif // ABSTRACTAUDIOALBUM_INCLUDED
       
  1883                         if (!aMusicTable || (albumArtFilename != MPXDbCommonUtil::GetColumnTextL(*aMusicTable, EMusicArt)))
       
  1884                             {
       
  1885                             MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicArt, albumArtFilename);
       
  1886                             visibleChange = CMPXDbActiveTask::EAllVisible;
       
  1887                             metaDataModified = ETrue;              
       
  1888                             }
       
  1889 #ifdef ABSTRACTAUDIOALBUM_INCLUDED                                       
       
  1890                         }
       
  1891 #endif // ABSTRACTAUDIOALBUM_INCLUDED                                         
       
  1892                     MPX_DEBUG2("    Album Art Filename[%S]", &albumArtFilename);
       
  1893                     }
       
  1894 
       
  1895                 if (attributeId & EMPXMediaMusicURL)
       
  1896                     {
       
  1897                     const TDesC& url = aMedia.ValueText(KMPXMediaMusicURL).Left(KMCMaxTextLen);
       
  1898                     if (!aMusicTable || (url != MPXDbCommonUtil::GetColumnTextL(*aMusicTable, EMusicUrl)))
       
  1899                         {
       
  1900                         MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicUrl, url);
       
  1901                         metaDataModified = ETrue;
       
  1902                         }
       
  1903 
       
  1904                     MPX_DEBUG2("    Music URL[%S]", &url);
       
  1905                     }
       
  1906 #ifdef ABSTRACTAUDIOALBUM_INCLUDED                    
       
  1907                if (attributeId & EMPXMediaMusicAlbumArtist)
       
  1908                     {
       
  1909                     const TDesC& albumartist = aMedia.ValueText(KMPXMediaMusicAlbumArtist);
       
  1910                     TPtrC truncatedAlbumartist(albumartist.Left(KMCMaxTextLen));
       
  1911                     
       
  1912                     if (!aMusicTable || (truncatedAlbumartist.Compare(MPXDbCommonUtil::GetColumnTextL(*aMusicTable, EMusicAlbumArtist)) != 0))
       
  1913                         {
       
  1914                         MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicAlbumArtist, truncatedAlbumartist);
  1807                         visibleChange = CMPXDbActiveTask::EAllVisible;
  1915                         visibleChange = CMPXDbActiveTask::EAllVisible;
  1808                         metaDataModified = ETrue;
  1916                         metaDataModified = ETrue;
  1809                         }
  1917                         }                
  1810 
  1918                    }
  1811                     MPX_DEBUG2("    Album Art Filename[%S]", &albumArtFilename);
  1919 #endif // ABSTRACTAUDIOALBUM_INCLUDED              
  1812                     }
       
  1813 
       
  1814                 if (attributeId & EMPXMediaMusicURL)
       
  1815                     {
       
  1816                     const TDesC& url = aMedia.ValueText(KMPXMediaMusicURL).Left(KMCMaxTextLen);
       
  1817                     if (!aMusicTable || (url != MPXDbCommonUtil::GetColumnTextL(*aMusicTable, EMusicUrl)))
       
  1818                         {
       
  1819                         MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicUrl, url);
       
  1820                         metaDataModified = ETrue;
       
  1821                         }
       
  1822 
       
  1823                     MPX_DEBUG2("    Music URL[%S]", &url);
       
  1824                     }
       
  1825                 }
  1920                 }
  1826                 break;
  1921                 break;
  1827 
  1922 
  1828             case KMPXMediaIdAudio:
  1923             case KMPXMediaIdAudio:
  1829                 {
  1924                 {
  1933     // this is required because the recordset may be reused by the code below
  2028     // this is required because the recordset may be reused by the code below
  1934     TUint32 artistId(0);
  2029     TUint32 artistId(0);
  1935     TUint32 albumId(0);
  2030     TUint32 albumId(0);
  1936     TUint32 genreId(0);
  2031     TUint32 genreId(0);
  1937     TUint32 composerId(0);
  2032     TUint32 composerId(0);
       
  2033 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
  2034     TUint32 abstractAlbumId(0);
       
  2035 #endif // ABSTRACTAUDIOALBUM_INCLUDED
  1938     if (aMusicTable)
  2036     if (aMusicTable)
  1939         {
  2037         {
  1940         artistId = aMusicTable->ColumnInt64(EMusicArtist);
  2038         artistId = aMusicTable->ColumnInt64(EMusicArtist);
  1941         albumId = aMusicTable->ColumnInt64(EMusicAlbum);
  2039         albumId = aMusicTable->ColumnInt64(EMusicAlbum);
  1942         genreId = aMusicTable->ColumnInt64(EMusicGenre);
  2040         genreId = aMusicTable->ColumnInt64(EMusicGenre);
  1943         composerId = aMusicTable->ColumnInt64(EMusicComposer);
  2041         composerId = aMusicTable->ColumnInt64(EMusicComposer);
       
  2042 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
  2043         abstractAlbumId = aMusicTable->ColumnInt64(EMusicAbstractAlbum);
       
  2044 #endif // ABSTRACTAUDIOALBUM_INCLUDED        
  1944         }
  2045         }
  1945 
  2046 
  1946     // update the artist field
  2047     // update the artist field
  1947     TUint32 id(0);
  2048     TUint32 id(0);
  1948     TUint32 artistIdForAlbum(artistId);
  2049     TUint32 artistIdForAlbum(artistId);
  1954         visibleChange = CMPXDbActiveTask::EAllVisible;
  2055         visibleChange = CMPXDbActiveTask::EAllVisible;
  1955         artistIdForAlbum = id;
  2056         artistIdForAlbum = id;
  1956         }
  2057         }
  1957 
  2058 
  1958     // update the album field
  2059     // update the album field
  1959 	if (UpdateCategoryFieldL(EMPXAlbum, aMedia, KMPXMediaMusicAlbum, albumId,
  2060     if (UpdateCategoryFieldL(EMPXAlbum, aMedia, KMPXMediaMusicAlbum, albumId,
  1960 		aDrive, aItemChangedMessages, id, artistIdForAlbum))
  2061         aDrive, aItemChangedMessages, id, artistIdForAlbum))
  1961         {
  2062         {
  1962         MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicAlbum, id);
  2063         MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicAlbum, id);
  1963         metaDataModified = (aMusicTable != NULL);
  2064         metaDataModified = (aMusicTable != NULL);
  1964         visibleChange = CMPXDbActiveTask::EAllVisible;
  2065         visibleChange = CMPXDbActiveTask::EAllVisible;
  1965 
  2066 
  1995         {
  2096         {
  1996         MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicComposer, id);
  2097         MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicComposer, id);
  1997         metaDataModified = (aMusicTable != NULL);
  2098         metaDataModified = (aMusicTable != NULL);
  1998         visibleChange = CMPXDbActiveTask::EAllVisible;
  2099         visibleChange = CMPXDbActiveTask::EAllVisible;
  1999         }
  2100         }
  2000 
  2101 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
  2102     if ( aMedia.IsSupported (KMPXMediaMusicAlbumArtFileName))
       
  2103         {
       
  2104         const TDesC& albumArtFilename = aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Left(KMCMaxTextLen);            
       
  2105         TParsePtrC parse( albumArtFilename );
       
  2106         TPtrC ext( parse.Ext() );
       
  2107         if (ext.CompareF(KAbstractAlbumExt)== 0)   
       
  2108             {
       
  2109             if (UpdateCategoryFieldL(EMPXAbstractAlbum, aMedia, KMPXMediaMusicAlbumArtFileName, abstractAlbumId,
       
  2110                 aDrive, aItemChangedMessages, id))
       
  2111                 {
       
  2112                 MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicAbstractAlbum, id);
       
  2113                 metaDataModified = (aMusicTable != NULL);
       
  2114                 visibleChange = CMPXDbActiveTask::EAllVisible;
       
  2115                 }
       
  2116             }                       
       
  2117         }
       
  2118 #endif // ABSTRACTAUDIOALBUM_INCLUDED
  2001 #if defined (__MTP_PROTOCOL_SUPPORT)
  2119 #if defined (__MTP_PROTOCOL_SUPPORT)
  2002     // Set Mod bit to ETrue if metadata has been updated and caller hasn't explicitly
  2120     // Set Mod bit to ETrue if metadata has been updated and caller hasn't explicitly
  2003     // set/reset it
  2121     // set/reset it
  2004     if (aMusicTable &&
  2122     if (aMusicTable &&
  2005         !aMedia.IsSupported(KMPXMediaGeneralModified) &&
  2123         !aMedia.IsSupported(KMPXMediaGeneralModified) &&
  2280                 name, (aCategory != EMPXGenre));
  2398                 name, (aCategory != EMPXGenre));
  2281             if (!aOldId || (aOldId != aItemId))
  2399             if (!aOldId || (aOldId != aItemId))
  2282                 {
  2400                 {
  2283                 // only add if the ID changed,
  2401                 // only add if the ID changed,
  2284                 // otherwise the song was updated but the artist name was not
  2402                 // otherwise the song was updated but the artist name was not
  2285 
  2403 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
  2286                 // ignore the return value
  2404                 if(aCategory == EMPXAbstractAlbum)
  2287                 iObserver.AddCategoryItemL(aCategory, name, aDriveId,
  2405                     {
  2288                     aItemChangedMessages, itemAdded);
  2406                     if (aMedia.ValueTObjectL<TMPXGeneralCategory>(KMPXMediaGeneralCategory) == EMPXSong )
       
  2407                         {
       
  2408                         iObserver.AddCategoryItemL(aCategory, name, aDriveId,
       
  2409                             aItemChangedMessages, itemAdded, KNullDesC, KNullDesC);                                 
       
  2410                         }
       
  2411                     else
       
  2412                         {         
       
  2413                         TPtrC albumartist(aMedia.ValueText(KMPXMediaMusicAlbumArtist).Left(KMCMaxTextLen));
       
  2414                         //get AlbumArt, Genre for AbstractAlbum
       
  2415                         MPX_DEBUG2("    Music albumartist[%S]", &albumartist);            
       
  2416                         TPtrC genre(aMedia.ValueText(KMPXMediaMusicGenre).Left(KMCMaxTextLen));                               
       
  2417                         MPX_DEBUG2("    Music Genre[%S]", &genre);    
       
  2418                            
       
  2419                         // ignore the return value
       
  2420                         iObserver.AddCategoryItemL(aCategory, name, aDriveId,
       
  2421                           aItemChangedMessages, itemAdded, albumartist, genre);    
       
  2422                         }
       
  2423                     }
       
  2424                 else
       
  2425 #endif // ABSTRACTAUDIOALBUM_INCLUDED
       
  2426                     {
       
  2427                     // ignore the return value
       
  2428                     iObserver.AddCategoryItemL(aCategory, name, aDriveId,
       
  2429                         aItemChangedMessages, itemAdded);
       
  2430                     }
  2289                 updated = ETrue;
  2431                 updated = ETrue;
  2290                 }
  2432                 }
  2291             }
  2433             }
  2292         else
  2434         else
  2293             {
  2435             {
  2294             // only genre is not case sensitive
  2436             // only genre is not case sensitive
  2295             aItemId = MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), aCategory, KNullDesC,
  2437             aItemId = MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), aCategory, KNullDesC,
  2296                 (aCategory != EMPXGenre));
  2438                 (aCategory != EMPXGenre));
  2297             if (!aOldId || (aOldId != aItemId))
  2439             if (!aOldId || (aOldId != aItemId))
  2298                 {
  2440                 {
  2299                 // ignore the return value
  2441 #ifdef ABSTRACTAUDIOALBUM_INCLUDED                                        
  2300                 iObserver.AddCategoryItemL(aCategory, KNullDesC, aDriveId,
  2442                 if(aCategory == EMPXAbstractAlbum)
  2301                     aItemChangedMessages, itemAdded);
  2443                     {              
  2302                 updated = ETrue;
  2444                     //get AlbumArt, Genre for AbstractAlbum
  2303                 }
  2445                     TPtrC albumartist(aMedia.ValueText(KMPXMediaMusicAlbumArtist).Left(KMCMaxTextLen));
  2304             }
  2446                     MPX_DEBUG2("    Music albumartist[%S]", &albumartist);
  2305 
  2447                     TPtrC genre(aMedia.ValueText(KMPXMediaMusicGenre).Left(KMCMaxTextLen));
  2306         if (aOldId && (aOldId != aItemId))
  2448                     MPX_DEBUG2("    Music Genre[%S]", &genre);    
       
  2449                                            
       
  2450                     // ignore the return value
       
  2451                     iObserver.AddCategoryItemL(aCategory, KNullDesC, aDriveId,
       
  2452                     aItemChangedMessages, itemAdded, albumartist, genre);      
       
  2453                     }
       
  2454                else
       
  2455 #endif // ABSTRACTAUDIOALBUM_INCLUDED        
       
  2456                       {              
       
  2457                       // ignore the return value
       
  2458                       iObserver.AddCategoryItemL(aCategory, KNullDesC, aDriveId,
       
  2459                             aItemChangedMessages, itemAdded);
       
  2460                       }
       
  2461                  updated = ETrue;
       
  2462                  }
       
  2463             }
       
  2464 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
  2465             //no need to delete old item for abstractalbum
       
  2466             if (aOldId && (aOldId != aItemId) && (aCategory != EMPXAbstractAlbum))
       
  2467 #else
       
  2468             if (aOldId && (aOldId != aItemId))
       
  2469 #endif // ABSTRACTAUDIOALBUM_INCLUDED
  2307             {
  2470             {
  2308             iObserver.DeleteSongForCategoryL(aCategory, aOldId, aDriveId,
  2471             iObserver.DeleteSongForCategoryL(aCategory, aOldId, aDriveId,
  2309                 aItemChangedMessages, itemNotRemoved);
  2472                 aItemChangedMessages, itemNotRemoved);
  2310             updated = ETrue;
  2473             updated = ETrue;
  2311             }
  2474             }
  2399                 name, (aCategory != EMPXGenre));
  2562                 name, (aCategory != EMPXGenre));
  2400             if (!aOldId || (aOldId != aItemId))
  2563             if (!aOldId || (aOldId != aItemId))
  2401                 {
  2564                 {
  2402                 // only add if the ID changed,
  2565                 // only add if the ID changed,
  2403                 // otherwise the song was updated but the artist name was not
  2566                 // otherwise the song was updated but the artist name was not
  2404 				TPtrC art(KNullDesC);
  2567                 TPtrC art(KNullDesC);
  2405 				if (aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName))
  2568                 if (aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName))
  2406 					{
  2569                     {
  2407 					art.Set(aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Left(KMCMaxTextLen));
  2570                     art.Set(aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Left(KMCMaxTextLen));
  2408 					}
  2571                     }
  2409 
  2572 
  2410 				iObserver.AddCategoryItemL(aCategory, name, aArtistId, art, aDriveId, aItemChangedMessages, itemAdded);
  2573                 iObserver.AddCategoryItemL(aCategory, name, aArtistId, art, aDriveId, aItemChangedMessages, itemAdded);
  2411                 updated = ETrue;
  2574                 updated = ETrue;
  2412                 }
  2575                 }
  2413             }
  2576             }
  2414         else
  2577         else
  2415             {
  2578             {
  2563         aMedia.IsSupported(KMPXMediaAudioSamplerate) ||
  2726         aMedia.IsSupported(KMPXMediaAudioSamplerate) ||
  2564         aMedia.IsSupported(KMPXMediaAudioBitrate) ||
  2727         aMedia.IsSupported(KMPXMediaAudioBitrate) ||
  2565         aMedia.IsSupported(KMPXMediaAudioNumberOfChannels) ||
  2728         aMedia.IsSupported(KMPXMediaAudioNumberOfChannels) ||
  2566         aMedia.IsSupported(KMPXMediaDrmType) ||
  2729         aMedia.IsSupported(KMPXMediaDrmType) ||
  2567         aMedia.IsSupported(KMPXMediaDrmRightsStatus) ||
  2730         aMedia.IsSupported(KMPXMediaDrmRightsStatus) ||
  2568         aMedia.IsSupported(KMPXMediaMTPDrmStatus);
  2731         aMedia.IsSupported(KMPXMediaMTPDrmStatus)
       
  2732 #ifdef ABSTRACTAUDIOALBUM_INCLUDED        
       
  2733         ||aMedia.IsSupported(KMPXMediaMusicAlbumArtist)
       
  2734 #endif // ABSTRACTAUDIOALBUM_INCLUDED
       
  2735         ;
  2569     }
  2736     }
  2570 
  2737 
  2571 // End of File
  2738 // End of File