Отличный дизайн, очень удобен в мобильном.
Спасибо Вам)
Рад, что дизайн понравился, ну и вдогонку еще два архива под предыдущие версии
@igor63r Игорь, предлагаю переделать выбор папки на представленную ниже модель.
По запросу возвращать в интерфейс json-объект вида
{ root: root_url,
current: current_url,
list: [{name:папка1, url:урл1},{name:папка2, url:урл2}]
}
картинки альбомов по желанию.
парсить его в javascript и получать что-то, что выглядит как на третьем экране,
в верхней части “хлебные крошки”, по которым можно вернуться по уровню вверх.
На действие передавать команду (что делать: играть, добавить ?) и урл.
На телефоне экраны переключать свайпами вправо, влево.
Части макета показаны серым, остальное вполне рабочий интерфейс.
не пускает по SSH:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is SHA256:P6aAftQtO1RsAYVsXyP7JP7VLIwXjBV3+zkQb8EB+DU. Please contact your system administrator.
что не так делаю?
Выдаётся предупреждение, что ключ на SSH-сервере другой, чем был ранее. В программе клиенте должна быть возможность импортировать новый ключ.
Я использую PuTTY, она постоянно выдаёт такие предупреждения, когда загружается новая прошивка Yoctoap. Надо ответить Yes на предложение импорта ключа, а дальше, как обычно.
Дмитрий, если переделывать структуры данных, то на них слишком многое завязано в реализации и это уже будет другой плеер - Album Player 3. Текущая концепция - плейлист, как набор линейных списков альбомов, путей к ним, названий треков, и имён файлов треков. Дерево с путями существует только в файловом менеджере, и перестаёт учитываться после выбора конкретной папки как базы для сканирования. Я думаю, любую желаемую альтернативу можно реализовать, дописав свою оболочку к APlayer Renderer SE. Я в его лице старался сделать достаточно универсальный автономный движок, но если там чего-то не хватает, то вернуться к этому можно.
Я за удобство
- Дерево реально неудобная штука
- Мне нравится дерево
0 голосов
Если речь только об альтернативном варианте выбора папки, то, я думаю, это решаемо.
Дерево файлового менеджера в памяти плеера представлено массивом Drives структур DirItem, представляющих сохраненные плейлисты и отображаемые в файловом менеджере папки.
Сейчас клиенту в JavaScript передаётся отображение этого массива в массив выводимых в панель строк, где каждая строка соответствует одному элементу массива.
Можно по отдельному запросу передавать сам массив структур DirItem, содержащих строковые поля path и name и числовые поля level (уровень вложенности папки от 0 и выше) и expanded (код состояния папки: 0 - свёрнута, 1 - раскрыта, 2 - папка нижнего уровня).
Собственно управление со стороны клиента не меняется:
?GetPlaylists&ind=индекс_элемента - переход внутрь папки с указанным индексом, если она была свёрнута или выход из неё на уровень выше, если она была развёрнута
?GetPlaylist&playlist=индекс_элемента - выбор папки с указанным индексом для замены плейлиста
?Get_Playlist&playlist=индекс_элемента - выбор папки с указанным индексом для добавления в плейлист
Из массива Drives, в принципе, можно извлечь всю информацию для вывода третьего экрана на картинках выше.
Если такой вариант устроит, то я могу добавить команду, по которой этот массив будет возвращаться в json-объекте.
И даже, видимо, лучше не создавать дополнительный запрос, а добавить этот массив к данным, которые передаются сейчас для отображения списка папок.
То есть, я смогу видеть, где я нахожусь в структуре дерева и список дочерних узлов?
Если найти последний из объектов, у которых expanded=1, то он будет текущей открытой папкой. А следующие за ним в массиве объекты, пока у них level на единицу больше, будут его дочерними узлами.
А если несколько expanded, как понять который последний?
Последний, как обычно, тот, у которого индекс в массиве больше. Поскольку он всегда отображается ниже родительского.
Дмитрий, вот файл aplayer на замену:
http://albumplayer.ru/linux/test/aplayer-arm32-mod.tar.gz
По запросу ?GetPlaylists&ind=-1
возвращается json объект, в котором к массиву Playlists добавлен массив Drives, элементы которого содержат строковые поля name и path и числовые поля level и expanded. Если указать в запросе ?GetPlaylists&ind=
индекс больше нуля, то папка с указанным индексом сворачивается или разворачивается и возвращается уже новый список папок. Первый элемент (с индексом 0) в Drives всегда aplayer.dat, это сохраненный автоматически текущий плейлист. Потом могут идти пользовательские плейлисты .ap2 и только потом собственно папки.
Спасибо, буду разбираться.
Всё работает, у меня один вопрос:
Почему, когда я указываю в настройках Root folder /mnt ,
мне показывает её же на нулевом уровне, а не её содержимое?
Все папки потенциально могут изменяться в течение сеанса работы, а для Root folder это свойственно, поскольку в неё монтируются подключенные и сетевые накопители. Родной файловый менеджер позволяет открыть одновременно несколько папок в дереве. Любая из них к моменту следующего обращения к окну менеджера может быть изменена. Пересканирование дерева при каждом обращении к нему ухудшит отзывчивость. Вместо этого каждая папка сканируется, когда её открывают. И пересканируется, если её свернуть/развернуть. В этой ситуации, если бы плеер открывал при начальной загрузке Root Folder, я столкнулся бы с постоянными запросами - почему плеер не видит подключенных дисков и смонтированных динамически папок. Поскольку инструкцию наш пользователь читает в самом крайнем случае. А сейчас он открывает корневую папку и всё сразу видит. Если эта ситуация не устраивает, можно при загрузке веб-интерфейса проверять состояние Root folder и, если она свёрнута, сразу раскрывать её.
Понятно, так и делаю.
Ещё пара вопросов.
Можно сделать функцию, которая запускает воспроизведение сразу после загрузки альбома? Типа ?GetPlaylistAndPlay&playlist=
Почему при добавлении альбома в список воспроизведение останавливается? Можно это пофиксить?
Запуск воспроизведения после добавления альбома может сделать сам веб-интерфейс.
Воспроизведение останавливается при добавлении альбома для упрощения структуры кода, чтобы избежать оборачивания мьютексами всех обращений к списку альбомов. Пользователи на порядок чаще не добавляют альбом, а открывают новый. В этом случае остановка предыдущего неизбежна.
Куда вставлять? Надо отловить конец загрузки альбома.
А поскольку parseAlbums вызывается в куче мест, кроме загрузки, то это ведёт к глюкам вида “показывает не тот альбом, который играет”. Поэтому предлагаю сделать отдельную функцию.