@@ 0,0 1,31 @@
+#include "file_browser.h"
+#include "gui.h"
+#include "input.h"
+#include "logger.h"
+#include "renderer.h"
+#include "window_initial.h"
+
+file_browser_t file_browser_create(mzapo_pheripherals_t pheripherals,
+ logger_t *logger, font_t font) {
+ file_browser_t browser = {
+ .font = font,
+ .logger = logger,
+ .pheripherals = pheripherals,
+ };
+
+ return browser;
+}
+
+void file_browser_start_loop(file_browser_t *file_browser) {
+ command_t command_arr[100];
+ commands_t commands = commands_create(command_arr, 100, *file_browser->pheripherals.knobs);
+ renderer_t renderer = renderer_create(file_browser->pheripherals.display);
+
+ file_browser->gui = gui_create(file_browser->logger, &commands, &renderer, &file_browser->pheripherals);
+ window_initial_open(&file_browser->gui, file_browser->font);
+ logger_info(file_browser->logger, __FILE__, __FUNCTION__, __LINE__, "File browser loop ended");
+}
+
+void file_browser_destroy(file_browser_t *file_browser) {
+ // do nothing
+}
@@ 0,0 1,108 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "file_browser.h"
+#include "logger.h"
+#include "serialize_lock.h"
+#include "mzapo_sdl.h"
+#include "mzapo_pheripherals.h"
+#include "nonblocking_io.h"
+#include "font.h"
+
+// soubory otvírat podle mime typů - config s mime typy a přiřazeným editorem
+// pokud nic nevyhovuje a je spustitelný, tak spustit
+// pokud neplatí ani jedno, otevřít v text vieweru - ten schovat pod mime type text, který bude default
+
+// TODO: okna
+// initial - lokální fs nebo nějaký unmounted
+// browser - ukazuje current složku, v ní soubory a info o nich, nahoře název
+// složky
+// contextmenu - ukazuje info o souboru a jeho nabídku na smazání, přesunutí,
+// zkopírování, zobrazení v textovém move/copy - slouží podobně jako initial a
+// browser, ale k přesunutí nebo
+// zkopírování objektu
+// options - nastavení nabídka
+// mimetypes - jaký mime type otevírá co, defaultně dát jen pár mime types s možností přidat přes stdin (příp. virtuální klávesnici, když zbude čas)
+
+// TODO: dokončit dokumentaci
+
+// options, browser, contextmenu
+// spouštění souborů // 15 - 16
+
+// dokončit dokumentaci a vygenerovat doxygen - 2 HOD 19 - 21
+// pátek - lazení
+// sobota, neděle - zoomování fontu
+
+typedef enum {
+ ERROR_SUCCESS,
+ ERROR_PHERIPHERALS,
+} error_t;
+
+int main(int argc, char *argv[]) {
+ #ifdef COMPUTER
+ mzapo_sdl_init();
+ #endif
+ struct termios oldstdin;
+
+ logger_t logger =
+ logger_create(LOG_DEBUG, stdout, stdout, stderr, stderr, NULL);
+
+ /* Try to acquire lock the first */
+ if (serialize_lock(1) <= 0) {
+ logger_warn(&logger, __FILE__, __FUNCTION__, __LINE__, "System is occupied");
+
+ if (1) {
+ /* Wait till application holding lock releases IT or exits */
+ logger_info(&logger, __FILE__, __FUNCTION__, __LINE__,
+ "Waiting");
+ serialize_lock(0);
+ }
+ }
+
+ mzapo_rgb_led_t rgb_leds = mzapo_create_rgb_led();
+ rgb_led_clear(&rgb_leds, LED_LEFT);
+ rgb_led_clear(&rgb_leds, LED_RIGHT);
+
+ display_t display = mzapo_create_display();
+ mzapo_ledstrip_t ledstrip = mzapo_create_ledstrip();
+ void* knobs = mzapo_get_knobs_address();
+
+ // TODO: check permissions for mounted devices
+
+ if (!mzapo_check_pheripherals(&ledstrip, &rgb_leds, &display, &knobs)) {
+ logger_error(&logger, __FILE__, __FUNCTION__, __LINE__, "Could not initialize some of the pheripherals.");
+ rgb_led_set_red(&rgb_leds, LED_LEFT);
+ return ERROR_PHERIPHERALS;
+ }
+
+ mzapo_pheripherals_t pheripherals = mzapo_pheripherals_create(&ledstrip, &rgb_leds, &display, &knobs);
+
+ font_t font = font_create(font_rom8x16);
+ font.char_spacing = 2;
+
+ file_browser_t file_browser = file_browser_create(pheripherals, &logger, font);
+
+ file_set_nonblocking(STDIN_FILENO, &oldstdin);
+ logger_info(&logger, __FILE__, __FUNCTION__, __LINE__,
+ "Starting file browser");
+ file_browser_start_loop(&file_browser);
+ logger_info(&logger, __FILE__, __FUNCTION__, __LINE__,
+ "Closing application");
+
+ file_browser_destroy(&file_browser);
+ display_deinit(&display);
+
+ file_set_blocking(STDIN_FILENO, &oldstdin);
+
+ serialize_unlock();
+
+ logger_info(&logger, __FILE__, __FUNCTION__, __LINE__,
+ "Application quit");
+
+#ifdef COMPUTER
+ mzapo_sdl_deinit();
+#endif
+ return ERROR_SUCCESS;
+
+ return 0;
+}