function "dtutils.string.substitute()" fails when no time data is provided in Exif data
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 78/100
Research direction
Start in lua/lib/dtutils/string.lua by reading build_substitute_list and exiftime2systime, then run the reported substitution script against an image with no EXIF time data. Done means the default timestamp is accepted without an os.time error on the affected system.
Written by the indexing model from the issue text.
Description
When running a script using "dtutils.string.substitute()" function on a file without any time data in Exif, the "dtutils.string.substitute()" function fails.
190.9832 LUA ERROR : ...\AppData\Local\darktable/lua/lib/dtutils\string.lua:748: time result cannot be represented in this installation
stack traceback:
[C]: in ?
[C]: in function 'os.time'
...AppData\Local\darktable/lua/lib/dtutils\string.lua:748: in upvalue 'exiftime2systime'
...AppData\Local\darktable/lua/lib/dtutils\string.lua:843: in function 'lib/dtutils.string.build_substitute_list'
...AppData\Local\darktable/lua/lib/dtutils\string.lua:1298: in function 'lib/dtutils.string.substitute'
After looking at the "string.lua" code, it seems that "build_substitute_list" function tries to use "0000:00:00 00:00:00" as default value if the exif time is not available, but the "os.time{}" conversion called later through "exiftime2systime(datetime_taken)" does not like it. The minimum time value accepted on several systems is January 1st, 1970. I updated the "string.lua" code on my installation (replacing "0000:00:00 00:00:00" with "1970:01:01 00:00:00") and this fixes the issue.
Code from string.lua :
local function exiftime2systime(exiftime)
local yr,mo,dy,h,m,s = string.match(exiftime, "(%d-):(%d-):(%d-) (%d-):(%d-):(%d+)")
return(os.time{year=yr, month=mo, day=dy, hour=h, min=m, sec=s})
end
[...]
function dtutils_string.build_substitute_list(image, sequence, variable_string, username, pic_folder, home, desktop)
[...]
if image.exif_datetime_taken and image.exif_datetime_taken ~= "" then
datetime_taken = image.exif_datetime_taken
else
if use_millisecs then
datetime_taken = "0000:00:00 00:00:00.0"
else
datetime_taken = "0000:00:00 00:00:00"
end
end
[...]
I see this issue on Windows 11, DarkTable 5.4.0. Other systems could behave the same, or not.
- Dominant language
- Lua
- Stars
- 219
- Forks
- 142
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from darktable-org/lua-scripts
-
dtutils.string: build_substitute_list errors when a metadata field (e.g. rights) has been removed Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
darktable-org/lua-scripts#716 · 2 comments ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 63/100
darktable-org/lua-scripts#706 ·
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 65/100
darktable-org/lua-scripts#618 · 3 comments ·
-
Difficulty 3/5 1-2 days Newbie friendliness 52/100
darktable-org/lua-scripts#710 · 3 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 45/100
darktable-org/lua-scripts#708 · 1 comment ·
All issues in darktable-org/lua-scripts
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
api7/lua-resty-saml#62 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
nvim-tree/nvim-tree.lua#3357 · 1 comment ·
-
Difficulty 1/5 Under an hour Newbie friendliness 94/100
codymikol/multiverse.nvim#320 ·
-
Data Correction tbc
Difficulty 2/5 1-3 hours Newbie friendliness 68/100