Update change log and spec for wrt-plugins-tizen_0.4.32
authorDongjin Choi <milkelf.choi@samsung.com>
Thu, 16 May 2013 07:54:05 +0000 (16:54 +0900)
committerDongjin Choi <milkelf.choi@samsung.com>
Thu, 16 May 2013 07:54:05 +0000 (16:54 +0900)
[model] REDWOOD
[binary_type] PDA
[customer] OPEN

[Issue#] DCM-1682
[Problem] AppControl submode is not supported for web app
[Cause] window id is not set for appControl
[Solution] get window ID from UI Process and set that when launch application with appControl

[Issue] N/A
[Problem] Date format and localeString are changed according to Language Setting.
[Solution] They are changed according to default locale of ICU. It will be changed according to locale that is created using region vconf value.

[Issue] N/A
[Problem] mms message attachment mimeType is not set
[Cause] mms message attachment mimeType is not set
[Solution] set mimeType to mms attachments

[Issue#] N/A
[Problem] request protocl change.
[Cause] N/A
[Solution] modification.

[Issue#]
[Problem] Alarm ID can be negative value. but previous verification code support only positivie value
[Cause] N/A
[Solution] check alarm registered status for verification

[team] WebAPI
[request] N/A
[horizontal_expansion] N/A

27 files changed:
packaging/wrt-plugins-tizen.spec
src/Alarm/AlarmAbsolute.cpp
src/Alarm/AlarmAbsolute.h
src/Alarm/AlarmRelative.cpp
src/Alarm/AlarmRelative.h
src/Alarm/JSAlarmAbsolute.cpp
src/Alarm/JSAlarmRelative.cpp
src/Application/ApplicationManager.cpp
src/Application/CMakeLists.txt
src/DataControl/DataControlFactory.cpp
src/DataControl/DataControlFactory.h
src/DataControl/IMappedDataControlConsumer.h
src/DataControl/ISqlDataControlConsumer.h
src/DataControl/JSMappedDataControlConsumer.cpp
src/DataControl/JSSQLDataControlConsumer.cpp
src/DataControl/MappedDataControlConsumer.cpp
src/DataControl/MappedDataControlConsumer.h
src/DataControl/SqlDataControlConsumer.cpp
src/DataControl/SqlDataControlConsumer.h
src/Filesystem/ResponseDispatcher.cpp
src/Messaging/Email.cpp
src/Messaging/Mms.cpp
src/Messaging/Mms.h
src/Messaging/MmsMime.h [new file with mode: 0644]
src/TimeUtil/TZDate.cpp [changed mode: 0644->0755]
src/TimeUtil/TimeUtilTools.cpp [changed mode: 0644->0755]
src/TimeUtil/TimeUtilTools.h

index 28cb9d0..87c8937 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       wrt-plugins-tizen
 Summary:    JavaScript plugins for WebRuntime
-Version:    0.4.31
+Version:    0.4.32
 Release:    0
 Group:      Development/Libraries
 License:    Apache License, Version 2.0
@@ -60,6 +60,7 @@ BuildRequires:  pkgconfig(push)
 BuildRequires:  pkgconfig(notification)
 BuildRequires:  pkgconfig(message-port)
 BuildRequires:  pkgconfig(sync-agent)
+BuildRequires:  pkgconfig(security-server)
 BuildRequires:  expat-devel
 BuildRequires:  cmake
 BuildRequires:  gettext-devel
index 8c2071a..7dadf3b 100644 (file)
@@ -35,6 +35,7 @@ AlarmAbsolute::AlarmAbsolute()
     m_recurrenceType = AbsoluteRecurrence::NoRecurrence;
     m_id = -1;
        m_interval = -1;
+       is_registered = false;
 }
 
 AlarmAbsolute::AlarmAbsolute(service_h handle)
@@ -42,6 +43,7 @@ AlarmAbsolute::AlarmAbsolute(service_h handle)
     service_clone(&m_service_handle, handle);
     m_id = -1;
        m_interval = -1;
+       is_registered = false;
 }
 
 AlarmAbsolute::~AlarmAbsolute()
@@ -57,6 +59,7 @@ int AlarmAbsolute::getId() const
 void AlarmAbsolute::setId(const int id)
 {
     m_id = id;
+       is_registered = true;
 }
 
 bool AlarmAbsolute::isRecurrence()
index 7e65af6..fec12cd 100755 (executable)
@@ -52,6 +52,9 @@ class AlarmAbsolute
     AbsoluteRecurrence::Type getRecurrenceType();
     service_h getService();
 
+  public:
+    bool is_registered;
+
   private:
     int m_id;
     struct tm m_date;
index 1f2dcd7..f58366d 100644 (file)
@@ -31,6 +31,7 @@ AlarmRelative::AlarmRelative()
     service_add_extra_data(m_service_handle, ALARM_TYPE_KEY, ALARM_TYPE_RELATIVE_VALUE);
     m_Period = -1;
     m_id = -1;
+       is_registered = false;
 }
 
 AlarmRelative::AlarmRelative(service_h handle)
@@ -38,6 +39,7 @@ AlarmRelative::AlarmRelative(service_h handle)
     service_clone(&m_service_handle, handle);
     m_Period = -1;
     m_id = -1;
+       is_registered = false;
 }
 
 AlarmRelative::~AlarmRelative()
@@ -53,6 +55,7 @@ int AlarmRelative::getId() const
 void AlarmRelative::setId(const int id)
 {
     m_id = id;
+       is_registered = true;
 }
 
 bool AlarmRelative::isRecurrence()
index 910480b..e8a4839 100755 (executable)
@@ -55,6 +55,9 @@ class AlarmRelative
     int getPeriod();
     service_h getService();
 
+ public:
+    bool is_registered;
+
   private:
     int m_id;
     int m_delay;
index 3cf43db..feaea94 100644 (file)
@@ -228,7 +228,11 @@ JSValueRef JSAlarmAbsolute::getNextScheduledDate( JSContextRef ctx, JSObjectRef
                        throw TypeMismatchException("Private object is null");
            }
                
-        int id = privateData->getId(); 
+        if(!privateData->is_registered) {
+            return JSValueMakeNull(ctx);
+        }
+
+        int id = privateData->getId();
         int err = alarm_get_scheduled_date(id, &date);
         if(err != ALARM_ERROR_NONE) {
             return JSValueMakeNull(ctx);
@@ -303,9 +307,8 @@ JSValueRef JSAlarmAbsolute::getId(JSContextRef ctx,
            }
                
         Converter converter(ctx);
-        int id = privateData->getId();
-        if(id >= 0) {
-            std::string strId = converter.toString(id);
+               if (privateData->is_registered) {
+            std::string strId = converter.toString(privateData->getId());
             return converter.toJSValueRef(strId);
         } else {
             return JSValueMakeNull(ctx);
index d7bfcd4..bfc5d38 100644 (file)
@@ -182,6 +182,11 @@ JSValueRef JSAlarmRelative::getRemainingSeconds(JSContextRef ctx, JSObjectRef fu
 
     try {
         AlarmRelativePtr privateData = getPrivData(thisObject);
+
+        if(!privateData->is_registered) {
+            return JSValueMakeNull(ctx);
+        }
+
         id = privateData->getId();
 
         int err = alarm_get_scheduled_date(id, &date);
@@ -223,16 +228,15 @@ JSValueRef JSAlarmRelative::getId(JSContextRef ctx,
                JSValueRef* exception)
 {
     Converter converter(ctx);
-    int id;
+
     try {
         AlarmRelativePtr privateData = getPrivData(object);
                if (!privateData) {
                        throw TypeMismatchException("Private object is null");
            }
                
-        id = privateData->getId();
-        if(id >= 0) {
-            std::string strId = converter.toString(id);
+               if(privateData->is_registered) {
+            std::string strId = converter.toString(privateData->getId());
             return converter.toJSValueRef(strId);
         } else {
             return JSValueMakeNull(ctx);            
index 0a1e04a..41b0d65 100644 (file)
@@ -22,6 +22,7 @@
 #include <Commons/Exception.h>
 #include <Commons/EventReceiver.h>
 #include <Commons/Regex.h>
+#include <plugins-ipc-message/ipc_message_support.h>
 
 #include "ApplicationInformation.h"
 #include "ApplicationContext.h"
@@ -955,6 +956,12 @@ void ApplicationManager::OnRequestReceived(const EventApplicationLaunchAppContro
                        }
                }
 
+               const char* windowId = IPCMessageSupport::sendMessageToUiProcess("tizen://getWindowHandle", NULL);
+               if (windowId != NULL)
+               {
+                       service_set_window(service, atoi(windowId));
+               }
+
                service_set_operation(service, operation.c_str() );
 
                std::string uri = appControl->getUri();
index 43712aa..3a2dddf 100644 (file)
@@ -9,6 +9,7 @@ PKG_CHECK_MODULES(platform_pkgs_application REQUIRED
        capi-appfw-package-manager
        pkgmgr
        pkgmgr-info
+       wrt-plugins-ipc-message
 )
 
 ADD_DEFINITIONS("-fvisibility=hidden")
index 6ee4083..af54e14 100755 (executable)
@@ -25,13 +25,13 @@ namespace DeviceAPI {
 namespace DataControl {
 
 
-ISQLDataControlConsumerPtr DataControlFactory::getSQLDataControlConsumer() 
+ISQLDataControlConsumerPtr DataControlFactory::getSQLDataControlConsumer(std::string& provId, std::string& dataId, std::string& type
 {
-       return ISQLDataControlConsumerPtr(new SQLDataControlConsumer());
+       return ISQLDataControlConsumerPtr(new SQLDataControlConsumer(provId, dataId, type));
 }              
-IMappedDataControlConsumerPtr DataControlFactory::getMappedDataControlConsumer() 
+IMappedDataControlConsumerPtr DataControlFactory::getMappedDataControlConsumer(std::string& provId, std::string& dataId, std::string& type
 {
-       return IMappedDataControlConsumerPtr(new MappedDataControlConsumer());
+       return IMappedDataControlConsumerPtr(new MappedDataControlConsumer(provId, dataId, type));
 }
 
 ISelectDataObjectPtr DataControlFactory::getSelectDataObject() 
index c18fb37..3f84c4e 100755 (executable)
@@ -34,8 +34,8 @@ namespace DataControl {
 class DataControlFactory : DPL::Noncopyable
 {
 public:
-       ISQLDataControlConsumerPtr getSQLDataControlConsumer();
-       IMappedDataControlConsumerPtr getMappedDataControlConsumer() ;
+       ISQLDataControlConsumerPtr getSQLDataControlConsumer(std::string& provId, std::string& dataId, std::string& type);
+       IMappedDataControlConsumerPtr getMappedDataControlConsumer(std::string& provId, std::string& dataId, std::string& type) ;
        ISelectDataObjectPtr getSelectDataObject();
 
        static DataControlFactory& getInstance();
index 5f304cb..957e0da 100755 (executable)
@@ -43,9 +43,6 @@ public:
        virtual void removeValue(const EventRemoveValuePtr& event) = 0;
        virtual void getValue(const EventGetValuePtr& event) = 0;
        virtual void updateValue(const EventUpdateValuePtr& event) = 0;
-       virtual void setType(std::string& type) = 0;
-       virtual void setProviderId(const std::string& id ) = 0;
-       virtual void setDataId(const std::string& id ) = 0;
        
        virtual std::string getType() = 0;
        virtual std::string getDataId() = 0;
index d934a08..4811054 100755 (executable)
@@ -43,9 +43,6 @@ public:
        virtual void deleteData(const EventDeletePtr& event) = 0;
        virtual void selectData(const EventSelectPtr& emitter) = 0;
        virtual void updateData(const EventUpdatePtr& event) = 0;
-       virtual void setType(std::string& type) = 0;
-       virtual void setProviderId(const std::string& id ) = 0;
-       virtual void setDataId(const std::string& id ) = 0;
        
        virtual std::string getType() = 0;
        virtual std::string getDataId() = 0;
index e460038..b1c72b6 100644 (file)
@@ -118,10 +118,7 @@ bool JSMappedDataControlConsumer::hasInstance(JSContextRef context, JSObjectRef
 
 JSObjectRef JSMappedDataControlConsumer::createJSObject(JSContextRef context, std::string provId, std::string dataId, std::string type)
 {
-       IMappedDataControlConsumerPtr MappedDataControlConsumer(DataControlFactory::getInstance().getMappedDataControlConsumer());
-       MappedDataControlConsumer->setDataId(dataId);
-       MappedDataControlConsumer->setProviderId(provId);
-       MappedDataControlConsumer->setType(type);
+       IMappedDataControlConsumerPtr MappedDataControlConsumer(DataControlFactory::getInstance().getMappedDataControlConsumer(provId, dataId, type));
        JSMappedDataControlConsumerPriv* priv = new JSMappedDataControlConsumerPriv( context, MappedDataControlConsumer);
 
        return JSObjectMake(context, getClassRef(), priv);
index 96724c6..e7e0cc3 100644 (file)
@@ -118,12 +118,8 @@ bool JSSQLDataControlConsumer::hasInstance(JSContextRef context, JSObjectRef con
 
 JSObjectRef JSSQLDataControlConsumer::createJSObject(JSContextRef context, std::string provId, std::string dataId, std::string type)
 {
-       ISQLDataControlConsumerPtr SqlDataControlConsumer(DataControlFactory::getInstance().getSQLDataControlConsumer());
-       SqlDataControlConsumer->setDataId(dataId);
-       SqlDataControlConsumer->setProviderId(provId);
-       SqlDataControlConsumer->setType(type);
+       ISQLDataControlConsumerPtr SqlDataControlConsumer(DataControlFactory::getInstance().getSQLDataControlConsumer(provId, dataId, type));
        JSSQLDataControlConsumerPriv* priv = new JSSQLDataControlConsumerPriv( context, SqlDataControlConsumer);
-
        return JSObjectMake(context, getClassRef(), priv);
 }
 
index 5609380..935e5eb 100644 (file)
@@ -64,6 +64,7 @@ static const char BUNDLE_KEY_WINDOW[] = "__APP_SVC_K_WIN_ID__";
 #define OSP_K_DATACONTROL_PROVIDER      "__OSP_DATACONTROL_PROVIDER__"
 #define OSP_K_DATACONTROL_REQUEST_TYPE  "__OSP_DATACONTROL_REQUEST_TYPE__"
 #define OSP_K_DATACONTROL_PROTOCOL_VERSION  "__OSP_DATACONTROL_PROTOCOL_VERSION__"
+#define OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE "ver_2.1.0.3"
 
 
 #define RESULT_TRUE_FROM_OSP "1"
@@ -436,14 +437,14 @@ static void MappedDataControlUpdateValueCallback(bundle* b, int request_code, ap
 }
 
 }
-MappedDataControlConsumer::MappedDataControlConsumer() 
+MappedDataControlConsumer::MappedDataControlConsumer(std::string& provId, std::string& dataId, std::string& type
 {
        LoggerD("Enter");
 
-       m_appId = "";
-       m_type = "";;
-       m_dataId = "";
-       m_providerId = "";
+       m_appId = getApplicationId(provId);
+       m_type = type;;
+       m_dataId = dataId;
+       m_providerId = provId;
 
 }
 
@@ -455,25 +456,6 @@ MappedDataControlConsumer::~MappedDataControlConsumer()
 DPL::Mutex MappedDataControlConsumer::m_mutex;
 
 
-void MappedDataControlConsumer::setType(std::string& type)
-{
-       if (type != MAP_DATA_CONTROL && type != SQL_DATA_CONTROL)
-               ThrowMsg(WrtDeviceApis::Commons::ConversionException, "type mismatch");
-       
-       m_type = type;
-}
-
-void MappedDataControlConsumer::setProviderId(const std::string& id )
-{
-       m_providerId = id;
-}
-
-void MappedDataControlConsumer::setDataId(const std::string& id )
-{
-       m_dataId = id;
-}
-
-
 std::string MappedDataControlConsumer::getDataId()
 {
        return m_dataId;
@@ -503,18 +485,14 @@ std::string MappedDataControlConsumer::getApplicationId(const std::string& provI
        if (m_appId.length() == 0)
        {
        
-               LoggerD("need " << passId);
-
                if(     pkgmgr_datacontrol_get_info(passId, OSP_PKGINFO_MAP_TYPE, &appId, &access) < 0)
                {
                        ThrowMsg(WrtDeviceApis::Commons::PlatformException, "get appId error");
                }
                
-               LoggerD("need2");
 
                if (appId)
                {
-                       LoggerD(appId);
                        appIdStr = appId;
                        free(appId);
                }
@@ -671,11 +649,6 @@ void MappedDataControlConsumer::OnRequestReceived(const EventAddValuePtr& event)
                ssreqtype << _DATACONTROL_REQUEST_TYPE_MAP_INSERT;
                reqtypestr = ssreqtype.str();
 
-               // FIXME
-               // qi993y8s4e.DataControlProviderService
-               std::string appId = getApplicationId(m_providerId);
-               //.DataControlProviderService";
-
                passData = bundle_create();
                
                if (passData == NULL)
@@ -685,13 +658,14 @@ void MappedDataControlConsumer::OnRequestReceived(const EventAddValuePtr& event)
 
                appsvc_set_operation(passData, APPSVC_OPERATION_DEFAULT);
 
-               appsvc_set_appid(passData, appId.c_str());
+               appsvc_set_appid(passData, m_appId.c_str());
 
                bundle_add(passData, OSP_K_REQUEST_ID, reqIdStr.c_str());
                bundle_add(passData, OSP_K_CALLER_TYPE, OSP_V_CALLER_TYPE_OSP);
                bundle_add(passData, OSP_K_LAUNCH_TYPE, OSP_V_LAUNCH_TYPE_DATACONTROL);
                bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, reqtypestr.c_str());
                bundle_add(passData, OSP_K_DATACONTROL_PROVIDER, m_providerId.c_str());
+               bundle_add(passData, OSP_K_DATACONTROL_PROTOCOL_VERSION, OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE); // version
 
                queryItem.push_back(dataId); // dataid
                queryItem.push_back(key); // key
@@ -758,8 +732,6 @@ void MappedDataControlConsumer::OnRequestReceived(const EventRemoveValuePtr& eve
                        ThrowMsg(WrtDeviceApis::Commons::AlreadyInUseException, "Duplicated requested id");
                }
 
-
-               std::string appId = getApplicationId(m_providerId);
                passData = bundle_create();
 
                if (passData == NULL)
@@ -768,13 +740,15 @@ void MappedDataControlConsumer::OnRequestReceived(const EventRemoveValuePtr& eve
                }
 
                appsvc_set_operation(passData, APPSVC_OPERATION_DEFAULT);
-               appsvc_set_appid(passData, appId.c_str());
+               appsvc_set_appid(passData, m_appId.c_str());
 
                bundle_add(passData, OSP_K_REQUEST_ID, reqIdStr.c_str());
                bundle_add(passData, OSP_K_CALLER_TYPE, OSP_V_CALLER_TYPE_OSP);
                bundle_add(passData, OSP_K_LAUNCH_TYPE, OSP_V_LAUNCH_TYPE_DATACONTROL);
                bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, reqtypestr.c_str());
                bundle_add(passData, OSP_K_DATACONTROL_PROVIDER, m_providerId.c_str());
+               bundle_add(passData, OSP_K_DATACONTROL_PROTOCOL_VERSION, OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE); // version
+
 
                queryItem.push_back(dataId); // dataid
                queryItem.push_back(key);
@@ -840,8 +814,6 @@ void MappedDataControlConsumer::OnRequestReceived(const EventGetValuePtr& event)
                ssreqtype << _DATACONTROL_REQUEST_TYPE_MAP_QUERY;
                reqtypestr = ssreqtype.str();
 
-               std::string appId = getApplicationId(m_providerId);
-
                passData = bundle_create();
 
                if (passData == NULL)
@@ -850,14 +822,16 @@ void MappedDataControlConsumer::OnRequestReceived(const EventGetValuePtr& event)
                }
 
                appsvc_set_operation(passData, APPSVC_OPERATION_DEFAULT);
-               appsvc_set_appid(passData, appId.c_str());
+               appsvc_set_appid(passData, m_appId.c_str());
 
                bundle_add(passData, OSP_K_REQUEST_ID, reqIdStr.c_str());
                bundle_add(passData, OSP_K_CALLER_TYPE, OSP_V_CALLER_TYPE_OSP);
                bundle_add(passData, OSP_K_LAUNCH_TYPE, OSP_V_LAUNCH_TYPE_DATACONTROL);
                bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, reqtypestr.c_str());
                bundle_add(passData, OSP_K_DATACONTROL_PROVIDER, m_providerId.c_str());
-               bundle_add(passData, OSP_K_DATACONTROL_PROTOCOL_VERSION, "ver_2.1.0.1");
+               bundle_add(passData, OSP_K_DATACONTROL_PROTOCOL_VERSION, OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE); // version
+
+
 
                queryItem.push_back(dataId); // dataid
                queryItem.push_back(key);
@@ -916,7 +890,6 @@ void MappedDataControlConsumer::OnRequestReceived(const EventUpdateValuePtr& eve
                        ThrowMsg(WrtDeviceApis::Commons::AlreadyInUseException, "Duplicated requested id");
                }
                                
-               std::string appId = getApplicationId(m_providerId);
                passData = bundle_create();
 
                if (passData == NULL)
@@ -925,7 +898,7 @@ void MappedDataControlConsumer::OnRequestReceived(const EventUpdateValuePtr& eve
                }
 
                appsvc_set_operation(passData, APPSVC_OPERATION_DEFAULT);
-               appsvc_set_appid(passData, appId.c_str());
+               appsvc_set_appid(passData, m_appId.c_str());
 
                ss << reqId;
                reqIdStr = ss.str();
@@ -939,6 +912,8 @@ void MappedDataControlConsumer::OnRequestReceived(const EventUpdateValuePtr& eve
                bundle_add(passData, OSP_K_LAUNCH_TYPE, OSP_V_LAUNCH_TYPE_DATACONTROL);
                bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, reqtypestr.c_str());
                bundle_add(passData, OSP_K_DATACONTROL_PROVIDER, m_providerId.c_str());
+               bundle_add(passData, OSP_K_DATACONTROL_PROTOCOL_VERSION, OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE); // version
+
 
                queryItem.push_back(dataId); // dataid
                queryItem.push_back(key);
index 68168f4..bdb82a3 100755 (executable)
@@ -41,9 +41,6 @@ public:
        virtual void updateValue(const EventUpdateValuePtr& event);
        
        virtual ~MappedDataControlConsumer();
-       void setType(std::string& type);
-       void setProviderId(const std::string& id );
-       void setDataId(const std::string& id );
 
        std::string getType();
        std::string getDataId();
@@ -70,7 +67,7 @@ private:
        
 
 protected:
-       MappedDataControlConsumer();
+       MappedDataControlConsumer(std::string& provId, std::string& dataId, std::string& type);
 
        virtual void OnRequestReceived(const EventAddValuePtr& event);
        virtual void OnRequestReceived(const EventRemoveValuePtr& event);
index 89e23bc..e5e9783 100644 (file)
@@ -31,7 +31,7 @@
 #include <app_manager.h>
 // To get ppid
 #include <unistd.h>
-
+#include <security-server.h>
 
 namespace DeviceAPI {
 namespace DataControl {
@@ -71,10 +71,12 @@ static const char BUNDLE_KEY_WINDOW[] = "__APP_SVC_K_WIN_ID__";
 #define RESULT_TRUE_FROM_OSP "1"
 #define RESULT_FALSE_FROM_OSP "0"
 #define OSP_K_DATACONTROL_PROTOCOL_VERSION  "__OSP_DATACONTROL_PROTOCOL_VERSION__"
-#define OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE "ver_2.1.0.2"
+#define OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE "ver_2.1.0.3"
 
-#define DATACONTROL_PROTOCOL_DIR_PARENT  "/tmp/osp"
-#define DATACONTROL_PROTOCOL_DIR  "/tmp/osp/DataControlRequest"
+#define DATACONTROL_PROTOCOL_DIR_TOP  "/tmp/osp"
+#define DATACONTROL_PROTOCOL_DIR_MIDDLE  "/tmp/osp/data-control"
+#define DATACONTROL_PROTOCOL_DIR  "/tmp/osp/data-control/request"
+//#define DATACONTROL_PROTOCOL_DIR  "/tmp/osp/DataControlRequest"
 
 
 
@@ -360,14 +362,18 @@ static void sqldataControlUpdateCallback(bundle* b, int request_code, appsvc_res
 }
 }
 
-SQLDataControlConsumer::SQLDataControlConsumer(
+SQLDataControlConsumer::SQLDataControlConsumer(std::string& provId, std::string& dataId, std::string& type)
 {
        LoggerD("Enter");
 
-       m_appId = "";
-       m_type = "";;
-       m_dataId = "";
-       m_providerId = "";
+       m_type = type;
+       m_dataId = dataId;
+       m_providerId = provId;
+       
+       m_appId = getApplicationId(provId);     
+       m_ProviderPkgId = getProviderPkgId(m_appId);
+       security_server_app_give_access(m_ProviderPkgId.c_str(), -1);
+
        m_currentAppId = getCurrentApplicationId();
        createResultDir();
 }
@@ -397,24 +403,6 @@ std::string SQLDataControlConsumer::getCurrentApplicationId()
        return appId;           
 }
 
-void SQLDataControlConsumer::setType(std::string& type)
-{
-       if (type != MAP_DATA_CONTROL && type != SQL_DATA_CONTROL)
-               ThrowMsg(WrtDeviceApis::Commons::ConversionException, "type mismatch");
-       
-       m_type = type;
-}
-
-void SQLDataControlConsumer::setProviderId(const std::string& id )
-{
-       m_providerId = id;
-}
-
-void SQLDataControlConsumer::setDataId(const std::string& id )
-{
-       m_dataId = id;
-}
-
 void SQLDataControlConsumer::removeReqId(unsigned int reqId)
 {
        bool remove = false;
@@ -466,6 +454,36 @@ std::string SQLDataControlConsumer::getType()
        return m_type;
 }
 
+std::string SQLDataControlConsumer::getProviderPkgId(const std::string& appId)
+{
+       char* pkgId = NULL;
+       app_info_h handle = NULL;
+
+       if (m_ProviderPkgId.length() != 0) 
+       {
+               return m_ProviderPkgId;
+       }
+       
+       int ret = app_manager_get_app_info(appId.c_str(), &handle);
+
+       if (ret != APP_ERROR_NONE) 
+       {
+               LoggerD("Fail to get appinfo");
+               ThrowMsg(WrtDeviceApis::Commons::PlatformException, "get appId error");
+       }
+
+       ret = app_info_get_package(handle, &pkgId);
+
+       if ((ret != APP_ERROR_NONE) || (pkgId == NULL)) 
+       {
+               LoggerD("Fail to get pkg_name");
+               ThrowMsg(WrtDeviceApis::Commons::PlatformException, "get pkdid error");
+       }
+       m_ProviderPkgId = pkgId;
+       app_info_destroy(handle);
+       free(pkgId);
+       return m_ProviderPkgId; 
+}
 
 std::string SQLDataControlConsumer::getApplicationId(const std::string& provId)
 {
@@ -478,18 +496,13 @@ std::string SQLDataControlConsumer::getApplicationId(const std::string& provId)
        if (m_appId.length() == 0)
        {
        
-               LoggerD("need " << passId);
-
                if(     pkgmgr_datacontrol_get_info(passId, OSP_PKGINFO_SQL_TYPE, &appId, &access) < 0)
                {
                        ThrowMsg(WrtDeviceApis::Commons::PlatformException, "get appId error");
                }
                
-               LoggerD("need2");
-
                if (appId)
                {
-                       LoggerD(appId);
                        appIdStr = appId;
                        free(appId);
                }
@@ -622,17 +635,28 @@ void SQLDataControlConsumer::createResultDir()
     struct stat info;
     memset(&info, 0, sizeof(struct stat));
 
-    int status = lstat(DATACONTROL_PROTOCOL_DIR_PARENT, &info);
+    int status = lstat(DATACONTROL_PROTOCOL_DIR_TOP, &info);
 
        if (status != 0 && errno == ENOENT) 
        {
-               if (mkdir(DATACONTROL_PROTOCOL_DIR_PARENT, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) 
+               if (mkdir(DATACONTROL_PROTOCOL_DIR_TOP, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) 
                {
                        LoggerD("make error");
                        ThrowMsg(WrtDeviceApis::Commons::PlatformException, "result dir could not be created.");
                }
        }
-               
+
+    status = lstat(DATACONTROL_PROTOCOL_DIR_MIDDLE, &info);
+
+       if (status != 0 && errno == ENOENT) 
+       {
+               if (mkdir(DATACONTROL_PROTOCOL_DIR_MIDDLE, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) 
+               {
+                       LoggerD("make error");
+                       ThrowMsg(WrtDeviceApis::Commons::PlatformException, "result dir could not be created.");
+               }
+       }
+       
     status = lstat(DATACONTROL_PROTOCOL_DIR, &info);
 
        // already exist
@@ -692,11 +716,6 @@ void SQLDataControlConsumer::OnRequestReceived(const EventInsertPtr& event)
                ssreqtype << _DATACONTROL_REQUEST_TYPE_SQL_INSERT;
                reqtypestr = ssreqtype.str();
 
-               // FIXME
-               // qi993y8s4e.DataControlProviderService
-               std::string appId = getApplicationId(m_providerId);
-               //.DataControlProviderService";
-
                passData = bundle_create();
 
                if (passData == NULL)
@@ -706,7 +725,7 @@ void SQLDataControlConsumer::OnRequestReceived(const EventInsertPtr& event)
 
                appsvc_set_operation(passData, APPSVC_OPERATION_DEFAULT);
 
-               appsvc_set_appid(passData, appId.c_str());
+               appsvc_set_appid(passData, m_appId.c_str());
 
                bundle_add(passData, OSP_K_REQUEST_ID, reqIdStr.c_str());
                bundle_add(passData, OSP_K_CALLER_TYPE, OSP_V_CALLER_TYPE_OSP);
@@ -714,20 +733,12 @@ void SQLDataControlConsumer::OnRequestReceived(const EventInsertPtr& event)
                bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, reqtypestr.c_str());
                bundle_add(passData, OSP_K_DATACONTROL_PROVIDER, m_providerId.c_str());
                bundle_add(passData, OSP_K_DATACONTROL_PROTOCOL_VERSION, OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE); // version
+               bundle_add(passData, AUL_K_CALLER_APPID, m_currentAppId.c_str());
 
                queryItem.push_back(dataId); // dataid
                queryItem.push_back(countStr); // count
                queryItem.push_back(ipcFilename); // filepath
 
-               // 
-/*             std::map<std::string, std::string>::iterator it;
-
-               for (it = rowData->m_Data.begin(); it != rowData->m_Data.end(); ++it)
-               {
-                       queryItem.push_back(it->first);
-                       queryItem.push_back(it->second);
-               }*/
-               
                addArrayToBundle(passData, queryItem);
                saveArrayToFile(ipcFilename, rowData);
 
@@ -792,8 +803,6 @@ void SQLDataControlConsumer::OnRequestReceived(const EventDeletePtr& event)
                ssreqtype << _DATACONTROL_REQUEST_TYPE_SQL_DELETE;
                reqtypestr = ssreqtype.str();
 
-               std::string appId = getApplicationId(m_providerId);
-
                passData = bundle_create();
 
                
@@ -803,13 +812,17 @@ void SQLDataControlConsumer::OnRequestReceived(const EventDeletePtr& event)
                }
 
                appsvc_set_operation(passData, APPSVC_OPERATION_DEFAULT);
-               appsvc_set_appid(passData, appId.c_str());
+               appsvc_set_appid(passData, m_appId.c_str());
 
                bundle_add(passData, OSP_K_REQUEST_ID, reqIdStr.c_str());
                bundle_add(passData, OSP_K_CALLER_TYPE, OSP_V_CALLER_TYPE_OSP);
                bundle_add(passData, OSP_K_LAUNCH_TYPE, OSP_V_LAUNCH_TYPE_DATACONTROL);
                bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, reqtypestr.c_str());
                bundle_add(passData, OSP_K_DATACONTROL_PROVIDER, m_providerId.c_str());
+               bundle_add(passData, OSP_K_DATACONTROL_PROTOCOL_VERSION, OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE); // version
+               bundle_add(passData, AUL_K_CALLER_APPID, m_currentAppId.c_str());
+
+               
 
                queryItem.push_back(dataId); // dataid
 
@@ -886,8 +899,6 @@ void SQLDataControlConsumer::OnRequestReceived(const EventSelectPtr& event)
                ssreqtype << _DATACONTROL_REQUEST_TYPE_SQL_QUERY;
                reqtypestr = ssreqtype.str();
 
-               std::string appId = getApplicationId(m_providerId);
-
                passData = bundle_create();
 
                if (passData == NULL)
@@ -896,13 +907,16 @@ void SQLDataControlConsumer::OnRequestReceived(const EventSelectPtr& event)
                }
                        
                appsvc_set_operation(passData, APPSVC_OPERATION_DEFAULT);
-               appsvc_set_appid(passData, appId.c_str());
+               appsvc_set_appid(passData, m_appId.c_str());
 
                bundle_add(passData, OSP_K_REQUEST_ID, reqIdStr.c_str());
                bundle_add(passData, OSP_K_CALLER_TYPE, OSP_V_CALLER_TYPE_OSP);
                bundle_add(passData, OSP_K_LAUNCH_TYPE, OSP_V_LAUNCH_TYPE_DATACONTROL);
                bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, reqtypestr.c_str());
                bundle_add(passData, OSP_K_DATACONTROL_PROVIDER, m_providerId.c_str());
+               bundle_add(passData, OSP_K_DATACONTROL_PROTOCOL_VERSION, OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE); // version
+               bundle_add(passData, AUL_K_CALLER_APPID, m_currentAppId.c_str());
+
 
                queryItem.push_back(dataId); // dataid
 
@@ -1017,8 +1031,6 @@ void SQLDataControlConsumer::OnRequestReceived(const EventUpdatePtr& event)
                        ThrowMsg(WrtDeviceApis::Commons::AlreadyInUseException, "Duplicated requested id");
                }
 
-               std::string appId = getApplicationId(m_providerId);                     
-
                passData = bundle_create();
 
                if (passData == NULL)
@@ -1027,7 +1039,7 @@ void SQLDataControlConsumer::OnRequestReceived(const EventUpdatePtr& event)
                }
 
                appsvc_set_operation(passData, APPSVC_OPERATION_DEFAULT);
-               appsvc_set_appid(passData, appId.c_str());
+               appsvc_set_appid(passData, m_appId.c_str());
 
                ss << reqId;
                reqIdStr = ss.str();
@@ -1042,7 +1054,7 @@ void SQLDataControlConsumer::OnRequestReceived(const EventUpdatePtr& event)
                bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, reqtypestr.c_str());
                bundle_add(passData, OSP_K_DATACONTROL_PROVIDER, m_providerId.c_str());
                bundle_add(passData, OSP_K_DATACONTROL_PROTOCOL_VERSION, OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE);
-               
+               bundle_add(passData, AUL_K_CALLER_APPID, m_currentAppId.c_str());
 
                queryItem.push_back(dataId); // dataid
 
index 90e6a29..989c058 100755 (executable)
@@ -61,6 +61,8 @@ private:
        std::string m_appId;
        
        std::string getApplicationId(const std::string& provId);
+       std::string getProviderPkgId(const std::string& appId);
+               
        std::string getCurrentApplicationId();
        void addArrayToBundle(bundle* passData, std::vector<std::string>& array);
        std::vector<unsigned int> m_currentReqIds;
@@ -72,7 +74,7 @@ private:
 
        static DPL::Mutex m_mutex;
 protected:
-       SQLDataControlConsumer();
+       SQLDataControlConsumer(std::string& provId, std::string& dataId, std::string& type);
 
        virtual void OnRequestReceived(const EventInsertPtr& event);
        virtual void OnRequestReceived(const EventDeletePtr& event);
@@ -80,6 +82,7 @@ protected:
        virtual void OnRequestReceived(const EventUpdatePtr& event);
 private:
        std::string m_currentAppId;
+       std::string m_ProviderPkgId;
 
 
 };
index ca51a1a..503115b 100644 (file)
@@ -70,6 +70,12 @@ void ResponseDispatcher::OnAnswerReceived(const EventResolvePtr& event)
        if (event->getExceptionCode() == WrtDeviceApis::Commons::ExceptionCodes::None) {
                event->getResult()->setPermissions(data->getPerms());
                JSFile::PrivateObjectDefPtr privData(new JSFile::PrivateObjectDef(event->getResult(), JSFile::PrivateObjectDef::PermissionList()));
+               INodePtr parent = event->getResult()->getParent();
+               
+               if (parent)
+               {
+                       privData->pushParentPermissions(data->getPerms());
+               }
 
                JSObjectRef object = JSUtils::makeObject(data->getCallbackManager()->getContext(), JSFile::getClassRef(), privData);
                data->getCallbackManager()->callOnSuccess(object);
index 970fb59..aafa367 100644 (file)
@@ -395,7 +395,7 @@ void Email::create( EmailAccountInfo& account )
        m_accountId = account.getIntId();
        //MailSender::getInstance();
 
-      LoggerD("account ID : " << m_accountId);
+       LoggerD("account ID : " << m_accountId);
        ScopedMail mail(EmailService::createMailData(account));
 
        setEmailAccount(account);       //save account
@@ -548,8 +548,8 @@ void Email::readBody() {
                fseek(file.Get(), 0, SEEK_SET);
                DPL::ScopedPtr<char> data(new char[size + 1]);
                memset(data.Get(), 0, size + 1);
-        TEMP_FAILURE_RETRY(fread(data.Get(), 1, size-2, file.Get()) &&
-                           ferror(file.Get()) == 0 ? -1 : 0);
+               TEMP_FAILURE_RETRY(fread(data.Get(), 1, size, file.Get()) &&
+                                                       ferror(file.Get()) == 0 ? -1 : 0);
                setBody(data.Get());
        }
 
@@ -904,7 +904,7 @@ void Email::createSendMessage()
                if (EMAIL_ERROR_NONE != error) {
                        ThrowMsg(WrtDeviceApis::Commons::PlatformException,
                        "Couldn't add message to mailbox. [" << error << "]");
-               }
+               }
                if ( mailbox->mailbox_id )
                        m_mail->mailbox_id = mailbox->mailbox_id;
                LoggerD("mail MailBox id :" << m_mail->mailbox_id);
@@ -938,7 +938,6 @@ void Email::createSendMessage()
                             "Couldn't find message " << m_mail->mail_id << ". [" << error << "]");
                }
 
-
                if (m_mail->file_path_plain)
                        free(m_mail->file_path_plain);
                m_mail->file_path_plain = strdup(result->file_path_plain);
@@ -978,7 +977,6 @@ void Email::addMessageToDraft()
     else
     {
                DPL::Mutex::ScopedLock mx(&m_updateMutex);
-
                EmailAccountInfo account = getEmailAccount();
                m_accountId = account.getIntId();       //set account ID
                LoggerD("account ID : " << m_accountId);
@@ -995,10 +993,12 @@ void Email::addMessageToDraft()
                if (EMAIL_ERROR_NONE != error) {
                        ThrowMsg(WrtDeviceApis::Commons::PlatformException,
                        "Couldn't add message to mailbox. [" << error << "]");
-               }
+               }
                if ( mailbox->mailbox_id )
+               {
                        m_mail->mailbox_id = mailbox->mailbox_id;
-               LoggerD("mail MailBox id :" << m_mail->mailbox_id);
+                       LoggerD("mail MailBox id :" << m_mail->mailbox_id);
+               }
 
                error = email_add_mail(m_mail.Get(), NULL, 0, NULL, 0);
                if (EMAIL_ERROR_NONE != error) {
@@ -1381,9 +1381,6 @@ void Email::updateAttachments()
                        }
 
                }
-
-
-
        }
        Catch(WrtDeviceApis::Commons::PlatformException) {
           if (attachment)
index ab94f50..5dd8e44 100644 (file)
@@ -499,6 +499,9 @@ void Mms::readBodyAndAttachments(msg_struct_t& messageData)
        LoggerD("attachment count: " << attachLen);
        for (int a = 0; a < attachLen; ++a) 
        {
+               std::string tempString;
+               int tempInt;
+               
                attach = (msg_struct_t)msg_list_nth_data(attach_list, a);
                if (NULL == attach) 
                {
@@ -511,6 +514,9 @@ void Mms::readBodyAndAttachments(msg_struct_t& messageData)
 
                msg_get_str_value(attach, MSG_MMS_ATTACH_FILEPATH_STR, szFilePath, sizeof(szFilePath));
                msg_get_str_value(attach, MSG_MMS_ATTACH_FILENAME_STR, szFileName, sizeof(szFileName));
+
+               msg_get_int_value(attach, MSG_MMS_ATTACH_MIME_TYPE_INT, &tempInt);
+               tempString = indexIntToMimeTypeString((MimeType)tempInt);
                
                IAttachmentPtr att = appendAttachment(szFilePath, false);
                if ((szFileName[0] =! '\0') &&
@@ -518,10 +524,134 @@ void Mms::readBodyAndAttachments(msg_struct_t& messageData)
                        LoggerD("renaming to " << szFileName);
                        att->rename(szFileName);
                }
+               att->setMimeType(tempString);
+               att->setAttachmentID((int)a);
+               att->setDownloaded(true);
        }
        msg_release_struct(&mms_struct);
 }
 
+void Mms::readBody(msg_struct_t& messageData)
+{
+
+       int pageLen, mediaLen, attachLen, tempInt, ret;
+
+       msg_struct_t mms_struct = NULL;
+
+       msg_list_handle_t page_list = NULL;
+       msg_list_handle_t media_list = NULL;
+       msg_list_handle_t attach_list = NULL;
+       
+       msg_struct_t page = NULL;
+       msg_struct_t media = NULL;
+
+       mms_struct = msg_create_struct(MSG_STRUCT_MMS);
+       ret = msg_get_mms_struct(messageData, mms_struct);
+
+       if (ret != MSG_SUCCESS) 
+       {
+               LoggerE("cannot get mms struct");
+               ThrowMsg(WrtDeviceApis::Commons::PlatformException, "cannot get mms struct");
+       }
+
+       char szFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
+       char szFileName[MSG_FILENAME_LEN_MAX] = {0,};
+
+       msg_get_list_handle(mms_struct, MSG_MMS_PAGE_LIST_HND, (void **)&page_list);
+       pageLen = msg_list_length(page_list);
+
+       if (pageLen > 0) {
+               setMmsType(MULTIPART_RELATED);
+       } else {
+               setMmsType(MULTIPART_MIXED);
+       }
+
+       LoggerD("page count: " << pageLen);
+
+       for (int p = 0; p < pageLen; ++p) 
+       {
+               LoggerD("page " << p);
+               page = (msg_struct_t)msg_list_nth_data(page_list, p);
+               
+               if (NULL  == page) {
+                       LoggerE("returned page is null, continue");
+                       continue;
+               }
+               
+               msg_get_list_handle(page, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&media_list);
+               mediaLen = msg_list_length(media_list);
+
+               for (int m = 0; m < mediaLen; ++m) 
+               {
+                       LoggerD("media file " << m);
+                       media = (msg_struct_t)msg_list_nth_data(media_list, m);
+                       if (NULL == media) 
+                       {
+                               LoggerE("returned media is null, continue");
+                               continue;
+                       }
+
+                       msg_get_int_value(media, MSG_MMS_MEDIA_TYPE_INT, &tempInt);
+
+                       memset(szFilePath, 0, sizeof(szFilePath));
+                       msg_get_str_value(media, MSG_MMS_MEDIA_FILEPATH_STR, szFilePath, sizeof(szFilePath));
+                       
+                       if ((0 == p) && (MMS_SMIL_MEDIA_TEXT == tempInt)) 
+                       {
+                               //text value on first page goes to body attribute
+                               LoggerD("setting body from " << szFilePath);
+                               
+                               FILE* f = NULL;
+                               f = fopen(szFilePath, "r");
+                               if (!f) 
+                               {
+                                       LoggerE("cannot read file with body" << szFilePath);
+                                       ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Cannot read file with body");
+                               }
+                               fseek(f, 0, SEEK_END);
+                               long int size = ftell(f);
+                               fseek(f, 0, SEEK_SET);
+                               char* data = new (nothrow) char[size + 1];
+                               size_t error;
+                               if (data) {
+                                       memset(data, 0, size + 1);
+                                       error = fread(data, 1, size, f);
+                                       setBody(data);
+                                       delete[] data;
+                               } else {
+                                       LoggerE("body is not set");
+                               }
+                               LoggerD("message body: '" << getBody() << "'");
+                               fclose(f);
+                       } 
+                       else 
+                       {
+                               LoggerD("adding attachment " << szFilePath);
+
+                               IAttachmentPtr attachment = appendAttachment(szFilePath, false);
+                               //attachment->setMessage(this); //set IMessagePtr
+
+                               memset(szFileName, 0, sizeof(szFileName));
+                               msg_get_str_value(media, MSG_MMS_MEDIA_FILENAME_STR, szFileName, sizeof(szFileName));
+                               if ((szFileName[0] =! '\0' )&& (strnlen(szFileName, MSG_FILENAME_LEN_MAX) > 0)) 
+                               {
+                                       LoggerD("renaming to " << szFileName);
+                                       attachment->rename(szFileName);
+                               }
+                               else if (MMS_SMIL_MEDIA_TEXT == tempInt) 
+                               {
+                                       std::stringstream newName;
+                                       newName << "body_page_" << p + 1 << ".txt";
+                                       LoggerD("renaming to " << newName.str());
+                                       attachment->rename(newName.str());
+                               }
+                       }
+               }
+       }
+
+}
+
+
 bool Mms::hasAttachment()
 {
        std::size_t attachmentSize = getAttachmentsCount();
@@ -856,8 +986,8 @@ void Mms::updateBodyAndAttachments()
 
                        msg_struct_t attachment[20];                    
                        
-                       for (size_t i = 0; i < getAttachmentsRef().size(); ++i) {
-                               IAttachmentPtr att = getAttachment(i);
+                       for (size_t idx = 0; idx < getAttachmentsRef().size(); ++idx) {
+                               IAttachmentPtr att = getAttachment(idx);
                                if (!att) {
                                        continue;
                                }
@@ -874,9 +1004,19 @@ void Mms::updateBodyAndAttachments()
                                }
        
                                //this function should return valid pointer
+                               att->setMessage(SharedFromThis());      // setMessage to setMessageId
+                               att->setAttachmentID((int)idx);
+                               att->setDownloaded(true);
+
+                               int ret = mimeTypeStringToIndexInt(att->getMimeType());
+
+                               msg_mms_add_item(mms_struct, MSG_STRUCT_MMS_ATTACH, &attachment[idx]);
+                               msg_set_str_value(attachment[idx], MSG_MMS_ATTACH_FILEPATH_STR, const_cast<char*>(att->getFullPath().c_str()), MSG_FILEPATH_LEN_MAX);
 
-                               msg_mms_add_item(mms_struct, MSG_STRUCT_MMS_ATTACH, &attachment[i]);
-                               msg_set_str_value(attachment[i], MSG_MMS_ATTACH_FILEPATH_STR, const_cast<char*>(att->getFullPath().c_str()), MSG_FILEPATH_LEN_MAX);
+                               if(ret != MIME_UNKNOWN)
+                               {
+                                       msg_set_int_value(attachment[idx], MSG_MMS_ATTACH_MIME_TYPE_INT, ret);
+                               }
                                
                                LoggerD("Attachment added");
        
@@ -1110,7 +1250,7 @@ void Mms::addMessageToDraft()
                msg_set_int_value(m_messageData, MSG_MESSAGE_ID_INT, msgId);
 
                setId(convertId(msgId));
-               readAllData();
+               loadDraftMessage();
 
                msg_release_struct(&sendOpt);
 
@@ -1123,6 +1263,52 @@ void Mms::addMessageToDraft()
 
 }              
 
+void Mms::loadDraftMessage()
+{
+       LoggerD("entered");
+
+       if (getIdRef().empty() || (EMPTY_ID == getIdRef())) 
+       {
+               ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Empty id.");
+       }
+
+       msg_release_struct(&m_messageData);
+       m_messageData = NULL;
+       msg_struct_t sendOpt = NULL;
+
+       Try {
+
+               m_messageData = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+               sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+               // trying to get message from platform
+               if (MSG_SUCCESS != msg_get_message(MsgGetCommonHandle(), convertId(getIdRef()), m_messageData, sendOpt)) 
+               {
+                       LoggerE("get message error");
+                       Throw(WrtDeviceApis::Commons::PlatformException);
+               }
+               LoggerD("message found with msgId=" << getIdRef());
+
+               // read all mms dat to abstraction layer
+               readConversationId(m_messageData);
+               readPriority(m_messageData);
+               readSubject(m_messageData);
+               readFolder(m_messageData);
+               readDateTime(m_messageData);
+               readReadStatus(m_messageData);
+               readMessageStatus(m_messageData);
+               readBody(m_messageData);
+
+               msg_release_struct(&sendOpt);
+       }
+       Catch(WrtDeviceApis::Commons::PlatformException) {
+               LoggerE("exception");
+               // nothing to do
+               msg_release_struct(&sendOpt);
+       }
+
+}
+
 void Mms::readAllData()
 {
        LoggerD("entered");
@@ -1472,5 +1658,36 @@ FolderType Mms::toFolder(const std::string &folder)
     }
     ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Invalid folder");
 }
+
+MimeType Mms::mimeTypeStringToIndexInt(std::string inputString)
+{
+       const char* szMimeStr = inputString.c_str();
+       MimeType retInt = MIME_UNKNOWN;
+
+       LoggerD("szMimeStr " << szMimeStr);
+
+       for(int idx =0; mimeTable[idx].szMIME != NULL ; idx++)
+       {
+               if (!strcmp(mimeTable[idx].szMIME, szMimeStr)) {
+                       retInt = mimeTable[idx].mime;
+                       break;
+               }
+       }
+       return retInt;
+
+}
+
+std::string Mms::indexIntToMimeTypeString(MimeType inputIndex)
+{
+       std::string retString;
+       
+       for (int idx=0; mimeTable[idx].szMIME != NULL; idx++) {
+               if (inputIndex == mimeTable[idx].mime) {
+                       retString = (char *)mimeTable[idx].szMIME;
+               }
+       }
+       return retString;
+}
+
 }
 }
index 991c46f..5125fa0 100644 (file)
@@ -19,6 +19,7 @@
 #define MMS_H
 
 #include "IMms.h"
+#include "MmsMime.h"
 #include "MmsSlides.h"
 #include "MmsSlide.h"
 #include "ISendingObserver.h"
@@ -89,6 +90,8 @@ class Mms : public IMms,
 
     void addMessageToDraft();
 
+    void loadDraftMessage();
+
     void createSendMessage();
 
     void readPriority(msg_struct_t& messageData);
@@ -101,6 +104,8 @@ class Mms : public IMms,
 
     void readBodyAndAttachments(msg_struct_t& messageData);
 
+    void readBody(msg_struct_t& messageData);
+
     void readFolder(msg_struct_t& messageData);
 
     void readDateTime(msg_struct_t& messageData);
@@ -113,6 +118,10 @@ class Mms : public IMms,
 
     void readExistingMessage();
 
+    MimeType mimeTypeStringToIndexInt(std::string inputString);
+
+    std::string indexIntToMimeTypeString(MimeType inputIndex);
+
   private:
 
     std::string m_bodyFilePath;
diff --git a/src/Messaging/MmsMime.h b/src/Messaging/MmsMime.h
new file mode 100644 (file)
index 0000000..2b55894
--- /dev/null
@@ -0,0 +1,241 @@
+//\r
+// Tizen Web Device API\r
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the License);\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+//\r
+// http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+//\r
+\r
+#ifndef MessageMmsMime_H_\r
+#define MessageMmsMime_H_\r
+\r
+extern "C" {\r
+#include <msg_types.h>\r
+}\r
+\r
+typedef struct _MimeTable {\r
+       const char *szMIME;\r
+       MimeType mime;                  /* index of mime type */\r
+} MimeTable;\r
+\r
+static const MimeTable mimeTable[] = {\r
+               // 0\r
+               {"*/*",                                                                                         MIME_ASTERISK},\r
+       \r
+               // 1\r
+               {"application/xml",                                                             MIME_APPLICATION_XML},\r
+               {"application/wml+xml",                                                         MIME_APPLICATION_WML_XML},\r
+               {"application/xhtml+xml",                                                       MIME_APPLICATION_XHTML_XML},\r
+               {"application/java-vm",                                                         MIME_APPLICATION_JAVA_VM},\r
+               {"application/smil",                                                            MIME_APPLICATION_SMIL},\r
+               {"application/java-archive",                                            MIME_APPLICATION_JAVA_ARCHIVE},\r
+               {"application/java",                                                            MIME_APPLICATION_JAVA},\r
+               {"application/octet-stream",                                            MIME_APPLICATION_OCTET_STREAM},\r
+               {"application/studiom",                                                         MIME_APPLICATION_STUDIOM},\r
+               {"application/funMedia",                                                        MIME_APPLICATION_FUNMEDIA},\r
+               {"application/msword",                                                          MIME_APPLICATION_MSWORD},\r
+               {"application/pdf",                                                             MIME_APPLICATION_PDF},\r
+               {"application/sdp",                                                             MIME_APPLICATION_SDP},\r
+               {"application/ram",                                                             MIME_APPLICATION_RAM},\r
+               {"application/*",                                                                       MIME_APPLICATION_ASTERIC},\r
+       \r
+               //16\r
+               {"application/vnd.wap.xhtml+xml",                                       MIME_APPLICATION_VND_WAP_XHTMLXML},\r
+               {"application/vnd.wap.wmlc",                                            MIME_APPLICATION_VND_WAP_WMLC},\r
+               {"application/vnd.wap.wmlscriptc",                                      MIME_APPLICATION_VND_WAP_WMLSCRIPTC},\r
+               {"application/vnd.wap.wta-eventc",                                      MIME_APPLICATION_VND_WAP_WTA_EVENTC},\r
+               {"application/vnd.wap.uaprof",                                          MIME_APPLICATION_VND_WAP_UAPROF},\r
+               {"application/vnd.wap.sic",                                             MIME_APPLICATION_VND_WAP_SIC},\r
+               {"application/vnd.wap.slc",                                             MIME_APPLICATION_VND_WAP_SLC},\r
+               {"application/vnd.wap.coc",                                             MIME_APPLICATION_VND_WAP_COC},\r
+               {"application/vnd.wap.sia",                                             MIME_APPLICATION_VND_WAP_SIA},\r
+               {"application/vnd.wap,connectivity-wbxml",                      MIME_APPLICATION_VND_WAP_CONNECTIVITY_WBXML},\r
+               {"application/vnd.wap.multipart.form-data",             MIME_APPLICATION_VND_WAP_MULTIPART_FORM_DATA},\r
+               {"application/vnd.wap.multipart.byteranges",            MIME_APPLICATION_VND_WAP_MULTIPART_BYTERANGES},\r
+               {"application/vnd.wap.multipart.mixed",                         MIME_APPLICATION_VND_WAP_MULTIPART_MIXED},\r
+               {"application/vnd.wap.multipart.related",                       MIME_APPLICATION_VND_WAP_MULTIPART_RELATED},\r
+               {"application/vnd.wap.multipart.alternative",           MIME_APPLICATION_VND_WAP_MULTIPART_ALTERNATIVE},\r
+               {"application/vnd.wap.multipart.*",                             MIME_APPLICATION_VND_WAP_MULTIPART_ASTERIC},\r
+               {"application/vnd.wap.wbxml",                                           MIME_APPLICATION_VND_WAP_WBXML},\r
+               {"application/vnd.oma.dd+xml",                                          MIME_APPLICATION_VND_OMA_DD_XML},\r
+               {"application/vnd.oma.drm.message",                             MIME_APPLICATION_VND_OMA_DRM_MESSAGE},\r
+               {"application/vnd.oma.drm.content",                             MIME_APPLICATION_VND_OMA_DRM_CONTENT},\r
+               {"application/vnd.oma.drm.rights+xml",                          MIME_APPLICATION_VND_OMA_DRM_RIGHTS_XML},\r
+               {"application/vnd.oma.drm.rights+wbxml",                        MIME_APPLICATION_VND_OMA_DRM_RIGHTS_WBXML},\r
+               {"application/vnd.oma.drm.ro+xml",                                      MIME_APPLICATION_VND_OMA_DRM_RO_XML},\r
+               {"application/vnd.oma.drm.dcf",                                         MIME_APPLICATION_VND_OMA_DRM_DCF},\r
+               {"application/vnd.oma.drm.roap-pdu+xml",                        MIME_APPLICATION_VND_OMA_ROAPPDU_XML},\r
+               {"application/vnd.oma.drm.roap-trigger+xml",            MIME_APPLICATION_VND_OMA_ROAPTRIGGER_XML},\r
+               {"application/vnd.smaf",                                                        MIME_APPLICATION_VND_SMAF},\r
+               {"application/vnd.rn-realmedia",                                        MIME_APPLICATION_VND_RN_REALMEDIA},\r
+               {"application/vnd.sun.j2me.java-archive",                       MIME_APPLICATION_VND_SUN_J2ME_JAVA_ARCHIVE},\r
+               {"application/vnd.samsung.theme",                                       MIME_APPLICATION_VND_SAMSUNG_THEME},\r
+               {"application/vnd.ms-excel",                                            MIME_APPLICATION_VND_EXCEL},\r
+               {"application/vnd.ms-powerpoint",                                       MIME_APPLICATION_VND_POWERPOINT},\r
+               {"applcation/vnd.ms-word",                                                      MIME_APPLICATION_VND_MSWORD},\r
+       \r
+               //49\r
+               {"application/x-hdmlc",                                                         MIME_APPLICATION_X_HDMLC},\r
+               {"application/x-x968-user-cert",                                        MIME_APPLICATION_X_X968_USERCERT},\r
+               {"application/x-www-form-urlencoded",                           MIME_APPLICATION_X_WWW_FORM_URLENCODED},\r
+               {"application/x-smaf",                                                          MIME_APPLICATION_X_SMAF},\r
+               {"application/x-shockwave-flash",                                       MIME_APPLICATION_X_FLASH},\r
+               {"application/x-msexcel",                                                       MIME_APPLICATION_X_EXCEL},\r
+               {"application/x-mspowerpoint",                                          MIME_APPLICATION_X_POWERPOINT},\r
+       \r
+       \r
+               //56\r
+               {"audio/basic",                                                                         MIME_AUDIO_BASIC},\r
+               {"audio/mpeg",                                                                          MIME_AUDIO_MPEG},\r
+               {"audio/mp3",                                                                           MIME_AUDIO_MP3},\r
+               {"audio/mpg3",                                                                          MIME_AUDIO_MPG3},\r
+               {"audio/mpeg3",                                                                         MIME_AUDIO_MPEG3},\r
+               {"audio/mpg",                                                                           MIME_AUDIO_MPG},\r
+               {"audio/aac",                                                                           MIME_AUDIO_AAC},\r
+               {"audio/g72",                                                                           MIME_AUDIO_G72},\r
+               {"audio/amr",                                                                           MIME_AUDIO_AMR},\r
+               {"audio/amr-wb",                                                                        MIME_AUDIO_AMR_WB},\r
+               {"audio/mmf",                                                                           MIME_AUDIO_MMF},\r
+               {"audio/smaf",                                                                          MIME_AUDIO_SMAF},\r
+               {"audio/iMelody",                                                                       MIME_AUDIO_IMELODY},\r
+               {"audio/imelody",                                                                       MIME_AUDIO_IMELODY2},\r
+               {"audio/melody",                                                                        MIME_AUDIO_MELODY},\r
+               {"audio/mid",                                                                           MIME_AUDIO_MID},\r
+               {"audio/midi",                                                                          MIME_AUDIO_MIDI},\r
+               {"audio/sp-midi",                                                                       MIME_AUDIO_SP_MIDI},\r
+               {"audio/wave",                                                                          MIME_AUDIO_WAVE},\r
+               {"audio/wav",                                                                           MIME_AUDIO_WAV},\r
+               {"audio/3gpp",                                                                          MIME_AUDIO_3GPP},\r
+               {"audio/mp4",                                                                           MIME_AUDIO_MP4},\r
+               {"audio/MP4A-LATM",                                                             MIME_AUDIO_MP4A_LATM},\r
+               {"audio/m4a",                                                                           MIME_AUDIO_M4A},\r
+               {"audio/mpeg4",                                                                         MIME_AUDIO_MPEG4},\r
+               {"audio/wma",                                                                           MIME_AUDIO_WMA},\r
+               {"audio/xmf",                                                                           MIME_AUDIO_XMF},\r
+               {"audio/imy",                                                                           MIME_AUDIO_IMY},\r
+               {"audio/mobile-xmf",                                                            MIME_AUDIO_MOBILE_XMF},\r
+       \r
+               // 85\r
+               {"audio/vnd.rn-realaudio",                                                      MIME_AUDIO_VND_RN_REALAUDIO},\r
+       \r
+               //86\r
+               {"audio/x-mpeg",                                                                        MIME_AUDIO_X_MPEG},\r
+               {"audio/x-mp3",                                                                         MIME_AUDIO_X_MP3},\r
+               {"audio/x-mpeg3",                                                                       MIME_AUDIO_X_MPEG3},\r
+               {"audio/x-mpg",                                                                         MIME_AUDIO_X_MPG},\r
+               {"audio/x-amr",                                                                         MIME_AUDIO_X_AMR},\r
+               {"audio/x-mmf",                                                                         MIME_AUDIO_X_MMF},\r
+               {"audio/x-smaf",                                                                        MIME_AUDIO_X_SMAF},\r
+               {"audio/x-iMelody",                                                             MIME_AUDIO_X_IMELODY},\r
+               {"audio/x-midi",                                                                        MIME_AUDIO_X_MIDI},\r
+               {"audio/x-mpegaudio",                                                           MIME_AUDIO_X_MPEGAUDIO},\r
+               {"audio/x-pn-realaudio",                                                        MIME_AUDIO_X_PN_REALAUDIO},\r
+               {"audio/x-pn-multirate-realaudio",                                      MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO},\r
+               {"audio/x-pn-multirate-realaudio-live",                         MIME_AUDIO_X_PN_MULTIRATE_REALAUDIO_LIVE},\r
+               {"audio/x-wave",                                                                        MIME_AUDIO_X_WAVE},\r
+               {"audio/x-wav",                                                                         MIME_AUDIO_X_WAV},\r
+               {"audio/x-ms-wma",                                                                      MIME_AUDIO_X_MS_WMA},\r
+               {"audio/x-mid",                                                                         MIME_AUDIO_X_MID},\r
+               {"audio/x-ms-asf",                                                                      MIME_AUDIO_X_MS_ASF},\r
+               {"audio/x-xmf",                                                                         MIME_AUDIO_X_XMF},\r
+       \r
+               //105\r
+               {"image/gif",                                                                           MIME_IMAGE_GIF},\r
+               {"image/jpeg",                                                                          MIME_IMAGE_JPEG},\r
+               {"image/jpg",                                                                           MIME_IMAGE_JPG},\r
+               {"image/tiff",                                                                          MIME_IMAGE_TIFF},\r
+               {"image/tif",                                                                           MIME_IMAGE_TIF},\r
+               {"image/png",                                                                           MIME_IMAGE_PNG},\r
+               {"image/wbmp",                                                                          MIME_IMAGE_WBMP},\r
+               {"image/pjpeg",                                                                         MIME_IMAGE_PJPEG},\r
+               {"image/bmp",                                                                           MIME_IMAGE_BMP},\r
+               {"image/svg+xml",                                                                       MIME_IMAGE_SVG},\r
+               {"image/svg-xml",                                                                       MIME_IMAGE_SVG1},\r
+       \r
+               //116\r
+               {"image/vnd.wap.wbmp",                                                          MIME_IMAGE_VND_WAP_WBMP},\r
+               {"image/vnd.tmo.my5-gif",                                                       MIME_IMAGE_VND_TMO_GIF},\r
+               {"image/vnd.tmo.my5-jpg",                                                       MIME_IMAGE_VND_TMO_JPG},\r
+       \r
+               // 119\r
+               {"image/x-bmp",                                                                         MIME_IMAGE_X_BMP},\r
+       \r
+               // 120\r
+               {"message/rfc822",                                                                      MIME_MESSAGE_RFC822},\r
+       \r
+               //121\r
+               {"multipart/mixed",                                                             MIME_MULTIPART_MIXED},\r
+               {"multipart/related",                                                           MIME_MULTIPART_RELATED},\r
+               {"multipart/alternative",                                                       MIME_MULTIPART_ALTERNATIVE},\r
+               {"multipart/form-data",                                                         MIME_MULTIPART_FORM_DATA},\r
+               {"multipart/byterange",                                                         MIME_MULTIPART_BYTERANGE},\r
+               {"multipart/report",                                                            MIME_MULTIPART_REPORT},\r
+               {"multipart/voice-message",                                             MIME_MULTIPART_VOICE_MESSAGE},\r
+       \r
+               //128\r
+               {"text/txt",                                                                            MIME_TEXT_TXT},\r
+               {"text/html",                                                                           MIME_TEXT_HTML},\r
+               {"text/plain",                                                                          MIME_TEXT_PLAIN},\r
+               {"text/css",                                                                            MIME_TEXT_CSS},\r
+               {"text/xml",                                                                            MIME_TEXT_XML},\r
+               {"text/iMelody",                                                                        MIME_TEXT_IMELODY},\r
+       \r
+               //134\r
+               {"text/vnd.wap.wmlscript",                                                      MIME_TEXT_VND_WAP_WMLSCRIPT},\r
+               {"text/vnd.wap.wml",                                                            MIME_TEXT_VND_WAP_WML},\r
+               {"text/vnd.wap.wta-event",                                                      MIME_TEXT_VND_WAP_WTA_EVENT},\r
+               {"text/vnd.wap.connectivity-xml",                                       MIME_TEXT_VND_WAP_CONNECTIVITY_XML},\r
+               {"text/vnd.wap.si",                                                             MIME_TEXT_VND_WAP_SI},\r
+               {"text/vnd.wap.sl",                                                             MIME_TEXT_VND_WAP_SL},\r
+               {"text/vnd.wap.co",                                                             MIME_TEXT_VND_WAP_CO},\r
+               {"text/vnd.sun.j2me.app-descriptor",                            MIME_TEXT_VND_SUN_J2ME_APP_DESCRIPTOR},\r
+       \r
+       \r
+               //142\r
+               {"text/x-hdml",                                                                         MIME_TEXT_X_HDML},\r
+               {"text/x-vCalendar",                                                            MIME_TEXT_X_VCALENDAR},\r
+               {"text/x-vCard",                                                                        MIME_TEXT_X_VCARD},\r
+               {"text/x-iMelody",                                                                      MIME_TEXT_X_IMELODY},\r
+               {"text/x-imelody",                                                                      MIME_TEXT_X_IMELODY2},\r
+               {"text/x-vnote",                                                                        MIME_TEXT_X_VNOTE},\r
+       \r
+               //148\r
+               {"video/mpeg4",                                                                         MIME_VIDEO_MPEG4},\r
+               {"video/mp4",                                                                           MIME_VIDEO_MP4},\r
+               {"video/h263",                                                                          MIME_VIDEO_H263},\r
+               {"video/3gpp",                                                                          MIME_VIDEO_3GPP},\r
+               {"video/3gp",                                                                           MIME_VIDEO_3GP},\r
+               {"video/avi",                                                                           MIME_VIDEO_AVI},\r
+               {"video/sdp",                                                                           MIME_VIDEO_SDP},\r
+               {"video/mp4v-es",                                                                       MIME_VIDEO_MP4_ES},\r
+               {"video/mpeg",                                                                          MIME_VIDEO_MPEG},\r
+       \r
+               // 157\r
+               {"video/vnd.rn-realvideo",                                                      MIME_VIDEO_VND_RN_REALVIDEO},\r
+               {"video/vnd.rn-realmedia",                                                      MIME_VIDEO_VND_RN_REALMEDIA},\r
+       \r
+               //159\r
+               {"video/x-mp4",                                                                         MIME_VIDEO_X_MP4},\r
+               {"video/x-pv-mp4",                                                                      MIME_VIDEO_X_PV_MP4},\r
+               {"video/x-pn-realvideo",                                                        MIME_VIDEO_X_PN_REALVIDEO},\r
+               {"video/x-pn-multirate-realvideo",                                      MIME_VIDEO_X_PN_MULTIRATE_REALVIDEO},\r
+               {"video/x-ms-wmv",                                                                      MIME_VIDEO_X_MS_WMV},\r
+               {"video/x-ms-asf",                                                                      MIME_VIDEO_X_MS_ASF},\r
+               {"video/x-pv-pvx",                                                                      MIME_VIDEO_X_PV_PVX},\r
+\r
+               // MAX\r
+               {"",                                                                                            MIME_UNKNOWN}\r
+       \r
+       };\r
+\r
+#endif /* MessageMmsMime_H_ */\r
+\r
old mode 100644 (file)
new mode 100755 (executable)
index 93da136..d7d5653
@@ -510,7 +510,8 @@ bool TZDate::setTime(const double time) {
        UnicodeString str;
        TimeUtilTools util;
 
-       DateFormat *fmt = new SimpleDateFormat(util.getDateTimeFormat(TimeUtilTools::DATE_FORMAT, bLocale), (bLocale ? Locale::getDefault() : Locale::getEnglish()), ec);
+       Locale *defaultLocale = util.getDefaultLocale();
+       DateFormat *fmt = new SimpleDateFormat(util.getDateTimeFormat(TimeUtilTools::DATE_FORMAT, bLocale), ((bLocale && defaultLocale) ? *defaultLocale : Locale::getEnglish()), ec);
        if (U_SUCCESS(ec)) {
                fmt->setCalendar(*myCalendar);
                fmt->format(myCalendar->getTime(ec), str);
@@ -533,7 +534,8 @@ bool TZDate::setTime(const double time) {
        UnicodeString str;
        TimeUtilTools util;
 
-       DateFormat *fmt = new SimpleDateFormat(util.getDateTimeFormat(TimeUtilTools::TIME_FORMAT, bLocale), (bLocale ? Locale::getDefault() : Locale::getEnglish()), ec);
+       Locale *defaultLocale = util.getDefaultLocale();
+       DateFormat *fmt = new SimpleDateFormat(util.getDateTimeFormat(TimeUtilTools::TIME_FORMAT, bLocale), ((bLocale && defaultLocale) ? *defaultLocale : Locale::getEnglish()), ec);
        if (U_SUCCESS(ec)) {
                fmt->setCalendar(*myCalendar);
                fmt->format(myCalendar->getTime(ec), str);
@@ -557,7 +559,8 @@ bool TZDate::setTime(const double time) {
        UnicodeString str;
        TimeUtilTools util;
 
-       DateFormat *fmt = new SimpleDateFormat(util.getDateTimeFormat(TimeUtilTools::DATETIME_FORMAT, bLocale), (bLocale ? Locale::getDefault() : Locale::getEnglish()), ec);
+       Locale *defaultLocale = util.getDefaultLocale();
+       DateFormat *fmt = new SimpleDateFormat(util.getDateTimeFormat(TimeUtilTools::DATETIME_FORMAT, bLocale), ((bLocale && defaultLocale) ? *defaultLocale : Locale::getEnglish()), ec);
        if (U_SUCCESS(ec)) {
                fmt->setCalendar(*myCalendar);
                fmt->format(myCalendar->getTime(ec), str);
old mode 100644 (file)
new mode 100755 (executable)
index 73a6d1b..793a263
@@ -97,9 +97,40 @@ bool TimeUtilTools::compareTimeZoneName(Calendar *cal, const std::string &name)
        return true;
 }
 
+Locale *TimeUtilTools::getDefaultLocale() {
+       char *tempstr = vconf_get_str(VCONFKEY_REGIONFORMAT);
+       if (tempstr == NULL)
+               return NULL;
+
+       Locale *defaultLocale = NULL;
+
+       char *str_region = NULL;
+       char* p = strchr(tempstr, '.');
+       int len = strlen(tempstr) - strlen(".UTF-8");
+       if (p && len > 0) {
+               str_region = strndup(tempstr, len);     //.UTF8 => 5
+               LoggerD(str_region);
+               defaultLocale = new Locale(str_region);
+       }
+
+       if (tempstr)
+               free(tempstr);
+       if (str_region)
+               free(str_region);
+
+       if (defaultLocale->isBogus()) {
+               delete defaultLocale;
+               defaultLocale = NULL;
+       }
+       return defaultLocale;
+}
+
 UnicodeString TimeUtilTools::getDateTimeFormat(DateTimeFormatType type, bool bLocale) {
        UErrorCode ec = U_ZERO_ERROR;
-       DateTimePatternGenerator *dateTimepatten = DateTimePatternGenerator::createInstance((bLocale ? Locale::getDefault() : Locale::getEnglish()), ec);
+       Locale *defaultLocale = getDefaultLocale();
+       DateTimePatternGenerator *dateTimepatten = DateTimePatternGenerator::createInstance(((bLocale && defaultLocale) ? *defaultLocale : Locale::getEnglish()), ec);
+       if (defaultLocale)
+               delete defaultLocale;
        if (U_SUCCESS(ec)) {
                UnicodeString patten;
                LoggerD("Type : " << type);
index 0325471..6eadd15 100755 (executable)
@@ -53,6 +53,7 @@ class TimeUtilTools
        bool compareTimeZoneName(Calendar *cal, const std::string &name);
        void printDate(Calendar *cal);
        UnicodeString getDateTimeFormat(DateTimeFormatType type, bool bLocale);
+       Locale *getDefaultLocale();
 };
 
 }