Do tej pory nauczyliśmy się używać lua do adaptacji Ansel 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 Ansel.
W tym przykładzie użyjemy lua do eksportu poprzez scp
. W interfejsie Ansel pojawi się nowy typ miejsca docelowego, który wyeksportuje zdjęcia do zdalnej lokacji poprzez mechanizm kopiowania w ssh
.
1Ansel = require "Ansel"
2
3Ansel.preferences.register("scp_export","export_path",
4 "string","docelowa sciezka SCP",
5 "Kompletna sciezka do skopiowania. Moze zawierac uzytkownika i hostname","")
6
7Ansel.register_storage("scp_export","Eksport SCP",
8 function( storage, image, format, filename,
9 number, total, high_quality, extra_data)
10 if not Ansel.control.execute("scp "..filename.." "..
11 Ansel.preferences.read("scp_export",
12 "export_path","string")) then
13 Ansel.print_error("Blad scp: "..tostring(image))
14 end
15end)
Ansel.preferences.register
dodaje nowe ustawienie do menu ustawień Ansel. scp_export
oraz export_path
pozwalają na unikalne określenie parametru. Pola te zostaną wykorzystane, kiedy odczytamy z nich wartość ustawienia. Pole string' nakazuje silnikowi lua odczytanie tego ustawienia jako łańcucha znaków. Można określić również liczbę całkowitą, nazwę pliku lub jakikolwiek typ, zdefiniowany w API, odnoszący się do
types_lua_pref_type`. Mamy więc opis ustawienia w menu ustawień, tekst pomocy (tooltip) po najechaniu myszką na wartość oraz wartość domyślną.
Ansel.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 Ansel.
Kod działa, ale ma kilka ograniczeń. W końcu to tylko prosty przykład:
We use preferences to configure the target path. It would be nicer to add an element to the export UI in Ansel. We will detail how to do that in the next section.
We do not check the returned value of
scp
. That command might fail, in particular if the user has not correctly set the preference.This script can’t read input from the user. The remote
scp
must use password-less copy –scp
can’t be provided with a password easily, so we will leave it that way.There is no message displayed once the example is done, only the progress bar on the lower left side tells the user that the job is complete.
We use
coroutine.yield
to call an external program. The normalos.execute
would block other lua codes from happening.