Fixed issue with deleting and re-downloading songs; fixed issue where all N songs started to download when prefetching

This commit is contained in:
Sumner Evans
2020-07-31 22:41:15 -06:00
parent a95dff751f
commit 1dd29dbf0a
3 changed files with 20 additions and 7 deletions

View File

@@ -1,3 +1,13 @@
v0.11.2
=======
**Bug Fixes**
* Fixes bug where search didn't work in certain situations. (#253)
* Fixed bug when you deleted a song and then re-downloaded it.
* Fixed issue where all of the next N songs started downloading at once instead
of one at a time when prefetching songs for the play queue.
v0.11.1
=======

View File

@@ -939,4 +939,5 @@ class FilesystemAdapter(CachingAdapter):
table.truncate_table()
if cache_info:
cache_info.delete_instance()
cache_info.valid = False
cache_info.save()

View File

@@ -952,7 +952,7 @@ class AdapterManager:
cancelled = False
AdapterManager._cancelled_song_ids -= set(song_ids)
def do_download_song(song_id: str):
def do_download_song(song_id: str) -> Result:
assert AdapterManager._instance
assert AdapterManager._instance.caching_adapter
@@ -966,7 +966,7 @@ class AdapterManager:
AdapterManager._instance.song_download_progress(
song_id, DownloadProgress(DownloadProgress.Type.CANCELLED),
)
return
return Result('', is_download=True)
logging.info(f"Downloading {song_id}")
@@ -980,6 +980,7 @@ class AdapterManager:
AdapterManager._instance.song_download_progress(
song_id, DownloadProgress(DownloadProgress.Type.DONE),
)
return Result('', is_download=True)
except CacheMissError:
# The song is not already cached.
if before_download:
@@ -1004,9 +1005,6 @@ class AdapterManager:
assert AdapterManager._instance.caching_adapter
AdapterManager._instance.download_limiter_semaphore.release()
if AdapterManager._song_download_jobs.get(song_id):
del AdapterManager._song_download_jobs[song_id]
try:
AdapterManager._instance.caching_adapter.ingest_new_data(
CachingAdapter.CachedDataKey.SONG_FILE,
@@ -1014,10 +1012,14 @@ class AdapterManager:
(None, f.result(), None),
)
finally:
if AdapterManager._song_download_jobs.get(song_id):
del AdapterManager._song_download_jobs[song_id]
on_song_download_complete(song_id)
song_tmp_filename_result.add_done_callback(on_download_done)
AdapterManager._song_download_jobs[song_id] = song_tmp_filename_result
return song_tmp_filename_result
def do_batch_download_songs():
sleep(delay)
@@ -1040,7 +1042,7 @@ class AdapterManager:
# simultaneously.
AdapterManager._instance.download_limiter_semaphore.acquire()
result = Result(do_download_song, song_id, is_download=True)
result = do_download_song(song_id)
if one_at_a_time:
# Wait the file to download.