* This file contains implementation of the %_ContentManagerUtilImpl class.
*/
+#include <new>
#include <stdlib.h>
#include <mime_type.h>
-#include <FBaseSysLog.h>
-#include <FBaseByteBuffer.h>
-#include <FIoDirectory.h>
#include <FAppApp.h>
-#include <FSysEnvironment.h>
-#include <FMediaImage.h>
-#include <FMediaImageBuffer.h>
-#include <FMediaImageUtil.h>
+#include <FBaseByteBuffer.h>
+#include <FBaseSysLog.h>
+#include <FBaseUtilStringTokenizer.h>
#include <FCntImageMetadata.h>
#include <FCntAudioMetadata.h>
#include <FCntVideoMetadata.h>
-#include <FCnt_ContentManagerUtilImpl.h>
-#include <FCnt_AudioMetadataImpl.h>
-#include <FCnt_VideoMetadataImpl.h>
-#include <FCnt_ImageMetadataImpl.h>
+#include <FMediaImage.h>
+#include <FMediaImageBuffer.h>
+#include <FMediaImageUtil.h>
+#include <FIoDirectory.h>
+#include <FSysEnvironment.h>
+#include <FApp_AppInfo.h>
+#include <FBase_LocalizedNumParser.h>
#include <FBase_StringConverter.h>
-#include <FIo_FileImpl.h>
#include <FGrp_BitmapImpl.h>
+#include <FIo_FileImpl.h>
#include <FMedia_ImageDecoder.h>
#include <FMedia_ImageImpl.h>
-#include <FApp_AppInfo.h>
+#include "FCnt_AudioMetadataImpl.h"
+#include "FCnt_ContentManagerUtilImpl.h"
+#include "FCnt_ImageMetadataImpl.h"
+#include "FCnt_VideoMetadataImpl.h"
+
+using namespace std;
+using namespace Tizen::App;
using namespace Tizen::Base;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Graphics;
using namespace Tizen::Io;
using namespace Tizen::Media;
-using namespace Tizen::Graphics;
-using namespace Tizen::App;
using namespace Tizen::System;
-using namespace std;
namespace Tizen { namespace Content
{
// Types of content, format supported and default values
-static const int IMAGE_BUFF_LENGTH = 100;
-static const int THUMBNAIL_IMAGE_WIDTH = 80;
-static const int THUMBNAIL_IMAGE_HEIGHT = 60;
-static const int MINUTES = 60;
-static const int SECONDS = 3600;
+static const int _IMAGE_BUFF_LENGTH = 100;
+static const int _THUMBNAIL_IMAGE_WIDTH = 80;
+static const int _THUMBNAIL_IMAGE_HEIGHT = 60;
+static const int _MINUTES = 60;
+static const int _SECONDS = 3600;
-//
-// E_SUCCESS
-// E_INVALID_ARG
-// E_OUT_OF_MEMORY
-//
ImageMetadata*
_ContentManagerUtilImpl::GetImageMetaN(const String& contentPath, bool internal)
{
ExifByteOrder byteOrder;
ExifEntry** pEntries = null;
const char* pData = null;
- char buf[IMAGE_BUFF_LENGTH] = {0, };
- char mmBuff[IMAGE_BUFF_LENGTH] = {0, }; // to store minutes value of GPS data
- char ssBuff[IMAGE_BUFF_LENGTH] = {0, }; // to store seconds value of GPS data
+ char buf[_IMAGE_BUFF_LENGTH] = {0, };
+ char mmBuff[_IMAGE_BUFF_LENGTH] = {0, }; // to store minutes value of GPS data
+ char ssBuff[_IMAGE_BUFF_LENGTH] = {0, }; // to store seconds value of GPS data
ExifContent* pExifcont[EXIF_IFD_COUNT];
int index = 0;
char latitudeRef = 0; // to store latitude reference (quadrasphere designation 'N', 'S', 'W' or 'E')
}
else if (tag == EXIF_TAG_GPS_LATITUDE)
{
- ParseBuffer(buf, index); // to extract the minutes value of GPS data, if present
- for (int l = 0; l < IMAGE_BUFF_LENGTH-1; l++)
- {
- mmBuff[l] = buf[l + index + 1]; //add 1 to skip the ','
- }
- index = 0; //re-assign index value as this is new buffer
- ParseBuffer(mmBuff, index); // to extract the seconds value of GPS data, if present
- for (int l = 0; l < IMAGE_BUFF_LENGTH-1; l++)
- {
- ssBuff[l] = mmBuff[l + index + 1]; //add 1 to skip the ','
- }
+ String tempLatitude(buf);
+ String delim(L",");
- char *pLocal;
- std::unique_ptr<char> pCurrentLocal(null);
- pLocal = setlocale (LC_ALL, 0); // Get the name of the current locale.
- if( pLocal == null )
- {
- SysLog(NID_CNT, "setlocale failed. (get current locale)");
- continue;
- }
- pCurrentLocal.reset(strdup (pLocal));
+ StringTokenizer strTok(tempLatitude, delim);
+ String token[3] = {L"", };
- pLocal = setlocale(LC_ALL, "C");
- if( pLocal == null )
+ int count = 0;
+ while (strTok.HasMoreTokens())
{
- SysLog(NID_CNT, "setlocale failed. (set POSIX C locale)");
- continue;
+ strTok.GetNextToken(token[count++]);
}
- double ddVal = atof(buf); // degree value
- double mmVal = atof(mmBuff); // minutesvalue
- double ssVal = atof(ssBuff); // seconds value
+ double ddVal = _LocalizedNumParser::ToDouble(token[0], "C"); // degree value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- pLocal = setlocale (LC_ALL, pCurrentLocal.get()); // restore the locale.
- if( pLocal == null )
- {
- SysLog(NID_CNT, "setlocale failed. (set current locale)");
- continue;
- }
+ double mmVal = _LocalizedNumParser::ToDouble(token[1], "C"); // minutes value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- pMetadata->latitude = ddVal + (mmVal/MINUTES) + (ssVal/SECONDS);
+ double ssVal = _LocalizedNumParser::ToDouble(token[2], "C"); // seconds value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
+
+ pMetadata->latitude = ddVal + (mmVal/_MINUTES) + (ssVal/_SECONDS);
// if latitude designation is Southern (SOUTH) then latitude degree will be negative DD
if (latitudeRef == 'S')
}
else if (tag == EXIF_TAG_GPS_LONGITUDE)
{
- index = 0; //re-assign index value as this is new buffer
- ParseBuffer(buf, index); // to extract the minutes value of GPS data, if present
- for (int l = 0; l < IMAGE_BUFF_LENGTH-1; l++)
- {
- mmBuff[l] = buf[l + index + 1]; //add 1 to skip the ','
- }
- index = 0; //re-assign index value as this is new buffer
- ParseBuffer(mmBuff, index); // to extract the seconds value of GPS data, if present
- for (int l = 0; l < IMAGE_BUFF_LENGTH-1; l++)
- {
- ssBuff[l] = mmBuff[l + index + 1]; //add 1 to skip the ','
- }
+ String tempLongitude(buf);
+ String delim(L",");
- char *pLocal;
- std::unique_ptr<char> pCurrentLocal(null);
- pLocal = setlocale (LC_ALL, 0); // Get the name of the current locale.
- if( pLocal == null )
- {
- SysLog(NID_CNT, "setlocale failed. (get current locale)");
- continue;
- }
- pCurrentLocal.reset(strdup (pLocal));
+ StringTokenizer strTok(tempLongitude, delim);
+ String token[3] = {L"", };
- pLocal = setlocale(LC_ALL, "C");
- if( pLocal == null )
+ int count = 0;
+ while (strTok.HasMoreTokens())
{
- SysLog(NID_CNT, "setlocale failed. (set POSIX C locale)");
- continue;
+ strTok.GetNextToken(token[count++]);
}
- double ddVal = atof(buf); // degree value
- double mmVal = atof(mmBuff); // minutesvalue
- double ssVal = atof(ssBuff); // seconds value
+ double ddVal = _LocalizedNumParser::ToDouble(token[0], "C"); // degree value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- pLocal = setlocale (LC_ALL, pCurrentLocal.get()); // restore the locale.
- if( pLocal == null )
- {
- SysLog(NID_CNT, "setlocale failed. (set current locale)");
- continue;
- }
+ double mmVal = _LocalizedNumParser::ToDouble(token[1], "C"); // minutes value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
+
+ double ssVal = _LocalizedNumParser::ToDouble(token[2], "C"); // seconds value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- pMetadata->longitude = ddVal + (mmVal/MINUTES) + (ssVal/SECONDS);
+ pMetadata->longitude = ddVal + (mmVal/_MINUTES) + (ssVal/_SECONDS);
// if longitude designation is Western (WEST) then longitude degree will be negative DD
if (longitudeRef == 'W')
return pImageMetadata.release();
}
-void
-_ContentManagerUtilImpl::ParseBuffer(char* pBuffer, int& count)
-{
- if ((*pBuffer != ',') && (*pBuffer != '\0')) // parse the buffer till ',' or '\0' and return the index
- {
- ParseBuffer(++pBuffer, ++count);
- }
-}
-
-//
-// E_SUCCESS
-// E_INVALID_ARG
-// E_OUT_OF_MEMORY
-//
AudioMetadata*
_ContentManagerUtilImpl::GetAudioMetaN(const String& contentPath)
{
{
format = img.GetImageFormat(buffer);
pMetadata->pThumbnail = img.DecodeN(buffer, format, BITMAP_PIXEL_FORMAT_ARGB8888,
- THUMBNAIL_IMAGE_WIDTH, THUMBNAIL_IMAGE_HEIGHT);
+ _THUMBNAIL_IMAGE_WIDTH, _THUMBNAIL_IMAGE_HEIGHT);
if (pMetadata->pThumbnail == null)
{
// Because Thumbnail is one of the metadata, it is not exception in this function.
return pAudioMetadata.release();
}
-//
-// E_SUCCESS
-// E_INVALID_ARG
-// E_OUT_OF_MEMORY
-//
VideoMetadata*
_ContentManagerUtilImpl::GetVideoMetaN(const String& contentPath)
{
ExifByteOrder byteOrder;
ExifEntry** pEntries = null;
const char* pData = null;
- char buf[IMAGE_BUFF_LENGTH] = {0, };
- char mmBuff[IMAGE_BUFF_LENGTH] = {0, }; // to store minutes value of GPS data
- char ssBuff[IMAGE_BUFF_LENGTH] = {0, }; // to store seconds value of GPS data
+ char buf[_IMAGE_BUFF_LENGTH] = {0, };
+ char mmBuff[_IMAGE_BUFF_LENGTH] = {0, }; // to store minutes value of GPS data
+ char ssBuff[_IMAGE_BUFF_LENGTH] = {0, }; // to store seconds value of GPS data
ExifContent* pExifcont[EXIF_IFD_COUNT];
int index = 0;
char latitudeRef = 0; // to store latitude reference (quadrasphere designation 'N', 'S', 'W' or 'E')
}
else if (tag == EXIF_TAG_GPS_LATITUDE)
{
- ParseBuffer(buf, index); // to extract the minutes value of GPS data, if present
- for (int l = 0; l < IMAGE_BUFF_LENGTH-1; l++)
- {
- mmBuff[l] = buf[l + index + 1]; //add 1 to skip the ','
- }
- index = 0; //re-assign index value as this is new buffer
- ParseBuffer(mmBuff, index); // to extract the seconds value of GPS data, if present
- for (int l = 0; l < IMAGE_BUFF_LENGTH-1; l++)
+ String tempLatitude(buf);
+ String delim(L",");
+
+ StringTokenizer strTok(tempLatitude, delim);
+ String token[3] = {L"", };
+
+ int count = 0;
+ while (strTok.HasMoreTokens())
{
- ssBuff[l] = mmBuff[l + index + 1]; //add 1 to skip the ','
+ strTok.GetNextToken(token[count++]);
}
- double ddVal = atof(buf); // degree value
- double mmVal = atof(mmBuff); // minutesvalue
- double ssVal = atof(ssBuff); // seconds value
- pMetadata->latitude = ddVal + (mmVal/MINUTES) + (ssVal/SECONDS);
+
+ double ddVal = _LocalizedNumParser::ToDouble(token[0], "C"); // degree value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
+
+ double mmVal = _LocalizedNumParser::ToDouble(token[1], "C"); // minutes value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
+
+ double ssVal = _LocalizedNumParser::ToDouble(token[2], "C"); // seconds value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
+
+ pMetadata->latitude = ddVal + (mmVal/_MINUTES) + (ssVal/_SECONDS);
// if latitude designation is Southern (SOUTH) then latitude degree will be negative DD
if (latitudeRef == 'S')
}
else if (tag == EXIF_TAG_GPS_LONGITUDE)
{
- index = 0; //re-assign index value as this is new buffer
- ParseBuffer(buf, index); // to extract the minutes value of GPS data, if present
- for (int l = 0; l < IMAGE_BUFF_LENGTH-1; l++)
- {
- mmBuff[l] = buf[l + index + 1]; //add 1 to skip the ','
- }
- index = 0; //re-assign index value as this is new buffer
- ParseBuffer(mmBuff, index); // to extract the seconds value of GPS data, if present
- for (int l = 0; l < IMAGE_BUFF_LENGTH-1; l++)
+ String tempLongitude(buf);
+ String delim(L",");
+
+ StringTokenizer strTok(tempLongitude, delim);
+ String token[3] = {L"", };
+
+ int count = 0;
+ while (strTok.HasMoreTokens())
{
- ssBuff[l] = mmBuff[l + index + 1]; //add 1 to skip the ','
+ strTok.GetNextToken(token[count++]);
}
- double ddVal = atof(buf); // degree value
- double mmVal = atof(mmBuff); // minutesvalue
- double ssVal = atof(ssBuff); // seconds value
- pMetadata->longitude = ddVal + (mmVal/MINUTES) + (ssVal/SECONDS);
+
+ double ddVal = _LocalizedNumParser::ToDouble(token[0], "C"); // degree value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
+
+ double mmVal = _LocalizedNumParser::ToDouble(token[1], "C"); // minutes value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
+
+ double ssVal = _LocalizedNumParser::ToDouble(token[2], "C"); // seconds value
+ r = GetLastResult();
+ SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
+
+ pMetadata->longitude = ddVal + (mmVal/_MINUTES) + (ssVal/_SECONDS);
// if longitude designation is Western (WEST) then longitude degree will be negative DD
if (longitudeRef == 'W')
return pImageMetadata.release();
}
-//
-// E_SUCCESS
-// E_INVALID_ARG
-// E_OUT_OF_MEMORY
-//
AudioMetadata*
_ContentManagerUtilImpl::GetAudioMetaN(const ByteBuffer& byteBuffer)
{
{
format = img.GetImageFormat(buffer);
pMetadata->pThumbnail = img.DecodeN(buffer, format, BITMAP_PIXEL_FORMAT_ARGB8888,
- THUMBNAIL_IMAGE_WIDTH, THUMBNAIL_IMAGE_HEIGHT);
+ _THUMBNAIL_IMAGE_WIDTH, _THUMBNAIL_IMAGE_HEIGHT);
if (pMetadata->pThumbnail == null)
{
// Because Thumbnail is one of the metadata, it is not exception in this function.
return pAudioMetadata.release();
}
-//
-// E_SUCCESS
-// E_INVALID_ARG
-// E_OUT_OF_MEMORY
-//
VideoMetadata*
_ContentManagerUtilImpl::GetVideoMetaN(const ByteBuffer& byteBuffer)
{
return pVideoMetadata.release();
}
-//
-// E_SUCCESS
-// E_INVALID_ARG
-// E_OUT_OF_MEMORY
-// E_FILE_NOT_FOUND
-// E_UNSUPPORTED_FORMAT
-//
ContentType
_ContentManagerUtilImpl::CheckContentType(const String& contentPath, bool internal)
{
return r;
}
-/**
- * deprecation
- */
result
_ContentManagerUtilImpl::CopyToMediaDirectory(const String& srcContentPath, const String& destContentPath)
{
return r;
}
-/**
- * deprecation
- */
result
_ContentManagerUtilImpl::MoveToMediaDirectory(const String& srcContentPath, const String& destContentPath)
{