Skip to content

Commit 91d5f32

Browse files
committed
fix(import): cancel pending import when plan has no steps
When an unfinished plan computes no steps the wizard bails out early, but it left the importer marked as busy. That stale busy state could block later imports, so clear it on the way out. Also cover the new-video case where the second video keeps the same resolution, to make sure dimensions still emit when nothing changed.
1 parent 8279e3d commit 91d5f32

3 files changed

Lines changed: 23 additions & 6 deletions

File tree

mpvqc/dialogs/dialog_loader.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ def releaseActiveDialog(self) -> None:
4343
def _request_import_wizard(self, unfinished_plan: UnfinishedPlan) -> None:
4444
if not compute_steps(unfinished_plan):
4545
logger.error("UnfinishedPlan has no steps; unfinished_plan=%r", unfinished_plan)
46+
self._importer.cancel_pending()
4647
return
4748

4849
self._active_dialog_vm = MpvqcImportWizardViewModel(self, unfinished_plan)

test/dialogs/test_dialog_loader.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def test_releases_view_model_after_wizard(loader):
6565
_assert_view_model_collected(captured[0])
6666

6767

68-
def test_does_not_request_wizard_when_plan_has_no_steps(loader):
68+
def test_does_not_request_wizard_when_plan_has_no_steps(loader, importer_service_mock):
6969
requested: list[QObject] = []
7070
loader.importWizardDialogRequested.connect(lambda vm: requested.append(vm))
7171

@@ -81,6 +81,7 @@ def test_does_not_request_wizard_when_plan_has_no_steps(loader):
8181

8282
assert requested == []
8383
assert loader._active_dialog_vm is None
84+
importer_service_mock.cancel_pending.assert_called_once_with()
8485

8586

8687
def test_release_cancels_pending_when_importer_busy(loader, importer_service_mock):

test/services/player/test_observe_property.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# SPDX-License-Identifier: GPL-3.0-or-later
44

55
from dataclasses import dataclass, fields
6+
from typing import NamedTuple
67

78
import pytest
89

@@ -199,19 +200,33 @@ def test_video_dimensions_emitted_once_both_arrive(player_service, make_spy):
199200
assert spy.at(0, 1) == 1080
200201

201202

202-
def test_video_dimensions_emitted_again_after_new_video(player_service, make_spy):
203+
class NewVideoCase(NamedTuple):
204+
name: str
205+
width: int
206+
height: int
207+
208+
209+
@pytest.mark.parametrize(
210+
"case",
211+
[
212+
NewVideoCase("different resolution", 1280, 720),
213+
NewVideoCase("same resolution", 1920, 1080),
214+
],
215+
ids=lambda case: case.name,
216+
)
217+
def test_video_dimensions_emitted_again_after_new_video(player_service, make_spy, case):
203218
player_service._apply_property_update("path", "/movies/a.mkv")
204219
player_service._apply_property_update("width", 1920)
205220
player_service._apply_property_update("height", 1080)
206221

207222
spy = make_spy(player_service.video_dimensions_changed)
208223
player_service._apply_property_update("path", "/movies/b.mkv")
209-
player_service._apply_property_update("width", 1280)
210-
player_service._apply_property_update("height", 720)
224+
player_service._apply_property_update("width", case.width)
225+
player_service._apply_property_update("height", case.height)
211226

212227
assert spy.count() == 1
213-
assert spy.at(0, 0) == 1280
214-
assert spy.at(0, 1) == 720
228+
assert spy.at(0, 0) == case.width
229+
assert spy.at(0, 1) == case.height
215230

216231

217232
def test_property_updates_apply_after_event_loop_hop(qt_app, player_service):

0 commit comments

Comments
 (0)