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

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

Closed sadr0b0t closed 1 year ago

sadr0b0t commented 1 year ago

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

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

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

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

How to delete/remove PagedListAdapter item #281 https://github.com/android/architecture-components-samples/issues/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 commented 1 year ago

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

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

sadr0b0t commented 1 year ago

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

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

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

sadr0b0t commented 1 year ago

Реализовал через специальный запрос 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);

Исправлено здесь https://github.com/sadr0b0t/yashlang/commit/3d024dd44d7ab39f641b1db13327315ae5c7b985 в этом тикете https://github.com/sadr0b0t/yashlang/issues/7