summaryrefslogtreecommitdiff
path: root/email-engine/emf-etc.c
diff options
context:
space:
mode:
Diffstat (limited to 'email-engine/emf-etc.c')
-rwxr-xr-xemail-engine/emf-etc.c219
1 files changed, 219 insertions, 0 deletions
diff --git a/email-engine/emf-etc.c b/email-engine/emf-etc.c
new file mode 100755
index 0000000..b615b12
--- /dev/null
+++ b/email-engine/emf-etc.c
@@ -0,0 +1,219 @@
+/*
+* email-service
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact: Kyuho Jo <kyuho.jo@samsung.com>, Sunghyun Kwon <sh0701.kwon@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+
+
+/******************************************************************************
+ * File: emf-etc.c
+ * Desc: Mail Framework Etc Implementations
+ *
+ * Auth:
+ *
+ * History:
+ * 2006.08.16 : created
+ *****************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <vconf.h>
+#include "emflib.h"
+#include "emf-account.h"
+#include "emf-dbglog.h"
+#include "emf-global.h"
+#include "em-core-types.h"
+#include "em-core-event.h"
+#include "em-core-utils.h"
+#include "em-storage.h"
+
+
+int emf_register_event_callback(emf_action_t action, emf_event_callback callback, void* event_data)
+{
+ return em_core_register_event_callback(action, callback, event_data);
+}
+
+int emf_unregister_event_callback(emf_action_t action, emf_event_callback callback)
+{
+ return em_core_unregister_event_callback(action, callback);
+}
+
+
+EXPORT_API void emf_get_event_queue_status(int* on_sending, int* on_receiving)
+{
+ em_core_get_event_queue_status(on_sending, on_receiving);
+}
+
+EXPORT_API int emf_get_pending_job(emf_action_t action, int account_id, int mail_id, emf_event_status_type_t* status)
+{
+ EM_DEBUG_FUNC_BEGIN("action[%d], account_id[%d], mail_id[%d]", action, account_id, mail_id);
+
+ return em_core_get_pending_event(action, account_id, mail_id, status);
+}
+
+EXPORT_API int emf_cancel_job(int account_id, int handle, int* err_code)
+{
+ EM_DEBUG_FUNC_BEGIN("account_id[%d], handle[%d], err_code[%p]", account_id, handle, err_code);
+
+ int ret = false;
+ int err = EMF_ERROR_NONE;
+
+
+ if (!em_core_cancel_thread(handle, NULL, &err)) {
+ EM_DEBUG_EXCEPTION("em_core_cancel_thread failed [%d]", err);
+ goto FINISH_OFF;
+ }
+
+ ret = true;
+
+FINISH_OFF:
+ if (err_code != NULL)
+ *err_code = err;
+ EM_DEBUG_FUNC_END();
+ return ret;
+}
+
+
+EXPORT_API int emf_mail_send_mail_cancel_job(int account_id, int mail_id, int* err_code)
+{
+ EM_DEBUG_FUNC_BEGIN("account_id[%d], mail_id[%d], err_code[%p]", account_id, mail_id, err_code);
+
+ int ret = false;
+ int err = EMF_ERROR_NONE;
+ int handle = 0;
+ emf_account_t* ref_account = NULL;
+
+ if (account_id <= 0) {
+ EM_DEBUG_EXCEPTION("account_id[%d], mail_id[%d]", account_id, mail_id);
+ err = EMF_ERROR_INVALID_PARAM;
+ goto FINISH_OFF;
+ }
+
+#ifdef __FEATURE_PROGRESS_IN_OUTBOX__
+
+ /* h.gahlaut@samsung.com: Moved this code from email_cancel_send_mail API to email-service engine
+ since this code has update DB operation which is failing in context of email application process
+ with an sqlite error -> sqlite3_step fail:8 */
+
+ /* which means #define SQLITE_READONLY 8 */ /* Attempt to write a readonly database */
+ emf_mail_t* mail = NULL;
+
+ if (!em_core_mail_get_mail(mail_id, &mail, &err)) {
+ EM_DEBUG_EXCEPTION("em_core_mail_get_mail failed [%d]", err);
+ goto FINISH_OFF;
+ }
+
+ if (mail && mail->info) {
+ if (mail->info->extra_flags.status == EMF_MAIL_STATUS_SEND_CANCELED) {
+ EM_DEBUG_EXCEPTION(">>>> EMF_MAIL_STATUS_SEND_CANCELED Already set for Mail ID [ %d ]", mail_id);
+ goto FINISH_OFF;
+ }
+ else {
+ mail->info->extra_flags.status = EMF_MAIL_STATUS_SEND_CANCELED;
+
+ if(!em_core_mail_modify_extra_flag(mail_id, mail->info->extra_flags, &err)) {
+ EM_DEBUG_EXCEPTION("Failed to modify extra flag [%d]",err);
+ goto FINISH_OFF;
+ }
+ }
+ }
+
+#endif
+
+ if(!em_core_get_handle_by_mailId_from_transaction_info(mail_id , &handle )) {
+ EM_DEBUG_EXCEPTION("em_core_get_handle_by_mailId_from_transaction_info failed for mail_id[%d]", mail_id);
+ err = EMF_ERROR_HANDLE_NOT_FOUND;
+ goto FINISH_OFF;
+ }
+
+ if (!(ref_account = emf_get_account_reference(account_id))) {
+ EM_DEBUG_EXCEPTION("emf_get_account_reference failed [%d]", account_id);
+ err = EMF_ERROR_INVALID_ACCOUNT;
+ goto FINISH_OFF;
+ }
+
+ switch (ref_account->account_bind_type) {
+ case EMF_BIND_TYPE_EM_CORE :
+ if (!em_core_cancel_send_mail_thread(handle, NULL, &err)) {
+ EM_DEBUG_EXCEPTION("em_core_cancel_send_mail_thread failed [%d]", err);
+ goto FINISH_OFF;
+ }
+ break;
+
+ default:
+ EM_DEBUG_EXCEPTION("unknown account bind type...");
+ err = EMF_ERROR_INVALID_ACCOUNT;
+ goto FINISH_OFF;
+ }
+
+ if(!em_core_delete_transaction_info_by_mailId(mail_id))
+ EM_DEBUG_EXCEPTION("em_core_delete_transaction_info_by_mailId failed for mail_id[%d]", mail_id);
+
+ ret = true;
+
+FINISH_OFF:
+ if(err_code != NULL)
+ *err_code = err;
+
+#ifdef __FEATURE_PROGRESS_IN_OUTBOX__
+ if(!em_core_mail_free(&mail, 1, &err))
+ EM_DEBUG_EXCEPTION("em_core_mail_free Failed [%d ]", err);
+
+#endif
+ EM_DEBUG_FUNC_END();
+ return ret;
+}
+
+
+EXPORT_API int
+emf_clear_mail_data(int* err_code)
+{
+ EM_DEBUG_FUNC_BEGIN();
+
+ int ret = false;
+ int error = EMF_ERROR_NONE;
+
+ if (emf_init(&error)) {
+ if (!em_storage_clear_mail_data(true, &error))
+ EM_DEBUG_EXCEPTION("em_storage_clear_mail_data failed [%d]", error);
+ }
+ else {
+ EM_DEBUG_EXCEPTION("emf_init failed [%d]", error);
+ if (err_code)
+ *err_code = error;
+ return false;
+ }
+
+ em_core_check_unread_mail();
+
+ ret = true;
+
+ if (!em_storage_create_table(EMF_CREATE_DB_NORMAL, &error))
+ EM_DEBUG_EXCEPTION("em_storage_create_table failed [%d]", error);
+
+ emf_close(&error);
+
+ if (err_code)
+ *err_code = error;
+ EM_DEBUG_FUNC_END();
+ return ret;
+}
+
+
+/* --------------------------------------------------------------------------------*/