private:
struct SImageInfo *m;
+private:
+ bool m_SetWidth(int width);
+ bool m_SetHeight(int height);
+ bool m_SetOrientation(int orientation);
+
public:
CImageInfo() : m(0) {};
virtual ~CImageInfo() {};
bool Create(void);
void Destroy(void);
+ bool Update(void);
+
int Width(void);
int Height(void);
int Orientation(void);
- bool SetWidth(int width);
- bool SetHeight(int height);
- bool SetOrientation(int orientation);
-
bool Duplicate(CNameInfo *obj);
};
#ifndef __MEDIADATA_H__
#define __MEDIADATA_H__
-class CMediadata {
+class CMediadata : public CMediaContentListener {
private:
static CMediadata *instance;
struct SMediadata *m;
static bool sm_CbEachFolderInfo(media_folder_h folder, void *dt);
bool m_HandleEachFolderInfo(media_folder_h folder);
- bool m_HandleEachImageInfo(media_info_h media_h, CMediaInfo *minfo);
- bool m_HandleEachVideoInfo(media_info_h media_h, CMediaInfo *minfo);
+ static bool sm_CbUpdateImageInfo(media_info_h media_h, void *dt);
+ bool m_UpdateImageInfo(media_info_h media_h);
void m_GetEventList(void);
void m_GetMediaList(void);
Eina_List *MediaList(void);
Eina_List *EventList(void);
Eina_List *FolderList(void);
+
+ virtual void OnDbUpdated(const SEntity *entity);
};
#endif
private:
struct SMediaInfo *m;
+private:
+ bool m_SetLocationTag(const char *location_tag);
+ bool m_SetCreatedTime(time_t created_time);
+ bool m_SetSource(int source);
+
public:
CMediaInfo() : m(0) {};
virtual ~CMediaInfo() {};
bool Create(void);
virtual void Destroy(void);
+ bool Update(void);
+
char *LocationTag(void);
time_t CreatedTime(void);
time_t Time(void);
int Source(void);
media_info_h MediaInfo(void);
- bool SetLocationTag(const char *location_tag);
- bool SetCreatedTime(time_t created_time);
- bool SetSource(int source);
+ bool GetImageHandle(image_meta_h *image_h);
+ bool GetVideoHandle(video_meta_h *video_h);
+
bool SetMediaInfo(media_info_h media_h);
bool Duplicate(CNameInfo *obj);
private:
struct SVideoInfo *m;
+private:
+ bool m_SetDuration(int duration);
+ bool m_SetPlayedPosition(int played_position);
+
public:
CVideoInfo() : m(0) {};
virtual ~CVideoInfo() {};
bool Create(void);
virtual void Destroy(void);
+ bool Update(void);
+
int Duration(void);
int PlayedPosition(void);
- bool SetDuration(int duration);
- bool SetPlayedPosition(int played_position);
-
bool Duplicate(CNameInfo *obj);
};
m = NULL;
}
+bool CImageInfo::Update(void)
+{
+ int val;
+ image_meta_h image_h;
+
+ if (!CMediaInfo::Update())
+ return false;
+
+ if (!GetImageHandle(&image_h) || !image_h) {
+ _ERR("Get image handle failed");
+ return false;
+ }
+
+ if (image_meta_get_width(image_h, &val) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Image meta get width error");
+ goto error;
+ }
+ m_SetWidth(val);
+
+ if (image_meta_get_height(image_h, &val) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Image meta get height error");
+ goto error;
+ }
+ m_SetHeight(val);
+
+ if (image_meta_get_orientation(image_h,
+ (media_content_orientation_e *)&val) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Image meta get orientation error");
+ goto error;
+ }
+ m_SetOrientation(val);
+
+ if (image_meta_destroy(image_h) != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Image meta destroy error");
+ return false;
+ }
+
+ return true;
+
+error:
+ image_meta_destroy(image_h);
+ return false;
+}
+
int CImageInfo::Width(void)
{
if (!m)
return m->orientation;
}
-bool CImageInfo::SetWidth(int width)
+bool CImageInfo::m_SetWidth(int width)
{
if (!m)
return false;
return true;
}
-bool CImageInfo::SetHeight(int height)
+bool CImageInfo::m_SetHeight(int height)
{
if (!m)
return false;
return true;
}
-bool CImageInfo::SetOrientation(int orientation)
+bool CImageInfo::m_SetOrientation(int orientation)
{
if (!m)
return false;
if (!CMediaInfo::Duplicate(obj))
return false;
- if (!SetWidth(dst->Width()))
+ if (!m_SetWidth(dst->Width()))
return false;
- if (!SetHeight(dst->Height()))
+ if (!m_SetHeight(dst->Height()))
return false;
- if (!SetOrientation(dst->Orientation()))
+ if (!m_SetOrientation(dst->Orientation()))
return false;
return true;
if (m->folder_medialist)
m_DeleteMediaList(E_TYPE_FOLDER_MEDIA);
+
+ CMediaContentListener::Destroy();
}
bool CMediadata::m_CreateFilter(filter_h *filter, int type)
m_DeleteEventList();
}
-bool CMediadata::m_HandleEachImageInfo(media_info_h media_h, CMediaInfo *minfo)
+bool CMediadata::sm_CbUpdateImageInfo(media_info_h media_h, void *dt)
{
- int val;
- image_meta_h image_h;
-
- if (media_info_get_image(media_h, &image_h) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media Image Handle Fetch Error");
- return false;
- }
-
- if (image_meta_get_width(image_h, &val) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Image meta get width error");
- return false;
- }
- ((CImageInfo *)minfo)->SetWidth(val);
-
- if (image_meta_get_height(image_h, &val) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Image meta get height error");
- return false;
- }
- ((CImageInfo *)minfo)->SetHeight(val);
-
- if (image_meta_get_orientation(image_h,
- (media_content_orientation_e *)&val) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Image meta get orientation error");
- return false;
- }
- ((CImageInfo *)minfo)->SetOrientation(val);
+ CMediadata *root = (CMediadata *)dt;
- if (image_meta_destroy(image_h) != MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Image meta destroy error");
+ if (!root)
return false;
- }
- return true;
+ return root->m_UpdateImageInfo(media_h);
}
-bool CMediadata::m_HandleEachVideoInfo(media_info_h media_h, CMediaInfo *minfo)
+bool CMediadata::m_UpdateImageInfo(media_info_h media_h)
{
- int val;
- video_meta_h video_h;
+ Eina_List *l;
+ CMediaInfo *minfo;
+ char *buf;
+ void *obj;
- if (media_info_get_video(media_h, &video_h) !=
- MEDIA_CONTENT_ERROR_NONE || !video_h) {
- _ERR("Media video handle fetch error");
+ if (media_info_get_file_path(media_h, &buf)
+ != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media file path Fetch error");
return false;
}
- if (video_meta_get_duration(video_h, &val) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("video meta get duration error");
- return false;
+ minfo = NULL;
+ EINA_LIST_FOREACH(m->medialist, l, obj) {
+ minfo = (CMediaInfo *)obj;
+
+ if (!strcmp(minfo->Path(), buf))
+ break;
}
- ((CVideoInfo *)minfo)->SetDuration(val);
- if (video_meta_get_played_position(video_h, &val) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("video meta get played position error");
+ if (!minfo)
return false;
- }
- ((CVideoInfo *)minfo)->SetPlayedPosition(val);
- if (video_meta_destroy(video_h) != MEDIA_CONTENT_ERROR_NONE) {
- _ERR("video meta destroy error");
+ if (!((CImageInfo *)minfo)->Update()) {
+ _ERR("Get media info failed");
return false;
}
bool CMediadata::m_HandleEachMediaInfo(media_info_h media_h)
{
CMediaInfo *minfo;
- char *buf;
int type;
- unsigned long long val;
minfo = NULL;
}
((CImageInfo *)minfo)->Create();
- if (!m_HandleEachImageInfo(media_h, minfo))
+ minfo->SetMediaInfo(media_h);
+
+ if (!((CImageInfo *)minfo)->Update())
goto error;
} else if (type == MEDIA_CONTENT_TYPE_VIDEO) {
minfo = new CVideoInfo;
}
((CVideoInfo *)minfo)->Create();
- if (!m_HandleEachVideoInfo(media_h, minfo))
+ minfo->SetMediaInfo(media_h);
+
+ if (!((CVideoInfo *)minfo)->Update())
goto error;
}
minfo->SetType(type);
- if (media_info_get_media_id(media_h, &buf) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media ID Fetch error");
- goto error;
- }
- minfo->SetId(buf);
-
- if (media_info_get_display_name(media_h, &buf) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media display nam))e Fetch error");
- goto error;
- }
- minfo->SetName(buf);
-
- if (media_info_get_size(media_h, &val) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media size Fetch error");
- goto error;
- }
- minfo->SetSize(val);
-
- if (media_info_get_file_path(media_h, &buf)
- != MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media file path Fetch error");
- goto error;
- }
- minfo->SetPath(buf);
-
- if (media_info_get_thumbnail_path(media_h, &buf) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media thumbnail path Fetch error");
- goto error;
- }
- minfo->SetThumbnailPath(buf);
-
- if (media_info_get_modified_time(media_h, (time_t *)&val) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media modified time Fetch error");
- goto error;
- }
- minfo->SetModifiedTime(val);
-
- if (media_info_get_modified_time(media_h, (time_t *)&val) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media created time Fetch error");
- goto error;
- }
- minfo->SetCreatedTime(val);
-
- if (media_info_get_location_tag(media_h, &buf) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media location tag Fetch error");
- goto error;
- }
- minfo->SetLocationTag(buf);
-
- if (media_info_get_storage_type(media_h,
- (media_content_storage_e *)&val) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media location tag Fetch error");
- goto error;
- }
- minfo->SetSource(val);
-
- minfo->SetMediaInfo(media_h);
-
m->folder_medialist = eina_list_append(m->folder_medialist, minfo);
return true;
m_DestroyFilter(m->filter);
+ if (!CMediaContentListener::Create()) {
+ _ERR("MediaContentListener create failed");
+ return false;
+ }
+
return true;
}
return m->folderlist;
}
+
+void CMediadata::OnDbUpdated(const SEntity *entity)
+{
+ filter_h filter;
+ char buf[1024];
+ int r;
+
+ if (entity->err != MEDIA_CONTENT_ERROR_NONE)
+ return;
+
+ if (entity->update_item == MEDIA_ITEM_FILE &&
+ entity->update_type == MEDIA_CONTENT_UPDATE &&
+ entity->media_type == MEDIA_CONTENT_TYPE_IMAGE) {
+ r = media_filter_create(&filter);
+ if (r != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("media filter create failed");
+ return;
+ }
+
+ snprintf(buf, sizeof(buf), "MEDIA_PATH = \"%s\"", entity->path);
+
+ r = media_filter_set_condition(filter, buf,
+ MEDIA_CONTENT_COLLATE_DEFAULT);
+ if (r != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("filter condition set failed");
+ media_filter_destroy(filter);
+ return;
+ }
+
+ r = media_info_foreach_media_from_db(filter,
+ sm_CbUpdateImageInfo, this);
+ if (r != MEDIA_CONTENT_ERROR_NONE)
+ _ERR("Media content error: %d", r);
+
+ media_filter_destroy(filter);
+ }
+}
m = NULL;
}
+bool CMediaInfo::Update(void)
+{
+ char *buf;
+ unsigned long long val;
+
+ if (media_info_get_media_id(m->media_h, &buf) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media ID Fetch error");
+ return false;
+ }
+ SetId(buf);
+
+ if (media_info_get_display_name(m->media_h, &buf) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media display nam))e Fetch error");
+ return false;
+ }
+ SetName(buf);
+
+ if (media_info_get_size(m->media_h, &val) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media size Fetch error");
+ return false;
+ }
+ SetSize(val);
+
+ if (media_info_get_file_path(m->media_h, &buf)
+ != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media file path Fetch error");
+ return false;
+ }
+ SetPath(buf);
+
+ if (media_info_get_thumbnail_path(m->media_h, &buf) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media thumbnail path Fetch error");
+ return false;
+ }
+ SetThumbnailPath(buf);
+
+ if (media_info_get_modified_time(m->media_h, (time_t *)&val) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media modified time Fetch error");
+ return false;
+ }
+ SetModifiedTime(val);
+
+ if (media_info_get_modified_time(m->media_h, (time_t *)&val) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media created time Fetch error");
+ return false;
+ }
+ m_SetCreatedTime(val);
+
+ if (media_info_get_location_tag(m->media_h, &buf) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media location tag Fetch error");
+ return false;
+ }
+ m_SetLocationTag(buf);
+
+ if (media_info_get_storage_type(m->media_h,
+ (media_content_storage_e *)&val) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media location tag Fetch error");
+ return false;
+ }
+ m_SetSource(val);
+
+ return true;
+}
+
+bool CMediaInfo::GetImageHandle(image_meta_h *image_h)
+{
+ int r;
+
+ r = media_info_get_image(m->media_h, image_h);
+ if (r != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media Image Handle Fetch Error");
+ return false;
+ }
+
+ return true;
+}
+
+bool CMediaInfo::GetVideoHandle(video_meta_h *video_h)
+{
+ int r;
+
+ r = media_info_get_video(m->media_h, video_h);
+ if (r != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media Video Handle Fetch Error");
+ return false;
+ }
+
+ return true;
+}
+
char *CMediaInfo::LocationTag(void)
{
if (!m)
return m->media_h;
}
-bool CMediaInfo::SetLocationTag(const char *location_tag)
+bool CMediaInfo::m_SetLocationTag(const char *location_tag)
{
if (!m)
return false;
return true;
}
-bool CMediaInfo::SetCreatedTime(time_t created_time)
+bool CMediaInfo::m_SetCreatedTime(time_t created_time)
{
if (!m)
return false;
return true;
}
-bool CMediaInfo::SetSource(int source)
+bool CMediaInfo::m_SetSource(int source)
{
if (!m)
return false;
if (!CExtNameInfo::Duplicate(obj))
return false;
- if (!SetLocationTag(dst->LocationTag()))
+ if (!m_SetLocationTag(dst->LocationTag()))
return false;
- if (!SetCreatedTime(dst->CreatedTime()))
+ if (!m_SetCreatedTime(dst->CreatedTime()))
return false;
- if (!SetSource(dst->Source()))
+ if (!m_SetSource(dst->Source()))
return false;
if (!SetMediaInfo(dst->MediaInfo()))
return false;
m = NULL;
}
+bool CVideoInfo::Update(void)
+{
+ int val;
+ video_meta_h video_h;
+
+ if (!CMediaInfo::Update())
+ return false;
+
+ if (!GetVideoHandle(&video_h) || !video_h) {
+ _ERR("Get video handle failed");
+ return false;
+ }
+
+ if (video_meta_get_duration(video_h, &val) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("video meta get duration error");
+ goto error;
+ }
+ m_SetDuration(val);
+
+ if (video_meta_get_played_position(video_h, &val) !=
+ MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("video meta get played position error");
+ goto error;
+ }
+ m_SetPlayedPosition(val);
+
+ if (video_meta_destroy(video_h) != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("video meta destroy error");
+ return false;
+ }
+
+ return true;
+
+error:
+ video_meta_destroy(video_h);
+ return false;
+}
+
int CVideoInfo::Duration(void)
{
if (!m)
return m->played_position;
}
-bool CVideoInfo::SetDuration(int duration)
+bool CVideoInfo::m_SetDuration(int duration)
{
if (!m)
return false;
return true;
}
-bool CVideoInfo::SetPlayedPosition(int played_position)
+bool CVideoInfo::m_SetPlayedPosition(int played_position)
{
if (!m)
return false;
if (!CMediaInfo::Duplicate(obj))
return false;
- if (!SetDuration(dst->Duration()))
+ if (!m_SetDuration(dst->Duration()))
return false;
- if (!SetPlayedPosition(dst->PlayedPosition()))
+ if (!m_SetPlayedPosition(dst->PlayedPosition()))
return false;
return true;