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

Показывать исходное видео в списке рекомендаций первым элементом #170

Closed
sadr0b0t opened this issue Feb 21, 2023 · 3 comments
Labels
enhancement New feature or request

Comments

@sadr0b0t
Copy link
Owner

sadr0b0t commented Feb 21, 2023

Так может быть нагляднее при навигации вперед/назад. Особенно в режиме плеера аудио.

В случае с ArrayAdapter решить легко. В случае с PagedListAdapter всё сложнее т.к. он берет данные из базы и подргужает их налету.

Варианты решения

  • Переопределить getItem и getItemCount в PagedListAdapter. Сходу почти сработало (элемент появляется в списке), но у RecyclerView с таким адаптером сносит крышу (к примеру, на главном экране прокрутка сходу улетает направо). Разбираться не стал пока по этой линии дальше
  • Каким-нибудь образом залезть внутрь PagedList, к примеру, закинуть туда лишний элемент перед тем, как сделать videoListAdapter.submitList(videos); Сходу не получилось пока тоже - метод add для PagedList не определен.
  • Поменять запрос в базу так, чтобы нужный элемент возвращался вместе со всеми остальными. В принципе, это вариант рабочий, хотя сделает апи запросов еще более громоздким. И вариант с сортировкой. чтобы элемент возвращался первым, нужно тоже как-то решить.

Здесь обсуждают аналогичную проблему

How to delete/remove PagedListAdapter item #281
android/architecture-components-samples#281

В целом, ответ, что так сделать нельзя, по крайней мере по-простому. Но какое-то решение вот здесь: https://gist.github.com/guness/df12d8cc4f595af1395f4a1f5bca5f00

how to add item to paged list
https://stackoverflow.com/questions/58852522/how-to-add-item-to-paged-list

@sadr0b0t sadr0b0t added the enhancement New feature or request label Feb 21, 2023
@sadr0b0t
Copy link
Owner Author

И вариант с сортировкой. чтобы элемент возвращался первым, нужно тоже как-то решить.

это можно, в sqlite на андроиде работает
https://stackoverflow.com/questions/53713241/sql-order-by-specific-value-first-then-ordering

@sadr0b0t
Copy link
Owner Author

Где актуально:

  • в любом режиме со случайными рекомендациями

Где без разницы:

  • Меню "играть всё" в отсортированных/отфильтрованных списках ("любимое", плейлист с любой сортировкой+фильтр, "поиск"), т.к. плеер играет первый элемент

Где не желательно:

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

@sadr0b0t
Copy link
Owner Author

sadr0b0t commented Feb 26, 2023

Реализовал через специальный запрос SQL - например:

https://github.com/sadr0b0t/yashlang/blob/master/app/src/main/java/su/sadrobot/yashlang/model/VideoItemPubListsDao.java

    @Query("SELECT * FROM video_item WHERE _id = :firstItemId OR (enabled AND NOT blacklisted) ORDER BY CASE WHEN _id = :firstItemId THEN 0 ELSE 1 END, RANDOM() LIMIT :lim")
    List<VideoItem> recommendVideosWithFirstItem(int lim, long firstItemId);

Исправлено здесь 3d024dd в этом тикете #7

# 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