Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

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

Closed
sadr0b0t opened this issue Jul 19, 2022 · 6 comments
Closed

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

sadr0b0t opened this issue Jul 19, 2022 · 6 comments
Labels
enhancement New feature or request

Comments

@sadr0b0t
Copy link
Owner

Продолжение #8 в отдельном тикете

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

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

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


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

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

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


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

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

  • Ссылки на иконки в базе можно не хранить
  • Название файла с иконкой - video_id.png playlist_id.png (в отдельных каталогах или с превиксом video_xx, pl_xx)
  • Управвление кэшированными иконками - в отдельной вкладке - там же, где сейчас закачки потоков
    -- показать размер
    -- удалить весь кэш
    -- удалить лишние файлы (из имени файла придется выуживать id видео/плейлиста и каждый в базе сверять)
    -- удалить кэш для файлов, у которых нет потоков оффлайн
    -- обновить кэш (для тех файлов, которые уже есть - тоже через запрос в базу по id)
    -- выкачать иконки для всех файлов, у которых есть оффлайн-поток
  • Простой вариант с обновлением: удалить весь кэш, выкачать кэш для файлов с потоками оффлайн
  • Вариант: сохранять кэш иконок вообще для всех видео, которые появляются в любом списке. Потом если он привысит разумные пределы чистить его через "удалить кэш для роликов, у которых нет потоков оффлайн". Скорее всего по сравнению с закачанными потоками там вообще будут копейки.

Индикация

  • Сам режим помечать иконкой "дискетка" (клик по дискетке - какой-нибудь диалог с возможностью этот режим выключить). Можно где-нибуь в углу на главном экране. Можно в ряду с верхники кнопками.
  • Можно и просто спрятать в настройках. Но это, пожалуй, не очень хорошо.
  • Если режим включен, но файлов с кэшем нет, предлагать выключить этот режим на пустом главном экране (там же, где кнопки "добавить рекомендвоанные")
    • вариант: в такой ситуации вообще не разрешать его включать. Но это не очень хорошая история. Например, пользователь сможет удалить кэш после того, как этот режим включен.
@sadr0b0t
Copy link
Owner Author

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

@sadr0b0t
Copy link
Owner Author

Кэширование иконок пусть будет отдельно: #148

@sadr0b0t
Copy link
Owner Author

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

@sadr0b0t
Copy link
Owner Author

sadr0b0t commented Feb 7, 2023

Есть режим оффлайн 386e34a

  • Включается/выключается через настройки > меню > Больше настроек > первая вкладка "Разное"
    -- Выносить быстрое включение/выключение на главную пока не стал и, пожалуй, и незачем это.

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

  • Режим отображается: на главном экране иконкой "дискетка" в правом нижнем углу; на экранах "любимо", "история", "плейлисты", "поиск" - иконка "дискетка" в заголовке

Доработать:

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

@sadr0b0t
Copy link
Owner Author

sadr0b0t commented Feb 7, 2023

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

это исправил: d7a84f8

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

Получается не вполне тривиальный запрос, уношу в отдельный тикет: #156

здесь всё

@sadr0b0t sadr0b0t closed this as completed Feb 7, 2023
@sadr0b0t
Copy link
Owner Author

sadr0b0t commented Feb 9, 2023

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

aa2aae7
0a98277

  • не пробовать грузить иконку из кэша, если файла нет

b639bfa

  • не пробовать загружать из кэша и кэшировать иконки для роликов и плейлистов, не добавленных в базу (у которых id=-1)
  • не грузить иконки из интернета в режиме оффлайн

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

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

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant