sadr0b0t / yashlang

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

Режим оффлайн глобально #142

Closed sadr0b0t closed 1 year ago

sadr0b0t commented 2 years ago

Продолжение https://github.com/sadr0b0t/yashlang/issues/8 в отдельном тикете

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

Вот это реализовано:

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


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

Так, это уже было:

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


Еще одна история с иконками-превью роилков

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


Индикация

sadr0b0t commented 2 years ago

Для плейлистов иконки, пожалуй, нужно просто вообще для всех кэшировать

sadr0b0t commented 2 years ago

Кэширование иконок пусть будет отдельно: https://github.com/sadr0b0t/yashlang/issues/148

sadr0b0t commented 2 years ago

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

sadr0b0t commented 1 year ago

Есть режим оффлайн https://github.com/sadr0b0t/yashlang/commit/386e34abf0b42912c3091b5fb5b470712379e5cb

Доработать:

sadr0b0t commented 1 year ago

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

это исправил: https://github.com/sadr0b0t/yashlang/commit/d7a84f83d1e00b24d228facc0ddac7614798e56d

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

Получается не вполне тривиальный запрос, уношу в отдельный тикет: https://github.com/sadr0b0t/yashlang/issues/156

здесь всё

sadr0b0t commented 1 year ago

Еще несколько исправлений:

https://github.com/sadr0b0t/yashlang/commit/aa2aae7854320c90646edad76a3a8adbb1ded338 https://github.com/sadr0b0t/yashlang/commit/0a982778e01e513dbb5116d286a3b279735670a9

https://github.com/sadr0b0t/yashlang/commit/b639bfad44f2da27a0defbe88c4e4baea003bd34

лайфхак: как теперь загрузить иконки для всех оффлайн роликов