diff options
-rw-r--r-- | diagram.drawio | 2 | ||||
-rw-r--r-- | solo_tool.py | 6 | ||||
-rw-r--r-- | solo_tool_integrationtest.py | 11 |
3 files changed, 16 insertions, 3 deletions
diff --git a/diagram.drawio b/diagram.drawio index 4c20f49..6cf9596 100644 --- a/diagram.drawio +++ b/diagram.drawio @@ -1 +1 @@ -<mxfile host="app.diagrams.net" modified="2021-12-21T21:57:36.542Z" agent="5.0 (X11)" etag="EehibL8XqpTgRi5UYwNc" version="16.0.2" type="device"><diagram id="g-wcGVps3MkI6_XAwNEs" name="Page-1">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</diagram></mxfile>
\ No newline at end of file +<mxfile host="app.diagrams.net" modified="2021-12-22T10:24:41.010Z" agent="5.0 (X11)" etag="M825lpGmu1hB8eQbLjxm" version="16.0.3" type="device" pages="2"><diagram id="g-wcGVps3MkI6_XAwNEs" name="Core">7VzLeto6EH4aluSzJd9YBpK26UlPc0raJt0JLIwbY6W2IKFPXxkkfJHiGGIwLmeFdbEszcw/N0l04GD2/D5Cj9NPxMVBB2jucwdedADQLVtnP0nNktdoRm9d40W+y+vSiqH/G4uOvHbuuzjOdaSEBNR/zFeOSRjiMc3VoSgiT/luExLkv/qIPCxVDMcokGu/+y6d8lrd6qUNH7DvTfmnHWCvG2ZIdOYriafIJU+ZKnjZgYOIELp+mj0PcJBQT9Bl/d67F1o3E4twSKu8YF719Vt8ce5E/3nfyAL4wf2vLh9lgYI5X3BMAsKJzOdNl4IYEZmHLk7G0zqw/zT1KR4+onHS+sT4z+qmdBawks4eXRRPV32TghegOObvbQixKjxgOp7ywsQPggH7fsTKIQnZuH0U+F7IigGesFX2FziiPuPOOa+mJPmqTAqxLtYdP2eqOGneYzLDNFqyLrzVEALHBRUIPj6lXDch7zPNMHxTibikeZuxU2awB84PNW8+fdXvh6P+7aUNH76bXtj71f3WNSX6Y5fJJi+SiE6JR0IUXKa1/TyH0j7XJCHUihU/MaVLDjQ0pyTPNfzs07vk9TOTl+75YMnzxXO2sBSFkC33TgyQFFbvnNmmKKfvrUrixRf5FpN5NOaLtnVn/OD8mA9i2P/88V03HAS0C7kqQJGHaQkNeb+EcKVSEOEAUX+RB33tHLUktHWAFSRy7foL9uglj4N5tKIHb2EfyjQq+j+S2Kc+CUXTKCp2Lg6hkKprNGKaOycJAnljNhkcKbA38113LXQ49n+j0Wo8bTUjP6Qr2pn9jnmhZHSZxEuo3ah3/pGcBlWhWTsDEDg5QAtVV5nTfPCbZDHpyAU1UXifTCYxk8einGwmWEl0epNfxvXkSvsOPtwZ3m08+kIthaJWiMIMuz5KCB2gJY4qsn8rpZ7V0B0AXRM7rpGocRqRB5xpccAIWlZNutnIE90yHEk365ZCNzs1qGYlN6CCGw3oaqF3ubLeaN5X1K5axwvtr9bxlVS1EtS6cNsyurpMxOvT1WoEQy0vTabmnGnQMJjnZjoW0Oz8gOv18THehGs1dUAVYA8TpaKNt7QMMQm9dlmFUrDVYRV0Qe9dhUhYE6MgJvvT/KZCQJrUNXkfrxYXT7luoym18SbLYEjcumHGWOIYk2SqBla0Nl9vwVXCvXjNSF2yzTyuUoRaNVhqYBV0KzAlS20oDDXYl6G2TxQ8VivBI8dHN2ge45NBj1lAjwUk9JiHRE/vRNHjtBI9jsStYZIeOxXwFE1PTw4SD2p6RNzzt4NFZERahhYx7SxcVlFWkjwZofFDMhNET8b46L1CkgXKrpuuHxRA8EQABNoJIDlzIQEozU2fCIjsAojE/mcWRKpdpDpApN7ga9gKbZeZrAQidR5NxpCSHqApDJXNOgOhc9dNPsRGG7HfwJ/59FTA4xTT/LID5+wJOkrm2I0gZ4fcfAZt9oHgpth/PS6TVTbrDNwE0MaEEYYEQbJrVmD68e+PWYW8gaEdcH9MqWV7p2F0ejIKWnAKQc7qXIYrk5DanRlxtwl8Xjic0w6rAws7+kABnn3FPV9nn4aDq/tv51f+v58Xwd1798OPYzr3U9Xu7CFUqryX3ALE6bKflwRJgR/Lzt3xm5vicYzmzU0zntrhYxyF19WGIEd2u9ZRzvp8wmkEN7CQnlZkp+1D5gWcE4GMWdFg6McVqejyqY/BlJBkL/S0YGO87p31DpkU0BsGzsE8LVsGTgsifF0+8LFOSi9IMJ+dzGbORv6XwrQcLpemTkNrEun/SnsDQEV7c1wBipi2ytzsmotudVLAeNVb07U94Ud538VoBD48JyCeMzanmZxAmQHKIq7sytC+j5fblnYG9fRAOcwJkiUUsRhwPe06jpcrF606PFz7jaNjPElehqJaTpI7kHP2jfLSBTD/Si0nyZXLr3T9bLerBu28hNYeITGsnBrp6kVLsz+pkbM3jAEPEgO3ylvWYKLtwqbXQS+FKX3cho8r7XoHDNR8CawsI3nEaRjltOXbHCWZy0ZUWJkk1qLCejDvwdSj0ETAsblOtQdtpiRNw5tr9k6nOuoPXt8E0sZiV+WsK3k1ymNVbXJVyoS5XldFQBLU47nAAtL3cW+yTJrL5SLGcVwSycg37FGIvPRq/dayc/y7u2bBrwJm036VbrXJsdpd/eqKG6/Htb1bOu0M0K4JWnlJAlyVc4atTrobhplDjgI4+9qqUjOmkWMRb5B/s265VpskC76g4erPyZWuM7tHhRb4f8AccG/35v6dc//Pki68j/HV5cefj1+oL/TqcdgZvZKdKWDlVeAp171VBv0AZqZskhnQ3KrSUMcLFYWXLjHrRahYhYtFtt2TsFLT7VZWTP+UcK3z0v92hJd/AA==</diagram><diagram id="yK3rgzEW7m2RTtpwjvJ6" name="GUI">7Ztbc5s4FMc/jR93xxI3+zG+bDrTdNKtu9PNowwKKBHIK4Qv/fQrGQEGuc0kU0MKfgIdCSGdv37oSMDImsf7W4420ScWYDqC42A/shYjCIHnOfKgLAdtAUBbQk4CbasMK/Ida+NYWzMS4LRWUDBGBdnUjT5LEuyLmg1xznb1Yo+M1u+6QSE2DCsfUdP6jQQiKrrhTquMD5iEkb71BHp5RoyKwronaYQCtjsxWcuRNeeMifws3s8xVd4r/HL/cbEk+8VsHe///nT75fYf8HT/R17ZX6+5pOwCx4l4c9VPd5mIEh98vfmSPXjT9Yf1/UpfMt4imml/jaBL5U1mAdkqBSgJk2OG+1+mOjrzZRswr9LyLFTHlFGmtS2qkG051pIX0E4Uh0IZzrIkwKp1Y5m9i4jAqw3yVe5ODkZpi0RMZQrI05CiNNVFSyGOiWcs/EgniubqRlqzLeaCyMFwozNiEgTq/ro1KhvvGwPlBS+DUnoJDWYxFvwgr9O1OJZ2qebFsWGe3lWDD451mehk3AFg6UGvB3xY1l2JKk+0rq/Q2D2jcUMKHEhmdJJxEbGQJYguK+usLlZV5o6xjZboCQtx0A8AlAlWF1A6lR/+1dcfEw8q8adTJBf708zFQafytqoGvkEm2UmWcR//xDveeTk5pkiQbf2m56TRl35mRDanHAa2XR8G7mRSr0IgHmKhr2oIXDbj7Zp7huafKToYusvBL+oyFQTxfGT+GCCOU/IdrY81KZ02qivHzjmzkbNQVckxkObDQdWcCs6e8Vw+JiSYi4QlqpZHQmnDdCkyodsgEzoGmfYZMIvH/y/ncnLl8ifemfaSy6nJJcpSPGwwnQaYrjllOm2CCc5FRVcyS/f8QM7fHE0ADNVXQko1aDSbc+Z00u2cCa4knnrD6ieJlkkiVu3byBh2jfxn1UUkhj1rgmlDJMsMZwFolU37yuaJN5x+sum8zOZGciIIS4bNp9cQygMmn1arfLrd8lkh+VAjsiM+L7Px4zb2/6DTMp/mzs9NEKj7y+rW8khJTMSgyZwYj1ADzEmbXJbvF65cKm9cZnXpNbi0x+1yCc3V5TI5UlOhGbPgNTEtxY89A7OhEYAmme2GtLDjkPadoXmZkLbrKROaIW0+ZaYsCQc9U1qN7Z8zuz9eqzheI9hTb1wmgnVgxzOlGcHOI8bUS5IrkZb98hQ5bRXJSbdIvq9NH9jPt5bQfG2Zb/psGc3iYe/Dwsbj0ht3vJy0rsvJU2/0czlpmcvJcpJ8605P/9aT9ovhKzj3Kd7F0LSBIceA0cy/jOzdcrL44PMEzTuGjutJnKZDfy1i205NHafj+NW2ukDy4mjZ/UTLNuNQtMVXtM6i1fXSsGjO+5jtQNeznXsRJJt75h5sGUnz74KvRH0FMGAQ3carf8+bGiT+oq/mZLL6ASnXtPqPy1r+Dw==</diagram></mxfile>
\ No newline at end of file diff --git a/solo_tool.py b/solo_tool.py index 53670fb..538d558 100644 --- a/solo_tool.py +++ b/solo_tool.py @@ -1,3 +1,5 @@ +import os + from playlist import Playlist from abcontroller import ABController from session_manager import SessionManager @@ -22,7 +24,8 @@ class SoloTool: self._abController.positionChanged(position) def addSong(self, path): - self._sessionManager.addSong(path) + if os.path.isfile(path): + self._sessionManager.addSong(path) def setSong(self, index): self._playlist.setCurrentSong(index) @@ -44,7 +47,6 @@ class SoloTool: with open(path, "w") as f: self._sessionManager.saveSession(f) - # Playback control def play(self): self._player.play() diff --git a/solo_tool_integrationtest.py b/solo_tool_integrationtest.py index bbc98a8..2ed2449 100644 --- a/solo_tool_integrationtest.py +++ b/solo_tool_integrationtest.py @@ -218,3 +218,14 @@ def test_loadAndSaveSession(tmp_path): savedSession = json.loads(f.read()) assert loadedSession == savedSession + +def test_addInexistentFile(): + song = "not/a/real/file" + + mockPlayer = MockPlayer() + uut = SoloTool(mockPlayer) + + uut.addSong(song) + uut.setSong(0) + + assert mockPlayer.currentSong == None |