2 * Copyright (c) 2011 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.
18 #include <media_info_private.h>
19 #include <media_util_private.h>
20 #include <media_pvr.h>
23 int media_pvr_foreach_media_from_db(filter_h filter, media_pvr_cb callback, void *user_data)
25 content_retip_if_fail(callback);
27 return _media_db_get_pvr(filter, callback, user_data);
30 int media_pvr_destroy(media_pvr_h pvr)
32 media_pvr_s *_pvr = (media_pvr_s*)pvr;
34 content_retip_if_fail(pvr);
36 g_free(_pvr->media_id);
37 g_free(_pvr->storage_id);
38 g_free(_pvr->channel_name);
39 g_free(_pvr->channel_num);
40 g_free(_pvr->program_title);
41 g_free(_pvr->program_crid);
42 g_free(_pvr->guidance);
43 g_free(_pvr->synopsis);
45 g_free(_pvr->language);
47 g_free(_pvr->modified_month);
48 g_free(_pvr->private_data);
51 return MEDIA_CONTENT_ERROR_NONE;
54 int media_pvr_clone(media_pvr_h *dst, media_pvr_h src)
56 media_pvr_s *_src = (media_pvr_s*)src;
58 content_retip_if_fail(dst);
59 content_retip_if_fail(src);
61 media_pvr_s *_dst = g_new0(media_pvr_s, 1);
63 _dst->media_id = g_strdup(_src->media_id);
64 _dst->channel_name = g_strdup(_src->channel_name);
65 _dst->channel_num = g_strdup(_src->channel_num);
66 _dst->program_title = g_strdup(_src->program_title);
67 _dst->program_crid = g_strdup(_src->program_crid);
68 _dst->guidance = g_strdup(_src->guidance);
69 _dst->synopsis = g_strdup(_src->synopsis);
70 _dst->genre = g_strdup(_src->genre);
71 _dst->language = g_strdup(_src->language);
72 _dst->path = g_strdup(_src->path);
73 _dst->storage_id = g_strdup(_src->storage_id);
74 _dst->modified_month = g_strdup(_src->modified_month);
75 _dst->private_data = g_strdup(_src->private_data);
76 _dst->duration = _src->duration;
77 _dst->timezone = _src->timezone;
78 _dst->ptc = _src->ptc;
79 _dst->major = _src->major;
80 _dst->minor = _src->minor;
81 _dst->channel_type = _src->channel_type;
82 _dst->program_num = _src->program_num;
83 _dst->service_profile = _src->service_profile;
84 _dst->timer_record = _src->timer_record;
85 _dst->series_record = _src->series_record;
87 _dst->subtitle = _src->subtitle;
88 _dst->ttx = _src->ttx;
90 _dst->hard_of_hearing_radio = _src->hard_of_hearing_radio;
91 _dst->data_service = _src->data_service;
92 _dst->content_lock = _src->content_lock;
93 _dst->embargo_time = _src->embargo_time;
94 _dst->expiry_time = _src->expiry_time;
95 _dst->size = _src->size;
96 _dst->parental_rating = _src->parental_rating;
97 _dst->start_time = _src->start_time;
98 _dst->program_start_time = _src->program_start_time;
99 _dst->program_end_time = _src->program_end_time;
100 _dst->program_date = _src->program_date;
101 _dst->content_watch = _src->content_watch;
102 _dst->has_audio_only = _src->has_audio_only;
103 _dst->is_local_record = _src->is_local_record;
104 _dst->resolution = _src->resolution;
105 _dst->aspectratio = _src->aspectratio;
106 _dst->sports_type = _src->sports_type;
107 _dst->guidance_length = _src->guidance_length;
108 _dst->tvmode = _src->tvmode;
109 _dst->play_count = _src->play_count;
111 *dst = (media_pvr_h)_dst;
113 return MEDIA_CONTENT_ERROR_NONE;
116 int media_pvr_get_pvr_from_db(const char *media_id, media_pvr_h *pvr)
118 int ret = MEDIA_CONTENT_ERROR_NONE;
119 char *select_query = NULL;
120 sqlite3_stmt *stmt = NULL;
122 content_retip_if_fail(STRING_VALID(media_id));
123 content_retip_if_fail(pvr);
125 select_query = sqlite3_mprintf(SELECT_PVR_FROM_PVR, media_id);
127 ret = _content_get_result(select_query, &stmt);
128 sqlite3_free(select_query);
129 content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
131 media_pvr_s *_pvr = NULL;
133 if (sqlite3_step(stmt) == SQLITE_ROW) {
134 _pvr = g_new0(media_pvr_s, 1);
136 _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr);
138 *pvr = (media_info_h)_pvr;
140 content_error("Nonexistent media_id[%s]", media_id);
141 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
144 SQLITE3_FINALIZE(stmt);
149 int media_pvr_get_media_id(media_pvr_h pvr, char **media_id)
151 media_pvr_s *_pvr = (media_pvr_s*)pvr;
153 content_retip_if_fail(pvr);
154 content_retip_if_fail(media_id);
156 *media_id = g_strdup(_pvr->media_id);
158 return MEDIA_CONTENT_ERROR_NONE;
161 int media_pvr_get_channel_name(media_pvr_h pvr, char **channel_name)
163 media_pvr_s *_pvr = (media_pvr_s*)pvr;
165 content_retip_if_fail(pvr);
166 content_retip_if_fail(channel_name);
168 *channel_name = g_strdup(_pvr->channel_name);
170 return MEDIA_CONTENT_ERROR_NONE;
173 int media_pvr_get_channel_num(media_pvr_h pvr, char **channel_num)
175 media_pvr_s *_pvr = (media_pvr_s*)pvr;
177 content_retip_if_fail(pvr);
178 content_retip_if_fail(channel_num);
180 *channel_num = g_strdup(_pvr->channel_num);
182 return MEDIA_CONTENT_ERROR_NONE;
185 int media_pvr_get_program_title(media_pvr_h pvr, char **program_title)
187 media_pvr_s *_pvr = (media_pvr_s*)pvr;
189 content_retip_if_fail(pvr);
190 content_retip_if_fail(program_title);
192 *program_title = g_strdup(_pvr->program_title);
194 return MEDIA_CONTENT_ERROR_NONE;
197 int media_pvr_get_program_crid(media_pvr_h pvr, char **program_crid)
199 media_pvr_s *_pvr = (media_pvr_s*)pvr;
201 content_retip_if_fail(pvr);
202 content_retip_if_fail(program_crid);
204 *program_crid = g_strdup(_pvr->program_crid);
206 return MEDIA_CONTENT_ERROR_NONE;
209 int media_pvr_get_guidance(media_pvr_h pvr, char **guidance)
211 media_pvr_s *_pvr = (media_pvr_s*)pvr;
213 content_retip_if_fail(pvr);
214 content_retip_if_fail(guidance);
216 *guidance = g_strdup(_pvr->guidance);
218 return MEDIA_CONTENT_ERROR_NONE;
221 int media_pvr_get_synopsis(media_pvr_h pvr, char **synopsis)
223 media_pvr_s *_pvr = (media_pvr_s*)pvr;
225 content_retip_if_fail(pvr);
226 content_retip_if_fail(synopsis);
228 *synopsis = g_strdup(_pvr->synopsis);
230 return MEDIA_CONTENT_ERROR_NONE;
233 int media_pvr_get_genre(media_pvr_h pvr, char **genre)
235 media_pvr_s *_pvr = (media_pvr_s*)pvr;
237 content_retip_if_fail(pvr);
238 content_retip_if_fail(genre);
240 *genre = g_strdup(_pvr->genre);
242 return MEDIA_CONTENT_ERROR_NONE;
245 int media_pvr_get_language(media_pvr_h pvr, char **language)
247 media_pvr_s *_pvr = (media_pvr_s*)pvr;
249 content_retip_if_fail(pvr);
250 content_retip_if_fail(language);
252 *language = g_strdup(_pvr->language);
254 return MEDIA_CONTENT_ERROR_NONE;
257 int media_pvr_get_path(media_pvr_h pvr, char **path)
259 media_pvr_s *_pvr = (media_pvr_s*)pvr;
261 content_retip_if_fail(pvr);
262 content_retip_if_fail(path);
264 *path = g_strdup(_pvr->path);
266 return MEDIA_CONTENT_ERROR_NONE;
269 int media_pvr_get_storage_id(media_pvr_h pvr, char **storage_id)
271 media_pvr_s *_pvr = (media_pvr_s*)pvr;
273 content_retip_if_fail(pvr);
274 content_retip_if_fail(storage_id);
276 *storage_id = g_strdup(_pvr->storage_id);
278 return MEDIA_CONTENT_ERROR_NONE;
281 int media_pvr_get_size(media_pvr_h pvr, unsigned long long *size)
283 media_pvr_s *_pvr = (media_pvr_s*)pvr;
285 content_retip_if_fail(pvr);
286 content_retip_if_fail(size);
290 return MEDIA_CONTENT_ERROR_NONE;
293 int media_pvr_get_timezone(media_pvr_h pvr, int *timezone)
295 media_pvr_s *_pvr = (media_pvr_s*)pvr;
297 content_retip_if_fail(pvr);
298 content_retip_if_fail(timezone);
300 *timezone = _pvr->timezone;
302 return MEDIA_CONTENT_ERROR_NONE;
305 int media_pvr_get_ptc(media_pvr_h pvr, int *ptc)
307 media_pvr_s *_pvr = (media_pvr_s*)pvr;
309 content_retip_if_fail(pvr);
310 content_retip_if_fail(ptc);
314 return MEDIA_CONTENT_ERROR_NONE;
317 int media_pvr_get_major(media_pvr_h pvr, int *major)
319 media_pvr_s *_pvr = (media_pvr_s*)pvr;
321 content_retip_if_fail(pvr);
322 content_retip_if_fail(major);
324 *major = _pvr->major;
326 return MEDIA_CONTENT_ERROR_NONE;
329 int media_pvr_get_minor(media_pvr_h pvr, int *minor)
331 media_pvr_s *_pvr = (media_pvr_s*)pvr;
333 content_retip_if_fail(pvr);
334 content_retip_if_fail(minor);
336 *minor = _pvr->minor;
338 return MEDIA_CONTENT_ERROR_NONE;
341 int media_pvr_get_channel_type(media_pvr_h pvr, int *channel_type)
343 media_pvr_s *_pvr = (media_pvr_s*)pvr;
345 content_retip_if_fail(pvr);
346 content_retip_if_fail(channel_type);
348 *channel_type = _pvr->channel_type;
350 return MEDIA_CONTENT_ERROR_NONE;
353 int media_pvr_get_program_num(media_pvr_h pvr, int *program_num)
355 media_pvr_s *_pvr = (media_pvr_s*)pvr;
357 content_retip_if_fail(pvr);
358 content_retip_if_fail(program_num);
360 *program_num = _pvr->program_num;
362 return MEDIA_CONTENT_ERROR_NONE;
365 int media_pvr_get_service_profile(media_pvr_h pvr, unsigned int *service_profile)
367 media_pvr_s *_pvr = (media_pvr_s*)pvr;
369 content_retip_if_fail(pvr);
370 content_retip_if_fail(service_profile);
372 *service_profile = _pvr->service_profile;
374 return MEDIA_CONTENT_ERROR_NONE;
377 int media_pvr_get_duration(media_pvr_h pvr, int *duration)
379 media_pvr_s *_pvr = (media_pvr_s*)pvr;
381 content_retip_if_fail(pvr);
382 content_retip_if_fail(duration);
384 *duration = _pvr->duration;
386 return MEDIA_CONTENT_ERROR_NONE;
389 int media_pvr_get_embargo_time(media_pvr_h pvr, int *embargo_time)
391 media_pvr_s *_pvr = (media_pvr_s*)pvr;
393 content_retip_if_fail(pvr);
394 content_retip_if_fail(embargo_time);
396 *embargo_time = _pvr->embargo_time;
398 return MEDIA_CONTENT_ERROR_NONE;
401 int media_pvr_get_expiry_time(media_pvr_h pvr, int *expiry_time)
403 media_pvr_s *_pvr = (media_pvr_s*)pvr;
405 content_retip_if_fail(pvr);
406 content_retip_if_fail(expiry_time);
408 *expiry_time = _pvr->expiry_time;
410 return MEDIA_CONTENT_ERROR_NONE;
413 int media_pvr_get_parental_rating(media_pvr_h pvr, int *parental_rating)
415 media_pvr_s *_pvr = (media_pvr_s*)pvr;
417 content_retip_if_fail(pvr);
418 content_retip_if_fail(parental_rating);
420 *parental_rating = _pvr->parental_rating;
422 return MEDIA_CONTENT_ERROR_NONE;
425 int media_pvr_get_start_time(media_pvr_h pvr, int *start_time)
427 media_pvr_s *_pvr = (media_pvr_s*)pvr;
429 content_retip_if_fail(pvr);
430 content_retip_if_fail(start_time);
432 *start_time = _pvr->start_time;
434 return MEDIA_CONTENT_ERROR_NONE;
437 int media_pvr_get_program_start_time(media_pvr_h pvr, int *program_start_time)
439 media_pvr_s *_pvr = (media_pvr_s*)pvr;
441 content_retip_if_fail(pvr);
442 content_retip_if_fail(program_start_time);
444 *program_start_time = _pvr->program_start_time;
446 return MEDIA_CONTENT_ERROR_NONE;
449 int media_pvr_get_program_end_time(media_pvr_h pvr, int *end_time)
451 media_pvr_s *_pvr = (media_pvr_s*)pvr;
453 content_retip_if_fail(pvr);
454 content_retip_if_fail(end_time);
456 *end_time = _pvr->program_end_time;
458 return MEDIA_CONTENT_ERROR_NONE;
461 int media_pvr_get_program_date(media_pvr_h pvr, int *program_date)
463 media_pvr_s *_pvr = (media_pvr_s*)pvr;
465 content_retip_if_fail(pvr);
466 content_retip_if_fail(program_date);
468 *program_date = _pvr->program_date;
470 return MEDIA_CONTENT_ERROR_NONE;
473 int media_pvr_get_timer_record(media_pvr_h pvr, bool* timer_record)
475 media_pvr_s *_pvr = (media_pvr_s*)pvr;
477 content_retip_if_fail(pvr);
478 content_retip_if_fail(timer_record);
480 *timer_record = _pvr->timer_record;
482 return MEDIA_CONTENT_ERROR_NONE;
485 int media_pvr_get_series_record(media_pvr_h pvr, bool* series_record)
487 media_pvr_s *_pvr = (media_pvr_s*)pvr;
489 content_retip_if_fail(pvr);
490 content_retip_if_fail(series_record);
492 *series_record = _pvr->series_record;
494 return MEDIA_CONTENT_ERROR_NONE;
497 int media_pvr_get_hd(media_pvr_h pvr, int* hd)
499 media_pvr_s *_pvr = (media_pvr_s*)pvr;
501 content_retip_if_fail(pvr);
502 content_retip_if_fail(hd);
506 return MEDIA_CONTENT_ERROR_NONE;
509 int media_pvr_get_subtitle(media_pvr_h pvr, bool* subtitle)
511 media_pvr_s *_pvr = (media_pvr_s*)pvr;
513 content_retip_if_fail(pvr);
514 content_retip_if_fail(subtitle);
516 *subtitle = _pvr->subtitle;
518 return MEDIA_CONTENT_ERROR_NONE;
521 int media_pvr_get_ttx(media_pvr_h pvr, bool* ttx)
523 media_pvr_s *_pvr = (media_pvr_s*)pvr;
525 content_retip_if_fail(pvr);
526 content_retip_if_fail(ttx);
530 return MEDIA_CONTENT_ERROR_NONE;
533 int media_pvr_get_ad(media_pvr_h pvr, bool* ad)
535 media_pvr_s *_pvr = (media_pvr_s*)pvr;
537 content_retip_if_fail(pvr);
538 content_retip_if_fail(ad);
542 return MEDIA_CONTENT_ERROR_NONE;
545 int media_pvr_get_hard_of_hearing_radio(media_pvr_h pvr, bool* hard_of_hearing_radio)
547 media_pvr_s *_pvr = (media_pvr_s*)pvr;
549 content_retip_if_fail(pvr);
550 content_retip_if_fail(hard_of_hearing_radio);
552 *hard_of_hearing_radio = _pvr->hard_of_hearing_radio;
554 return MEDIA_CONTENT_ERROR_NONE;
557 int media_pvr_get_data_service(media_pvr_h pvr, bool* data_service)
559 media_pvr_s *_pvr = (media_pvr_s*)pvr;
561 content_retip_if_fail(pvr);
562 content_retip_if_fail(data_service);
564 *data_service = _pvr->data_service;
566 return MEDIA_CONTENT_ERROR_NONE;
569 int media_pvr_get_content_lock(media_pvr_h pvr, bool* content_lock)
571 media_pvr_s *_pvr = (media_pvr_s*)pvr;
573 content_retip_if_fail(pvr);
574 content_retip_if_fail(content_lock);
576 *content_lock = _pvr->content_lock;
578 return MEDIA_CONTENT_ERROR_NONE;
581 int media_pvr_get_content_watch(media_pvr_h pvr, bool* content_watch)
583 media_pvr_s *_pvr = (media_pvr_s*)pvr;
585 content_retip_if_fail(pvr);
586 content_retip_if_fail(content_watch);
588 *content_watch = _pvr->content_watch;
590 return MEDIA_CONTENT_ERROR_NONE;
593 int media_pvr_get_has_audio_only(media_pvr_h pvr, bool* has_audio_only)
595 media_pvr_s *_pvr = (media_pvr_s*)pvr;
597 content_retip_if_fail(pvr);
598 content_retip_if_fail(has_audio_only);
600 *has_audio_only = _pvr->has_audio_only;
602 return MEDIA_CONTENT_ERROR_NONE;
605 int media_pvr_get_is_local_record(media_pvr_h pvr, bool* is_local_record)
607 media_pvr_s *_pvr = (media_pvr_s*)pvr;
609 content_retip_if_fail(pvr);
610 content_retip_if_fail(is_local_record);
612 *is_local_record = _pvr->is_local_record;
614 return MEDIA_CONTENT_ERROR_NONE;
617 int media_pvr_get_resolution(media_pvr_h pvr, media_pvr_resolution_e* resolution)
619 media_pvr_s *_pvr = (media_pvr_s*)pvr;
621 content_retip_if_fail(pvr);
622 content_retip_if_fail(resolution);
624 *resolution = _pvr->resolution;
626 return MEDIA_CONTENT_ERROR_NONE;
629 int media_pvr_get_aspectratio(media_pvr_h pvr, media_pvr_aspectratio_e* aspectratio)
631 media_pvr_s *_pvr = (media_pvr_s*)pvr;
633 content_retip_if_fail(pvr);
634 content_retip_if_fail(aspectratio);
636 *aspectratio = _pvr->aspectratio;
638 return MEDIA_CONTENT_ERROR_NONE;
641 int media_pvr_get_modified_month(media_pvr_h pvr, char **modified_month)
643 media_pvr_s *_pvr = (media_pvr_s*)pvr;
645 content_retip_if_fail(pvr);
646 content_retip_if_fail(modified_month);
648 *modified_month = g_strdup(_pvr->modified_month);
650 return MEDIA_CONTENT_ERROR_NONE;
653 int media_pvr_get_sports_type(media_pvr_h pvr, int* sports_type)
655 media_pvr_s *_pvr = (media_pvr_s*)pvr;
657 content_retip_if_fail(pvr);
658 content_retip_if_fail(sports_type);
660 *sports_type = _pvr->sports_type;
662 return MEDIA_CONTENT_ERROR_NONE;
665 int media_pvr_get_guidance_length(media_pvr_h pvr, int* guidance_length)
667 media_pvr_s *_pvr = (media_pvr_s*)pvr;
669 content_retip_if_fail(pvr);
670 content_retip_if_fail(guidance_length);
672 *guidance_length = _pvr->guidance_length;
674 return MEDIA_CONTENT_ERROR_NONE;
677 int media_pvr_get_tvmode(media_pvr_h pvr, int* tvmode)
679 media_pvr_s *_pvr = (media_pvr_s*)pvr;
681 content_retip_if_fail(pvr);
682 content_retip_if_fail(tvmode);
684 *tvmode = _pvr->tvmode;
686 return MEDIA_CONTENT_ERROR_NONE;
689 int media_pvr_get_play_count(media_pvr_h pvr, int* play_count)
691 media_pvr_s *_pvr = (media_pvr_s*)pvr;
693 content_retip_if_fail(pvr);
694 content_retip_if_fail(play_count);
696 *play_count = _pvr->play_count;
698 return MEDIA_CONTENT_ERROR_NONE;
701 int media_pvr_get_private_data(media_pvr_h pvr, char **private_data)
703 media_pvr_s *_pvr = (media_pvr_s*)pvr;
705 content_retip_if_fail(pvr);
706 content_retip_if_fail(private_data);
708 *private_data = g_strdup(_pvr->private_data);
710 return MEDIA_CONTENT_ERROR_NONE;
713 int media_pvr_set_play_count(media_pvr_h pvr, int play_count)
715 media_pvr_s *_pvr = (media_pvr_s*)pvr;
717 content_retip_if_fail(pvr);
719 _pvr->play_count = play_count;
721 return MEDIA_CONTENT_ERROR_NONE;
724 int media_pvr_set_program_title(media_pvr_h pvr, const char *program_title)
726 media_pvr_s *_pvr = (media_pvr_s*)pvr;
728 content_retip_if_fail(pvr);
729 content_retip_if_fail(STRING_VALID(program_title));
731 g_free(_pvr->program_title);
732 _pvr->program_title = g_strdup(program_title);
734 return MEDIA_CONTENT_ERROR_NONE;
737 int media_pvr_set_content_lock(media_pvr_h pvr, bool content_lock)
739 media_pvr_s *_pvr = (media_pvr_s*)pvr;
741 content_retip_if_fail(pvr);
743 _pvr->content_lock = content_lock;
745 return MEDIA_CONTENT_ERROR_NONE;
748 int media_pvr_set_content_watch(media_pvr_h pvr, bool content_watch)
750 media_pvr_s *_pvr = (media_pvr_s*)pvr;
752 content_retip_if_fail(pvr);
754 _pvr->content_watch = content_watch;
756 return MEDIA_CONTENT_ERROR_NONE;
759 int media_pvr_update_to_db(media_pvr_h pvr)
761 int ret = MEDIA_CONTENT_ERROR_NONE;
762 media_pvr_s *_pvr = (media_pvr_s*)pvr;
763 char *update_query = NULL;
765 content_retip_if_fail(pvr);
766 content_retip_if_fail(STRING_VALID(_pvr->media_id));
767 content_retip_if_fail(STRING_VALID(_pvr->path));
769 update_query = sqlite3_mprintf(UPDATE_PVR_META_FROM_PVR, _pvr->program_title, _pvr->content_lock, _pvr->content_watch, _pvr->play_count, _pvr->media_id);
771 ret = _content_query_sql(update_query);
772 sqlite3_free(update_query);
774 if (ret == MEDIA_CONTENT_ERROR_NONE)
775 media_svc_update_pvr_info(_content_get_db_handle(), _pvr->path, _pvr->program_title, _pvr->content_lock);