2 * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
25 #include "vcd_server_data.h"
31 std::list<vc_tts_text_data_s*> g_tts_text_data;
33 static pthread_mutex_t g_tts_text_data_mutex = PTHREAD_MUTEX_INITIALIZER;
36 static int __data_show_text_list(void)
38 SLOG(LOG_DEBUG, TAG_VCD, "----- Text list -----");
40 if (!g_tts_text_data.empty()) {
41 std::list<vc_tts_text_data_s*>::iterator iter;
42 for (iter = g_tts_text_data.begin(); (NULL != *iter && iter != g_tts_text_data.end()); ++iter) {
43 SLOG(LOG_DEBUG, TAG_VCD, "[%p] uid(%u), pid(%d), utt_id(%d), text(%s), language(%s)",
44 *iter, (*iter)->uid, (*iter)->pid, (*iter)->utt_id, (*iter)->text, (*iter)->language);
47 SLOG(LOG_DEBUG, TAG_VCD, "No Text Data");
50 SLOG(LOG_DEBUG, TAG_VCD, "---------------------");
51 return VCD_ERROR_NONE;
54 int vcd_data_add_tts_text_data(vc_tts_text_data_s* data)
57 SLOG(LOG_ERROR, TAG_VCD, "[DATA ERROR] feedback data is NULL");
58 return VCD_ERROR_INVALID_PARAMETER;
62 pthread_mutex_lock(&g_tts_text_data_mutex);
64 std::list<vc_tts_text_data_s*>::iterator iter;
67 iter = g_tts_text_data.insert(g_tts_text_data.end(), data);
68 } catch (const std::bad_alloc&) {
69 SLOG(LOG_ERROR, TAG_VCD, "[DATA][ERROR] Fail to insert tts_text_data (bad_alloc)");
70 pthread_mutex_unlock(&g_tts_text_data_mutex);
72 return VCD_ERROR_OUT_OF_MEMORY;
74 SLOG(LOG_ERROR, TAG_VCD, "[DATA][%p] uid(%u), pid(%d), utt_id(%d), text(%s), language(%s)",
75 *iter, (*iter)->uid, (*iter)->pid, (*iter)->utt_id, (*iter)->text, (*iter)->language);
78 __data_show_text_list();
80 pthread_mutex_unlock(&g_tts_text_data_mutex);
82 return VCD_ERROR_NONE;
85 int vcd_data_clear_tts_text_data(vc_tts_text_data_s** tts_text_data)
87 pthread_mutex_lock(&g_tts_text_data_mutex);
89 if (!g_tts_text_data.empty()) {
90 if (NULL != *tts_text_data) {
91 SLOG(LOG_DEBUG, TAG_VCD, "[DEBUG] uid(%u), pid(%d), utt_id(%d), text(%s), language(%s)",
92 (*tts_text_data)->uid, (*tts_text_data)->pid, (*tts_text_data)->utt_id, (*tts_text_data)->text, (*tts_text_data)->language);
94 if (NULL != (*tts_text_data)->text) {
95 free((*tts_text_data)->text);
96 (*tts_text_data)->text = NULL;
98 if (NULL != (*tts_text_data)->language) {
99 free((*tts_text_data)->language);
100 (*tts_text_data)->language = NULL;
103 free(*tts_text_data);
104 *tts_text_data = NULL;
108 pthread_mutex_unlock(&g_tts_text_data_mutex);
110 return VCD_ERROR_NONE;
113 int vcd_data_get_tts_text_data(unsigned int tts_uid, vc_tts_text_data_s** data)
115 SLOG(LOG_INFO, TAG_VCD, "[DATA] Get tts text data : uid(%u)", tts_uid);
117 /* mutex is locked */
118 pthread_mutex_lock(&g_tts_text_data_mutex);
120 if (0 == g_tts_text_data.size()) {
121 SLOG(LOG_ERROR, TAG_VCD, "[DATA ERROR] There is no tts_text data");
123 pthread_mutex_unlock(&g_tts_text_data_mutex);
124 return VCD_ERROR_INVALID_PARAMETER;
127 std::list<vc_tts_text_data_s *>::iterator iter;
128 iter = g_tts_text_data.begin();
129 while (iter != g_tts_text_data.end()) {
130 if (tts_uid == (*iter)->uid) {
132 iter = g_tts_text_data.erase(iter);
139 __data_show_text_list();
142 pthread_mutex_unlock(&g_tts_text_data_mutex);
144 return VCD_ERROR_NONE;
147 int vcd_data_get_first_tts_text_data(vc_tts_text_data_s** data)
149 SLOG(LOG_INFO, TAG_VCD, "[DATA] Get first tts text data");
152 __data_show_text_list();
155 /* mutex is locked */
156 pthread_mutex_lock(&g_tts_text_data_mutex);
158 if (0 == g_tts_text_data.size()) {
159 SLOG(LOG_ERROR, TAG_VCD, "[DATA ERROR] There is no tts_text data");
161 pthread_mutex_unlock(&g_tts_text_data_mutex);
162 return VCD_ERROR_INVALID_PARAMETER;
165 std::list<vc_tts_text_data_s*>::iterator iter;
167 if (!g_tts_text_data.empty()) {
168 iter = g_tts_text_data.begin();
170 g_tts_text_data.pop_front();
173 pthread_mutex_unlock(&g_tts_text_data_mutex);
175 return VCD_ERROR_NONE;
178 int vcd_data_get_tts_text_data_size(void)
180 /* mutex is locked */
181 pthread_mutex_lock(&g_tts_text_data_mutex);
182 int size = g_tts_text_data.size();
184 SLOG(LOG_INFO, TAG_VCD, "[DATA] get feedback data size(%d)", size);
186 /* mutex is unlocked */
187 pthread_mutex_unlock(&g_tts_text_data_mutex);