Merge pull request #65 from wpferguson/master

Added fileCopy and fileMove functions to replace os.rename which does…
This commit is contained in:
supertobi
2016-09-06 10:18:03 +02:00
committed by GitHub
2 changed files with 75 additions and 12 deletions

View File

@@ -21,19 +21,23 @@ msgstr ""
"dngettext:2,3\n" "dngettext:2,3\n"
"X-Poedit-Basepath: .\n" "X-Poedit-Basepath: .\n"
#: gimp.lua:189 #: gimp.lua:194
#, lua-format #, lua-format
msgid "Export Image %i/%i" msgid "Export Image %i/%i"
msgstr "Exportiere Bild %i/%i" msgstr "Exportiere Bild %i/%i"
#: gimp.lua:194 #: gimp.lua:242
msgid "Unable to move edited file into collection. Leaving it as %s"
msgstr "Die bearbeitete Datei kann nicht in die Sammlung aufgenommen werden. Bearbeitete Datei ist %s"
#: gimp.lua:251
msgid "GIMP not found" msgid "GIMP not found"
msgstr "GIMP nicht gefunden" msgstr "GIMP nicht gefunden"
#: gimp.lua:209 #: gimp.lua:266
msgid "Launching GIMP..." msgid "Launching GIMP..."
msgstr "Starten von GIMP" msgstr "Starten von GIMP"
#: gimp.lua:254 #: gimp.lua:313
msgid "Edit with GIMP" msgid "Edit with GIMP"
msgstr "Bearbeiten mit GIMP" msgstr "Bearbeiten mit GIMP"

View File

@@ -56,6 +56,11 @@
BUGS, COMMENTS, SUGGESTIONS BUGS, COMMENTS, SUGGESTIONS
* Send to Bill Ferguson, wpferguson@gmail.com * 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" local dt = require "darktable"
@@ -189,6 +194,58 @@ local function show_status(storage, image, format, filename,
dt.print(string.format(_("Export Image %i/%i"), number, total)) dt.print(string.format(_("Export Image %i/%i"), number, total))
end end
local function fileCopy(fromFile, toFile)
local result = nil
-- if cp exists, use it
if checkIfBinExists("cp") then
result = os.execute("cp '" .. fromFile .. "' '" .. toFile .. "'")
end
-- if cp was not present, or if cp failed, then a pure lua solution
if not result then
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
end
return result
end
local function fileMove(fromFile, toFile)
local success = os.rename(fromFile, toFile)
if not success then
-- an error occurred, so let's try using the operating system function
if checkIfBinExists("mv") then
success = os.execute("mv '" .. fromFile .. "' '" .. toFile .. "'")
end
-- if the mv didn't exist or succeed, then...
if not success then
-- pure lua solution
success = fileCopy(fromFile, toFile)
if success then
os.remove(fromFile)
else
dt.print_error("fileMove Error: Unable to move " .. fromFile .. " to " .. toFile .. ". Leaving " .. fromFile .. " in place.")
dt.print(string.format(_("Unable to move edited file into collection. Leaving it as %s"), fromFile))
end
end
end
return success -- nil on error, some value if success
end
local function gimp_edit(storage, image_table, extra_data) --finalize local function gimp_edit(storage, image_table, extra_data) --finalize
if not checkIfBinExists("gimp") then if not checkIfBinExists("gimp") then
dt.print_error(_("GIMP not found")) dt.print_error(_("GIMP not found"))
@@ -233,17 +290,19 @@ local function gimp_edit(storage, image_table, extra_data) --finalize
end end
dt.print_error("moving " .. exported_image .. " to " .. myimage_name) 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") if result then
local myimage = dt.database.import(myimage_name) 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 for _,tag in pairs(dt.tags.get_tags(image)) do
if not (string.sub(tag.name,1,9) == "darktable") then if not (string.sub(tag.name,1,9) == "darktable") then
dt.print_error("attaching tag") dt.print_error("attaching tag")
dt.tags.attach(tag,myimage) dt.tags.attach(tag,myimage)
end
end end
end end
end end