diff --git a/contrib/de_DE/LC_MESSAGES/gimp.po b/contrib/de_DE/LC_MESSAGES/gimp.po index 8b6dcbf..72e64df 100644 --- a/contrib/de_DE/LC_MESSAGES/gimp.po +++ b/contrib/de_DE/LC_MESSAGES/gimp.po @@ -26,14 +26,18 @@ msgstr "" msgid "Export Image %i/%i" msgstr "Exportiere Bild %i/%i" -#: gimp.lua:194 +#: gimp.lua:221 +msgid "Unable to move edited file into collection. Leaving it as %s" +msgstr "Kann nicht bearbeitete Datei in Sammlung zu bewegen. Wenn sie unverändert %s" + +#: gimp.lua:228 msgid "GIMP not found" msgstr "GIMP nicht gefunden" -#: gimp.lua:209 +#: gimp.lua:243 msgid "Launching GIMP..." msgstr "Starten von GIMP" -#: gimp.lua:254 +#: gimp.lua:290 msgid "Edit with GIMP" msgstr "Bearbeiten mit GIMP" diff --git a/contrib/gimp.lua b/contrib/gimp.lua index a15ca6b..9e80b87 100644 --- a/contrib/gimp.lua +++ b/contrib/gimp.lua @@ -56,6 +56,11 @@ BUGS, COMMENTS, SUGGESTIONS * Send to Bill Ferguson, wpferguson@gmail.com + + CHANGES + * 20160823 - os.rename doesn't work across filesystems. Added fileCopy and fileMove functions to move the file + from the temporary location to the collection location irregardless of what filesystem it is on. If an + issue is encountered, a message is printed back to the UI so the user isn't left wondering what happened. ]] local dt = require "darktable" @@ -189,6 +194,40 @@ local function show_status(storage, image, format, filename, dt.print(string.format(_("Export Image %i/%i"), number, total)) end +local function fileCopy(fromFile, toFile) + local result = nil + local fileIn, err = io.open(fromFile, 'rb') + if fileIn then + local fileOut, errr = io.open(toFile, 'w') + if fileOut then + local content = fileIn:read(4096) + while content do + fileOut:write(content) + content = fileIn:read(4096) + end + result = true + fileIn:close() + fileOut:close() + else + dt.print_error("fileCopy Error: " .. errr) + end + else + dt.print_error("fileCopy Error: " .. err) + end + return result +end + +local function fileMove(fromFile, toFile) + local result = fileCopy(fromFile, toFile) + if result then + os.remove(fromFile) + else + dt.print_error("fileMove Error: Unable to copy " .. fromFile .. " to " .. toFile .. ". Leaving " .. fromFile .. " in place.") + dt.print(string.format(_("Unable to move edited file into collection. Leaving it as %s"), fromFile)) + end + return result +end + local function gimp_edit(storage, image_table, extra_data) --finalize if not checkIfBinExists("gimp") then dt.print_error(_("GIMP not found")) @@ -233,17 +272,19 @@ local function gimp_edit(storage, image_table, extra_data) --finalize end dt.print_error("moving " .. exported_image .. " to " .. myimage_name) - result = os.rename(exported_image, myimage_name) + local result = fileMove(exported_image, myimage_name) - dt.print_error("importing file") - local myimage = dt.database.import(myimage_name) + if result then + dt.print_error("importing file") + local myimage = dt.database.import(myimage_name) - groupIfNotMember(image, myimage) + groupIfNotMember(image, myimage) - for _,tag in pairs(dt.tags.get_tags(image)) do - if not (string.sub(tag.name,1,9) == "darktable") then - dt.print_error("attaching tag") - dt.tags.attach(tag,myimage) + for _,tag in pairs(dt.tags.get_tags(image)) do + if not (string.sub(tag.name,1,9) == "darktable") then + dt.print_error("attaching tag") + dt.tags.attach(tag,myimage) + end end end end