Skip to content

notify ShuffleOrder when media item(s) are moved #2226

New issue

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

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

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

nift4
Copy link

@nift4 nift4 commented Mar 11, 2025

Issue: #1932
Issue: #1381

--

(Extracting a seperate method moveMediaSourceHolders was done to align with insert/remove code. A new default method instead of just implementing that in DefaultShuffleOrder was done because I believe the move detection is not required by simpler shuffle order implementations, and this makes upgrades easier as devs don't have to implement a new function.)

@rohitjoins rohitjoins self-assigned this Mar 17, 2025
@nift4
Copy link
Author

nift4 commented Apr 7, 2025

@rohitjoins @icbaker any chance one of you could take a look?

@nift4
Copy link
Author

nift4 commented May 7, 2025

@marcbaechinger ping since it has been a month, any chance you could take a look at this PR?

@marcbaechinger marcbaechinger self-requested a review May 16, 2025 09:13
Copy link
Contributor

@marcbaechinger marcbaechinger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your PR

* the move occurs.
* @return A copy of this {@link ShuffleOrder} with the elements moved.
*/
default ShuffleOrder cloneAndMove(int indexFrom, int indexToExclusive, int newIndexFrom) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we implement this method like this, then I think there isn't much benefit, as calling the two other methods would be equivalent and we don't have to introduce this new method.

If we would implement this method standalone without using the other methods, you could raise a point that we can do it in DefaultShuffleOrder with a single implementation that probably has to iterate only once over the array. Do you think there is sufficient benefit in adding this new API and then implementing it here in the suggested way?

However we implement this. If we accept the change we'd need to have a unit test I think. I'd add that myself also, so this is not a condition to take that change if we think we have enough benefit because we can do it with better performance than the higher-order composite calls.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @marcbaechinger,

the benefit of adding a seperate API for this is that shuffle order may decide to not reshuffle in the individual items when a group of items is moved.

My goal with my custom ShuffleOrder is to make add/remove/move operations on the unshuffled ExoPlayer playlist map directly to shuffled playlist. My custom ShuffleOrder will reshuffle the added item group individually for insert action, but I do not want to shuffle them again when moving.

When using the existing API, ShuffleOrder can't know if this is a remove+insert done by the user, or a real move operation.

I'm not sure about the performance, but people who don't care about knowing when moving happens wouldn't need to implement any additional code if there is a default implementation. And of course, if the performance is increased when combining the call, DefaultShuffleOrder can still override cloneAndMove without the default implementation being removed. But personally, I do not feel strongly about the default implementation and it could be removed - but a seperate "move" API is needed for my usecase.

@marcbaechinger
Copy link
Contributor

I'm going to send this for internal review now. You may see some more commits being added as I make changes in response to review feedback. Please refrain from pushing any more substantive changes as it will complicate the internal review - thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants