chore: update watchlist features and fixes
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
## 2026-02-25 Task 1: Add video URL validation helper
|
||||
|
||||
**Task**: Add `_test_video_url()` method to AnimeSamaDownloader
|
||||
|
||||
**What was implemented**:
|
||||
- Method `_test_video_url(url: str) -> bool` added to end of AnimeSamaDownloader class
|
||||
- Downloads first 10KB using HTTP Range header (`bytes=0-10240`)
|
||||
- 10 second timeout handling
|
||||
- Returns True if HTTP 200 and data > 0 bytes
|
||||
- Returns False on timeout, connection error, or empty response
|
||||
- Logs all validation results
|
||||
|
||||
**Issues encountered**:
|
||||
- Subagent created duplicate imports and modified unrelated files
|
||||
- Had to revert changes to other files
|
||||
- Had to fix duplicate logger line
|
||||
- Had to revert unintended get_download_link signature change
|
||||
|
||||
**Verification**:
|
||||
- Valid URL (google.com): Returns True ✓
|
||||
- Timeout URL (httpbin.org/delay/20): Returns False ✓
|
||||
- Method exists: True ✓
|
||||
|
||||
---
|
||||
|
||||
## 2026-02-25 Task 2: Implement player fallback logic
|
||||
|
||||
**Task**: Add `get_download_link_with_fallback()` method with player priority list
|
||||
|
||||
**What was implemented**:
|
||||
- Added `__init__` method with cache initialization: `self._working_players = {}`
|
||||
- Added `get_download_link_with_fallback()` method with:
|
||||
- Player priority list: ['vidmoly', 'sendvid', 'sibnet', 'lpayer']
|
||||
- Tries each player in order
|
||||
- Validates each URL with _test_video_url()
|
||||
- Caches working player per anime URL
|
||||
- Logs each player attempt (success/failure)
|
||||
- Returns (video_url, filename) on first success
|
||||
- Raises exception if all players fail
|
||||
|
||||
**Verification**:
|
||||
- First player works: VidMoly URL returned ✓
|
||||
- First fails, second works: SendVid URL returned ✓
|
||||
- All fail: Exception raised ✓
|
||||
|
||||
---
|
||||
|
||||
## 2026-02-25 Task 3: Integrate fallback into get_download_link()
|
||||
|
||||
**Task**: Update `get_download_link()` to use fallback for pipe-separated URLs
|
||||
|
||||
**What was implemented**:
|
||||
- Modified `get_download_link()` to call `get_download_link_with_fallback()` for pipe-separated URLs
|
||||
- Direct URLs (no pipe) still use existing extraction flow for performance
|
||||
- Backward compatibility maintained
|
||||
- Fixed target_filename parameter to match download_manager expectations
|
||||
|
||||
**Verification**:
|
||||
- Pipe URL triggers fallback: True ✓
|
||||
- Direct URL skips fallback: True ✓
|
||||
|
||||
---
|
||||
|
||||
## 2026-02-25 Task 4: Add unit tests
|
||||
|
||||
**Task**: Create unit tests for fallback logic
|
||||
|
||||
**What was implemented**:
|
||||
- Created `tests/test_anime_sama_fallback.py` with 10 tests:
|
||||
1. test_fallback_tries_players_in_priority_order
|
||||
2. test_caching_mechanism_stores_working_player
|
||||
3. test_all_players_failing_raises_exception
|
||||
4. test_test_video_url_returns_true_for_valid_url
|
||||
5. test_test_video_url_returns_false_for_invalid_url
|
||||
6. test_test_video_url_returns_false_for_empty_response
|
||||
7. test_test_video_url_returns_false_for_timeout
|
||||
8. test_test_video_url_returns_false_for_connection_error
|
||||
9. test_fallback_skips_invalid_player_url
|
||||
10. test_cache_not_used_without_anime_page_url
|
||||
|
||||
**Verification**:
|
||||
- All 10 tests pass: ✓
|
||||
|
||||
---
|
||||
|
||||
## 2026-02-25 Task 5: Integration testing
|
||||
|
||||
**Task**: Test with real Anime-Sama URLs
|
||||
|
||||
**What was implemented**:
|
||||
- Downloaded Frieren S1 E1 from anime-sama.tv
|
||||
- Used pipe-separated URL format
|
||||
- Download completed successfully
|
||||
|
||||
**Verification**:
|
||||
- Download status: COMPLETED ✓
|
||||
- File size: 321MB ✓
|
||||
- Fallback logic working (SendVid used) ✓
|
||||
Reference in New Issue
Block a user