src/vp-util.c
src/vp-file-util.c
src/vp-pinch-zoom.c
+ src/vp-playtime-db.c
)
INCLUDE_DIRECTORIES(
--- /dev/null
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef __VP_PLAYTIME_DB_H__
+#define __VP_PLAYTIME_DB_H__
+
+#ifdef _cplusplus
+extern "C" {
+#endif
+
+ typedef int (*table_data_cb)(void *user_data ,int count, char **data ,char **colums);
+
+ int vp_playtime_db_create();
+ int vp_playtime_db_insert_row(const char *url, int progress);
+ int vp_playtime_db_select_all(table_data_cb callback, void *data);
+ int vp_playtime_db_get_progress(const char *url, table_data_cb callback, void *data);
+ int vp_playtime_db_remove_entries(void *data);
+
+#ifdef _cplusplus
+}
+#endif
+
+#endif // __VP_PLAYTIME_DB_H__
--- /dev/null
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * 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.
+ */
+
+#include <sqlite3.h>
+#include <eina_list.h>
+
+#include "vp-db-common.h"
+#include "vp-db-util.h"
+#include "vp-file-util.h"
+
+#include "vp-media-content-util.h"
+
+#include "vp-playtime-db.h"
+#include "app_common.h"
+
+
+
+static char *db_path = NULL;
+static char sql_query[4096] = {0, };
+
+const char* _vp_playtime_db_get_path()
+{
+ if(db_path == NULL) {
+ char *path = app_get_data_path();
+ if(path == NULL) {
+ vp_dbgE("failed to get shared resource path");
+ return NULL;
+ }
+ int len = strlen(path)+strlen("playtime.db")+5;
+ db_path = calloc(len, sizeof(char));
+ if(db_path == NULL) {
+ vp_dbgE("failed to allocate memorey for db file path");
+ return NULL;
+ }
+ snprintf(db_path, len, "%s%s", path, "playtime.db");
+ vp_dbgW("db path: %s", db_path);
+ free(path);
+ }
+ return db_path;
+}
+
+static void _vp_playtime_db_errlog_cb(void *data, int err_code, const char *msg)
+{
+ vp_dbgE("Sqlite Error: [code: %d] [Msg: %s]", err_code, msg);
+}
+
+static int _vp_playtime_db_select_cd(void *user_data, int count, char **data, char **colums)
+{
+ vp_dbgW("There are %d colums in this select set", count);
+
+ for(int i = 0; i<count; ++i)
+ {
+ vp_dbgW("[Colum: %s] : [%s]", colums[i], data[i]);
+ }
+ return 0;
+}
+
+
+/* external functions */
+
+int vp_playtime_db_remove_entries(void *list_handle) {
+ if(list_handle == NULL)
+ {
+ vp_dbgE("eina list is invalid");
+ return 0;
+ }
+ Eina_List *list = (Eina_List*)list_handle;
+ sqlite3 *db = NULL;
+ char *error_msg = NULL;
+ int ret = sqlite3_open(_vp_playtime_db_get_path(), &db);
+ if(ret != SQLITE_OK) {
+ vp_dbgE("failed to open datebase: %s", sqlite3_errmsg(db));
+ sqlite3_close(db);
+ return 0;
+ }
+ Eina_List *l = NULL;
+ Eina_List *l_next = NULL;
+ char *data = NULL;
+ // use statement for list deletion
+ ret = sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, &error_msg);
+ if(ret != SQLITE_OK) {
+ vp_dbgE("SQL error : %s", error_msg);
+ sqlite3_free(error_msg);
+ sqlite3_close(db);
+ return 0;
+ }
+ EINA_LIST_FOREACH_SAFE(list, l, l_next, data) {
+ sqlite3_snprintf(4096, sql_query, "DELETE FROM PlayTimeData WHERE MediaUrl = '%q'", (char*)data);
+ ret = sqlite3_exec(db, sql_query, NULL, NULL, &error_msg);
+ if(ret != SQLITE_OK) {
+ vp_dbgE("SQL Error: %s", error_msg);
+ sqlite3_free(error_msg);
+ }
+ free(data);
+ list = eina_list_remove_list(list, l);
+ }
+ ret = sqlite3_exec(db, "END TRANSACTION;", NULL, NULL, &error_msg);
+ if(ret != SQLITE_OK) {
+ vp_dbgE("SQL error : %s", error_msg);
+ sqlite3_free(error_msg);
+ sqlite3_close(db);
+ return 0;
+ }
+ sqlite3_close(db);
+ return 1;
+}
+
+int vp_playtime_db_select_all(table_data_cb callback, void *data)
+{
+ sqlite3 *db = NULL;
+ char *error_msg = NULL;
+ int ret = sqlite3_open(_vp_playtime_db_get_path(), &db);
+ if(ret != SQLITE_OK) {
+ vp_dbgE("failed to open datebase: %s", sqlite3_errmsg(db));
+ sqlite3_close(db);
+ return 0;
+ }
+
+ const char *sql = "SELECT MediaUrl FROM PlayTimeData";
+
+ ret = sqlite3_exec(db, sql, callback, data, &error_msg);
+ if (ret != SQLITE_OK ) {
+ vp_dbgE("SQL error : %s", error_msg);
+ sqlite3_free(error_msg);
+ sqlite3_close(db);
+ return 0;
+ }
+
+ sqlite3_close(db);
+
+ return 1;
+}
+
+int vp_playtime_db_get_progress(const char *url, table_data_cb callback, void *data)
+{
+ if(url == NULL || callback == NULL) {
+ vp_dbgE("url [%p] or callback [%p] may be null", url, callback);
+ return 0;
+ }
+
+ sqlite3 *db = NULL;
+ char *error_msg = NULL;
+ int ret = sqlite3_open(_vp_playtime_db_get_path(), &db);
+ if(ret != SQLITE_OK) {
+ vp_dbgE("failed to open datebase: %s", sqlite3_errmsg(db));
+ sqlite3_close(db);
+ return 0;
+ }
+
+ sqlite3_snprintf(4096, sql_query, "SELECT Progress FROM PlayTimeData WHERE MediaUrl = '%q'", url);
+
+ ret = sqlite3_exec(db, sql_query, callback, data, &error_msg);
+ if (ret != SQLITE_OK ) {
+ vp_dbgE("SQL error : %s", error_msg);
+ sqlite3_free(error_msg);
+ sqlite3_close(db);
+ return 0;
+ }
+
+ sqlite3_close(db);
+
+ return 1;
+}
+
+int vp_playtime_db_insert_row(const char *url, int progress)
+{
+ sqlite3 *db = NULL;
+ char *error_msg = NULL;
+ int ret = sqlite3_open(_vp_playtime_db_get_path(), &db);
+ if(ret != SQLITE_OK) {
+ vp_dbgE("failed to open datebase: %s", sqlite3_errmsg(db));
+ sqlite3_close(db);
+ return 0;
+ }
+
+ sqlite3_snprintf(4096, sql_query, "INSERT OR IGNORE INTO PlayTimeData (MediaUrl, Progress) VALUES('%q', %d);"
+ "UPDATE PlayTimeData SET Progress = %d WHERE MediaUrl = '%q'",url, progress, progress, url);
+
+ ret = sqlite3_exec(db, sql_query, 0, 0, &error_msg);
+ if (ret != SQLITE_OK ) {
+ vp_dbgE("SQL error : %s", error_msg);
+ sqlite3_free(error_msg);
+ sqlite3_close(db);
+ return 0;
+ }
+
+ sqlite3_close(db);
+
+ return 1;
+}
+
+int vp_playtime_db_create()
+{
+ int ret = sqlite3_config(SQLITE_CONFIG_LOG, _vp_playtime_db_errlog_cb, "Videos");
+ if(ret != SQLITE_OK) {
+ vp_dbgE("Failed to set config: SQLITE_CONFIG_LOG [err code: %d]", ret);
+ }
+
+ ret = sqlite3_initialize();
+ if(ret != SQLITE_OK) {
+ vp_dbgE("failed to initialize sqlite3: %d", ret);
+ return 0;
+ }
+
+ sqlite3 *db = NULL;
+ char *error_msg = NULL;
+ ret = sqlite3_open(_vp_playtime_db_get_path(), &db);
+ if(ret != SQLITE_OK) {
+ vp_dbgE("failed to open datebase: %s", sqlite3_errmsg(db));
+ sqlite3_close(db);
+ return 0;
+ }
+
+ const char *sql = "CREATE TABLE IF NOT EXISTS PlayTimeData(MediaUrl TEXT UNIQUE, Progress INT);";
+
+ ret = sqlite3_exec(db, sql, 0, 0, &error_msg);
+ if (ret != SQLITE_OK ) {
+ vp_dbgE("SQL error : %s", error_msg);
+ sqlite3_free(error_msg);
+ sqlite3_close(db);
+ return 0;
+ }
+ sqlite3_close(db);
+ return 1;
+}
void mp_util_svc_update_video_item(char *mediaUrl, int nVideoItemIndex);
void mp_util_svc_generate_thumbnai(int nVideoItemIndex);
+void mp_util_svc_extract_video_url_by_item_type(void *list);
#endif // _MP_UTIL_DATABASE_
#include "vp-util.h"
#include "vp-file-util.h"
#include "vp-avrcp.h"
+#include "vp-playtime-db.h"
+
#define VP_NORMAL_PROGRESS_TIMER_INTERVAL 0.3
#define VP_NORMAL_STREAMING_PROTOCOLS_MAX 2
#define VP_NORMAL_MAX_STR_LEN 8
+#define ONE_SEC_IN_MILLI_SEC 1000
+
bool stay_pause = false;
(pNormalView->pPlayerHandle, &nPosition)) {
VideoLogError("vp_mm_player_get_position is fail");
}
+ int nTotalDuration = pNormalView->nDuration;
+
+ if(nPosition > 0 && nTotalDuration > 0 && nPosition <= nTotalDuration ) {
+ //in case video is completed we need to push progress as zero because video need to start again.
+ if((nTotalDuration - nPosition) < ONE_SEC_IN_MILLI_SEC) {
+ vp_playtime_db_insert_row(pNormalView->szMediaURL, 0);
+ } else {
+ vp_playtime_db_insert_row(pNormalView->szMediaURL, nPosition);
+ }
+ }
+
} else if (pNormalView->nLaunchingType == VIDEO_PLAY_TYPE_MULTI_PATH) {
if (!vp_mm_player_get_position
(pNormalView->pPlayerHandle, &nPosition)) {
profile = mobile-3.0
# C Sources
-USER_SRCS = playview/src/widget/vp-play-more.c playview/src/core/vp-avrcp.c playview/src/widget/vp-play-button.c src/common/mp-rotate-ctrl.c src/feature/mp-util-move.c src/common/mp-util-preference.c playview/src/feature/vp-subtitle-size.c src/view/mp-video-list-view-normal.c src/common/mp-video-info-ctrl.c src/viewMgr/videos-view-mgr.c playview/src/feature/vp-subtitle-color.c playview/src/core/vp-hollic.c src/view/mp-video-list-view-thumbnail.c src/view/mp-video-list-folder-share-via-view.c common/src/vp-chapter-db.c playview/src/core/vp-image-util.c playview/src/core/vp-multi-path.c playview/src/feature/vp-subtitle-edge.c src/view/mp-video-list-view-folder.c playview/src/widget/vp-play-volume-popup.c src/common/mp-util-media-service.c playview/src/core/vp-media-contents.c playview/src/feature/vp-play-speed.c src/widget/mp-video-list-sort-ctrl.c src/widget/mp-external-ug.c src/widget/mp-footer-toolbar.c playview/src/feature/vp-repeat.c playview/src/feature/vp-subtitle-bg-color.c common/src/vp-preview-db.c playview/src/core/vp-sensor.c src/widget/mp-video-view-popup-ctrl.c src/view/mp-video-list-view-main.c playview/src/core/vp-device.c src/feature/mp-launching-video-displayer.c playview/src/feature/vp-audio-track.c src/view/mp-video-list-view-item-of-folder.c playview/src/feature/vp-subtitle.c playview/src/feature/vp-share.c common/src/vp-thumb-db.c playview/src/feature/vp-detail.c src/view/mp-video-list-personal-view.c playview/src/feature/vp-capture.c playview/src/core/vp-media-key.c src/common/mp-util.c playview/src/widget/vp-play-loading-ani.c src/common/mp-drm-ctrl.c playview/src/widget/vp-play-progressbar.c src/video-player.c src/view/mp-video-list-share-via-view.c src/common/mp-util-config.c playview/src/view/vp-play-normal-view.c src/view/mp-video-list-remove-view.c src/widget/mp-util-widget-ctrl.c playview/src/widget/vp-play-subtitle.c common/src/vp-util.c src/view/mp-video-list-view-select.c playview/src/feature/vp-setting.c core/src/vp-drm.c video-downloader/src/VppDownload.c src/view/mp-video-list-personal-ctrl.c src/widget/mp-video-list-option-ctrl.c playview/src/common/vp-play-util.c playview/src/widget/vp-play-popup.c playview/src/common/vp-play-ug.c playview/src/vp-play-view.c common/src/vp-file-util.c playview/src/feature/vp-sound-path.c playview/src/common/vp-play-preference.c common/src/vp-pinch-zoom.c src/view/mp-video-list-remove-ctrl.c src/view/mp-library-view-mgr.c common/src/vp-media-content-util.c common/src/vp-db-util.c playview/src/widget/vp-play-bookmark.c playview/src/feature/vp-subtitle-select.c playview/src/widget/vp-play-volume.c src/view/mp-video-detail-view.c playview/src/feature/vp-zoom-guide.c src/view/mp-video-search-view.c playview/src/feature/vp-subtitle-font.c src/common/mp-video-util-db-controller.c playview/src/core/vp-mm-player.c playview/src/feature/vp-subtitle-track.c src/widget/mp-video-rename-ctrl.c playview/src/core/vp-device-language.c playview/src/core/vp-sound.c playview/src/feature/vp-subtitle-alignment.c src/widget/mp-video-list-view-as-ctrl.c playview/src/widget/vp-play-brightness-popup.c playview/src/feature/vp-sound-alive.c playview/src/common/vp-play-config.c src/view/mp-video-list-view-common.c playview/src/feature/vp-subtitle-sync.c src/widget/mp-video-nocontent-layout.c src/widget/mp-video-list-auto-play-ctrl.c playview/src/widget/vp-play-minicontroller.c playview/src/widget/vp-play-lockscreenmc.c
+USER_SRCS = playview/src/widget/vp-play-more.c playview/src/core/vp-avrcp.c playview/src/widget/vp-play-button.c src/common/mp-rotate-ctrl.c src/feature/mp-util-move.c src/common/mp-util-preference.c playview/src/feature/vp-subtitle-size.c src/view/mp-video-list-view-normal.c src/common/mp-video-info-ctrl.c src/viewMgr/videos-view-mgr.c playview/src/feature/vp-subtitle-color.c playview/src/core/vp-hollic.c src/view/mp-video-list-view-thumbnail.c src/view/mp-video-list-folder-share-via-view.c common/src/vp-chapter-db.c playview/src/core/vp-image-util.c playview/src/core/vp-multi-path.c playview/src/feature/vp-subtitle-edge.c src/view/mp-video-list-view-folder.c playview/src/widget/vp-play-volume-popup.c src/common/mp-util-media-service.c playview/src/core/vp-media-contents.c playview/src/feature/vp-play-speed.c src/widget/mp-video-list-sort-ctrl.c src/widget/mp-external-ug.c src/widget/mp-footer-toolbar.c playview/src/feature/vp-repeat.c playview/src/feature/vp-subtitle-bg-color.c common/src/vp-preview-db.c playview/src/core/vp-sensor.c src/widget/mp-video-view-popup-ctrl.c src/view/mp-video-list-view-main.c playview/src/core/vp-device.c src/feature/mp-launching-video-displayer.c playview/src/feature/vp-audio-track.c src/view/mp-video-list-view-item-of-folder.c playview/src/feature/vp-subtitle.c playview/src/feature/vp-share.c common/src/vp-thumb-db.c playview/src/feature/vp-detail.c src/view/mp-video-list-personal-view.c playview/src/feature/vp-capture.c playview/src/core/vp-media-key.c src/common/mp-util.c playview/src/widget/vp-play-loading-ani.c src/common/mp-drm-ctrl.c playview/src/widget/vp-play-progressbar.c src/video-player.c src/view/mp-video-list-share-via-view.c src/common/mp-util-config.c playview/src/view/vp-play-normal-view.c src/view/mp-video-list-remove-view.c src/widget/mp-util-widget-ctrl.c playview/src/widget/vp-play-subtitle.c common/src/vp-util.c src/view/mp-video-list-view-select.c playview/src/feature/vp-setting.c core/src/vp-drm.c video-downloader/src/VppDownload.c src/view/mp-video-list-personal-ctrl.c src/widget/mp-video-list-option-ctrl.c playview/src/common/vp-play-util.c playview/src/widget/vp-play-popup.c playview/src/common/vp-play-ug.c playview/src/vp-play-view.c common/src/vp-file-util.c playview/src/feature/vp-sound-path.c playview/src/common/vp-play-preference.c common/src/vp-pinch-zoom.c src/view/mp-video-list-remove-ctrl.c src/view/mp-library-view-mgr.c common/src/vp-media-content-util.c common/src/vp-db-util.c playview/src/widget/vp-play-bookmark.c playview/src/feature/vp-subtitle-select.c playview/src/widget/vp-play-volume.c src/view/mp-video-detail-view.c playview/src/feature/vp-zoom-guide.c src/view/mp-video-search-view.c playview/src/feature/vp-subtitle-font.c src/common/mp-video-util-db-controller.c playview/src/core/vp-mm-player.c playview/src/feature/vp-subtitle-track.c src/widget/mp-video-rename-ctrl.c playview/src/core/vp-device-language.c playview/src/core/vp-sound.c playview/src/feature/vp-subtitle-alignment.c src/widget/mp-video-list-view-as-ctrl.c playview/src/widget/vp-play-brightness-popup.c playview/src/feature/vp-sound-alive.c playview/src/common/vp-play-config.c src/view/mp-video-list-view-common.c playview/src/feature/vp-subtitle-sync.c src/widget/mp-video-nocontent-layout.c src/widget/mp-video-list-auto-play-ctrl.c playview/src/widget/vp-play-minicontroller.c playview/src/widget/vp-play-lockscreenmc.c common/src/vp-playtime-db.c
# EDC Sources
USER_EDCS =
case MP_LIST_VIEW_ALL:
if (!mp_util_get_personal_status()) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101) and FOLDER_PATH = \"%s\" and FOLDER_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101) and FOLDER_PATH = \'%s\' and FOLDER_PATH NOT LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\'",
szFolderPath);
}
break;
case MP_LIST_VIEW_PHONE:
if (!mp_util_get_personal_status()) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\" and FOLDER_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\' and FOLDER_PATH NOT LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\'",
szFolderPath);
}
break;
case MP_LIST_VIEW_CLOUD:
if (!mp_util_get_personal_status()) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101) and MEDIA_STORAGE_TYPE = 101 and FOLDER_PATH = \"%s\" and FOLDER_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101) and MEDIA_STORAGE_TYPE = 101 and FOLDER_PATH = \'%s\' and FOLDER_PATH NOT LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_STORAGE_TYPE = 101 and FOLDER_PATH = \"%s\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_STORAGE_TYPE = 101 and FOLDER_PATH = \'%s\'",
szFolderPath);
}
break;
default:
if (!mp_util_get_personal_status()) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101) and FOLDER_PATH = \"%s\" and FOLDER_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101) and FOLDER_PATH = \'%s\' and FOLDER_PATH NOT LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\'",
szFolderPath);
}
break;
return szThumbnailPath;
}
+static bool mp_util_svc_iterate_for_video_url_cb(media_info_h pMediaItem, void *pUserData)
+{
+ media_content_type_e nMediaType = MEDIA_CONTENT_TYPE_OTHERS;
+ if (!pMediaItem) {
+ return TRUE;
+ }
+ Eina_List **pList = (Eina_List **) pUserData;
+ media_info_get_media_type(pMediaItem, &nMediaType);
+
+ if (nMediaType == MEDIA_CONTENT_TYPE_VIDEO) {
+ // this will be deallocated when the eina list is deallocated.
+ char *szTmpItemFilePath = NULL;
+
+ media_info_get_file_path(pMediaItem, &szTmpItemFilePath);
+ VideoLogInfo("URL: %s", szTmpItemFilePath);
+
+ if (szTmpItemFilePath == NULL) {
+ VideoLogError("Fail to get file path of media item.");
+ return TRUE;
+ }
+ *pList = eina_list_append(*pList, szTmpItemFilePath);
+ }
+ VideoLogError("EinaList size: %d", eina_list_count(*pList));
+ return TRUE;
+}
+
+
+void mp_util_svc_extract_video_url_by_item_type(void *list)
+{
+ VideoLogError("");
+ filter_h m_FilterHandle = NULL;
+ media_content_order_e nOrderType = MEDIA_CONTENT_ORDER_DESC;
+ char szTmpStr[STR_LEN_MAX] = { 0, };
+ char szOrderObj[STR_LEN_MAX] = { 0, };
+
+ strncpy(szOrderObj, MEDIA_ADDED_TIME, STR_LEN_MAX - 1);
+ snprintf(szTmpStr, STR_LEN_MAX,
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) and MEDIA_PATH not like \'%s%%\'",
+ VIDEO_UTIL_PERSONAL_HEAD_STR);
+ if (media_filter_create(&m_FilterHandle) != MEDIA_CONTENT_ERROR_NONE) {
+ VideoLogInfo("Fail to create media filter handle.");
+ return;
+ }
+ if (media_filter_set_condition(m_FilterHandle, szTmpStr, MEDIA_CONTENT_COLLATE_DEFAULT) != MEDIA_CONTENT_ERROR_NONE) {
+ VideoLogError("Fail to set filter condition.");
+ media_filter_destroy(m_FilterHandle);
+ return;
+ }
+
+ if (media_filter_set_order(m_FilterHandle, MEDIA_CONTENT_ORDER_DESC, szOrderObj, MEDIA_CONTENT_COLLATE_NOCASE) != MEDIA_CONTENT_ERROR_NONE) {
+ VideoLogError("Fail to set order.");
+ media_filter_destroy(m_FilterHandle);
+ return;
+ }
+
+ if (media_info_foreach_media_from_db(m_FilterHandle, mp_util_svc_iterate_for_video_url_cb, list) != MEDIA_CONTENT_ERROR_NONE) {
+ VideoLogError("Fail to get video item list with filter condition.");
+ media_filter_destroy(m_FilterHandle);
+ return;
+ }
+
+ if (media_filter_destroy(m_FilterHandle) != MEDIA_CONTENT_ERROR_NONE) {
+ VideoLogError("Fail to destroy media filter handle.");
+ return;
+ }
+}
+
/**
* Get video list by item type
* @param nSortType : sort type
case MP_LIST_VIEW_ALL:
if (!mp_util_get_personal_status()) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) and MEDIA_PATH not like \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) and MEDIA_PATH not like \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
case MP_LIST_VIEW_PHONE:
if (!mp_util_get_personal_status()) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH not like \"%s%%\"",
+ "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH not like \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
case MP_LIST_VIEW_CLOUD:
if (!mp_util_get_personal_status()) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101) and MEDIA_STORAGE_TYPE = 101 and MEDIA_PATH not like \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101) and MEDIA_STORAGE_TYPE = 101 and MEDIA_PATH not like \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
default:
if (!mp_util_get_personal_status()) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) and MEDIA_PATH not like \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) and MEDIA_PATH not like \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
bRet = FALSE;
}
- snprintf(szTmpStr, STR_LEN_MAX, "MEDIA_PATH = \"%s\"", szPath);
+ snprintf(szTmpStr, STR_LEN_MAX, "MEDIA_PATH = \'%s\'", szPath);
if (media_filter_set_condition(m_FilterHandle,
szTmpStr,
MEDIA_CONTENT_COLLATE_DEFAULT) !=
memset(szTmpStr, 0, STR_LEN_MAX);
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) AND MEDIA_PATH = \"%s\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) AND MEDIA_PATH = \'%s\'",
szMediaUri);
if (media_filter_set_condition
(m_FilterHandle, szTmpStr,
}
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) AND MEDIA_PATH = \"%s\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) AND MEDIA_PATH = \'%s\'",
szMediaUri);
if (media_filter_set_condition
(m_FilterHandle, szTmpStr,
if (bPersonal == FALSE) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH NOT LIKE \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH LIKE \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
}
if (media_filter_set_condition
memset(szTmpStr, 0, STR_LEN_MAX);
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) AND MEDIA_PATH = \"%s\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) AND MEDIA_PATH = \'%s\'",
szMediaUri);
if (media_filter_set_condition
(m_FilterHandle, szTmpStr,
}
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) AND MEDIA_PATH = \"%s\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2 OR MEDIA_STORAGE_TYPE=101 OR MEDIA_STORAGE_TYPE=121) AND MEDIA_PATH = \'%s\'",
szPath);
if (media_filter_set_condition
(m_FilterHandle, szTmpStr,
case MP_LIST_VIEW_ALL:
if (nViewType == 0) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\" and MEDIA_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\' and MEDIA_PATH NOT LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\" and MEDIA_PATH LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\' and MEDIA_PATH LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
}
break;
case MP_LIST_VIEW_PHONE:
if (nViewType == 0) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\" and MEDIA_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\' and MEDIA_PATH NOT LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\" and MEDIA_PATH LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\' and MEDIA_PATH LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
}
break;
case MP_LIST_VIEW_CLOUD:
if (nViewType == 0) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\" and MEDIA_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\' and MEDIA_PATH NOT LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\" and MEDIA_PATH LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\' and MEDIA_PATH LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
}
break;
default:
if (nViewType == 0) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\" and MEDIA_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\' and MEDIA_PATH NOT LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \"%s\" and MEDIA_PATH LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and FOLDER_PATH = \'%s\' and MEDIA_PATH LIKE \'%s%%\'",
szFolderPath, VIDEO_UTIL_PERSONAL_HEAD_STR);
}
break;
case MP_LIST_VIEW_ALL:
if (nViewType == 0) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH NOT LIKE \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH LIKE \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
}
break;
case MP_LIST_VIEW_PHONE:
if (nViewType == 0) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH NOT LIKE \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 and (MEDIA_STORAGE_TYPE = 0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH LIKE \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
}
case MP_LIST_VIEW_CLOUD:
if (nViewType == 0) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH NOT LIKE \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH LIKE \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
}
default:
if (nViewType == 0) {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH NOT LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH NOT LIKE \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
} else {
snprintf(szTmpStr, STR_LEN_MAX,
- "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH LIKE \"%s%%\"",
+ "MEDIA_TYPE = 1 AND (MEDIA_STORAGE_TYPE=0 OR MEDIA_STORAGE_TYPE=1 OR MEDIA_STORAGE_TYPE=2) and MEDIA_PATH LIKE \'%s%%\'",
VIDEO_UTIL_PERSONAL_HEAD_STR);
}
break;
#include <app.h>
#include <glib.h>
#include <system_settings.h>
+#include "vp-playtime-db.h"
#include "video-player.h"
#include "videos-view-mgr.h"
#include "mp-util.h"
{
VideoLogWarning("== APP CREATE ==");
+ vp_playtime_db_create();
+
return TRUE;
}
#include <Elementary.h>
#include <glib.h>
+#include "vp-file-util.h"
+#include "vp-playtime-db.h"
#include "mp-util.h"
#include "mp-video-log.h"
#include "mp-external-ug.h"
#include "mp-video-list-view-item-of-folder.h"
#include "mp-video-util-db-controller.h"
#include "mp-util-widget-ctrl.h"
-#include "vp-file-util.h"
#include "mp-rotate-ctrl.h"
#include "videos-view-mgr.h"
#include "mp-video-list-view-main.h"
+
#define VIDEO_SELECTED_INFO_TIMER 4.0
#define GENGRID_ITEM_WIDTH 304 // Width is ICON(280) + LEFT_PADDING(12) RIGHT_PADDING(12)
#define GENGRID_ITEM_HEIGHT 256 //Height is ICON(160) + TEXT_PART(56) + Bottom_PADDING(40)
return NULL;
}
+static int __mp_remove_view_sqlite_table_data_cb(void *user_data, int count, char **col_data, char **colums) {
+ stGengridItemData *item_data = (stGengridItemData*)user_data;
+ if(item_data == NULL ) {
+ VideoLogError("Item data is invalid");
+ return 0;
+ }
+ VideoLogInfo("Search Set Count : %d [Must not greater than one]", count);
+ for(int i = 0; i<count; ++i) {
+ VideoLogDebug("SQL Search Set[%d] ==> [Col: %s] [Data: %s]", i, colums[i], col_data[i]);
+ int total_duration = mp_util_svc_get_video_duration_time(item_data->itemIndex);
+ if(col_data[i]) {
+ int current_duration = atoi(col_data[i]);
+ if(current_duration > 0 && total_duration > 0 && current_duration <= total_duration) {
+ double progress = ((double)current_duration/(double)total_duration);
+ edje_object_part_drag_value_set(elm_layout_edje_get(item_data->progress_layout), "elm.cur.progressbar", progress, 0.0);
+ }
+ }
+ }
+ //always return zero , otherwise sqlite3_exec will abort the subsequent statements
+ return 0;
+}
+static void __mp_remove_view_set_playback_progress(int videoIndex, void *data)
+{
+ char *url = mp_util_svc_get_video_url(videoIndex);
+ if(url == NULL) {
+ VideoLogError("Failed to get url");
+ return;
+ }
+ vp_playtime_db_get_progress((const char*)url, __mp_remove_view_sqlite_table_data_cb, data);
+ free(url);
+ url = NULL;
+}
+
+
/**
*
* @param pUserData
VideoLogInfo("layout file set %s %s",(ret? "Successful": "Failed"), pPart);
evas_object_size_hint_weight_set(progessbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(progessbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
- double value = (((double) rand() ) / RAND_MAX );
- edje_object_part_drag_value_set(elm_layout_edje_get(progessbar), "elm.cur.progressbar", value, 0.0);
- //__mp_thumbnail_view_get_playback_progress(nVideoItemIndex);
+ edje_object_part_drag_value_set(elm_layout_edje_get(progessbar), "elm.cur.progressbar", 0.0, 0.0);
item_data->progress_layout = progessbar;
+
+ __mp_remove_view_set_playback_progress(nVideoItemIndex, item_data);
+
return progessbar;
}
else if(!strcmp(pPart, "elm.check"))
#include <Elementary.h>
#include <glib.h>
-#include "mp-util.h"
+#include "vp-playtime-db.h"
#include "vp-file-util.h"
+#include "mp-util.h"
#include "mp-video-log.h"
#include "mp-external-ug.h"
#include "mp-video-string-define.h"
#endif
#ifdef VS_FEATURE_THUMBNAIL_VIEW
+
+static int __mp_share_view_sqlite_table_data_cb(void *user_data, int count, char **col_data, char **colums) {
+ stGengridItemData *item_data = (stGengridItemData*)user_data;
+ if(item_data == NULL ) {
+ VideoLogError("Item data is invalid");
+ return 0;
+ }
+ VideoLogInfo("Search Set Count : %d [Must not greater than one]", count);
+ for(int i = 0; i<count; ++i) {
+ VideoLogDebug("SQL Search Set[%d] ==> [Col: %s] [Data: %s]", i, colums[i], col_data[i]);
+ int total_duration = mp_util_svc_get_video_duration_time(item_data->itemIndex);
+ if(col_data[i]) {
+ int current_duration = atoi(col_data[i]);
+ if(current_duration > 0 && total_duration > 0 && current_duration <= total_duration) {
+ double progress = ((double)current_duration/(double)total_duration);
+ edje_object_part_drag_value_set(elm_layout_edje_get(item_data->progress_layout), "elm.cur.progressbar", progress, 0.0);
+ }
+ }
+ }
+ //always return zero , otherwise sqlite3_exec will abort the subsequent statements
+ return 0;
+}
+static void __mp_share_view_set_playback_progress(int videoIndex, void *data)
+{
+ char *url = mp_util_svc_get_video_url(videoIndex);
+ if(url == NULL) {
+ VideoLogError("Failed to get url");
+ return;
+ }
+ vp_playtime_db_get_progress((const char*)url, __mp_share_view_sqlite_table_data_cb, data);
+ free(url);
+ url = NULL;
+}
+
+
/**
*
* @param pUserData
VideoLogInfo("layout file set %s %s",(ret? "Successful": "Failed"), pPart);
evas_object_size_hint_weight_set(progessbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(progessbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
- double value = (((double) rand() ) / RAND_MAX );
- edje_object_part_drag_value_set(elm_layout_edje_get(progessbar), "elm.cur.progressbar", value, 0.0);
- //__mp_thumbnail_view_get_playback_progress(nVideoItemIndex);
+ edje_object_part_drag_value_set(elm_layout_edje_get(progessbar), "elm.cur.progressbar", 0.0, 0.0);
item_data->progress_layout = progessbar;
+
+ __mp_share_view_set_playback_progress(nVideoItemIndex, item_data);
+
return progessbar;
}
else if(!strcmp(pPart, "elm.check"))
#include <glib.h>
+#include "vp-playtime-db.h"
#include "vp-util.h"
#include "vp-file-util.h"
#include "mp-video-log.h"
}
#endif
+static int __mp_folder_item_view_sqlite_table_data_cb(void *user_data, int count, char **col_data, char **colums) {
+ stGengridItemData *item_data = (stGengridItemData*)user_data;
+ if(item_data == NULL ) {
+ VideoLogError("Item data is invalid");
+ return 0;
+ }
+ VideoLogInfo("Search Set Count : %d [Must not be greater than one]", count);
+ for(int i = 0; i<count; ++i) {
+ VideoLogDebug("SQL Search Set[%d] ==> [Col: %s] [Data: %s]", i, colums[i], col_data[i]);
+ int total_duration = mp_util_svc_get_video_duration_time(item_data->videoIndex);
+ if(col_data[i]) {
+ int current_duration = atoi(col_data[i]);
+ if(current_duration > 0 && total_duration > 0 && current_duration <= total_duration) {
+ double progress = ((double)current_duration/(double)total_duration);
+ edje_object_part_drag_value_set(elm_layout_edje_get(item_data->progress_layout), "elm.cur.progressbar", progress, 0.0);
+ }
+ }
+ }
+ //always return zero , otherwise sqlite3_exec will abort the subsequent statements
+ return 0;
+}
+static void __mp_folder_item_view_set_playback_progress(int videoIndex, void *data)
+{
+ char *url = mp_util_svc_get_video_url(videoIndex);
+ if(url == NULL) {
+ VideoLogError("Failed to get url");
+ return;
+ }
+ vp_playtime_db_get_progress((const char*)url, __mp_folder_item_view_sqlite_table_data_cb, data);
+ free(url);
+ url = NULL;
+}
+
+
/**
*
* @param pUserData
VideoLogInfo("layout file set %s %s",(ret? "Successful": "Failed"), pPart);
evas_object_size_hint_weight_set(progessbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(progessbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
- // TO DO: remove this once we are able to get the elapsed time for video file.
- double value = (((double) rand() ) / RAND_MAX );
- edje_object_part_drag_value_set(elm_layout_edje_get(progessbar), "elm.cur.progressbar", value, 0.0);
- //__mp_thumbnail_view_get_playback_progress(nVideoItemIndex);
+ edje_object_part_drag_value_set(elm_layout_edje_get(progessbar), "elm.cur.progressbar", 0.0, 0.0);
item_data->progress_layout = progessbar;
+
+ __mp_folder_item_view_set_playback_progress(nVideoItemIndex, item_data);
return progessbar;
}
return NULL;
elm_naviframe_item_pop(g_pFolderViewHandle->pNaviFrameHandle);
}
-static void __mp_folder_item_view_back_button_cb(void *data, Elm_Object_Item *item)
+static Eina_Bool __mp_folder_item_view_back_button_cb(void *data, Elm_Object_Item *item)
{
if(g_pFolderViewHandle == NULL)
{
VideoLogError("g_pFolderViewHandle is invalid");
- return;
+ return EINA_FALSE;
}
VideoLogInfo("");
g_pFolderViewHandle->bExist = true;
mp_folder_view_set_is_item_view(false);
evas_object_smart_callback_add(g_pFolderViewHandle->pNaviFrameHandle, "transition,finished", __mp_folder_item_view_trans_finished_cb, NULL);
mp_folder_item_view_pop();
+ return EINA_TRUE;
}
static Evas_Object* _create_gengrid(Evas_Object *parent)
#include <stdbool.h>
#include <media_content.h>
-
+#include "vp-playtime-db.h"
#include "mp-util.h"
#include "vp-util.h"
#include "mp-video-log.h"
#include "mp-util-config.h"
+
#define TOOLBAR_BUTTON_VIDEOS "Videos"
#define TOOLBAR_BUTTOn_FOLDERS "Folders"
}
+static int __mp_list_view_playtime_db_select_all_cb(void *user_data, int count, char **data, char **colums) {
+ Eina_List **list = (Eina_List **)user_data;
+ for(int i = 0; i<count; ++i) {
+ if(data[i]) {
+ *list = eina_list_append(*list, strdup(data[i]));
+ }
+ }
+ return 0;
+}
+
+static void __mp_list_view_playtime_db_update() {
+ // Get url list from playtime db
+ Eina_List *playdb_url_list = NULL;
+ int ret = vp_playtime_db_select_all(__mp_list_view_playtime_db_select_all_cb, &playdb_url_list);
+
+ // Get url list from media db
+ Eina_List *mediadb_url_list = NULL;
+ mp_util_svc_extract_video_url_by_item_type(&mediadb_url_list);
+
+ // we need to remove enty which are not present in media db but present in playdb
+ // this can happened when an item is deleted or an external media device e.g usb etc is unplugged
+ // in that case media file which are no longer available needs to remove from play db
+ // we do this by comparing the media db list and play time list
+ // we remove the url that are present in playtime db but not in media db.
+ // this is kind of brute force :).so if you have any optimization than update this implementation.
+
+ Eina_List *playdb_l = NULL;
+ Eina_List *playdb_next = NULL;
+ char *playdb_data = NULL;
+ EINA_LIST_FOREACH_SAFE(playdb_url_list, playdb_l, playdb_next, playdb_data)
+ {
+
+ Eina_List *mediadb_l = NULL, *mediadb_next = NULL;
+ char *mediadb_data = NULL;
+ EINA_LIST_FOREACH_SAFE(mediadb_url_list, mediadb_l, mediadb_next, mediadb_data)
+ {
+ if(strcmp(playdb_data, mediadb_data) == 0) {
+ free(mediadb_data);
+ mediadb_url_list = eina_list_remove_list(mediadb_url_list, mediadb_l);
+ free(playdb_data);
+ playdb_url_list = eina_list_remove_list(playdb_url_list, playdb_l);
+ break;
+ }
+ }
+ }
+
+ // Free the remaing list
+ char *data = NULL;
+ EINA_LIST_FREE(mediadb_url_list, data) {
+ free(data);
+ }
+
+ // this will be freed while removing url from db
+ if(eina_list_count(playdb_url_list) > 0) {
+ vp_playtime_db_remove_entries(playdb_url_list);
+ }
+}
+
/**
*
* @param nUpdateStyle
}
mp_util_db_run_backup_fun_except_lev0(NULL, NULL, NULL, NULL);
+
+ // Update playtime db before update list so that , it will reflect the updated progress.
+ __mp_list_view_playtime_db_update();
+
__mp_list_view_update_list(g_pMainViewHandle->nListTabType,
LIST_UPDATE_TYPE_ALL);
#include <Ecore_Evas.h>
#include <Elementary.h>
-#include "vp-play-log.h"
+#include "vp-playtime-db.h"
#include "vp-util.h"
#include "vp-file-util.h"
#include "vp-pinch-zoom.h"
UpdateListItemsCbFunc
pUpdateVideoListUserCb)
{
- srand((unsigned int)time(NULL));
VideoLogInfo("");
if (!pMainViewHandle || !pMainViewWidget || !pUpdateVideoListUserCb) {
* @param pPart
* @return
*/
-static char *__mp_thumbnail_view_get_label_of_grid_item_cb(const void
- *pUserData,
- Evas_Object *
- pObject,
- const char
- *pPart)
+static char *__mp_thumbnail_view_get_label_of_grid_item_cb(void *pUserData, Evas_Object *pObject, const char *pPart)
{
const stGengridItemData *item_data = pUserData;
int nVideoItemIndex = item_data->videoIndex;
return NULL;
}
-// static double __mp_thumbnail_view_get_playback_progress(int videoIndex)
-// {
- // char *path = mp_util_svc_get_video_url(videoIndex);
- // int width = 0, height = 0;
- // unsigned int duration = 0, playedtime = 0;
- // char *title = NULL;
- // mp_util_svc_get_video_detail_by_video_url((const char*)path, &width, &height, &title, &duration, &playedtime);
- // VideoLogInfo(" =====> VideoURL : %s", path);
- // VideoLogInfo(" =====> [W: %d] [H: %d] [Title: %s]", width, height, title);
- // VideoLogInfo(" =====> [Dur: %u] [ELA: %U] ", duration, playedtime);
-// }
+static int __mp_thumbnail_view_sqlite_table_data_cb(void *user_data, int count, char **col_data, char **colums) {
+ stGengridItemData *item_data = (stGengridItemData*)user_data;
+ if(item_data == NULL ) {
+ VideoLogError("Item data is invalid");
+ return 0;
+ }
+ VideoLogInfo("Search Set Count : %d [Must not greater than one]", count);
+ for(int i = 0; i<count; ++i) {
+ VideoLogDebug("SQL Search Set[%d] ==> [Col: %s] [Data: %s]", i, colums[i], col_data[i]);
+ int total_duration = mp_util_svc_get_video_duration_time(item_data->videoIndex);
+ if(col_data[i]) {
+ int current_duration = atoi(col_data[i]);
+ if(current_duration > 0 && total_duration > 0 && current_duration <= total_duration) {
+ double progress = ((double)current_duration/(double)total_duration);
+ edje_object_part_drag_value_set(elm_layout_edje_get(item_data->progress_layout), "elm.cur.progressbar", progress, 0.0);
+ }
+ }
+ }
+ //always return zero , otherwise sqlite3_exec will abort the subsequent statements
+ return 0;
+}
+static void __mp_thumbnail_view_set_playback_progress(int videoIndex, void *data)
+{
+ char *url = mp_util_svc_get_video_url(videoIndex);
+ if(url == NULL) {
+ VideoLogError("Failed to get url");
+ return;
+ }
+ vp_playtime_db_get_progress((const char*)url, __mp_thumbnail_view_sqlite_table_data_cb, data);
+ free(url);
+ url = NULL;
+}
/**
*
* @param pPart
* @return
*/
-static Evas_Object *__mp_thumbnail_view_get_grid_icon_cb(const void *pUserData,
- Evas_Object *pObject,
- const char *pPart)
+static Evas_Object *__mp_thumbnail_view_get_grid_icon_cb(void *pUserData, Evas_Object *pObject, const char *pPart)
{
stGengridItemData *item_data = (void*)pUserData;
int nVideoItemIndex = item_data->videoIndex;
VideoLogInfo("layout file set %s %s",(ret? "Successful": "Failed"), pPart);
evas_object_size_hint_weight_set(progessbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(progessbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
- double value = (((double) rand() ) / RAND_MAX );
- edje_object_part_drag_value_set(elm_layout_edje_get(progessbar), "elm.cur.progressbar", value, 0.0);
- //__mp_thumbnail_view_get_playback_progress(nVideoItemIndex);
+ edje_object_part_drag_value_set(elm_layout_edje_get(progessbar), "elm.cur.progressbar", 0.0, 0.0);
item_data->progress_layout = progessbar;
+
+ __mp_thumbnail_view_set_playback_progress(nVideoItemIndex, item_data);
+
return progessbar;
}
return NULL;
{
g_pThumbnailView->pVideolistGIC = elm_gengrid_item_class_new();
g_pThumbnailView->pVideolistGIC->item_style = "videolist";
- g_pThumbnailView->pVideolistGIC->func.text_get =
- (void *) __mp_thumbnail_view_get_label_of_grid_item_cb;
- g_pThumbnailView->pVideolistGIC->func.content_get =
- (void *) __mp_thumbnail_view_get_grid_icon_cb;
+ g_pThumbnailView->pVideolistGIC->func.text_get = __mp_thumbnail_view_get_label_of_grid_item_cb;
+ g_pThumbnailView->pVideolistGIC->func.content_get = __mp_thumbnail_view_get_grid_icon_cb;
g_pThumbnailView->pVideolistGIC->func.state_get = NULL;
g_pThumbnailView->pVideolistGIC->func.del = NULL;
}
profile = mobile-3.0
# C Sources
-USER_SRCS = src/serviceParser/vp-service-parser.c src/vp-main.c ../playview/src/core/vp-media-key.c ../src/view/mp-library-view-mgr.c ../playview/src/feature/vp-subtitle-size.c ../playview/src/feature/vp-share.c ../common/src/vp-pinch-zoom.c ../src/view/mp-video-list-remove-ctrl.c ../playview/src/feature/vp-audio-track.c ../playview/src/widget/vp-play-brightness-popup.c ../src/widget/mp-video-view-popup-ctrl.c ../playview/src/core/vp-image-util.c ../src/widget/mp-external-ug.c ../src/view/mp-video-list-view-common.c ../playview/src/core/vp-multi-path.c ../src/feature/mp-launching-video-displayer.c ../src/view/mp-video-list-view-thumbnail.c ../playview/src/common/vp-play-config.c ../src/view/mp-video-list-personal-view.c ../src/view/mp-video-detail-view.c ../playview/src/feature/vp-sound-alive.c ../src/view/mp-video-list-view-folder.c ../playview/src/vp-play-view.c ../src/view/mp-video-list-view-item-of-folder.c ../playview/src/feature/vp-subtitle-sync.c ../playview/src/feature/vp-sound-path.c ../common/src/vp-media-content-util.c ../playview/src/common/vp-play-preference.c ../playview/src/widget/vp-play-volume-popup.c ../playview/src/core/vp-media-contents.c ../common/src/vp-db-util.c ../src/widget/mp-video-list-option-ctrl.c ../playview/src/feature/vp-repeat.c ../playview/src/core/vp-avrcp.c ../playview/src/feature/vp-subtitle-alignment.c ../playview/src/widget/vp-play-subtitle.c ../common/src/vp-util.c ../src/widget/mp-video-list-sort-ctrl.c ../src/view/mp-video-list-personal-ctrl.c ../common/src/vp-file-util.c ../playview/src/feature/vp-subtitle-bg-color.c ../src/common/mp-util-media-service.c ../playview/src/widget/vp-play-bookmark.c ../playview/src/feature/vp-subtitle-select.c ../src/widget/mp-util-widget-ctrl.c ../playview/src/feature/vp-subtitle-font.c ../common/src/vp-chapter-db.c ../src/view/mp-video-list-view-normal.c ../src/common/mp-util-config.c ../playview/src/common/vp-play-util.c ../playview/src/widget/vp-play-minicontroller.c ../playview/src/widget/vp-play-lockscreenmc.c ../playview/src/widget/vp-play-popup.c ../src/common/mp-rotate-ctrl.c ../src/common/mp-util-preference.c ../playview/src/feature/vp-detail.c ../playview/src/widget/vp-play-progressbar.c ../playview/src/feature/vp-subtitle-edge.c ../src/widget/mp-video-nocontent-layout.c ../src/view/mp-video-list-share-via-view.c ../src/viewMgr/videos-view-mgr.c ../src/widget/mp-footer-toolbar.c ../playview/src/core/vp-sound.c ../playview/src/common/vp-play-ug.c ../playview/src/core/vp-device-language.c ../playview/src/feature/vp-play-speed.c ../src/view/mp-video-list-folder-share-via-view.c ../playview/src/feature/vp-subtitle-track.c ../playview/src/feature/vp-subtitle-color.c ../playview/src/core/vp-hollic.c ../src/view/mp-video-list-view-select.c ../playview/src/core/vp-mm-player.c ../src/view/mp-video-list-remove-view.c ../playview/src/widget/vp-play-volume.c ../playview/src/widget/vp-play-loading-ani.c ../playview/src/view/vp-play-normal-view.c ../playview/src/core/vp-device.c ../src/view/mp-video-list-view-main.c ../playview/src/widget/vp-play-button.c ../playview/src/widget/vp-play-more.c ../src/widget/mp-video-rename-ctrl.c ../common/src/vp-preview-db.c ../src/widget/mp-video-list-view-as-ctrl.c ../src/widget/mp-video-list-auto-play-ctrl.c ../src/feature/mp-util-move.c ../src/view/mp-video-search-view.c ../playview/src/feature/vp-capture.c ../src/common/mp-drm-ctrl.c ../src/common/mp-video-info-ctrl.c ../playview/src/feature/vp-subtitle.c ../src/common/mp-video-util-db-controller.c ../common/src/vp-thumb-db.c ../src/common/mp-util.c ../playview/src/core/vp-sensor.c ../playview/src/feature/vp-zoom-guide.c ../playview/src/feature/vp-setting.c
+USER_SRCS = src/serviceParser/vp-service-parser.c src/vp-main.c ../playview/src/core/vp-media-key.c ../src/view/mp-library-view-mgr.c ../playview/src/feature/vp-subtitle-size.c ../playview/src/feature/vp-share.c ../common/src/vp-pinch-zoom.c ../src/view/mp-video-list-remove-ctrl.c ../playview/src/feature/vp-audio-track.c ../playview/src/widget/vp-play-brightness-popup.c ../src/widget/mp-video-view-popup-ctrl.c ../playview/src/core/vp-image-util.c ../src/widget/mp-external-ug.c ../src/view/mp-video-list-view-common.c ../playview/src/core/vp-multi-path.c ../src/feature/mp-launching-video-displayer.c ../src/view/mp-video-list-view-thumbnail.c ../playview/src/common/vp-play-config.c ../src/view/mp-video-list-personal-view.c ../src/view/mp-video-detail-view.c ../playview/src/feature/vp-sound-alive.c ../src/view/mp-video-list-view-folder.c ../playview/src/vp-play-view.c ../src/view/mp-video-list-view-item-of-folder.c ../playview/src/feature/vp-subtitle-sync.c ../playview/src/feature/vp-sound-path.c ../common/src/vp-media-content-util.c ../playview/src/common/vp-play-preference.c ../playview/src/widget/vp-play-volume-popup.c ../playview/src/core/vp-media-contents.c ../common/src/vp-db-util.c ../src/widget/mp-video-list-option-ctrl.c ../playview/src/feature/vp-repeat.c ../playview/src/core/vp-avrcp.c ../playview/src/feature/vp-subtitle-alignment.c ../playview/src/widget/vp-play-subtitle.c ../common/src/vp-util.c ../src/widget/mp-video-list-sort-ctrl.c ../src/view/mp-video-list-personal-ctrl.c ../common/src/vp-file-util.c ../playview/src/feature/vp-subtitle-bg-color.c ../src/common/mp-util-media-service.c ../playview/src/widget/vp-play-bookmark.c ../playview/src/feature/vp-subtitle-select.c ../src/widget/mp-util-widget-ctrl.c ../playview/src/feature/vp-subtitle-font.c ../common/src/vp-chapter-db.c ../src/view/mp-video-list-view-normal.c ../src/common/mp-util-config.c ../playview/src/common/vp-play-util.c ../playview/src/widget/vp-play-minicontroller.c ../playview/src/widget/vp-play-lockscreenmc.c ../playview/src/widget/vp-play-popup.c ../src/common/mp-rotate-ctrl.c ../src/common/mp-util-preference.c ../playview/src/feature/vp-detail.c ../playview/src/widget/vp-play-progressbar.c ../playview/src/feature/vp-subtitle-edge.c ../src/widget/mp-video-nocontent-layout.c ../src/view/mp-video-list-share-via-view.c ../src/viewMgr/videos-view-mgr.c ../src/widget/mp-footer-toolbar.c ../playview/src/core/vp-sound.c ../playview/src/common/vp-play-ug.c ../playview/src/core/vp-device-language.c ../playview/src/feature/vp-play-speed.c ../src/view/mp-video-list-folder-share-via-view.c ../playview/src/feature/vp-subtitle-track.c ../playview/src/feature/vp-subtitle-color.c ../playview/src/core/vp-hollic.c ../src/view/mp-video-list-view-select.c ../playview/src/core/vp-mm-player.c ../src/view/mp-video-list-remove-view.c ../playview/src/widget/vp-play-volume.c ../playview/src/widget/vp-play-loading-ani.c ../playview/src/view/vp-play-normal-view.c ../playview/src/core/vp-device.c ../src/view/mp-video-list-view-main.c ../playview/src/widget/vp-play-button.c ../playview/src/widget/vp-play-more.c ../src/widget/mp-video-rename-ctrl.c ../common/src/vp-preview-db.c ../src/widget/mp-video-list-view-as-ctrl.c ../src/widget/mp-video-list-auto-play-ctrl.c ../src/feature/mp-util-move.c ../src/view/mp-video-search-view.c ../playview/src/feature/vp-capture.c ../src/common/mp-drm-ctrl.c ../src/common/mp-video-info-ctrl.c ../playview/src/feature/vp-subtitle.c ../src/common/mp-video-util-db-controller.c ../common/src/vp-thumb-db.c ../src/common/mp-util.c ../playview/src/core/vp-sensor.c ../playview/src/feature/vp-zoom-guide.c ../playview/src/feature/vp-setting.c ../common/src/vp-playtime-db.c
# EDC Sources
USER_EDCS =