better
This commit is contained in:
parent
93807bd497
commit
fede561d50
3 changed files with 3642 additions and 11 deletions
3605
logs/app.log
3605
logs/app.log
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
|
@ -5187,7 +5187,9 @@ class DownloadMissingTracksModal(QDialog):
|
||||||
'track_index': track_index,
|
'track_index': track_index,
|
||||||
'table_index': table_index,
|
'table_index': table_index,
|
||||||
'download_index': download_index,
|
'download_index': download_index,
|
||||||
'completed': False
|
'completed': False,
|
||||||
|
'last_seen_state': None,
|
||||||
|
'stuck_state_count': 0 # Track how long it's been in same state
|
||||||
}
|
}
|
||||||
|
|
||||||
# Create timer to check download status via slskd API (same as regular downloads)
|
# Create timer to check download status via slskd API (same as regular downloads)
|
||||||
|
|
@ -5198,7 +5200,7 @@ class DownloadMissingTracksModal(QDialog):
|
||||||
timer.download_index = download_index
|
timer.download_index = download_index
|
||||||
timer.start_time = 0
|
timer.start_time = 0
|
||||||
timer.timeout.connect(lambda: self.check_download_status_parallel(timer))
|
timer.timeout.connect(lambda: self.check_download_status_parallel(timer))
|
||||||
timer.start(2000) # Check every 2 seconds
|
timer.start(1000) # Check every 1 second for faster error detection
|
||||||
|
|
||||||
# Store timer reference for cleanup
|
# Store timer reference for cleanup
|
||||||
if not hasattr(self, 'download_timers'):
|
if not hasattr(self, 'download_timers'):
|
||||||
|
|
@ -5209,7 +5211,7 @@ class DownloadMissingTracksModal(QDialog):
|
||||||
"""Check parallel download status using hybrid API + Transfer folder approach"""
|
"""Check parallel download status using hybrid API + Transfer folder approach"""
|
||||||
try:
|
try:
|
||||||
# Increment timer counter
|
# Increment timer counter
|
||||||
timer.start_time += 2 # 2 seconds per check
|
timer.start_time += 1 # 1 second per check
|
||||||
|
|
||||||
# Check if this download was already completed
|
# Check if this download was already completed
|
||||||
if (hasattr(self, 'parallel_download_tracking') and
|
if (hasattr(self, 'parallel_download_tracking') and
|
||||||
|
|
@ -5231,7 +5233,18 @@ class DownloadMissingTracksModal(QDialog):
|
||||||
download_found_in_api = True
|
download_found_in_api = True
|
||||||
state = getattr(download, 'state', 'Unknown')
|
state = getattr(download, 'state', 'Unknown')
|
||||||
|
|
||||||
print(f"🔍 Parallel download {timer.download_index + 1} API status: {state}")
|
# Check for stuck downloads by tracking state changes
|
||||||
|
tracking_info = self.parallel_download_tracking.get(timer.download_index, {})
|
||||||
|
last_state = tracking_info.get('last_seen_state')
|
||||||
|
|
||||||
|
if last_state == state:
|
||||||
|
# Same state as last check - increment stuck counter
|
||||||
|
tracking_info['stuck_state_count'] = tracking_info.get('stuck_state_count', 0) + 1
|
||||||
|
else:
|
||||||
|
# State changed - reset stuck counter
|
||||||
|
tracking_info['stuck_state_count'] = 0
|
||||||
|
tracking_info['last_seen_state'] = state
|
||||||
|
print(f"🔍 Parallel download {timer.download_index + 1} state: {state}")
|
||||||
|
|
||||||
if state == "Completed":
|
if state == "Completed":
|
||||||
print(f"✅ Parallel download {timer.download_index + 1} completed via API")
|
print(f"✅ Parallel download {timer.download_index + 1} completed via API")
|
||||||
|
|
@ -5244,7 +5257,13 @@ class DownloadMissingTracksModal(QDialog):
|
||||||
# Try to retry with different source instead of marking as failed
|
# Try to retry with different source instead of marking as failed
|
||||||
self.retry_parallel_download_with_fallback(timer.download_index, f"Download {state.lower()}")
|
self.retry_parallel_download_with_fallback(timer.download_index, f"Download {state.lower()}")
|
||||||
return
|
return
|
||||||
# For "InProgress", "Queued" etc., continue monitoring
|
elif state in ["InProgress", "Queued"] and tracking_info.get('stuck_state_count', 0) > 30:
|
||||||
|
# Been in same state for 30+ seconds - likely stuck
|
||||||
|
print(f"⚠️ Download {timer.download_index + 1} stuck in {state} for {tracking_info['stuck_state_count']}s - initiating retry")
|
||||||
|
timer.stop()
|
||||||
|
self.retry_parallel_download_with_fallback(timer.download_index, f"Stuck in {state}")
|
||||||
|
return
|
||||||
|
# For other states, continue monitoring
|
||||||
break
|
break
|
||||||
|
|
||||||
except Exception as api_error:
|
except Exception as api_error:
|
||||||
|
|
@ -5261,16 +5280,23 @@ class DownloadMissingTracksModal(QDialog):
|
||||||
self.on_parallel_track_completed(timer.download_index, True)
|
self.on_parallel_track_completed(timer.download_index, True)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
# Not in API and not in Transfer folder - continue monitoring (might still be downloading)
|
# Not in API and not in Transfer folder - this might indicate a problem
|
||||||
if timer.start_time > 60: # After 1 minute, start logging this situation
|
if timer.start_time > 30: # After 30 seconds, start checking more aggressively
|
||||||
print(f"⏳ Parallel download {timer.download_index + 1} not in API or Transfer folder (monitoring {timer.start_time}s)")
|
print(f"⏳ Parallel download {timer.download_index + 1} not in API or Transfer folder (monitoring {timer.start_time}s)")
|
||||||
|
|
||||||
|
# After 90 seconds with no progress, assume it's stuck/failed
|
||||||
|
if timer.start_time > 90: # 90 seconds - much faster than 10 minutes
|
||||||
|
print(f"⚠️ Download {timer.download_index + 1} appears stuck after {timer.start_time}s - initiating retry")
|
||||||
|
timer.stop()
|
||||||
|
self.retry_parallel_download_with_fallback(timer.download_index, "Download appears stuck/failed")
|
||||||
|
return
|
||||||
|
|
||||||
# Timeout after 10 minutes - try retry instead of failing
|
# Final timeout after 3 minutes (much more aggressive)
|
||||||
if timer.start_time > 600: # 10 minutes
|
if timer.start_time > 180: # 3 minutes - downloads should not take this long
|
||||||
print(f"⏰ Parallel download {timer.download_index + 1} timeout after {timer.start_time}s")
|
print(f"⏰ Parallel download {timer.download_index + 1} final timeout after {timer.start_time}s")
|
||||||
timer.stop()
|
timer.stop()
|
||||||
# Try to retry with different source instead of marking as failed
|
# Try to retry with different source instead of marking as failed
|
||||||
self.retry_parallel_download_with_fallback(timer.download_index, "Download timeout")
|
self.retry_parallel_download_with_fallback(timer.download_index, "Final timeout")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ Error checking parallel download status: {str(e)}")
|
print(f"❌ Error checking parallel download status: {str(e)}")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue