Add 3.0 APIs and sync APIs same as 2.4
[platform/core/convergence/service-adaptor.git] / client / sal_service_task.c
1 /*
2  * Service Task
3  *
4  * Copyright (c) 2014 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
5  *
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  */
19
20 #include <stdio.h>
21 #include <string.h>
22 #include <glib.h>
23 #include <gio/gio.h>
24
25 #include <app.h>
26
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"
35
36 //******************************************************************************
37 //* Global variables and defines
38 //******************************************************************************
39
40 GList *service_tasks = NULL;
41 GThreadPool *thread_pool = NULL;
42
43 //******************************************************************************
44 //* Private interface
45 //******************************************************************************
46
47 //******************************************************************************
48 //* Private interface definition
49 //******************************************************************************
50
51 static void _service_task_async_func(gpointer data, gpointer user_data)
52 {
53         service_task_h task = (service_task_h) data;
54
55         if (NULL != task->oauth1)
56         {
57                 service_auth_oauth1_start(task->oauth1);
58         }
59         else if (NULL != task->cloud_file)
60         {
61                 service_storage_cloud_start(task->cloud_file);
62         }
63         else
64         {
65                 return;
66         }
67
68         service_tasks = g_list_append(service_tasks, task);
69 }
70
71 //******************************************************************************
72 //* Public interface definition
73 //******************************************************************************
74
75 API int service_task_connect()
76 {
77         SAL_FN_CALL;
78
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");
81
82         return SERVICE_ADAPTOR_ERROR_NONE;
83 }
84
85 API int service_task_disconnect()
86 {
87         SAL_FN_CALL;
88
89         // TODO: stop current stated task
90
91         return SERVICE_ADAPTOR_ERROR_NONE;
92 }
93
94 API int service_task_start(service_task_h task)
95 {
96         SAL_FN_CALL;
97
98         RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
99
100         g_thread_pool_push(thread_pool, (gpointer) task, NULL);
101
102         return SERVICE_ADAPTOR_ERROR_NONE;
103 }
104
105 API int service_task_stop(service_task_h task)
106 {
107         SAL_FN_CALL;
108
109         RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
110
111         if (NULL != task->cloud_file)
112         {
113                 service_storage_cloud_stop(task->cloud_file);
114         }
115         else
116         {
117                 return SERVICE_ADAPTOR_ERROR_NO_DATA;
118         }
119
120         service_tasks = g_list_remove(service_tasks, task);
121
122         return SERVICE_ADAPTOR_ERROR_NONE;
123 }
124
125 API int service_task_set_uri(service_task_h task, const char *uri)
126 {
127         SAL_FN_CALL;
128
129         RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
130         RETV_IF(NULL == uri, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
131
132         task->uri = strdup(uri);
133
134         return SERVICE_ADAPTOR_ERROR_NONE;
135 }
136
137 API int service_task_get_uri(service_task_h task, char **uri)
138 {
139         SAL_FN_CALL;
140
141         RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
142         RETV_IF(NULL == uri, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
143
144         *uri = strdup(task->uri);
145
146         return SERVICE_ADAPTOR_ERROR_NONE;
147 }
148
149 API int service_task_set_progress_callback(service_task_h task, service_task_progress_cb callback, void *user_data)
150 {
151         SAL_FN_CALL;
152
153         RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
154         RETV_IF(NULL == callback, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
155
156         task->progress_callback = callback;
157
158         return SERVICE_ADAPTOR_ERROR_NONE;
159 }
160
161 API int service_task_unset_progress_callback(service_task_h task)
162 {
163         SAL_FN_CALL;
164
165         RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
166
167         task->progress_callback = NULL;
168
169         return SERVICE_ADAPTOR_ERROR_NONE;
170 }
171
172 API int service_task_set_state_changed_callback(service_task_h task, service_task_state_changed_cb callback, void *user_data)
173 {
174         SAL_FN_CALL;
175
176         RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
177         RETV_IF(NULL == callback, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
178
179         task->state_callback = callback;
180
181         return SERVICE_ADAPTOR_ERROR_NONE;
182 }
183
184 API int  service_task_unset_state_changed_callback(service_task_h task)
185 {
186         SAL_FN_CALL;
187
188         RETV_IF(NULL == task, SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER);
189
190         task->state_callback = NULL;
191
192         return SERVICE_ADAPTOR_ERROR_NONE;
193 }