Android-библиотека для работы с облачными хранилищами: Я.Диск, GD и др
Нужна библиотека, инкапсулирующая работу с 10-20 протоколами, для использования в приложении на Android (Kotlin), и тестовый GUI.Сервисы для первого этапа: Google Drive, Яндекс Диск, SFTP (пароль/ключ), libarchive (SAF), Git (HTTP/S; ssh по паролю/ключу).Функции API: Подключиться к хранилищу (возвращает внутренний дескриптор, держит соединение и базовые данные о сессии в памяти). Отключиться (освобождает память, разрывает соединение). Например, для архива (хранилища с бекендом libarchive) открывает файл архива и читает заголовок/список файлов в нем.Вернуть информацию о типе хранилища (имя, иконка). Вернуть описание/заголовок на основе параметров подключения (например, для SFTP это хост + логин).Вернуть список файлов в заданной папке. Вернуть список файлов/путей рекурсивно от заданной папки. Для каждой записи возвращается стандартный набор свойств ("папка или файл", имя, несжатый размер (для файлов), дата изменения) и дополнительный (все что предоставлено бекендом, например, libarchive).Прочитать файл по пути (работа будет с мелкими файлами, поэтому допустимо читать все содержимое в память). Записать файл (с созданием нового файла, если путь не существует).Переименовать файл/папку. Удалить файл/папку. Создать папку.Особенности API:Одновременно может быть подключено много хранилищ и читаться/писаться много файлов.Хранилище может быть readonly, что отключает часть функций. Этот флаг передается при подключении (API), также он может выставляться автоматически (например, libarchive не умеет писать RAR).Все операции асинхронные и предоставляют уведомления о прогрессе вида # done/# total.Ошибки не замалчиваются, а четко передаются наверх, со всеми сообщениями и контекстом.Если SDK для доступа к сервису требует от разработчика API-ключа или чего-то подобного, то сообщать мне.Нужен способ передачи в библиотеку специфичных для сервиса/SDK параметров, как для операций (например, логин, commit message для Git), так и глобальных (API-ключ, временная папка). Можно также предусмотреть вызов специфичных функций (например, создание нового архива для libarchive).Каждая операция вызывает обновление хранилища: для libarchive архив пережимается после записи файла или создании папки, в Git делается коммит (на основе текущего HEAD, включая изменения с момента подключения, сообщение Update/Rename/Delete/Add <файл/папка>).Тестовый GUI (не часть библиотеки, но выступает ее клиентом; можно реализовать в отдельном или едином APK):Функциональный и максимально простой UI.При выполнении библиотечных вызовов показывать прогрессбар, при ошибках - сообщение.Наверху экрана - кнопка для подключения к хранилищу. Показывает диалог или страницу со вводом параметров (сервис, URL, логин и прочее, для сервисов выводятся иконки и имена из API) и кнопками OK/Cancel, а также списком для загрузки ранее использованных параметров (до 20 штук). Кнопка OK сохраняет введенные параметры в историю на диске, вместе с заголовком на основе параметров (API), так что в следующий раз их можно не вводить. Если подключение неудачное, то диалог остается открытым.Каждое подключенное хранилище - вкладка (название = имя сервиса + заголовок на основе параметров).На вкладке: кнопки, текущий путь (pwd) в виде текста, список/таблица файлов (заполняется кнопками вывода списка файлов) и текстовое поле (заполняется кнопкой чтения файла, используется кнопкой записи файла). В списке файлов может быть особая запись Parent folder и всегда есть запись This folder; папки выводятся перед файлами, в конец имени добавляется "/", файлы и папки сортируются по алфавиту, для каждой записи выводятся доступные свойства, записи можно выделять (всегда выделена ровно одна, если список не пустой).Кнопки на вкладке:отключение (закрывает вкладку)вывод списка файлов в выделенной папке (если выделена не папка, то в This folder; при успешном выполнении текущий путь меняется на новую подпапку, выделяет первую запись в списке)вывод рекурсивного списка выделенной папки (аналогично, но не меняет текущий путь, имена записей равны относительному пути: SomeDir/SubDir/ и SomeDir/File.txt)переход в родительскую папку (если текущий путь не равен корню, т.е. есть Parent folder; очищает список и изменяет текущий путь)чтение выделенного файла (если файл не выделен, то ничего не делает; заполняет текстовое поле первыми 100к байт; UTF-8, LF)записать в выделенный файл (если выделена папка, то запрашивает уникальное имя; UTF-8, LF)переименовать выделенный файл/папку (запрашивает уникальное имя; не работает для This/Parent folder)удалить выделенный файл/папку (запрашивает подтверждение, не работает для This/Parent folder)создать подпапку в выделенной папке (если выделена не папка, то в This folder; запрашивает уникальное имя)При выборе решений для работы с сервисами обращать внимание на лицензию (GPL не подходит) и размер (чем меньше кода - тем лучше).К SFTP могу предоставить тестовый доступ, в остальных сервисах вам нужно регистрироваться самостоятельно.При сдаче работы от вас нужно короткое демонстрационное видео по каждому сервису (на экране видно эмулятор и браузер с облачным хранилищем, в эмуляторе демонстрируете работу с хранилищем, в браузере видно результат).Можем договориться на почасовую или поэтапную оплату.voronnate yandex ru
Android