Closed sadr0b0t closed 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
В обычной ситуации появление пустых плейлистов маловероятно, хотя и возможно (например, если разблокировать в плейлисте все видео), но в режиме оффлайн их может оказаться большинство и это начнет становиться проблемой.
https://github.com/sadr0b0t/yashlang/issues/142