feat: AudioLibraryTab — persistent extracted-clip library (add/edit/re-export/play/remove)

This commit is contained in:
2026-07-04 00:06:10 +02:00
parent 7f414d80b8
commit 5dc7499d7f
2 changed files with 210 additions and 0 deletions
+46
View File
@@ -823,3 +823,49 @@ def test_editor_reject_cleans_temps(win, tmp_path):
dlg.reject() # Escape path
assert not t1.exists() # op temp swept
assert os.path.exists(str(src)) # entry temp (_versions[0]) survives
def test_audio_library_add_dedup_and_persist(win, tmp_path):
import main as m
a = tmp_path / "a.wav"; a.write_bytes(b"")
b = tmp_path / "b.wav"; b.write_bytes(b"")
win._settings.setValue("audio_library_test", [])
lib = m.AudioLibraryTab(win._settings, key="audio_library_test")
assert lib.clips() == []
lib.add_clip(str(a)); lib.add_clip(str(b)); lib.add_clip(str(a)) # dup ignored
assert lib.clips() == [str(a), str(b)] # order preserved, deduped
assert lib._list.count() == 2
# a fresh instance restores from the same key
lib2 = m.AudioLibraryTab(win._settings, key="audio_library_test")
assert lib2.clips() == [str(a), str(b)]
def test_audio_library_drops_missing_on_load(win, tmp_path):
import main as m
good = tmp_path / "g.wav"; good.write_bytes(b"")
win._settings.setValue("audio_library_test2", [str(good), "/no/such/file.wav"])
lib = m.AudioLibraryTab(win._settings, key="audio_library_test2")
assert lib.clips() == [str(good)] # missing path dropped on load
def test_audio_library_remove(win, tmp_path):
import main as m
a = tmp_path / "a.wav"; a.write_bytes(b""); b = tmp_path / "b.wav"; b.write_bytes(b"")
win._settings.setValue("audio_library_test3", [])
lib = m.AudioLibraryTab(win._settings, key="audio_library_test3")
lib.add_clip(str(a)); lib.add_clip(str(b))
lib._list.setCurrentRow(0)
lib._on_remove()
assert lib.clips() == [str(b)]
def test_audio_library_edit_emits(win, tmp_path):
import main as m
a = tmp_path / "a.wav"; a.write_bytes(b"")
win._settings.setValue("audio_library_test4", [])
lib = m.AudioLibraryTab(win._settings, key="audio_library_test4")
lib.add_clip(str(a)); lib._list.setCurrentRow(0)
got = []
lib.edit_requested.connect(lambda p: got.append(p))
lib._on_edit()
assert got == [str(a)]