eksport zdjęć przy użyciu lua

Do tej pory nauczyliśmy się używać lua do adaptacji darktable w naszym systemie pracy. Zobaczmy teraz, jak zaprząc lua do łatwego eksportu zdjęć do serwisu online. Jeśli jesteś w stanie przesłać plik na serwer przy użyciu linii poleceń, możesz użyć lua do automatyzacji tego z poziomu interfejsu użytkownika darktable.

W tym przykładzie użyjemy lua do eksportu poprzez scp. W interfejsie darktable pojawi się nowy typ miejsca docelowego, który wyeksportuje zdjęcia do zdalnej lokacji poprzez mechanizm kopiowania w ssh.

darktable = require "darktable"

darktable.preferences.register("scp_export","export_path",
  "string","docelowa sciezka SCP",
  "Kompletna sciezka do skopiowania. Moze zawierac uzytkownika i hostname","")

darktable.register_storage("scp_export","Eksport SCP",
  function( storage, image, format, filename,
     number, total, high_quality, extra_data)
    if not darktable.control.execute("scp "..filename.." "..
      darktable.preferences.read("scp_export",
         "export_path","string")) then
      darktable.print_error("Blad scp: "..tostring(image))
    end
end)

darktable.preferences.register will add a new preference to darktable’s preferences menu, scp_export and export_path allow us to uniquely identify our preference. These fields are reused when we read the value of the preference. The string field tells the lua engine that the preference is a string. It could also be an integer, a filename or any of the types detailed in the API manual relating to types_lua_pref_type. We then have the label for the preference in the preference menu, the tooltip when hovering over the value and a default value.

darktable.register_storage jest wywołaniem, rejestrującym nowe miejsce zapisu danych. Pierwszy argument to nazwa miejsca, drugi to etykieta, wyświetlana w interfejsie, a trzeci to funkcja, wywoływana na każdym zdjęciu. Funkcja posiada wiele parametrów, ale w przykładzie użyjemy tylko filename. Zawiera on nazwę pliku tymczasowego, do którego zdjęcie zostało wyeksportowane przez silnik darktable.

Kod działa, ale ma kilka ograniczeń. W końcu to tylko prosty przykład:

  • Dla określenia ścieżki docelowej użyliśmy preferencji. Lepiej byłoby dodać element do eksportowego interfejsu w darktable. Omówimy to dokładniej w dalszej części.

  • Nie sprawdziliśmy wartości zwracanej z scp. Komenda mogła zakończyć się błędem, na przykład jeśli użytkownik nie ustawił poprawnie wartości.

  • Skrypt nie może czytać wejścia od użytkownika. Zdalne scp musi korzystać z bezhasłowego copy – do scp nie da się w łatwy sposób przekazać hasła, musimy więc tak to zostawić.

  • O zakończeniu działania przykładu nie informuje nas żaden komunikat, jedyny element to pasek postępu w lewej dolnej części, pokazujący użytkownikowi, że zadanie zostało wykonane.

  • We use darktable.control.execute to call an external program. The normal os.execute would block other lua codes from happening.

translations