raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=10ac9fb3277e599d1ac4d54c0d59faebc064b186

commit 10ac9fb3277e599d1ac4d54c0d59faebc064b186
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Wed Mar 10 10:05:44 2021 +0000

    e - add exif as dependency and option for efm file props
---
 meson.build         |  5 +++
 meson_options.txt   |  4 +++
 src/bin/e_fm_prop.c | 94 +++++++++++++++++++++++++++++++++++++++++++----------
 src/bin/meson.build |  4 +++
 4 files changed, 90 insertions(+), 17 deletions(-)

diff --git a/meson.build b/meson.build
index efe0041fd..8fc094014 100644
--- a/meson.build
+++ b/meson.build
@@ -221,6 +221,11 @@ if get_option('pam') == true
   endif
 endif
 
+if get_option('libexif') == true
+  dep_libexif = dependency('libexif', required: true)
+  config_h.set('HAVE_LIBEXIF', '1')
+endif
+
 dep_m  = cc.find_library('m', required: false)
 dep_dl = cc.find_library('dl', required: false)
 
diff --git a/meson_options.txt b/meson_options.txt
index 64f0be347..b214df80f 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -35,6 +35,10 @@ option('pam',
        type: 'boolean',
        value: true,
        description: 'enable PAM support: (default=true)')
+option('libexif',
+       type: 'boolean',
+       value: true,
+       description: 'enable EXIF support: (default=true)')
 
 option('device-udev',
        type: 'boolean',
diff --git a/src/bin/e_fm_prop.c b/src/bin/e_fm_prop.c
index fe54e0219..fa4ba94ba 100644
--- a/src/bin/e_fm_prop.c
+++ b/src/bin/e_fm_prop.c
@@ -1,4 +1,7 @@
 #include "e.h"
+#ifdef HAVE_LIBEXIF
+#include <libexif/exif-data.h>
+#endif
 
 /* FIXME:
  *
@@ -69,6 +72,7 @@ struct _E_Config_Dialog_Data
    char            *mod_date;
    char            *acc_date;
    char            *pms_date;
+   char            *exif_date;
    char            *mime;
    char            *owner;
    char            *link;
@@ -133,6 +137,41 @@ _fill_data(E_Config_Dialog_Data *cfdata, E_Fm2_Icon *ic)
    cfdata->mod_date = e_util_file_time_get(cfdata->fi->statinfo.st_mtime);
    cfdata->acc_date = e_util_file_time_get(cfdata->fi->statinfo.st_atime);
    cfdata->pms_date = e_util_file_time_get(cfdata->fi->statinfo.st_ctime);
+#ifdef HAVE_LIBEXIF
+   snprintf(loc, sizeof(loc), "%s/%s", e_fm2_real_path_get(cfdata->fi->fm), 
cfdata->fi->file);
+   ExifData *ed = exif_data_new_from_file(loc);
+   if (ed)
+     {
+        ExifEntry *entry = exif_content_get_entry(ed->ifd[EXIF_IFD_0], 
EXIF_TAG_DATE_TIME_ORIGINAL);
+        if (!entry)
+          entry = exif_content_get_entry(ed->ifd[EXIF_IFD_0], 
EXIF_TAG_DATE_TIME_DIGITIZED);
+        if (!entry)
+          entry = exif_content_get_entry(ed->ifd[EXIF_IFD_0], 
EXIF_TAG_DATE_TIME);
+        if (entry)
+          {
+             char tbuf[128];
+             struct tm tm;
+             time_t tim;
+
+             exif_entry_get_value(entry, tbuf, sizeof(tbuf));
+             tbuf[127] = 0;
+             memset(&tm, 0, sizeof(tm));
+             tm.tm_isdst = -1;
+             // "YYYY:MM:DD HH:MM:SS"
+             if (sscanf(tbuf, "%i:%i:%i %i:%i:%i",
+                        &tm.tm_year, &tm.tm_mon, &tm.tm_mday,
+                        &tm.tm_hour, &tm.tm_min, &tm.tm_sec) == 6)
+               {
+                  tm.tm_year -= 1900;
+                  tm.tm_mon -= 1;
+                  tim = mktime(&tm);
+                  if (tim != (time_t)-1)
+                    cfdata->exif_date = e_util_file_time_get(tim);
+               }
+          }
+        exif_data_unref(ed);
+     }
+#endif
    if (cfdata->fi->mime) cfdata->mime = strdup(cfdata->fi->mime);
 
    snprintf(blks, sizeof(blks), "%lu", (unsigned 
long)cfdata->fi->statinfo.st_blocks);
@@ -182,6 +221,7 @@ _free_data(E_Config_Dialog *cfd EINA_UNUSED, 
E_Config_Dialog_Data *cfdata)
    E_FREE(cfdata->mod_date);
    E_FREE(cfdata->acc_date);
    E_FREE(cfdata->pms_date);
+   E_FREE(cfdata->exif_date);
    E_FREE(cfdata->mime);
    E_FREE(cfdata->owner);
    E_FREE(cfdata->link);
@@ -380,7 +420,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cf
    E_Radio_Group *rg;
    char buf[PATH_MAX];
    const char *itype = NULL;
-   int mh;
+   int mh, row = 0;
 
    win = cfd->dia->win;
    snprintf(buf, sizeof(buf), "%s/%s",
@@ -392,68 +432,88 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cf
    of = e_widget_frametable_add(evas, _("General"), 1);
 
    ob = e_widget_label_add(evas, _("Name:"));
-   e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, row, 1, 1, 1, 0, 1, 0);
    ob = e_widget_entry_add(win, &(cfdata->file), NULL, NULL, NULL);
    e_widget_size_min_get(ob, NULL, &mh);
    e_widget_size_min_set(ob, 140, mh);
    e_widget_entry_readonly_set(ob, 1);
-   e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 1, row, 1, 1, 1, 0, 1, 0);
+   row++;
 
    ob = e_widget_label_add(evas, _("Location:"));
-   e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, row, 1, 1, 1, 0, 1, 0);
    ob = e_widget_entry_add(win, &(cfdata->location), NULL, NULL, NULL);
    e_widget_size_min_get(ob, NULL, &mh);
    e_widget_size_min_set(ob, 140, mh);
    e_widget_entry_readonly_set(ob, 1);
-   e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 1, row, 1, 1, 1, 0, 1, 0);
+   row++;
 
    ob = e_widget_label_add(evas, _("Size:"));
-   e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, row, 1, 1, 1, 0, 1, 0);
    ob = e_widget_entry_add(win, &(cfdata->size), NULL, NULL, NULL);
    e_widget_size_min_get(ob, NULL, &mh);
    e_widget_size_min_set(ob, 140, mh);
    e_widget_entry_readonly_set(ob, 1);
-   e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 1, row, 1, 1, 1, 0, 1, 0);
+   row++;
 
    ob = e_widget_label_add(evas, _("Occupied blocks on disk:"));
-   e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, row, 1, 1, 1, 0, 1, 0);
    ob = e_widget_entry_add(win, &(cfdata->blocks), NULL, NULL, NULL);
    e_widget_size_min_get(ob, NULL, &mh);
    e_widget_size_min_set(ob, 140, mh);
    e_widget_entry_readonly_set(ob, 1);
-   e_widget_frametable_object_append(of, ob, 1, 3, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 1, row, 1, 1, 1, 0, 1, 0);
+   row++;
+
+   if (cfdata->exif_date)
+     {
+        ob = e_widget_label_add(evas, _("Taken on:"));
+        e_widget_frametable_object_append(of, ob, 0, row, 1, 1, 1, 0, 1, 0);
+        ob = e_widget_entry_add(win, &(cfdata->exif_date), NULL, NULL, NULL);
+        e_widget_size_min_get(ob, NULL, &mh);
+        e_widget_size_min_set(ob, 140, mh);
+        e_widget_entry_readonly_set(ob, 1);
+        e_widget_frametable_object_append(of, ob, 1, row, 1, 1, 1, 0, 1, 0);
+        row++;
+     }
 
    ob = e_widget_label_add(evas, _("Last Accessed:"));
-   e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, row, 1, 1, 1, 0, 1, 0);
    ob = e_widget_entry_add(win, &(cfdata->acc_date), NULL, NULL, NULL);
    e_widget_size_min_get(ob, NULL, &mh);
    e_widget_size_min_set(ob, 140, mh);
    e_widget_entry_readonly_set(ob, 1);
-   e_widget_frametable_object_append(of, ob, 1, 4, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 1, row, 1, 1, 1, 0, 1, 0);
+   row++;
 
    ob = e_widget_label_add(evas, _("Last Modified:"));
-   e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, row, 1, 1, 1, 0, 1, 0);
    ob = e_widget_entry_add(win, &(cfdata->mod_date), NULL, NULL, NULL);
    e_widget_size_min_get(ob, NULL, &mh);
    e_widget_size_min_set(ob, 140, mh);
    e_widget_entry_readonly_set(ob, 1);
-   e_widget_frametable_object_append(of, ob, 1, 5, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 1, row, 1, 1, 1, 0, 1, 0);
+   row++;
 
    ob = e_widget_label_add(evas, _("Last Modified Permissions:"));
-   e_widget_frametable_object_append(of, ob, 0, 6, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, row, 1, 1, 1, 0, 1, 0);
    ob = e_widget_entry_add(win, &(cfdata->pms_date), NULL, NULL, NULL);
    e_widget_size_min_get(ob, NULL, &mh);
    e_widget_size_min_set(ob, 140, mh);
    e_widget_entry_readonly_set(ob, 1);
-   e_widget_frametable_object_append(of, ob, 1, 6, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 1, row, 1, 1, 1, 0, 1, 0);
+   row++;
 
    ob = e_widget_label_add(evas, _("File Type:"));
-   e_widget_frametable_object_append(of, ob, 0, 7, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 0, row, 1, 1, 1, 0, 1, 0);
    ob = e_widget_entry_add(win, &(cfdata->mime), NULL, NULL, NULL);
    e_widget_size_min_get(ob, NULL, &mh);
    e_widget_size_min_set(ob, 140, mh);
    e_widget_entry_readonly_set(ob, 1);
-   e_widget_frametable_object_append(of, ob, 1, 7, 1, 1, 1, 0, 1, 0);
+   e_widget_frametable_object_append(of, ob, 1, row, 1, 1, 1, 0, 1, 0);
+   row++;
 
    e_widget_table_object_append(ot, of, 0, 0, 1, 1, 1, 1, 1, 1);
    e_widget_table_object_append(o, ot, 1, 0, 0, 1, 1, 1, 1, 1);
diff --git a/src/bin/meson.build b/src/bin/meson.build
index 36abfa2ad..568dd008f 100644
--- a/src/bin/meson.build
+++ b/src/bin/meson.build
@@ -36,6 +36,10 @@ deps_e = [
   dep_intl
 ]
 
+if config_h.has('HAVE_LIBEXIF') == true
+  deps_e += dep_libexif
+endif
+
 deps_ckpass = [ dep_eina, dep_ecore, dep_eldbus ]
 
 if freebsd == true

-- 


Reply via email to