feat: modale Prowlarr avec bouton remplacer + fix parseur volumes
- Modale Prowlarr (page série) : remplacé le bouton qBittorrent brut par QbittorrentDownloadButton avec suivi managé (libraryId, seriesName, expectedVolumes) et bouton "télécharger et remplacer". - Ajout de alwaysShowReplace pour la modale Prowlarr (toujours montrer le bouton remplacer) vs la page downloads (seulement si allVolumes > expectedVolumes). - Fix parseur : les tags de version entre crochets [V2], [V3] ne sont plus extraits comme volumes (le préfixe "v" est ignoré après "["). - Progression qBittorrent : utilise directement le champ progress (completed et amount_left sont non-fiables sur qBittorrent 4.3.2). - Référence import : ne plus exclure les volumes attendus de la recherche de référence (corrige le mauvais dossier/nommage quand tous les volumes sont dans expected_volumes). - allVolumes ajouté à ProwlarrRelease (backend + frontend). - flex-wrap sur les pastilles volumes dans la modale Prowlarr. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -36,6 +36,7 @@ export function QbittorrentDownloadButton({
|
||||
seriesName,
|
||||
expectedVolumes,
|
||||
allVolumes,
|
||||
alwaysShowReplace,
|
||||
}: {
|
||||
downloadUrl: string;
|
||||
releaseId: string;
|
||||
@@ -43,6 +44,8 @@ export function QbittorrentDownloadButton({
|
||||
seriesName?: string;
|
||||
expectedVolumes?: number[];
|
||||
allVolumes?: number[];
|
||||
/** Show replace button even when allVolumes == expectedVolumes (e.g. in Prowlarr search modal) */
|
||||
alwaysShowReplace?: boolean;
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
const { configured, onDownloadStarted } = useContext(QbConfigContext);
|
||||
@@ -53,8 +56,8 @@ export function QbittorrentDownloadButton({
|
||||
|
||||
if (!configured) return null;
|
||||
|
||||
const hasExistingVolumes = allVolumes && expectedVolumes
|
||||
&& allVolumes.length > expectedVolumes.length;
|
||||
const showReplaceButton = allVolumes && allVolumes.length > 0
|
||||
&& (alwaysShowReplace || (expectedVolumes && allVolumes.length > expectedVolumes.length));
|
||||
|
||||
async function handleSend(volumes?: number[], replaceExisting = false) {
|
||||
setSending(true);
|
||||
@@ -115,7 +118,7 @@ export function QbittorrentDownloadButton({
|
||||
)}
|
||||
</button>
|
||||
|
||||
{hasExistingVolumes && (
|
||||
{showReplaceButton && (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setShowConfirm(true)}
|
||||
|
||||
Reference in New Issue
Block a user