\section{Přidání nové tiskárny}

Obrazovka přidání tiskárny slouží pro případ, kdy uživatel chce ovládat novou tiskárnu a nenalezl ji v seznamu síťových tiskáren.
Pro úspěšné přidání tiskárny je nutné zadat její název, \acrshort{url} či IP adresu a přístupový token.
Volitelně je možné také přidat url adresu, na které se vyskytuje video stream z web kamery natáčející průběh tisku.
Ukázka obrazovky pro přidání aplikace je na obrázku \ref{fig:implementation-s-add-printer}.

\image[0.5\textwidth]{fig:implementation-s-add-printer}{Ukázka aplikace: Přidání tiskárny}{assets/implementation-s-login.png}

\subsection{Validace formuláře}

Jako u každé aplikace, která přijímá uživatelské vstupy i v mé implementaci je nutné ověřit platnost zadaných údajů.
Jelikož se jedná o logiku, je validace umístěna ve \texttt{ViewModelu}.
Text zadaný uživatelem se při každé změně odešle \texttt{ViewModelu}, který všechny vstupy zvaliduje.
Na základě platnosti kombinace vstupů vyšle \texttt{ViewModel} booleanovskou hodnotu \texttt{Controlleru}.
\texttt{Controller} pomocí \texttt{UI bindings} sváže tuto hodnotu s blokací tlačítka \uv{Přihlásit}. 

Je-li formulář platný, tlačítko je povolené.
V opačném případě je zablokované a nelze stisknutím spustit jeho interakci.

Hodnoty formuláře jsou validované pomocí operací nad signály.
Signály vstupů jsou nejprve zkombinovány a následně \texttt{map} operátorem převedeny na booleanovskou hodnotu.
Použití validace nad signály je vidět v ukázce \ref{code:add-printer-validation}.

\swiftcode{code:add-printer-validation}{Validace formuláře pomocí signálů}{assets/code/add-printer-validation.swift}

\subsection{Uložení tiskárny}

Ve chvíli kdy je formulář ověřený, může uživatel připojení uložit do lokální databáze.
Uložení provede pomocí tlačítka \uv{Připojit}.
\texttt{ViewModel} upozorněný na interakci uživatele načte aktuální hodnoty formuláře a vytvoří požadavek na tiskárnu.

Je-li odpověd od tiskárny pozitivní (status kód odpovědi je v rozmezí 200 až 299), pak se hodnoty uloží do lokální databáze.
\texttt{Coordinator} je následně upozorněn na ukončení scénáře a obrazovku zavře.
Díky reaktivnímu přístupu strategii se rovnou tiskárna zobrazí v seznamu mezi dostupnými k použití.
\texttt{ViewModel} ani \texttt{ViewController} seznamu nemusí být o výsledku přidání tiskárny nijak notifikovány, o propagaci této informace se postará datová vrstva aplikace.

V případě selhání požadavku je vytvořena chybová hláška.
Díky reaktivním rozšířením, které jsem vytvořil pro \texttt{ViewController} třídu chybu zobrazit pomocí \texttt{UI bindings}.

Ukázka \ref{code:add-printer-login-request} zjednodušeně implementuje vytvoření požadavku a následné zpracování odpovědi od tiskárny.

\swiftcode{code:add-printer-login-request}{Vytvoření požadavku pro přihlášení k tiskárně}{assets/code/add-printer-login-request.swift}

