feat: fix download-to-user matching, add cover art to downloads

- Fix seriesMap key (use Sonarr internal id, not tvdbId)
- Fix Sonarr tag resolution (use tag map like Radarr)
- Use sourceTitle for history record matching
- Fall back to embedded movie/series objects when API timeouts
- Add includeMovie/includeSeries params to queue/history API calls
- Add coverArt field to all download responses (TMDB poster URLs)
- Add cover art display to frontend download cards
- Fix user-summary route to use instance config and tag maps
This commit is contained in:
2026-05-15 14:54:21 +01:00
parent 5d04d2796b
commit f500f4db3b
18 changed files with 7500 additions and 297 deletions

2339
client/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -16,7 +16,7 @@
"devDependencies": {
"@types/react": "^18.2.37",
"@types/react-dom": "^18.2.15",
"@vitejs/plugin-react": "^4.2.0",
"vite": "^5.0.0"
"@vitejs/plugin-react": "^3.1.0",
"vite": "^4.5.0"
}
}

View File

@@ -155,6 +155,28 @@ body {
border-radius: 10px;
padding: 20px;
transition: transform 0.2s, box-shadow 0.2s;
display: flex;
gap: 20px;
align-items: flex-start;
}
.download-cover {
flex-shrink: 0;
width: 80px;
border-radius: 6px;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}
.download-cover img {
width: 100%;
height: auto;
display: block;
}
.download-info {
flex: 1;
min-width: 0;
}
.download-card:hover {

View File

@@ -118,6 +118,12 @@ function App() {
<div className="downloads-list">
{downloads.map((download, index) => (
<div key={index} className={`download-card ${download.type}`}>
{download.coverArt && (
<div className="download-cover">
<img src={download.coverArt} alt={download.movieName || download.seriesName || download.title} />
</div>
)}
<div className="download-info">
<div className="download-header">
<span className={`download-type ${download.type}`}>
{download.type === 'series' ? '📺 Series' : '🎬 Movie'}
@@ -163,6 +169,7 @@ function App() {
</div>
)}
</div>
</div>
</div>
))}
</div>