# Ответ на вопросы по обучению FMP. ## Логи переменных ```text 127 /** ----- не видно ничего в логе переменных */ 128 val X = fmp.file.depth(1).build() // Создать FMPFile. 129 Log.d("3333", " fmpDirSettings(fmp) depth = ${X.depth}") ``` Не очень понимаю вопрос. `X.depth = null`? ## Инициализация FMPFile. ```text 139 /** --- везде билдер вызывать нужно?? */ ``` У вас при создании файла отсутствует какая-либо его конфигурация. Постоянно билдер вызывать не нужно, но нужно указать все требуемые параметры для файла или директории, с которой ведётся работа. Например, у нас на сервере есть файл в точке монтирования `mount` по пути `test/file.md`. Его инициализация будет выглядеть вот так: ```kotlin val file = fmp.file .mount("mount") .remote("test/file.md") .local("${fmp.user.storage}/file.md") .build() ``` После этого этот файл можно использовать сколь угодно раз для различных операций над ним - загрузка, удаление итд. Для простотра файлов в директории, как в Вашем примере, можно сделать вот так: ```kotlin val dir = fmp.file .mount("mount") .remote("test") .directory(true) .build() val files = dir.ls().result // Тут будет список всех файлов в хранилище mount по пути ./test/ ``` ## Запросы к серверу. ```text 140 /** --- это не запрос к серверу? если нет, то просто сюда сохранить файл надо сначала? ``` Все методы (функции) фреймворка так или иначе ресурсоёмкие операции. А так как это клиент для серверного приложения, то большая часть этих функций - это запросы к серверу. Этот метод не исключение - он выполняет запрос к серверу на получение информации о содержимом директории. "Быстрые" запросы фреймворка относятся только к свойствам объектов (всё что не функции), например `user.storage` или `file.remote`. ## Локальное хранилище. ```text 154 /** ---- local_storage нет на сервере, но операции проходят */ 155 /** ---- local_storage - это корень? */ 156 /** ---- local_storage даже не создать отдельно на сервере, 157 * но я с ним как-то работаю... как? и 158 * как работать с этим параметром в контексте того что на сервере? */ ``` `local_storage` - название точки монтирования Локального хранилища на сервере FMP. Это не совсем "корень". Для лучшего понимания стоит ознакомиться с тем, как работают файловые системы в UNIX системах. Если грубо, то точка монтирования - это устройство или сервис, подключенный как директория. И `local_storage` - это название этой "директории". Т.е. в зависимости от названия точки монтирования мы можем работать с разными фактическими хранилищами файлов: будь то локальный накопитель или подключенное к серверу локальное хранилище. В случае с `local_storage` - это всегда существующая точка монтирования, которая хранит файлы внутри самого сервера FMP. Т.е. когда мы пишем что-то в `local_storage`, то мы пишем это внутрь самого FMP, а не внешнего сервиса. По умолчанию он должен быть внутри любой среды под названием "Локальное хранилище" в интерфейсе администратора платформы. Если его почему-то нет в проекте, то стоит уточнить у администратора платформы. Он доступен всегда и везде и общий для всех сред, поэтому операции по нему успешно проходят. ## Загрузка файлов. ```text 169 /** ---- Куда сохраняется файл? Пишет что сохранено. */ ``` Насчёт сохранения - туда, куда Вы указываете в параметре для `.local(path)`. Если Вы указываете (как в Вашем примере) путь `${fmp.user.cache}`, то будет храниться в личной директории пользователя. Сама директория с данными фреймворка и всех пользователей хранится там, где было указано при инициализации в `FMP.Builder.storage(path)`. Полный путь до локального файла можно получить через `file.local`. ## Результат работы метода удаления локального файла. ```text 192 /** ---- delFileInInternalCash deleted_cache = true - получаю постоянно это значение ``` В общем случае `status` означает, что метод отработал до конца без ошибок. В случае с удалением файла - метод отработал без ошибок (есть права на чтение, нет ошибок файловой системы итд), поэтому он равен `true`. В документации метода на работу метода написано следующее: > True если файл удалён, false если не найден или не удалён. Это относится к свойству `result`, т.к. `result` это результат работы метода. В Вашем случае, если кэша файла не было, то он будет равен `false`. ## Поиск файлов. ```text 215 /** ?? зачем тут ремоут указывать и точка мантирования??? ``` Метод `search()` выполняет поиск файлов на сервере, а не в кэше устройства. В целом модель `FMPFile` является моделью для файла *на сервере* с некоторыми методами для работы с локальным кэшем. ## Поиск по Regex. ```text 230 /** ---- ".pages\\|.pages$" - список так не находится ``` Подозреваю, что что-то не так с регулярным выражением. Попробуйте более простую форму: `.*pages$`. ## Получение списка файлов БД на устройстве. ```text 274 /** Как получить полный список всех баз в мобилке?? */ ``` Кэш ресурсов хранится по пути `fmp.user.cache`. Не уверен, что это полезная информация, но файлы БД можно найти там. ## Создание модели ресурса. ```text 291 /** ?? Где спрятана База данных ?? как табл к ней привязывается ? */ 292 /** Не может создать ресурс */ ``` Путь к базе данных ресурса можно получить через его свойство `resource.database`. Для создания ресурса обязательно указание его названия: ```kotlin val resource = fmp.resource .name("my_resource") .build() ``` Таблица привязывается к ресурсу, когда при инициализации таблицы Вы указываете ресурс. В Вашем примере корректно: ```kotlin return fmp.table .name(name) .resource(resource) .build() ``` ## Работа с БД при использовании FMPQuery. ```text 348 // /** ??? как прикрутить БД??? database */348 // /** ??? как прикрутить БД??? database */ ``` К счастью, "прикручивать" ничего не нужно. Всё пишется в БД соответствующих ресурсов. Например, если вы делаете `from(table)`, то данные запишутся в `table.resource.database`.