diff --git a/AUTHORS b/AUTHORS index 7ee6c3c8c1..afb94e8d80 100644 --- a/AUTHORS +++ b/AUTHORS @@ -257,3 +257,10 @@ Pierre Le Magourou Hugo Camboulive Sohyun Kim Leandro Dorileo + +Ethumb +------ +Rafael Antognolli +Cedric Bail +Mikael SANS +Jérôme Pinot diff --git a/Makefile.am b/Makefile.am index c0f08f1b26..f377199d42 100644 --- a/Makefile.am +++ b/Makefile.am @@ -62,6 +62,7 @@ old/ChangeLog.eio \ old/ChangeLog.embryo \ old/ChangeLog.emotion \ old/ChangeLog.escape \ +old/ChangeLog.ethumb \ old/ChangeLog.evas \ old/ChangeLog.evil \ old/ChangeLog.evil.0 \ @@ -75,6 +76,7 @@ old/NEWS.eio \ old/NEWS.embryo \ old/NEWS.emotion \ old/NEWS.escape \ +old/NEWS.ethumb \ old/NEWS.evas \ old/NEWS.evil \ old/README.ecore \ @@ -89,6 +91,7 @@ old/README.embryo \ old/README.emotion \ old/README.ephysics \ old/README.escape \ +old/README.ethumb \ old/README.evas \ old/README.evil \ spec/efl.spec @@ -125,7 +128,9 @@ pc/efreet.pc \ pc/efreet-mime.pc \ pc/efreet-trash.pc \ pc/edje.pc \ -pc/emotion.pc +pc/emotion.pc \ +pc/ethumb.pc \ +pc/ethumb_client.pc if BUILD_ENGINE_SOFTWARE_X11 pkgconfig_DATA += pc/evas-software-x11.pc @@ -216,7 +221,8 @@ endif servicedir = @dbusservicedir@ service_DATA = \ -dbus-services/org.enlightenment.Efreet.service +dbus-services/org.enlightenment.Efreet.service \ +dbus-services/org.enlightenment.Ethumb.service diff --git a/configure.ac b/configure.ac index 5686564710..9035a2f5c7 100644 --- a/configure.ac +++ b/configure.ac @@ -3375,6 +3375,81 @@ EFL_LIB_END([Emotion]) #### End of Emotion +#### Ethumb +EFL_LIB_START([Ethumb]) + +### Default values + +### Additional options to configure + +### Checks for programs + +### Checks for libraries +EFL_PLATFORM_DEPEND([EINA], [evil]) + +EFL_INTERNAL_DEPEND_PKG([ETHUMB], [eina]) +EFL_INTERNAL_DEPEND_PKG([ETHUMB], [evas]) +EFL_INTERNAL_DEPEND_PKG([ETHUMB], [ecore]) +EFL_INTERNAL_DEPEND_PKG([ETHUMB], [ecore-evas]) +EFL_INTERNAL_DEPEND_PKG([ETHUMB], [ecore-file]) +EFL_INTERNAL_DEPEND_PKG([ETHUMB], [edje]) + +## modules + +EFL_EVAL_PKGS([ETHUMB]) + +### Checks for header files + +### Checks for types + +### Checks for structures + +### Checks for compiler characteristics + +### Checks for linker characteristics + +### Checks for library functions + +### Check availability + +EFL_LIB_END([Ethumb]) +#### End of Ethumb + +#### Ethumb_Client +EFL_LIB_START([Ethumb_Client]) + +### Default values + +### Additional options to configure + +### Checks for programs + +### Checks for libraries +EFL_INTERNAL_DEPEND_PKG([ETHUMB_CLIENT], [eina]) +EFL_INTERNAL_DEPEND_PKG([ETHUMB_CLIENT], [ecore]) +EFL_INTERNAL_DEPEND_PKG([ETHUMB_CLIENT], [edbus]) +EFL_INTERNAL_DEPEND_PKG([ETHUMB_CLIENT], [ethumb]) + +EFL_EVAL_PKGS([ETHUMB_CLIENT]) + +### Checks for header files + +### Checks for types + +### Checks for structures + +### Checks for compiler characteristics + +### Checks for linker characteristics + +### Checks for library functions + +### Check availability + +EFL_LIB_END([Ethumb_Client]) +#### End of Ethumb_Client + + AC_ARG_ENABLE([always-build-examples], [AC_HELP_STRING([--enable-always-build-examples], [always build examples. @<:@default=disabled@:>@])], @@ -3458,7 +3533,10 @@ pc/eeze.pc pc/ephysics.pc pc/edje.pc pc/emotion.pc +pc/ethumb.pc +pc/ethumb_client.pc dbus-services/org.enlightenment.Efreet.service +dbus-services/org.enlightenment.Ethumb.service $po_makefile_in ]) @@ -3665,6 +3743,8 @@ echo "Eeze...................: ${efl_lib_optional_eeze} (tizen: ${want_tizen})" echo "EPhysics...............: ${efl_lib_optional_ephysics}" echo "Edje...................: yes (physics=${efl_lib_optional_ephysics}, multisense=${want_multisense})" echo "Emotion................: yes (gstreamer=${have_emotion_module_gstreamer} (xoverlay=${have_gst_xoverlay}), xine=${have_emotion_module_xine}, generic=${have_emotion_module_generic}, v4l2=${want_v4l2})" +echo "Ethumb.................: yes" +echo "Ethumb_Client..........: yes" echo "Tests..................: ${build_tests}" echo "Examples...............: make examples" diff --git a/data/Makefile.am b/data/Makefile.am index 5104f31b1b..be0a463aa9 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -60,9 +60,38 @@ edje/vim/snippets/edc.snippets \ edje/vim/syntax/edc.vim \ edje/vim/syntax/embryo.vim +# Helper for people using EDJ +EDJE_CC = EFL_RUN_IN_TREE=1 $(top_builddir)/src/bin/edje/edje_cc +EDJE_CC_FLAGS_VERBOSE_0 = +EDJE_CC_FLAGS_VERBOSE_1 = -v +EDJE_CC_FLAGS = $(EDJE_CC_FLAGS_VERBOSE_$(V)) + +AM_V_EDJ = $(am__v_EDJ_$(V)) +am__v_EDJ_ = $(am__v_EDJ_$(AM_DEFAULT_VERBOSITY)) +am__v_EDJ_0 = @echo " EDJ " $@; + ######################################################################## # Emotion emotionfilesdir = $(datadir)/emotion emotionfiles_DATA = emotion/checkme EXTRA_DIST += $(emotionfiles_DATA) + +######################################################################## +# Ethumb +ethumbfilesdir = $(datadir)/ethumb +ethumbfiles_DATA = ethumb/checkme +EXTRA_DIST += $(ethumbfiles_DATA) + +ethumbframesdir = $(datadir)/ethumb/frames +ethumbframes_DATA = \ +ethumb/frames/default.edj + +ethumb/frames/default.edj: ethumb/frames/default.edc + @$(MKDIR_P) ethumb/frames/ + $(AM_V_EDJ)$(EDJE_CC) $(EDJE_CC_FLAGS) -id $(srcdir)/ethumb/frames/ $< $@ + + +EXTRA_DIST += \ +ethumb/frames/default.edc \ +ethumb/frames/border-0.jpg diff --git a/data/emotion/checkme b/data/emotion/checkme index e2f46e1c27..f1e0637423 100644 --- a/data/emotion/checkme +++ b/data/emotion/checkme @@ -1,2 +1,2 @@ -This is just a test file used to help emotion determine its prefix +This is just a test file used to help ethumb determine its prefix location. diff --git a/data/ethumb/checkme b/data/ethumb/checkme new file mode 100644 index 0000000000..987063d4cb --- /dev/null +++ b/data/ethumb/checkme @@ -0,0 +1,2 @@ +This is just a test file used to help evas determine its prefix +location. diff --git a/legacy/ethumb/data/frames/images/border-0.jpg b/data/ethumb/frames/border-0.jpg similarity index 100% rename from legacy/ethumb/data/frames/images/border-0.jpg rename to data/ethumb/frames/border-0.jpg diff --git a/legacy/ethumb/data/frames/default.edc b/data/ethumb/frames/default.edc similarity index 100% rename from legacy/ethumb/data/frames/default.edc rename to data/ethumb/frames/default.edc diff --git a/legacy/ethumb/org.enlightenment.Ethumb.service.in b/dbus-services/org.enlightenment.Ethumb.service.in similarity index 100% rename from legacy/ethumb/org.enlightenment.Ethumb.service.in rename to dbus-services/org.enlightenment.Ethumb.service.in diff --git a/doc/main.dox b/doc/main.dox index d20d5477f5..9faf1491e7 100644 --- a/doc/main.dox +++ b/doc/main.dox @@ -22,6 +22,7 @@ * @li @ref ephysics_main physics simulation integration and visual effects. * @li @ref edje_main layout and theme library with super powers. * @li @ref emotion_main to play music and videos. + * @li @ref ethumb_main to generate thumbnail images of files. * */ @@ -232,3 +233,9 @@ * * @brief Plays music and videos. */ + +/** + * @defgroup Ethumb + * + * @brief Generates thumbnail images of files. + */ diff --git a/m4/efl.m4 b/m4/efl.m4 index a891203e2e..7ed137f119 100644 --- a/m4/efl.m4 +++ b/m4/efl.m4 @@ -16,7 +16,18 @@ dnl Adds a pkg-config dependency on another EFL. AC_DEFUN([EFL_INTERNAL_DEPEND_PKG], [dnl m4_pushdef([DOWNEFL], m4_translit([$1], [-A-Z], [_a-z]))dnl -requirements_pc_[]m4_defn([DOWNEFL])="$2 >= ${PACKAGE_VERSION} ${requirements_pc_[][]m4_defn([DOWNEFL])}" +dnl TODO: we need to fix the package config names for 2.0 +dnl TODO: and make them uniform in scheme. +depname="$2" +case "${depname}" in + edbus) + depname="edbus2" + ;; + ethumb-client) + depname="ethumb_client" + ;; +esac +requirements_pc_[]m4_defn([DOWNEFL])="${depname} >= ${PACKAGE_VERSION} ${requirements_pc_[][]m4_defn([DOWNEFL])}" m4_popdef([DOWNEFL])dnl ]) diff --git a/legacy/ethumb/ChangeLog b/old/ChangeLog.ethumb similarity index 100% rename from legacy/ethumb/ChangeLog rename to old/ChangeLog.ethumb diff --git a/legacy/ethumb/NEWS b/old/NEWS.ethumb similarity index 100% rename from legacy/ethumb/NEWS rename to old/NEWS.ethumb diff --git a/legacy/ethumb/README b/old/README.ethumb similarity index 100% rename from legacy/ethumb/README rename to old/README.ethumb diff --git a/legacy/ethumb/ethumb.pc.in b/pc/ethumb.pc.in similarity index 68% rename from legacy/ethumb/ethumb.pc.in rename to pc/ethumb.pc.in index 233e2ed397..b2d935b24d 100644 --- a/legacy/ethumb/ethumb.pc.in +++ b/pc/ethumb.pc.in @@ -2,10 +2,12 @@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ +modules=@libdir@/ethumb/modules +module_arch=@MODULE_ARCH@ Name: ethumb Description: Thumbnail Generator Library -Requires: @requirement_ethumb@ Version: @VERSION@ +Requires.private: @requirements_pc_ethumb@ Libs: -L${libdir} -lethumb Cflags: -I${includedir}/ethumb-@VMAJ@ diff --git a/legacy/ethumb/ethumb_client.pc.in b/pc/ethumb_client.pc.in similarity index 82% rename from legacy/ethumb/ethumb_client.pc.in rename to pc/ethumb_client.pc.in index c9eebc6561..796cae6e95 100644 --- a/legacy/ethumb/ethumb_client.pc.in +++ b/pc/ethumb_client.pc.in @@ -5,7 +5,7 @@ includedir=@includedir@ Name: ethumb_client Description: Thumbnail Client Library -Requires: @requirement_ethumb_client@ Version: @VERSION@ +Requires.private: @requirements_pc_ethumb_client@ Libs: -L${libdir} -lethumb_client Cflags: -I${includedir}/ethumb-@VMAJ@ diff --git a/src/Makefile.am b/src/Makefile.am index e22f4c004c..5ad8b9770c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -43,6 +43,7 @@ include Makefile_Eeze.am include Makefile_EPhysics.am include Makefile_Edje.am include Makefile_Emotion.am +include Makefile_Ethumb.am .PHONY: benchmark examples diff --git a/src/Makefile_Ethumb.am b/src/Makefile_Ethumb.am new file mode 100644 index 0000000000..3b0e15daae --- /dev/null +++ b/src/Makefile_Ethumb.am @@ -0,0 +1,171 @@ +### Library + +lib_LTLIBRARIES += \ +lib/ethumb/libethumb.la \ +lib/ethumb/client/libethumb_client.la + +ETHUMB_COMMON_CPPFLAGS = \ +-I$(top_srcdir)/src/lib/eina \ +-I$(top_builddir)/src/lib/eina \ +-I$(top_srcdir)/src/lib/eo \ +-I$(top_builddir)/src/lib/eo \ +-I$(top_srcdir)/src/lib/ecore \ +-I$(top_builddir)/src/lib/ecore \ +-I$(top_srcdir)/src/lib/ecore_evas \ +-I$(top_builddir)/src/lib/ecore_evas \ +-I$(top_srcdir)/src/lib/ecore_file \ +-I$(top_builddir)/src/lib/ecore_file \ +-I$(top_srcdir)/src/lib/evas \ +-I$(top_builddir)/src/lib/evas \ +-I$(top_srcdir)/src/lib/edje \ +-I$(top_builddir)/src/lib/edje \ +-I$(top_srcdir)/src/lib/ethumb \ +-I$(top_builddir)/src/lib/ethumb \ +@EFL_COV_CFLAGS@ \ +@ETHUMB_CFLAGS@ \ +@USE_EVIL_CFLAGS@ + +ETHUMB_COMMON_LDADD = \ +lib/eina/libeina.la \ +lib/eo/libeo.la \ +lib/ecore/libecore.la \ +lib/ecore_evas/libecore_evas.la \ +lib/ecore_file/libecore_file.la \ +lib/evas/libevas.la \ +lib/edje/libedje.la \ +@EFL_COV_LIBS@ \ +@USE_EVIL_LIBS@ + +installed_ethumbmainheadersdir = $(includedir)/ethumb-@VMAJ@ +dist_installed_ethumbmainheaders_DATA = \ +lib/ethumb/Ethumb.h \ +lib/ethumb/client/Ethumb_Client.h + +# libethumb.la +lib_ethumb_libethumb_la_SOURCES = \ +lib/ethumb/Ethumb_Plugin.h \ +lib/ethumb/ethumb_private.h \ +lib/ethumb/md5.h \ +lib/ethumb/ethumb.c \ +lib/ethumb/md5.c + +ETHUMB_COMMON_LIBADD = $(ETHUMB_COMMON_LDADD) @ETHUMB_LIBS@ +ETHUMB_COMMON_LDADD += @ETHUMB_LDFLAGS@ +ETHUMB_COMMON_USER_LIBADD = $(ETHUMB_COMMON_LIBADD) lib/ethumb/libethumb.la +ETHUMB_COMMON_USER_LDADD = $(ETHUMB_COMMON_LDADD) lib/ethumb/libethumb.la + +lib_ethumb_libethumb_la_CPPFLAGS = \ +$(ETHUMB_COMMON_CPPFLAGS) \ +-DPACKAGE_BIN_DIR=\"$(bindir)\" \ +-DPACKAGE_LIB_DIR=\"$(libdir)\" \ +-DPACKAGE_DATA_DIR=\"$(datadir)/ethumb\" \ +-DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)\" \ +-DEFL_ETHUMB_BUILD + +lib_ethumb_libethumb_la_LIBADD = $(ETHUMB_COMMON_LIBADD) +lib_ethumb_libethumb_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@ + + +# libethumb_client.la +lib_ethumb_client_libethumb_client_la_SOURCES = \ +lib/ethumb/client/ethumb_client.c + +lib_ethumb_client_libethumb_client_la_CPPFLAGS = \ +$(ETHUMB_COMMON_CPPFLAGS) \ +-I$(top_srcdir)/src/lib/edbus \ +-I$(top_builddir)/src/lib/edbus \ +-I$(top_srcdir)/src/lib/ethumb/client \ +-I$(top_builddir)/src/lib/ethumb/client \ +-DEFL_ETHUMB_BUILD + +lib_ethumb_client_libethumb_client_la_LIBADD = \ +$(ETHUMB_COMMON_USER_LIBADD) \ +lib/edbus/libedbus2.la +lib_ethumb_client_libethumb_client_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@ + +## Modules + +# Emotion +ethumbmoduleemotiondir = $(libdir)/ethumb/modules/emotion/$(MODULE_ARCH) +ethumbmoduleemotion_LTLIBRARIES = modules/ethumb/emotion/module.la +modules_ethumb_emotion_module_la_SOURCES = \ +modules/ethumb/emotion/emotion.c +modules_ethumb_emotion_module_la_CPPFLAGS = \ +$(ETHUMB_COMMON_CPPFLAGS) \ +-I$(top_srcdir)/src/lib/eet \ +-I$(top_builddir)/src/lib/eet \ +-I$(top_srcdir)/src/lib/emotion \ +-I$(top_builddir)/src/lib/emotion \ +-DPACKAGE_BIN_DIR=\"$(bindir)\" \ +-DPACKAGE_LIB_DIR=\"$(libdir)\" \ +-DPACKAGE_DATA_DIR=\"$(datadir)/ethumb\" \ +-DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)\" + +modules_ethumb_emotion_module_la_LIBADD = \ +$(ETHUMB_COMMON_USER_LIBADD) \ +lib/eet/libeet.la \ +lib/emotion/libemotion.la + +modules_ethumb_emotion_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@ +modules_ethumb_emotion_module_la_LIBTOOLFLAGS = --tag=disable-static + +modules/ethumb/emotion/template.edj: modules/ethumb/emotion/template.edc modules/ethumb/emotion/placeholder.png bin/edje/edje_cc + @$(MKDIR_P) modules/ethumb/emotion + $(AM_V_EDJ)$(EDJE_CC) $(EDJE_CC_FLAGS) -id $(srcdir)/modules/ethumb/emotion $< $@ + +ethumbmoduleemotion_DATA = modules/ethumb/emotion/template.edj + +EXTRA_DIST += \ +modules/ethumb/emotion/template.edc \ +modules/ethumb/emotion/placeholder.png + + +### Binary + +bin_PROGRAMS += \ +bin/ethumb/ethumb \ +bin/ethumb/ethumbd \ +bin/ethumb/ethumbd_client + +ethumbinternal_bindir=$(libdir)/ethumb/utils/$(MODULE_ARCH) +ethumbinternal_bin_PROGRAMS = \ +bin/ethumb/ethumbd_slave + +bin_ethumb_ethumb_SOURCES = bin/ethumb/ethumb.c +bin_ethumb_ethumb_CPPFLAGS = $(ETHUMB_COMMON_CPPFLAGS) +bin_ethumb_ethumb_LDADD = $(ETHUMB_COMMON_USER_LDADD) + +# TODO: review why ethumd (master) links to libethumb! shouldn't +bin_ethumb_ethumbd_SOURCES = \ +bin/ethumb/ethumbd_private.h \ +bin/ethumb/ethumbd.c +bin_ethumb_ethumbd_CPPFLAGS = \ +$(ETHUMB_COMMON_CPPFLAGS) \ +-I$(top_srcdir)/src/lib/edbus \ +-I$(top_builddir)/src/lib/edbus \ +-DPACKAGE_BIN_DIR=\"$(bindir)\" \ +-DPACKAGE_LIB_DIR=\"$(libdir)\" \ +-DPACKAGE_DATA_DIR=\"$(datadir)/ethumb\" \ +-DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)\" +bin_ethumb_ethumbd_LDADD = \ +$(ETHUMB_COMMON_USER_LDADD) \ +lib/edbus/libedbus2.la + +bin_ethumb_ethumbd_client_SOURCES = \ +bin/ethumb/ethumbd_client.c +bin_ethumb_ethumbd_client_CPPFLAGS = \ +$(ETHUMB_COMMON_CPPFLAGS) \ +-I$(top_srcdir)/src/lib/edbus \ +-I$(top_builddir)/src/lib/edbus \ +-I$(top_srcdir)/src/lib/ethumb/client \ +-I$(top_builddir)/src/lib/ethumb/client +bin_ethumb_ethumbd_client_LDADD = \ +$(ETHUMB_COMMON_USER_LDADD) \ +lib/ethumb/client/libethumb_client.la \ +lib/edbus/libedbus2.la + +bin_ethumb_ethumbd_slave_SOURCES = \ +bin/ethumb/ethumbd_private.h \ +bin/ethumb/ethumbd_slave.c +bin_ethumb_ethumbd_slave_CPPFLAGS = $(ETHUMB_COMMON_CPPFLAGS) +bin_ethumb_ethumbd_slave_LDADD = $(ETHUMB_COMMON_USER_LDADD) diff --git a/legacy/ethumb/src/bin/ethumb.c b/src/bin/ethumb/ethumb.c similarity index 96% rename from legacy/ethumb/src/bin/ethumb.c rename to src/bin/ethumb/ethumb.c index 12750e0196..27d50df69e 100644 --- a/legacy/ethumb/src/bin/ethumb.c +++ b/src/bin/ethumb/ethumb.c @@ -43,7 +43,7 @@ struct frame }; static unsigned char -_ethumb_getopt_callback_frame_parse(const Ecore_Getopt *parser __UNUSED__, const Ecore_Getopt_Desc *desc __UNUSED__, const char *str, void *data __UNUSED__, Ecore_Getopt_Value *storage) +_ethumb_getopt_callback_frame_parse(const Ecore_Getopt *parser EINA_UNUSED, const Ecore_Getopt_Desc *desc EINA_UNUSED, const char *str, void *data EINA_UNUSED, Ecore_Getopt_Value *storage) { struct frame *f = (struct frame *)storage->ptrp; const char *tfile, *tgroup, *tswallow, *base, *sep; @@ -135,7 +135,7 @@ _thumb_report(const char *mode, Ethumb *e) } static void -_finished_thumb( void *data __UNUSED__, Ethumb *e, Eina_Bool success) +_finished_thumb( void *data EINA_UNUSED, Ethumb *e, Eina_Bool success) { const char *mode = success ? "GENERATED" : "FAILED"; _thumb_report(mode, e); diff --git a/legacy/ethumb/src/bin/ethumbd.c b/src/bin/ethumb/ethumbd.c similarity index 93% rename from legacy/ethumb/src/bin/ethumbd.c rename to src/bin/ethumb/ethumbd.c index cebde0f4bb..f0f0d9b44a 100644 --- a/legacy/ethumb/src/bin/ethumbd.c +++ b/src/bin/ethumb/ethumbd.c @@ -57,6 +57,7 @@ static const char _ethumb_dbus_interface[] = "org.enlightenment.Ethumb"; static const char _ethumb_dbus_objects_interface[] = "org.enlightenment.Ethumb.objects"; static const char _ethumb_dbus_path[] = "/org/enlightenment/Ethumb"; +static Eina_Prefix *_pfx = NULL; static int _log_domain = -1; typedef struct _Ethumbd_Setup Ethumbd_Setup; @@ -453,7 +454,7 @@ _ethumbd_slave_alloc_cmd(Ethumbd *ed, int ssize, char *sdata) } static Eina_Bool -_ethumbd_slave_data_read_cb(void *data, int type __UNUSED__, void *event) +_ethumbd_slave_data_read_cb(void *data, int type EINA_UNUSED, void *event) { Ethumbd *ed = data; Ecore_Exe_Event_Data *ev = event; @@ -499,7 +500,7 @@ _ethumbd_slave_data_read_cb(void *data, int type __UNUSED__, void *event) } static Eina_Bool -_ethumbd_slave_del_cb(void *data, int type __UNUSED__, void *event) +_ethumbd_slave_del_cb(void *data, int type EINA_UNUSED, void *event) { Ethumbd *ed = data; Ecore_Exe_Event_Del *ev = event; @@ -885,7 +886,6 @@ _name_owner_changed_cb(void *context, const char *bus, const char *old_id, const { Ethumbd_Object_Data *odata = context; Ethumbd *ed = odata->ed; - Ethumbd_Queue *q = &ed->queue; DBG("NameOwnerChanged: name = %s, from = %s, to = %s", bus, old_id, new_id); if (new_id[0]) @@ -963,7 +963,8 @@ _ethumb_dbus_get_bytearray(EDBus_Message_Iter *iter) if (!edbus_message_iter_fixed_array_get(iter, 'y', &result, &length)) { - ERR("not an byte array element."); + ERR("not byte array element. Signature: %s", + edbus_message_iter_signature_get(iter)); return NULL; } @@ -981,7 +982,7 @@ _ethumb_dbus_append_bytearray(EDBus_Message_Iter *parent, EDBus_Message_Iter *ar if (!string) string = ""; - size = strlen(string); + size = strlen(string) + 1; for (i = 0; i < size; i++) edbus_message_iter_basic_append(array, 'y', string[i]); edbus_message_iter_container_close(parent, array); @@ -1012,6 +1013,9 @@ _ethumb_dbus_queue_add_cb(const EDBus_Service_Interface *iface, const EDBus_Mess if (!file) { + eina_stringshare_del(key); + eina_stringshare_del(thumb); + eina_stringshare_del(thumb_key); ERR("no filename given."); goto end; } @@ -1019,6 +1023,10 @@ _ethumb_dbus_queue_add_cb(const EDBus_Service_Interface *iface, const EDBus_Mess odata = edbus_service_object_data_get(iface, ODATA); if (!odata) { + eina_stringshare_del(file); + eina_stringshare_del(key); + eina_stringshare_del(thumb); + eina_stringshare_del(thumb_key); ERR("could not get dbus_object data."); goto end; } @@ -1159,7 +1167,7 @@ _ethumb_dbus_delete_cb(const EDBus_Service_Interface *iface, const EDBus_Message } static int -_ethumb_dbus_fdo_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_fdo_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { int fdo; @@ -1177,7 +1185,7 @@ _ethumb_dbus_fdo_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *var } static int -_ethumb_dbus_size_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_size_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { EDBus_Message_Iter *st; int w, h; @@ -1198,7 +1206,7 @@ _ethumb_dbus_size_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *va } static int -_ethumb_dbus_format_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_format_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { int format; @@ -1216,7 +1224,7 @@ _ethumb_dbus_format_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter * } static int -_ethumb_dbus_aspect_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_aspect_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { int aspect; @@ -1234,7 +1242,7 @@ _ethumb_dbus_aspect_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter * } static int -_ethumb_dbus_orientation_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_orientation_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { int orientation; @@ -1252,7 +1260,7 @@ _ethumb_dbus_orientation_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_I } static int -_ethumb_dbus_crop_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_crop_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { EDBus_Message_Iter *st; double x, y; @@ -1273,7 +1281,7 @@ _ethumb_dbus_crop_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *va } static int -_ethumb_dbus_quality_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_quality_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { int quality; @@ -1292,7 +1300,7 @@ _ethumb_dbus_quality_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter static int -_ethumb_dbus_compress_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_compress_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { int compress; @@ -1310,7 +1318,7 @@ _ethumb_dbus_compress_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter } static int -_ethumb_dbus_frame_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_frame_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { EDBus_Message_Iter *_struct, *file_iter, *group_iter, *swallow_iter; const char *file, *group, *swallow; @@ -1328,15 +1336,15 @@ _ethumb_dbus_frame_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *v swallow = _ethumb_dbus_get_bytearray(swallow_iter); DBG("setting frame to \"%s:%s:%s\"", file, group, swallow); request->setup.flags.frame = 1; - request->setup.theme_file = eina_stringshare_add(file); - request->setup.group = eina_stringshare_add(group); - request->setup.swallow = eina_stringshare_add(swallow); + request->setup.theme_file = file; + request->setup.group = group; + request->setup.swallow = swallow; return 1; } static int -_ethumb_dbus_directory_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_directory_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { const char *directory; EDBus_Message_Iter *array; @@ -1350,13 +1358,13 @@ _ethumb_dbus_directory_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Ite directory = _ethumb_dbus_get_bytearray(array); DBG("setting directory to: %s", directory); request->setup.flags.directory = 1; - request->setup.directory = eina_stringshare_add(directory); + request->setup.directory = directory; return 1; } static int -_ethumb_dbus_category_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_category_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { const char *category; EDBus_Message_Iter *array; @@ -1370,13 +1378,13 @@ _ethumb_dbus_category_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter category = _ethumb_dbus_get_bytearray(array); DBG("setting category to: %s", category); request->setup.flags.category = 1; - request->setup.category = eina_stringshare_add(category); + request->setup.category = category; return 1; } static int -_ethumb_dbus_video_time_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_video_time_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { double video_time; @@ -1394,7 +1402,7 @@ _ethumb_dbus_video_time_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_It } static int -_ethumb_dbus_video_start_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_video_start_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { double video_start; @@ -1412,7 +1420,7 @@ _ethumb_dbus_video_start_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_I } static int -_ethumb_dbus_video_interval_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_video_interval_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { double video_interval; @@ -1429,7 +1437,7 @@ _ethumb_dbus_video_interval_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Messag } static int -_ethumb_dbus_video_ntimes_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_video_ntimes_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { unsigned int video_ntimes; @@ -1447,7 +1455,7 @@ _ethumb_dbus_video_ntimes_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_ } static int -_ethumb_dbus_video_fps_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_video_fps_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { unsigned int video_fps; @@ -1465,7 +1473,7 @@ _ethumb_dbus_video_fps_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Ite } static int -_ethumb_dbus_document_page_set(Ethumbd_Object *eobject __UNUSED__, EDBus_Message_Iter *variant, Ethumbd_Request *request) +_ethumb_dbus_document_page_set(Ethumbd_Object *eobject EINA_UNUSED, EDBus_Message_Iter *variant, Ethumbd_Request *request) { unsigned int document_page; @@ -1542,7 +1550,6 @@ _ethumb_dbus_ethumb_setup_cb(const EDBus_Service_Interface *iface, const EDBus_M Ethumbd_Object *eobject; Ethumbd_Request *request; Eina_Bool r = EINA_FALSE; - int atype; EDBus_Message_Iter *array; EDBus_Message_Iter *data; @@ -1568,7 +1575,7 @@ _ethumb_dbus_ethumb_setup_cb(const EDBus_Service_Interface *iface, const EDBus_M r = EINA_TRUE; while (edbus_message_iter_get_and_next(array, 'r', &data) && r) { - if (!_ethumb_dbus_ethumb_setup_parse_element(eobject, data, request)); + if (!_ethumb_dbus_ethumb_setup_parse_element(eobject, data, request)) r = EINA_FALSE; } @@ -1610,12 +1617,11 @@ static const EDBus_Service_Interface_Desc server_desc = { }; static void -_ethumb_dbus_request_name_cb(void *data, const EDBus_Message *msg, EDBus_Pending *pending) +_ethumb_dbus_request_name_cb(void *data, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED) { EDBus_Service_Interface *iface; const char *errname, *errmsg; Ethumbd *ed = data; - int r; if (edbus_message_error_get(msg, &errname, &errmsg)) { @@ -1654,11 +1660,15 @@ _ethumb_dbus_finish(Ethumbd *ed) static Eina_Bool _ethumbd_slave_spawn(Ethumbd_Slave *slave, Ethumbd *ed) { + char buf[PATH_MAX]; + slave->bufcmd = NULL; slave->scmd = 0; - slave->exe = ecore_exe_pipe_run( - ETHUMB_LIBEXEC_DIR"/ethumbd_slave", + snprintf(buf, sizeof(buf), "%s/ethumb/utils/"MODULE_ARCH"/ethumbd_slave", + eina_prefix_lib_get(_pfx)); + + slave->exe = ecore_exe_pipe_run(buf, ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_WRITE, ed); if (!slave->exe) { @@ -1691,11 +1701,22 @@ main(int argc, char *argv[]) if (_log_domain < 0) { EINA_LOG_CRIT("could not register log domain 'ethumbd'"); - exit_value = -7; + exit_value = -8; goto finish; } } + _pfx = eina_prefix_new(argv[0], ethumb_init, + "ETHUMB", "ethumb", "checkme", + PACKAGE_BIN_DIR, PACKAGE_LIB_DIR, + PACKAGE_DATA_DIR, PACKAGE_DATA_DIR); + if (!_pfx) + { + ERR("Could not get ethumb installation prefix."); + exit_value = -7; + goto finish; + } + ed.data_cb = ecore_event_handler_add(ECORE_EXE_EVENT_DATA, _ethumbd_slave_data_read_cb, &ed); ed.del_cb = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, @@ -1773,6 +1794,8 @@ main(int argc, char *argv[]) finish: if (ed.slave.exe) ecore_exe_quit(ed.slave.exe); + + if (_pfx) eina_prefix_free(_pfx); ethumb_shutdown(); eina_init(); ecore_shutdown(); diff --git a/legacy/ethumb/src/bin/ethumbd_client.c b/src/bin/ethumb/ethumbd_client.c similarity index 94% rename from legacy/ethumb/src/bin/ethumbd_client.c rename to src/bin/ethumb/ethumbd_client.c index 1dcdf111ed..e81fc2e9a7 100644 --- a/legacy/ethumb/src/bin/ethumbd_client.c +++ b/src/bin/ethumb/ethumbd_client.c @@ -60,7 +60,7 @@ struct options }; static unsigned char -_ethumb_getopt_callback_frame_parse(const Ecore_Getopt *parser __UNUSED__, const Ecore_Getopt_Desc *desc __UNUSED__, const char *str, void *data __UNUSED__, Ecore_Getopt_Value *storage) +_ethumb_getopt_callback_frame_parse(const Ecore_Getopt *parser EINA_UNUSED, const Ecore_Getopt_Desc *desc EINA_UNUSED, const char *str, void *data EINA_UNUSED, Ecore_Getopt_Value *storage) { struct frame *f = (struct frame *)storage->ptrp; const char *tfile, *tgroup, *tswallow, *base, *sep; @@ -151,7 +151,7 @@ _thumb_report(const char *mode, const char *src_path, const char *src_key, const } static void -_finished_thumb(void *data __UNUSED__, Ethumb_Client *client __UNUSED__, int id __UNUSED__, const char *src_path, const char *src_key, const char *thumb_path, const char *thumb_key, Eina_Bool success) +_finished_thumb(void *data EINA_UNUSED, Ethumb_Client *client EINA_UNUSED, int id EINA_UNUSED, const char *src_path, const char *src_key, const char *thumb_path, const char *thumb_key, Eina_Bool success) { const char *mode = success ? "GENERATED" : "FAILED"; _thumb_report(mode, src_path, src_key, thumb_path, thumb_key); @@ -159,7 +159,7 @@ _finished_thumb(void *data __UNUSED__, Ethumb_Client *client __UNUSED__, int id } static void -_exists(void *data, Ethumb_Client *c, __UNUSED__ Ethumb_Exists *thread, Eina_Bool exists) +_exists(void *data, Ethumb_Client *c, EINA_UNUSED Ethumb_Exists *thread, Eina_Bool exists) { struct options *opts = data; const char *thumb_path, *thumb_key; diff --git a/legacy/ethumb/src/bin/ethumbd_private.h b/src/bin/ethumb/ethumbd_private.h similarity index 100% rename from legacy/ethumb/src/bin/ethumbd_private.h rename to src/bin/ethumb/ethumbd_private.h diff --git a/legacy/ethumb/src/bin/ethumbd_child.c b/src/bin/ethumb/ethumbd_slave.c similarity index 92% rename from legacy/ethumb/src/bin/ethumbd_child.c rename to src/bin/ethumb/ethumbd_slave.c index a11c90ca16..b1d319a305 100644 --- a/legacy/ethumb/src/bin/ethumbd_child.c +++ b/src/bin/ethumb/ethumbd_slave.c @@ -126,7 +126,7 @@ _ec_write_safe(int fd, const void *buf, ssize_t size) } static int -_ec_pipe_str_read(struct _Ethumbd_Child *ec __UNUSED__, char **str) +_ec_pipe_str_read(struct _Ethumbd_Child *ec EINA_UNUSED, char **str) { int size; int r; @@ -215,7 +215,7 @@ _ec_op_del(struct _Ethumbd_Child *ec) } static void -_ec_op_generated_cb(void *data __UNUSED__, Ethumb *e, Eina_Bool success) +_ec_op_generated_cb(void *data EINA_UNUSED, Ethumb *e, Eina_Bool success) { const char *thumb_path, *thumb_key; int size_path, size_key, size_cmd; @@ -291,7 +291,7 @@ _ec_op_generate(struct _Ethumbd_Child *ec) } static int -_ec_fdo_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_fdo_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; int value; @@ -306,7 +306,7 @@ _ec_fdo_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_size_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_size_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; int w, h; @@ -328,7 +328,7 @@ _ec_size_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_format_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_format_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; int value; @@ -343,7 +343,7 @@ _ec_format_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_aspect_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_aspect_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; int value; @@ -358,7 +358,7 @@ _ec_aspect_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_orientation_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_orientation_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; int value; @@ -373,7 +373,7 @@ _ec_orientation_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_crop_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_crop_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; float x, y; @@ -395,7 +395,7 @@ _ec_crop_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_quality_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_quality_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; int value; @@ -410,7 +410,7 @@ _ec_quality_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_compress_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_compress_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; int value; @@ -488,7 +488,7 @@ _ec_category_set(struct _Ethumbd_Child *ec, Ethumb *e) } static int -_ec_video_time_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_video_time_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; float value; @@ -503,7 +503,7 @@ _ec_video_time_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_video_start_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_video_start_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; float value; @@ -518,7 +518,7 @@ _ec_video_start_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_video_interval_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_video_interval_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; float value; @@ -533,7 +533,7 @@ _ec_video_interval_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_video_ntimes_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_video_ntimes_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; int value; @@ -548,7 +548,7 @@ _ec_video_ntimes_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_video_fps_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_video_fps_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; int value; @@ -563,7 +563,7 @@ _ec_video_fps_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) } static int -_ec_document_page_set(struct _Ethumbd_Child *ec __UNUSED__, Ethumb *e) +_ec_document_page_set(struct _Ethumbd_Child *ec EINA_UNUSED, Ethumb *e) { int r; int value; @@ -731,7 +731,7 @@ _ec_setup(struct _Ethumbd_Child *ec) } int -main(int argc __UNUSED__, const char *argv[] __UNUSED__) +main(int argc EINA_UNUSED, const char *argv[] EINA_UNUSED) { struct _Ethumbd_Child *ec; diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c index dea54665f5..9361f23929 100644 --- a/src/lib/edje/edje_edit.c +++ b/src/lib/edje/edje_edit.c @@ -4749,7 +4749,8 @@ edje_edit_image_data_add(Evas_Object *obj, const char *name, int id) if ((unsigned int) id >= ed->file->image_dir->entries_count) return EINA_FALSE; de = ed->file->image_dir->entries + id; - eina_stringshare_replace(&de->entry, name); + _edje_if_string_free(ed, de->entry); + de->entry = eina_stringshare_add(name); de->source_type = 1; de->source_param = 1; diff --git a/legacy/ethumb/src/lib/Ethumb.h b/src/lib/ethumb/Ethumb.h similarity index 78% rename from legacy/ethumb/src/lib/Ethumb.h rename to src/lib/ethumb/Ethumb.h index 12984acb9f..fd4dff708a 100644 --- a/legacy/ethumb/src/lib/Ethumb.h +++ b/src/lib/ethumb/Ethumb.h @@ -43,9 +43,74 @@ extern "C" { int micro; int revision; } Ethumb_Version; - + EAPI extern Ethumb_Version *ethumb_version; - + +/** + * @page ethumb_main Ethumb + * + * @date 2009 (created) + * + * @section toc Table of Contents + * + * @li @ref ethumb_main_intro + * @li @ref ethumb_main_compiling + * @li @ref ethumb_main_next_steps + * + * @section ethumb_main_intro Introduction + * + * Ethumb will use @ref Evas to generate thumbnail images of given + * files. The API allows great customization of the generated files + * and also helps compling to FreeDesktop.Org Thumbnail Specification + * (http://specifications.freedesktop.org/thumbnail-spec/thumbnail-spec-latest.html) + * + * However, thumbnailing can be an expensive process that will impact + * your application experience, blocking animations and user + * interaction during the generation. Another problem is that one + * should try to cache the thumbnails in a place that other + * applications can benefit from the file. + * + * @ref Ethumb_Client exists to solve this. It will communicate with a + * server using standard D-Bus protocol. The server will use @ref + * Ethumb itself to generate the thumbnail images and cache them using + * FreeDesktop.Org standard. It is recommended that most applications + * use @ref Ethumb_Client instead of @ref Ethumb directly. + * + * @section ethumb_main_compiling How to compile + * + * Ethumb is a library your application links to. The procedure for + * this is very simple. Note that usually you want the D-Bus client + * library. You simply have to compile your application with the + * appropriate compiler flags that the @c pkg-config script + * outputs. For example: + * + * Compiling C or C++ files into object files: + * + * @verbatim + gcc -c -o main.o main.c `pkg-config --cflags ethumb_client` + @endverbatim + * + * Linking object files into a binary executable: + * + * @verbatim + gcc -o my_application main.o `pkg-config --libs ethumb_client` + @endverbatim + * + * See @ref pkgconfig + * + * @section ethumb_main_next_steps Next Steps + * + * After you understood what Ethumb is and installed it in your system + * you should proceed understanding the programming interface. + * + * Recommended reading: + * + * @li @ref Ethumb_Client to generate thumbnails using a server + * (recommended). + * @li @ref Ethumb to generate thumbnails in the local process. + * + */ + /** * @defgroup Ethumb Ethumb * diff --git a/legacy/ethumb/src/lib/Ethumb_Plugin.h b/src/lib/ethumb/Ethumb_Plugin.h similarity index 100% rename from legacy/ethumb/src/lib/Ethumb_Plugin.h rename to src/lib/ethumb/Ethumb_Plugin.h diff --git a/legacy/ethumb/src/lib/client/Ethumb_Client.h b/src/lib/ethumb/client/Ethumb_Client.h similarity index 99% rename from legacy/ethumb/src/lib/client/Ethumb_Client.h rename to src/lib/ethumb/client/Ethumb_Client.h index 47fe5ee60f..3c3f95d87e 100644 --- a/legacy/ethumb/src/lib/client/Ethumb_Client.h +++ b/src/lib/ethumb/client/Ethumb_Client.h @@ -35,6 +35,7 @@ extern "C" { /** * @defgroup Ethumb_Client Ethumb Client + * @ingroup Ethumb * * @{ */ diff --git a/legacy/ethumb/src/lib/client/ethumb_client.c b/src/lib/ethumb/client/ethumb_client.c similarity index 97% rename from legacy/ethumb/src/lib/client/ethumb_client.c rename to src/lib/ethumb/client/ethumb_client.c index 77dbbd8134..7b9836625f 100644 --- a/legacy/ethumb/src/lib/client/ethumb_client.c +++ b/src/lib/ethumb/client/ethumb_client.c @@ -263,7 +263,7 @@ _ethumb_async_delete(void *data) } static void -_ethumb_client_name_owner_changed(void *context, const char *bus, const char *old_id, const char *new_id) +_ethumb_client_name_owner_changed(void *context, const char *bus EINA_UNUSED, const char *old_id, const char *new_id) { Ethumb_Client *client = context; DBG("NameOwnerChanged from=[%s] to=[%s]", old_id, new_id); @@ -311,7 +311,7 @@ _ethumb_client_report_connect(Ethumb_Client *client, Eina_Bool success) } static void -_ethumb_client_new_cb(void *data, const EDBus_Message *msg, EDBus_Pending *pending) +_ethumb_client_new_cb(void *data, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED) { const char *errname, *errmsg; const char *opath; @@ -350,7 +350,7 @@ _ethumb_client_call_new(Ethumb_Client *client) } static void -_ethumb_client_exists_heavy(void *data, Ecore_Thread *thread __UNUSED__) +_ethumb_client_exists_heavy(void *data, Ecore_Thread *thread EINA_UNUSED) { Ethumb_Async_Exists *async = data; @@ -358,7 +358,7 @@ _ethumb_client_exists_heavy(void *data, Ecore_Thread *thread __UNUSED__) } static void -_ethumb_client_exists_end(void *data, Ecore_Thread *thread __UNUSED__) +_ethumb_client_exists_end(void *data, Ecore_Thread *thread EINA_UNUSED) { Ethumb_Async_Exists *async = data; Ethumb_Exists *cb; @@ -617,7 +617,7 @@ ethumb_client_on_server_die_callback_set(Ethumb_Client *client, Ethumb_Client_Di */ static void -_ethumb_client_ethumb_setup_cb(void *data, const EDBus_Message *msg, EDBus_Pending *pending) +_ethumb_client_ethumb_setup_cb(void *data EINA_UNUSED, const EDBus_Message *msg, EDBus_Pending *pending EINA_UNUSED) { const char *errname, *errmsg; Eina_Bool result = 0; @@ -643,9 +643,13 @@ _ethumb_client_dbus_get_bytearray(EDBus_Message_Iter *array) const char *result; if (edbus_message_iter_fixed_array_get(array, 'y', &result, &length)) - return eina_stringshare_add(result); + return eina_stringshare_add_length(result, length); else - return NULL; + { + ERR("Not byte array. Signature: %s", + edbus_message_iter_signature_get(array)); + return NULL; + } } static void @@ -658,7 +662,7 @@ _ethumb_client_dbus_append_bytearray(EDBus_Message_Iter *parent, const char *str string = ""; array = edbus_message_iter_container_new(parent, 'a', "y"); - size = strlen(string); + size = strlen(string) + 1; for (i = 0; i < size; i++) edbus_message_iter_basic_append(array, 'y', string[i]); edbus_message_iter_container_close(parent, array); @@ -706,7 +710,6 @@ ethumb_client_ethumb_setup(Ethumb_Client *client) Ethumb *e = client->ethumb; int tw, th, format, aspect, orientation, quality, compress; float cx, cy; - double t; const char *theme_file, *group, *swallow; const char *directory, *category; double video_time, video_start, video_interval; @@ -755,7 +758,7 @@ ethumb_client_ethumb_setup(Ethumb_Client *client) _setup_iterator_close(array, entry, variant); variant = _setup_iterator_open(array, &entry, "compress", "i"); - quality = ethumb_thumb_quality_get(e); + compress = ethumb_thumb_quality_get(e); edbus_message_iter_arguments_append(variant, "i", compress); _setup_iterator_close(array, entry, variant); @@ -826,8 +829,6 @@ _ethumb_client_generated_cb(void *data, const EDBus_Message *msg) EDBus_Message_Iter *thumb_iter; EDBus_Message_Iter *thumb_key_iter; Eina_Bool success; - const char *thumb = NULL; - const char *thumb_key = NULL; int found; struct _ethumb_pending_gen *pending; Eina_List *l; @@ -854,14 +855,14 @@ _ethumb_client_generated_cb(void *data, const EDBus_Message *msg) if (found) { - thumb = _ethumb_client_dbus_get_bytearray(thumb_iter); - thumb_key = _ethumb_client_dbus_get_bytearray(thumb_key_iter); + const char *thumb = _ethumb_client_dbus_get_bytearray(thumb_iter); + const char *thumb_key = _ethumb_client_dbus_get_bytearray(thumb_key_iter); client->pending_gen = eina_list_remove_list(client->pending_gen, l); if (pending->generated_cb) pending->generated_cb(pending->data, client, id, pending->file, pending->key, - pending->thumb, pending->thumb_key, + thumb, thumb_key, success); if (pending->free_data) pending->free_data(pending->data); @@ -869,12 +870,14 @@ _ethumb_client_generated_cb(void *data, const EDBus_Message *msg) eina_stringshare_del(pending->key); eina_stringshare_del(pending->thumb); eina_stringshare_del(pending->thumb_key); + eina_stringshare_del(thumb); + eina_stringshare_del(thumb_key); free(pending); } } static void -_ethumb_client_queue_add_cb(void *data, const EDBus_Message *msg, EDBus_Pending *edbus_pending) +_ethumb_client_queue_add_cb(void *data, const EDBus_Message *msg, EDBus_Pending *edbus_pending EINA_UNUSED) { const char *errname, *errmsg; int32_t id; @@ -925,7 +928,7 @@ static int _ethumb_client_queue_add(Ethumb_Client *client, const char *file, const char *key, const char *thumb, const char *thumb_key, Ethumb_Client_Generate_Cb generated_cb, const void *data, Eina_Free_Cb free_data) { EDBus_Message *msg; - EDBus_Message_Iter *main; + EDBus_Message_Iter *main_itr; struct _ethumb_pending_add *pending; pending = calloc(1, sizeof(*pending)); @@ -942,12 +945,12 @@ _ethumb_client_queue_add(Ethumb_Client *client, const char *file, const char *ke client->id_count = (client->id_count + 1) % MAX_ID; msg = edbus_proxy_method_call_new(client->proxy, "queue_add"); - main = edbus_message_iter_get(msg); - edbus_message_iter_basic_append(main, 'i', pending->id); - _ethumb_client_dbus_append_bytearray(main, file); - _ethumb_client_dbus_append_bytearray(main, key); - _ethumb_client_dbus_append_bytearray(main, thumb); - _ethumb_client_dbus_append_bytearray(main, thumb_key); + main_itr = edbus_message_iter_get(msg); + edbus_message_iter_basic_append(main_itr, 'i', pending->id); + _ethumb_client_dbus_append_bytearray(main_itr, file); + _ethumb_client_dbus_append_bytearray(main_itr, key); + _ethumb_client_dbus_append_bytearray(main_itr, thumb); + _ethumb_client_dbus_append_bytearray(main_itr, thumb_key); pending->pending_call = edbus_proxy_send(client->proxy, msg, _ethumb_client_queue_add_cb, @@ -959,7 +962,7 @@ _ethumb_client_queue_add(Ethumb_Client *client, const char *file, const char *ke } static void -_ethumb_client_queue_remove_cb(void *data, const EDBus_Message *msg, EDBus_Pending *edbus_pending) +_ethumb_client_queue_remove_cb(void *data, const EDBus_Message *msg, EDBus_Pending *edbus_pending EINA_UNUSED) { Eina_Bool success; struct _ethumb_pending_remove *pending = data; @@ -2051,7 +2054,7 @@ _ethumb_client_async_free(Ethumb_Client_Async *async) static void _ethumb_client_thumb_finish(void *data, Ethumb_Client *client, int id, - const char *file __UNUSED__, const char *key __UNUSED__, + const char *file EINA_UNUSED, const char *key EINA_UNUSED, const char *thumb_path, const char *thumb_key, Eina_Bool success) { @@ -2073,7 +2076,7 @@ _ethumb_client_thumb_finish(void *data, } static Eina_Bool -_ethumb_client_thumb_generate_idler(void *data __UNUSED__) +_ethumb_client_thumb_generate_idler(void *data EINA_UNUSED) { Ethumb_Client_Async *async; Eina_List *l1, *l2; @@ -2141,7 +2144,7 @@ _ethumb_client_thumb_exists(void *data, Ethumb_Client *client, Ethumb_Exists *re } static Eina_Bool -_ethumb_client_thumb_exists_idler(void *data __UNUSED__) +_ethumb_client_thumb_exists_idler(void *data EINA_UNUSED) { Ethumb_Client_Async *async; Eina_List *l1, *l2; diff --git a/legacy/ethumb/src/lib/ethumb.c b/src/lib/ethumb/ethumb.c similarity index 97% rename from legacy/ethumb/src/lib/ethumb.c rename to src/lib/ethumb/ethumb.c index 28dbb81d25..65d3b97c84 100644 --- a/legacy/ethumb/src/lib/ethumb.c +++ b/src/lib/ethumb/ethumb.c @@ -31,23 +31,6 @@ # include # endif #endif -#ifdef HAVE_ALLOCA_H -# include -#elif !defined alloca -# ifdef __GNUC__ -# define alloca __builtin_alloca -# elif defined _AIX -# define alloca __alloca -# elif defined _MSC_VER -# include -# define alloca _alloca -# elif !defined HAVE_ALLOCA -# ifdef __cplusplus -extern "C" -# endif -void *alloca (size_t); -# endif -#endif #include #include @@ -109,9 +92,10 @@ static const int THUMB_SIZE_LARGE = 256; static Eina_Hash *_plugins_ext = NULL; static Eina_Array *_plugins = NULL; +static Eina_Prefix *_pfx = NULL; static Eina_Bool -_ethumb_plugin_list_cb(Eina_Module *m, void *data __UNUSED__) +_ethumb_plugin_list_cb(Eina_Module *m, void *data EINA_UNUSED) { const char *file; const char **ext; @@ -156,10 +140,13 @@ _ethumb_plugin_list_cb(Eina_Module *m, void *data __UNUSED__) static void _ethumb_plugins_load(void) { + char buf[PATH_MAX]; + _plugins_ext = eina_hash_string_small_new(NULL); EINA_SAFETY_ON_NULL_RETURN(_plugins_ext); - _plugins = eina_module_list_get(_plugins, PLUGINSDIR, 1, + snprintf(buf, sizeof(buf), "%s/ethumb/modules", eina_prefix_lib_get(_pfx)); + _plugins = eina_module_list_get(_plugins, buf, 1, &_ethumb_plugin_list_cb, NULL); } @@ -192,8 +179,17 @@ ethumb_init(void) if (_log_dom < 0) { EINA_LOG_ERR("Could not register log domain: ethumb"); - eina_shutdown(); - return 0; + goto error_log; + } + + _pfx = eina_prefix_new(NULL, ethumb_init, + "ETHUMB", "ethumb", "checkme", + PACKAGE_BIN_DIR, PACKAGE_LIB_DIR, + PACKAGE_DATA_DIR, PACKAGE_DATA_DIR); + if (!_pfx) + { + ERR("Could not get ethumb installation prefix."); + goto error_pfx; } evas_init(); @@ -210,6 +206,14 @@ ethumb_init(void) _ethumb_plugins_load(); return ++initcount; + + error_pfx: + eina_log_domain_unregister(_log_dom); + _log_dom = -1; + + error_log: + eina_shutdown(); + return 0; } EAPI int @@ -231,6 +235,8 @@ ethumb_shutdown(void) ecore_shutdown(); ecore_evas_shutdown(); edje_shutdown(); + eina_prefix_free(_pfx); + _pfx = NULL; eina_log_domain_unregister(_log_dom); _log_dom = -1; eina_shutdown(); @@ -1453,6 +1459,7 @@ _ethumb_image_load(Ethumb *e) if (e->orientation == ETHUMB_THUMB_ORIENT_ORIGINAL) { + /* TODO: rewrite to not need libexif just to get this */ #ifdef HAVE_LIBEXIF ExifData *exif = exif_data_new_from_file(e->src_path); ExifEntry *entry = NULL; @@ -1595,7 +1602,7 @@ ethumb_generate(Ethumb *e, Ethumb_Generate_Cb finished_cb, const void *data, Ein } r = _ethumb_plugin_generate(e); - fprintf(stderr, "ethumb generate: %i: %p\n", r, e->pdata); + DBG("ethumb plugin generate: %i: %p\n", r, e->pdata); if (r) { return EINA_TRUE; @@ -1603,7 +1610,8 @@ ethumb_generate(Ethumb *e, Ethumb_Generate_Cb finished_cb, const void *data, Ein if (!_ethumb_image_load(e)) { - ERR("could not load input image."); + ERR("could not load input image: file=%s, key=%s", + e->src_path, e->src_key); ethumb_finished_callback_call(e, 0); return EINA_FALSE; } @@ -1771,7 +1779,7 @@ ethumb_cmp(const Ethumb *e1, const Ethumb *e2) } EAPI unsigned int -ethumb_length(__UNUSED__ const void *key) +ethumb_length(EINA_UNUSED const void *key) { return sizeof (Ethumb); } @@ -1781,8 +1789,8 @@ ethumb_length(__UNUSED__ const void *key) return e1->Param - e2->Param; EAPI int -ethumb_key_cmp(const void *key1, __UNUSED__ int key1_length, - const void *key2, __UNUSED__ int key2_length) +ethumb_key_cmp(const void *key1, EINA_UNUSED int key1_length, + const void *key2, EINA_UNUSED int key2_length) { const Ethumb *e1 = key1; const Ethumb *e2 = key2; @@ -1824,7 +1832,7 @@ ethumb_key_cmp(const void *key1, __UNUSED__ int key1_length, #define HASH_PARAM_F(Param) r ^= eina_hash_int32((unsigned int*) &e->Param, 0); EAPI int -ethumb_hash(const void *key, int key_length __UNUSED__) +ethumb_hash(const void *key, int key_length EINA_UNUSED) { const Ethumb *e = key; int r = 0; diff --git a/legacy/ethumb/src/lib/ethumb_private.h b/src/lib/ethumb/ethumb_private.h similarity index 100% rename from legacy/ethumb/src/lib/ethumb_private.h rename to src/lib/ethumb/ethumb_private.h diff --git a/legacy/ethumb/src/lib/md5.c b/src/lib/ethumb/md5.c similarity index 100% rename from legacy/ethumb/src/lib/md5.c rename to src/lib/ethumb/md5.c diff --git a/legacy/ethumb/src/lib/md5.h b/src/lib/ethumb/md5.h similarity index 100% rename from legacy/ethumb/src/lib/md5.h rename to src/lib/ethumb/md5.h diff --git a/legacy/ethumb/src/plugins/emotion/emotion.c b/src/modules/ethumb/emotion/emotion.c similarity index 74% rename from legacy/ethumb/src/plugins/emotion/emotion.c rename to src/modules/ethumb/emotion/emotion.c index 560e661e8e..12750883d8 100644 --- a/legacy/ethumb/src/plugins/emotion/emotion.c +++ b/src/modules/ethumb/emotion/emotion.c @@ -18,6 +18,8 @@ #include #include +static Eina_Prefix *_pfx = NULL; +static int _init_count = 0; static int _log_dom = -1; #define DBG(...) EINA_LOG_DOM_DBG(_log_dom, __VA_ARGS__) #define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__) @@ -65,7 +67,7 @@ _resize_movie(struct _emotion_plugin *_plugin) } static void -_frame_decode_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) +_frame_decode_cb(void *data, Evas_Object *o EINA_UNUSED, void *event_info EINA_UNUSED) { struct _emotion_plugin *_plugin = data; @@ -76,13 +78,13 @@ _frame_decode_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSE } static void -_frame_resized_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) +_frame_resized_cb(void *data, Evas_Object *o EINA_UNUSED, void *event_info EINA_UNUSED) { _resize_movie(data); } static void -_video_stopped_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) +_video_stopped_cb(void *data, Evas_Object *o EINA_UNUSED, void *event_info EINA_UNUSED) { struct _emotion_plugin *_plugin = data; @@ -129,23 +131,24 @@ _setup_thumbnail(struct _emotion_plugin *_plugin) if (!edje_file_group_exists(thumb_path, "movie/thumb")) { - fprintf(stderr, "ERROR: no group 'movie/thumb' found.\n"); - goto exit_error; + ERR("no group 'movie/thumb' found in file=%s", thumb_path); + goto exit_error; } edje = edje_edit_object_add(evas); edje_object_file_set(edje, thumb_path, "movie/thumb"); if (!edje_object_part_exists(edje, "image")) { - fprintf(stderr, "ERROR: no 'image' part found.\n"); - evas_object_del(edje); - goto exit_error; + ERR("no 'image' part found in file=%s, group=movie/thumb", thumb_path); + evas_object_del(edje); + goto exit_error; } if (!edje_edit_program_exist(edje, "animate")) { - fprintf(stderr, "ERROR: no 'animate' program found.\n"); - evas_object_del(edje); - goto exit_error; + ERR("no 'animate' program found in file=%s, group=movie/thumb", + thumb_path); + evas_object_del(edje); + goto exit_error; } for (i = 0; i < _plugin->frnum; i++) @@ -176,24 +179,44 @@ exit_error: return 0; } +static void +_finish_thumb_obj(void *data) +{ + struct _emotion_plugin *_plugin = data; + evas_object_del(_plugin->video); + free(_plugin); +} + static void _finish_thumb_generation(struct _emotion_plugin *_plugin, int success) { int r = 0; + evas_object_smart_callback_del(_plugin->video, "frame_resize", - _frame_resized_cb); + _frame_resized_cb); evas_object_smart_callback_del(_plugin->video, "frame_decode", - _frame_decode_cb); + _frame_decode_cb); + evas_object_smart_callback_del(_plugin->video, "decode_stop", + _video_stopped_cb); + emotion_object_play_set(_plugin->video, 0); - evas_object_del(_plugin->video); + if (_plugin->ef) - eet_close(_plugin->ef); + { + Eet_Error err = eet_close(_plugin->ef); + if (err != EET_ERROR_NONE) + { + ERR("Error writing Eet thumbnail file: %d", err); + success = EINA_FALSE; + } + } if (success) r = _setup_thumbnail(_plugin); - free(_plugin); ethumb_finished_callback_call(_plugin->e, r); + + ecore_job_add(_finish_thumb_obj, _plugin); } static Eina_Bool @@ -298,17 +321,25 @@ _generate_animated_thumb(struct _emotion_plugin *_plugin) char buf[4096]; Ethumb *e = _plugin->e; - snprintf(buf, sizeof(buf), "%s/data/emotion_template.edj", PLUGINSDIR); + snprintf(buf, sizeof(buf), + "%s/ethumb/modules/emotion/" MODULE_ARCH "/template.edj", + eina_prefix_lib_get(_pfx)); ethumb_thumb_path_get(e, &thumb_path, NULL); thumb_dir = ecore_file_dir_get(thumb_path); ecore_file_mkpath(thumb_dir); free(thumb_dir); - ecore_file_cp(buf, thumb_path); + if (!eina_file_copy(buf, thumb_path, 0, NULL, NULL)) + { + ERR("Couldn't copy file '%s' to '%s'", buf, thumb_path); + ERR("could not open '%s'", thumb_path); + _finish_thumb_generation(_plugin, 0); + return; + } _plugin->ef = eet_open(thumb_path, EET_FILE_MODE_READ_WRITE); if (!_plugin->ef) { - fprintf(stderr, "ERROR: could not open '%s'\n", thumb_path); - _finish_thumb_generation(_plugin, 0); + ERR("could not open '%s'", thumb_path); + _finish_thumb_generation(_plugin, 0); } } @@ -325,8 +356,7 @@ _thumb_generate(Ethumb *e) r = emotion_object_init(o, NULL); if (!r) { - fprintf(stderr, "ERROR: could not start emotion using gstreamer" - " plugin.\n"); + ERR("Could not initialize emotion object."); evas_object_del(o); ethumb_finished_callback_call(e, 0); free(_plugin); @@ -368,7 +398,7 @@ _thumb_generate(Ethumb *e) } static void -_thumb_cancel(Ethumb *e __UNUSED__, void *data) +_thumb_cancel(Ethumb *e EINA_UNUSED, void *data) { struct _emotion_plugin *_plugin = data; @@ -389,20 +419,65 @@ ethumb_plugin_get(void) _thumb_cancel }; - _log_dom = eina_log_domain_register("ethumb_emotion", EINA_COLOR_GREEN); - return &plugin; } static Eina_Bool _module_init(void) { + if (_init_count > 0) + { + _init_count++; + return EINA_TRUE; + } + + _log_dom = eina_log_domain_register("ethumb_emotion", EINA_COLOR_GREEN); + if (_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: ethumb_emotion"); + goto error_log; + } + + _pfx = eina_prefix_new(NULL, ethumb_init, + "ETHUMB", "ethumb", "checkme", + PACKAGE_BIN_DIR, PACKAGE_LIB_DIR, + PACKAGE_DATA_DIR, PACKAGE_DATA_DIR); + if (!_pfx) + { + ERR("Could not get ethumb installation prefix."); + goto error_pfx; + } + + emotion_init(); + + _init_count = 1; return EINA_TRUE; + + error_pfx: + eina_log_domain_unregister(_log_dom); + _log_dom = -1; + + error_log: + return EINA_FALSE; } static void _module_shutdown(void) { + if (_init_count <= 0) + { + EINA_LOG_ERR("Init count not greater than 0 in shutdown."); + return; + } + _init_count--; + if (_init_count > 0) return; + + emotion_shutdown(); + + eina_prefix_free(_pfx); + _pfx = NULL; + eina_log_domain_unregister(_log_dom); + _log_dom = -1; } EINA_MODULE_INIT(_module_init); diff --git a/src/modules/ethumb/emotion/placeholder.png b/src/modules/ethumb/emotion/placeholder.png new file mode 100644 index 0000000000..2c90acdc92 Binary files /dev/null and b/src/modules/ethumb/emotion/placeholder.png differ diff --git a/legacy/ethumb/src/plugins/emotion/template.edc b/src/modules/ethumb/emotion/template.edc similarity index 83% rename from legacy/ethumb/src/plugins/emotion/template.edc rename to src/modules/ethumb/emotion/template.edc index 4a30c3deac..050641c12f 100644 --- a/legacy/ethumb/src/plugins/emotion/template.edc +++ b/src/modules/ethumb/emotion/template.edc @@ -3,6 +3,8 @@ collections { group { name: "movie/thumb"; + images.image: "placeholder.png" COMP; + parts { part { name: "image"; @@ -10,8 +12,8 @@ collections { mouse_events: 0; description { state: "default" 0.0; - fill.smooth: 0; - image.scale_hint: DYNAMIC; + fill.smooth: 0; + image.normal: "placeholder.png"; /* edje doesn't allow image without files anymore */ } } } diff --git a/legacy/ethumb/src/tests/ethumb_dbus.c b/src/tests/ethumb/ethumb_dbus.c similarity index 91% rename from legacy/ethumb/src/tests/ethumb_dbus.c rename to src/tests/ethumb/ethumb_dbus.c index d9e2f10281..946aa137ff 100644 --- a/legacy/ethumb/src/tests/ethumb_dbus.c +++ b/src/tests/ethumb/ethumb_dbus.c @@ -34,13 +34,13 @@ #include static void -_on_server_die_cb(void *data __UNUSED__, Ethumb_Client *client __UNUSED__) +_on_server_die_cb(void *data EINA_UNUSED, Ethumb_Client *client EINA_UNUSED) { ecore_main_loop_quit(); } static void -_queue_add_cb(void *data __UNUSED__, Ethumb_Client *client __UNUSED__, int id, const char *file, const char *key __UNUSED__, const char *thumb_path, const char *thumb_key __UNUSED__, Eina_Bool success) +_queue_add_cb(void *data EINA_UNUSED, Ethumb_Client *client EINA_UNUSED, int id, const char *file, const char *key EINA_UNUSED, const char *thumb_path, const char *thumb_key EINA_UNUSED, Eina_Bool success) { fprintf(stderr, ">>> %hhu file ready: %s; thumb ready: %s; id = %d\n", success, file, thumb_path, id); }