sadr0b0t / yashlang

PeerTube and YouTube player for Android with local playlists and whitelisted recommendations
GNU General Public License v3.0
50 stars 3 forks source link

Не показывать пустые плейлисты в списке плейлистов в т.ч. в режиме оффлайн #156

Closed sadr0b0t closed 1 year ago

sadr0b0t commented 1 year ago

В обычной ситуации появление пустых плейлистов маловероятно, хотя и возможно (например, если разблокировать в плейлисте все видео), но в режиме оффлайн их может оказаться большинство и это начнет становиться проблемой.

https://github.com/sadr0b0t/yashlang/issues/142

в списке плейлистов (не в настройках, а в режиме навигации) следует скрывать плейлисты, у которых при включенном режиме оффлайн внутри ничего нет. Т.к. обычно оффлайн скачано не слишком много роликов, а плейлистов может быть включено много, придется еще хорошо поискать, в каком из этих плейлистов что-то есть. При достаточно большом количестве плейлистов экран навигации по плейлистам в режиме оффланй становится почти бесполезен.

sadr0b0t commented 1 year ago

https://github.com/sadr0b0t/yashlang/commit/7978d1f6e5363ebac5f30c650e1444fac45ab725

Примерно такой селект:

"SELECT * FROM playlist_info WHERE enabled AND (_id IN (SELECT playlist_id from video_item WHERE enabled AND NOT blacklisted AND has_offline)) ORDER BY _id ASC"

не факт, что самое оптимальное решение, но работает.

Проверку на пустоту добавил только для режима оффлайн, т.к. пустые плейлисты в этом режиме будут как правило. Для режима онлайн добавлять не стал, т.к. пустые плейлисты в таком режиме будут редким исключением, а лишнее множество проверок будет происходить всегда.

На телефоне 5-тилетней давности на довольно обширной базе (скорее всего уже более 100 тыс роликов) работает норм, хотя уже не мгновенно. Плейлисты появляются сразу, но "плавно". Иконки плейлистов (причем, не онлайн, а уже из кэша) начинает подгружать с заметной задержкой - через несколько секунд (здесь можно посмотреть, что там с потоками, которые начинают грузить эти иконки - скорее всего там загрузка не начинается до тех пор, пока не завершится полный запрос в базу), но, в целом, приемлемо. Фильтр плейлистов по имени тоже происходит "плавно", но быстрее, чем подгрузка иконок - задержка субъективно меньше секунды.

В режиме онлайн (без фильтра на пустоту) все летает мнговенно (например, фильтр плейлистов по имени) - на глаз заметно.

Можно еще попробовать добавить индекс по enabled, blocklisted и has_offline - возможно, это ускорит в т.ч. эти запросы. Индексы пусть идут в новый тикет https://github.com/sadr0b0t/yashlang/issues/158