110 lines
9.6 KiB
Markdown
110 lines
9.6 KiB
Markdown
# Ответ на вопросы по обучению FMP.
|
|
|
|
## Рекомендация по ознакомлению с документацией.
|
|
Актуальную документацию можно получить [здесь](https://fmp-maven.fsight.cloud/ru/fsight/fmp/doc/). Выберите соответствующую версию.
|
|
|
|
## Логи переменных
|
|
```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`.
|