fix issues when selection is entire section but filter function expects list#18
fix issues when selection is entire section but filter function expects list#18jpenney wants to merge 3 commits intoTypesettingTools:masterfrom
Conversation
…ts a list
- `Subtitles._get_selection()`: always return a list
- `Subtitles._process_selection()`: always call `_get_selection()` for items to process
Co-authored-by: FichteFoll <fichtefoll2@googlemail.com>
Co-authored-by: FichteFoll <fichtefoll2@googlemail.com>
| for i, line in zip(indices, lines): | ||
| section[i] = line | ||
|
|
||
| f(lines) |
There was a problem hiding this comment.
Reading this code properly, I'm convinced that _process_selection should call the provided callback with each line as the argument and not a list of lines so that it would be sortable since that would technically also allow modifying the list's size (by adding or removing entries) and the following code wouldn't handle that properly.
Sorting should then use a _sort_selection handler that accepts a key function as the parameter which will then be used on the list that is extracted similarly to how it happens in _process_selection currently because that is a still a decent way to implement this.
Now that's all about internal code, but I like clean APIs also for internal calls. It would also have likely made the bug being fixed here more obvious.
There was a problem hiding this comment.
As a clarification, that's not meant as a request to change the PR. I was just rambling about it as I was reading the code. You're still free to implement it that way, of course, and split the two different kinds of usages of _process_lines.
Always returning a list in _get_selection may not be a bad thing either but it does have a tiny bit of overhead when it may not be needed most of the time.
Fixes issue with both
sort_fieldandsort_expression, which are using functionality specific tolist(others filters might as well). Current version fails to sort without a selection:Changes:
Subtitles._get_selection()Subtitles._process_selection()_get_selection()for items to process