Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
datetime.h
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2022 darktable developers.
4
5 darktable is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 darktable is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with darktable. If not, see <http://www.gnu.org/licenses/>.
17*/
18#pragma once
19
20#include <glib.h>
21#include "common/image.h"
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27#define DT_DATETIME_LENGTH 24 // includes msec
28#define DT_DATETIME_EXIF_LENGTH 20 // exif format string length
29
30// The GTimeSpan saved in db is an offset to datetime_origin (0001:01:01 00:00:00)
31// Datetime_taken is to be displayed and stored in XMP without time zone conversion
32// The other timestamps consider the timezone (GTimeSpan converted from local to UTC)
33// The text format of datetime follows the exif format except when local format
34
35typedef struct dt_datetime_t
36{
37 gint year;
38 gint month;
39 gint day;
40 gint hour;
41 gint minute;
42 gint second;
43 gint msec;
45
46// initialize datetime
47void dt_datetime_init(void);
48
49GDateTime *dt_string_to_datetime(const char *string);
50
51// exif datetime to numbers. Returns TRUE if OK.
52gboolean dt_datetime_exif_to_numbers(dt_datetime_t *dt, const char *exif);
53
54// gtimespan to display local string. Returns TRUE if OK.
55gboolean dt_datetime_gtimespan_to_local(char *local, const size_t local_size,
56 const GTimeSpan gts, const gboolean msec, const gboolean tz);
57// gdatetime to display local string. Returns TRUE if OK.
58gboolean dt_datetime_gdatetime_to_local(char *local, const size_t local_size,
59 GDateTime *gdt, const gboolean msec, const gboolean tz);
60
61// exif datetime to numbers without any check about validity of fields. return TRUE of OK.
62gboolean dt_datetime_exif_to_numbers_raw(dt_datetime_t *dt, const char *exif);
63
64// img cache datetime to display local string. Returns TRUE if OK.
65gboolean dt_datetime_img_to_local(char *local, const size_t local_size,
66 const dt_image_t *img, const gboolean msec);
67
68// unix datetime to img cache datetime
69gboolean dt_datetime_unix_to_img(dt_image_t *img, const time_t *unix);
70// unix datetime to exif datetime
71gboolean dt_datetime_unix_to_exif(char *exif, const size_t exif_size, const time_t *unix);
72
73// now to exif
74void dt_datetime_now_to_exif(char *exif);
75// now to gtimespan
76GTimeSpan dt_datetime_now_to_gtimespan(void);
77
78// exif datetime to img cache datetime
79void dt_datetime_exif_to_img(dt_image_t *img, const char *exif);
80// img cache datetime to exif datetime
81gboolean dt_datetime_img_to_exif(char *exif, const size_t exif_size, const dt_image_t *img);
82
83// exif datetime to GDateTime. Returns NULL if NOK. Should be freed by g_date_time_unref().
84GDateTime *dt_datetime_exif_to_gdatetime(const char *exif, const GTimeZone *tz);
85// GDateTime to exif datetime.
86gboolean dt_datetime_gdatetime_to_exif(char *exif, const size_t exif_size, GDateTime *gdt);
87
88// img cache datetime to GDateTime. Returns NULL if NOK. Should be freed by g_date_time_unref().
89GDateTime *dt_datetime_img_to_gdatetime(const dt_image_t *img, const GTimeZone *tz);
90
91// progressive manual entry datetime to exif datetime
92gboolean dt_datetime_entry_to_exif(char *exif, const size_t exif_size, const char *entry);
93// progressive manual entry datetime to exif datetime bound
94gboolean dt_datetime_entry_to_exif_upper_bound(char *exif, const size_t exif_size, const char *entry);
95
96// add subsec (decimal numbers) to exif datetime
97void dt_datetime_add_subsec_to_exif(char *exif, const size_t exif_size, const char*subsec);
98
99// gtimespan to exif datetime
100gboolean dt_datetime_gtimespan_to_exif(char *sdt, const size_t sdt_size, const GTimeSpan gts);
101// exif datetime to gtimespan
102GTimeSpan dt_datetime_exif_to_gtimespan(const char *sdt);
103
104// gtimepsan to datetime numbers
105gboolean dt_datetime_gtimespan_to_numbers(dt_datetime_t *dt, const GTimeSpan gts);
106// datetime numbers to gtimespan
108
109// gdatetime to gtimespan
110GTimeSpan dt_datetime_gdatetime_to_gtimespan(GDateTime *gdt);
111// gtimespan to gdatetime
112GDateTime *dt_datetime_gtimespan_to_gdatetime(const GTimeSpan gts);
113
114// add values (represented by dt_datetime_t) to gdatetime
115GDateTime *dt_datetime_gdatetime_add_numbers(GDateTime *dte, const dt_datetime_t numbers, const gboolean add);
116
117// add values (represented by dt_datetime_t) to unix datetime
118GTimeSpan dt_datetime_gtimespan_add_numbers(const GTimeSpan dt, const dt_datetime_t numbers, const gboolean add);
119
120// add values (represented by dt_datetime_t) to exif datetime
121gboolean dt_datetime_exif_add_numbers(const gchar *exif, const dt_datetime_t numbers, const gboolean add,
122 gchar **result);
123
124#ifdef __cplusplus
125}
126#endif
127
128// clang-format off
129// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
130// vim: shiftwidth=2 expandtab tabstop=2 cindent
131// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
132// clang-format on
133
GTimeSpan dt_datetime_exif_to_gtimespan(const char *sdt)
Definition datetime.c:385
gboolean dt_datetime_img_to_exif(char *exif, const size_t exif_size, const dt_image_t *img)
Definition datetime.c:220
gboolean dt_datetime_gdatetime_to_exif(char *exif, const size_t exif_size, GDateTime *gdt)
Definition datetime.c:246
gboolean dt_datetime_gtimespan_to_local(char *local, const size_t local_size, const GTimeSpan gts, const gboolean msec, const gboolean tz)
Definition datetime.c:143
void dt_datetime_now_to_exif(char *exif)
Definition datetime.c:190
void dt_datetime_add_subsec_to_exif(char *exif, const size_t exif_size, const char *subsec)
Definition datetime.c:360
GTimeSpan dt_datetime_now_to_gtimespan(void)
Definition datetime.c:202
void dt_datetime_init(void)
Definition datetime.c:26
GDateTime * dt_datetime_exif_to_gdatetime(const char *exif, const GTimeZone *tz)
Definition datetime.c:225
GTimeSpan dt_datetime_numbers_to_gtimespan(const dt_datetime_t *dt)
Definition datetime.c:415
gboolean dt_datetime_unix_to_img(dt_image_t *img, const time_t *unix)
Definition datetime.c:164
GDateTime * dt_datetime_gdatetime_add_numbers(GDateTime *dte, const dt_datetime_t numbers, const gboolean add)
Definition datetime.c:432
GDateTime * dt_string_to_datetime(const char *string)
Definition datetime.c:286
gboolean dt_datetime_img_to_local(char *local, const size_t local_size, const dt_image_t *img, const gboolean msec)
Definition datetime.c:158
gboolean dt_datetime_exif_add_numbers(const gchar *exif, const dt_datetime_t numbers, const gboolean add, gchar **result)
Definition datetime.c:460
GDateTime * dt_datetime_gtimespan_to_gdatetime(const GTimeSpan gts)
Definition datetime.c:410
gboolean dt_datetime_gtimespan_to_exif(char *sdt, const size_t sdt_size, const GTimeSpan gts)
Definition datetime.c:370
GTimeSpan dt_datetime_gdatetime_to_gtimespan(GDateTime *gdt)
Definition datetime.c:424
gboolean dt_datetime_gtimespan_to_numbers(dt_datetime_t *dt, const GTimeSpan gts)
Definition datetime.c:398
gboolean dt_datetime_exif_to_numbers(dt_datetime_t *dt, const char *exif)
Definition datetime.c:64
GTimeSpan dt_datetime_gtimespan_add_numbers(const GTimeSpan dt, const dt_datetime_t numbers, const gboolean add)
Definition datetime.c:450
gboolean dt_datetime_gdatetime_to_local(char *local, const size_t local_size, GDateTime *gdt, const gboolean msec, const gboolean tz)
Definition datetime.c:111
gboolean dt_datetime_exif_to_numbers_raw(dt_datetime_t *dt, const char *exif)
Definition datetime.c:83
void dt_datetime_exif_to_img(dt_image_t *img, const char *exif)
Definition datetime.c:208
gboolean dt_datetime_entry_to_exif_upper_bound(char *exif, const size_t exif_size, const char *entry)
Definition datetime.c:313
gboolean dt_datetime_unix_to_exif(char *exif, const size_t exif_size, const time_t *unix)
Definition datetime.c:177
gboolean dt_datetime_entry_to_exif(char *exif, const size_t exif_size, const char *entry)
Definition datetime.c:298
GDateTime * dt_datetime_img_to_gdatetime(const dt_image_t *img, const GTimeZone *tz)
Definition datetime.c:267
Definition datetime.h:36
gint msec
Definition datetime.h:43
gint day
Definition datetime.h:39
gint minute
Definition datetime.h:41
gint month
Definition datetime.h:38
gint hour
Definition datetime.h:40
gint second
Definition datetime.h:42
gint year
Definition datetime.h:37
Definition common/image.h:195