summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rwxr-xr-xserver/include/thumb-server-internal.h1
-rwxr-xr-xserver/thumb-server-internal.c49
-rwxr-xr-xserver/thumb-server.c7
3 files changed, 54 insertions, 3 deletions
diff --git a/server/include/thumb-server-internal.h b/server/include/thumb-server-internal.h
index d8a16f3..bcf5f4d 100755
--- a/server/include/thumb-server-internal.h
+++ b/server/include/thumb-server-internal.h
@@ -46,6 +46,7 @@ gboolean _thumb_daemon_udp_thread(void *data);
gboolean _thumb_daemon_start_jobs(gpointer data);
void _thumb_daemon_finish_jobs();
+void _thumb_daemon_mmc_eject_vconf_cb(void *data);
void _thumb_daemon_vconf_cb(void *data);
gboolean _thumb_server_prepare_socket(int *sock_fd);
gboolean _thumb_server_read_socket(GIOChannel *src,
diff --git a/server/thumb-server-internal.c b/server/thumb-server-internal.c
index a993e59..83f3186 100755
--- a/server/thumb-server-internal.c
+++ b/server/thumb-server-internal.c
@@ -72,6 +72,46 @@ void _thumb_daemon_finish_jobs()
return;
}
+int _thumb_daemon_mmc_status()
+{
+ int err = -1;
+ int status = -1;
+
+ err = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &status);
+ if (err == 0) {
+ return status;
+ } else if (err == -1) {
+ thumb_err("vconf_get_int failed : %d", err);
+ } else {
+ thumb_err("vconf_get_int Unexpected error code: %d", err);
+ }
+
+ return status;
+}
+
+void _thumb_daemon_mmc_eject_vconf_cb(void *data)
+{
+ int err = -1;
+ int status = 0;
+
+ thumb_warn("_thumb_daemon_vconf_cb called");
+
+ err = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &status);
+ if (err == 0) {
+ if (status == VCONFKEY_SYSMAN_MMC_REMOVED || status == VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED) {
+ thumb_warn("SD card is ejected or not mounted. So media-thumbnail-server stops jobs to extract all thumbnails");
+
+ _thumb_daemon_stop_job();
+ }
+ } else if (err == -1) {
+ thumb_err("vconf_get_int failed : %d", err);
+ } else {
+ thumb_err("vconf_get_int Unexpected error code: %d", err);
+ }
+
+ return;
+}
+
void _thumb_daemon_vconf_cb(void *data)
{
int err = -1;
@@ -153,8 +193,13 @@ int _thumb_daemon_all_extract()
return MEDIA_THUMB_ERROR_DB;
}
- snprintf(query_string, sizeof(query_string), SELECT_PATH_FROM_UNEXTRACTED_THUMB_MEDIA);
- thumb_dbg("Query: %s", query_string);
+ if (_thumb_daemon_mmc_status() == VCONFKEY_SYSMAN_MMC_MOUNTED) {
+ snprintf(query_string, sizeof(query_string), SELECT_PATH_FROM_UNEXTRACTED_THUMB_MEDIA);
+ } else {
+ snprintf(query_string, sizeof(query_string), SELECT_PATH_FROM_UNEXTRACTED_THUMB_INTERNAL_MEDIA);
+ }
+
+ thumb_warn("Query: %s", query_string);
err = sqlite3_prepare_v2(sqlite_db_handle, query_string, strlen(query_string), &sqlite_stmt, NULL);
if (SQLITE_OK != err) {
diff --git a/server/thumb-server.c b/server/thumb-server.c
index 9e7c1e1..2e9cda4 100755
--- a/server/thumb-server.c
+++ b/server/thumb-server.c
@@ -82,7 +82,12 @@ int main()
/* Set VCONFKEY_SYSMAN_MMC_FORMAT callback to get noti for SD card format */
err = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_FORMAT, (vconf_callback_fn) _thumb_daemon_vconf_cb, NULL);
if (err == -1)
- thumb_err("vconf_notify_key_changed %s fails", VCONFKEY_SYSMAN_MMC_FORMAT);
+ thumb_err("vconf_notify_key_changed : %s fails", VCONFKEY_SYSMAN_MMC_FORMAT);
+
+ /* Set VCONFKEY_SYSMAN_MMC_STATUS callback to get noti when SD card is ejected */
+ err = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, (vconf_callback_fn) _thumb_daemon_mmc_eject_vconf_cb, NULL);
+ if (err == -1)
+ thumb_err("vconf_notify_key_changed : %s fails", VCONFKEY_SYSMAN_MMC_STATUS);
/* Create and bind new UDP socket */
if (!_thumb_server_prepare_socket(&sockfd)) {