## Settings - Folder picker pour les paths (navigation dossier côté serveur via GET /api/browse) - Paths vides par défaut, démarrage à / dans le picker - Picker accessible même sous Docker (volumes montés accessibles) - Bouton "Analyser bibliothèque" pour relancer scanMediaPath manuellement (POST /api/scan) - Toggle NFO support (téléchargement dossier GitLab Fankai Pack à l'organisation) - nfoSupport ajouté dans Settings interface + defaults ## Catalogue - Logo "Fankarr" cliquable → retour accueil - Filtres séparés en 2 groupes : état série (orange) | état téléchargement (bleu) - Groupe 1 : Toutes / Disponibles / Sans torrent - Groupe 2 : DL complet / DL partiel - Tooltip badge torrents → "X torrents téléchargeables" ## Page Série - Anti-spam boutons download : Set au lieu de string, bouton bloqué après envoi - Boutons bloqués si torrent déjà dans qBittorrent (cross-session via poll /api/downloads) - Boutons bloqués si épisode/saison déjà organisé dans la bibliothèque - Barre de progression sous épisode / saison / intégrale (poll 5s) - Badge "✓ téléchargé" à 100% à la place de la barre - Badge "dispo" en bleu, "✓ téléchargé" inline à côté de "dispo" ## Page Téléchargements - Onglets EN COURS / TERMINÉS (défaut : EN COURS) - EN COURS : downloading + paused + checking + error - TERMINÉS : seeding uniquement - Toggle "Masquer organisés" dans l'onglet TERMINÉS - Message vide adapté au contexte ## Organizer - seasonFolder : Saison N sans padding (pour matcher GitLab) - Map SERIE_TITLE_GITLAB_MAP : 9 corrections titres API → GitLab - downloadGitlabFolder : liste récursive + téléchargement NFO/images depuis fankai_pack - Appelé au début de organizeTorrent si nfoSupport activé - Paths vides par défaut dans readSettings du worker ## Backend - POST /api/scan : déclenche scanMediaPath manuellement - GET /api/browse?path= : liste les sous-dossiers d'un chemin - dispatchList : utilise client.config.category en priorité sur la catégorie globale - Catégorie configurable par client torrent (fix torrents non affichés page downloads)
35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
import fs from 'fs'
|
|
import path from 'path'
|
|
|
|
const DATA_PATH = path.join(process.cwd(), 'data', 'settings.json')
|
|
|
|
export interface Settings {
|
|
mediaPath : string
|
|
completePath : string
|
|
organizeMode : 'hardlink' | 'move'
|
|
category : string
|
|
nfoSupport : boolean // téléchargement NFO/images depuis GitLab Fankai Pack
|
|
}
|
|
|
|
const defaults: Settings = {
|
|
mediaPath : '',
|
|
completePath : '',
|
|
organizeMode : 'hardlink',
|
|
category : 'fankai',
|
|
nfoSupport : false,
|
|
}
|
|
|
|
export function readSettings(): Settings {
|
|
try {
|
|
if (!fs.existsSync(DATA_PATH)) return { ...defaults }
|
|
return { ...defaults, ...JSON.parse(fs.readFileSync(DATA_PATH, 'utf-8')) }
|
|
} catch { return { ...defaults } }
|
|
}
|
|
|
|
export function writeSettings(settings: Partial<Settings>): Settings {
|
|
const current = readSettings()
|
|
const updated = { ...current, ...settings }
|
|
fs.mkdirSync(path.dirname(DATA_PATH), { recursive: true })
|
|
fs.writeFileSync(DATA_PATH, JSON.stringify(updated, null, 2))
|
|
return updated
|
|
} |