4 * Copyright (c) 2014 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
27 #include "service_adaptor_errors.h"
28 #include "service_adaptor_internal.h"
29 #include "sal_service_adaptor.h"
30 #include "sal_service_adaptor_internal.h"
31 #include "sal_service_task.h"
32 #include "sal_service_task_internal.h"
33 #include "sal_service_auth_internal.h"
34 #include "sal_service_storage_internal.h"
36 //******************************************************************************
37 //* Global variables and defines
38 //******************************************************************************
40 GList *service_tasks = NULL;
41 GThreadPool *thread_pool = NULL;
43 //******************************************************************************
45 //******************************************************************************
47 //******************************************************************************
48 //* Private interface definition
49 //******************************************************************************
51 static void _service_task_async_func(gpointer data, gpointer user_data)
53 service_task_h task = (service_task_h) data;
55 if (NULL != task->oauth1)
57 service_auth_oauth1_start(task->oauth1);
59 else if (NULL != task->cloud_file)
61 service_storage_cloud_start(task->cloud_file);
68 service_tasks = g_list_append(service_tasks, task);
71 //******************************************************************************
72 //* Public interface definition
73 //******************************************************************************
75 API int service_task_connect()
79 thread_pool = g_thread_pool_new(_service_task_async_func, NULL, -1, FALSE, NULL);
80 RETVM_IF(NULL == thread_pool, SERVICE_ADAPTOR_ERROR_SYSTEM, "g_thread_pool_new() Failed");
82 return SERVICE_ADAPTOR_ERROR_NONE;
85 API int service_task_disconnect()
89 // TODO: stop current stated task
91 return SERVICE_ADAPTOR_ERROR_NONE;
94 API int service_task_start(service_task_h task)
98 RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
100 g_thread_pool_push(thread_pool, (gpointer) task, NULL);
102 return SERVICE_ADAPTOR_ERROR_NONE;
105 API int service_task_stop(service_task_h task)
109 RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
111 if (NULL != task->cloud_file)
113 service_storage_cloud_stop(task->cloud_file);
117 return SERVICE_ADAPTOR_ERROR_NO_DATA;
120 service_tasks = g_list_remove(service_tasks, task);
122 return SERVICE_ADAPTOR_ERROR_NONE;
125 API int service_task_set_uri(service_task_h task, const char *uri)
129 RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
130 RETV_IF(NULL == uri, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
132 task->uri = strdup(uri);
134 return SERVICE_ADAPTOR_ERROR_NONE;
137 API int service_task_get_uri(service_task_h task, char **uri)
141 RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
142 RETV_IF(NULL == uri, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
144 *uri = strdup(task->uri);
146 return SERVICE_ADAPTOR_ERROR_NONE;
149 API int service_task_set_progress_callback(service_task_h task, service_task_progress_cb callback, void *user_data)
153 RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
154 RETV_IF(NULL == callback, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
156 task->progress_callback = callback;
158 return SERVICE_ADAPTOR_ERROR_NONE;
161 API int service_task_unset_progress_callback(service_task_h task)
165 RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
167 task->progress_callback = NULL;
169 return SERVICE_ADAPTOR_ERROR_NONE;
172 API int service_task_set_state_changed_callback(service_task_h task, service_task_state_changed_cb callback, void *user_data)
176 RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
177 RETV_IF(NULL == callback, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
179 task->state_callback = callback;
181 return SERVICE_ADAPTOR_ERROR_NONE;
184 API int service_task_unset_state_changed_callback(service_task_h task)
188 RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
190 task->state_callback = NULL;
192 return SERVICE_ADAPTOR_ERROR_NONE;