You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat: PlexConnector — implémentation connecteur Plex (issue #16)
- Ajout de PlexConnector implémentant IMediaServerConnector
- Auth via X-Plex-Token (ApiKey) ou plex.tv sign_in (UserCredentials)
- Parsing XML Plex via XDocument/XElement
- ListLibrariesAsync via /library/sections
- ListItemsAsync via /library/sections/{id}/all (films) et ?type=4 (épisodes)
- GetItemCountAsync avec X-Plex-Container-Size=0
- GetStreamUrlAsync via /library/parts/{id}/file avec token en query param
- GetArtworkStreamAsync pour thumb (poster) et art (backdrop)
- GetSectionTypeAsync: lookup KnownLibraries puis fallback API
- Câblage dans ConnectorFactory pour ServerTypes.Plex
Closes#16
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: PlexTV connector — connexion via plex.tv avec résolution auto URL (issue #32)
- PlexTvConnector : wrapper autour de PlexConnector, initialise l'URL au premier appel
- Auth via token (ApiKey) ou plex.tv sign_in (UserCredentials)
- GET plex.tv/api/v2/resources → sélection du serveur par MachineIdentifier
- Priorité connexion : local → plex.direct → relay
- PlexTvApiModels : modèles JSON pour l'API plex.tv (resources + sign_in)
- PlexServerInfo : DTO exposé à l'UI pour le picker de serveur
- ConnectorFactory : ajout ServerTypes.PlexTV + câblage PlexTvConnector
- PluginConfiguration : ajout ConnectorConfig.PlexMachineIdentifier
- ConfigController : POST /virtuallib/plex/servers (liste serveurs plex.tv)
+ PlexMachineIdentifier propagé dans Create/Update DTOs et handlers
- UI : option "Plex via plex.tv" dans le sélecteur de type
+ section picker serveur (Load Servers → dropdown)
+ validation et persistance PlexMachineIdentifier
Closes#32
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: support 2FA plex.tv (TOTP) dans PlexTvConnector
- GetTokenFromCredentialsAsync : accept twoFactorPin (user[two_factor_pin])
et détecte le 401 lié à 2FA avec message d'erreur explicite
- ConfigController : GetPlexTvServers reçoit TwoFactorPin, retourne
PlexTvServersResult { ResolvedToken, Servers } au lieu d'une liste brute
- UI : champ "2FA Code" optionnel dans la section PlexTV
- JS : après authentification UserCredentials + 2FA, bascule automatiquement
en mode ApiKey avec le token long-lived résolu (les syncs futurs ne
nécessitent plus de re-2FA)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: 2FA plex.tv — OTP concaténé au password (approche documentée)
L'API plex.tv n'accepte pas de champ séparé pour le code TOTP.
La méthode correcte est d'appendre le code directement au mot de passe :
user[password] = password + otpCode (sans séparateur).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: PlexMachineIdentifier manquant dans TestConnectionParams
- TestConnectionParams DTO : ajout champ PlexMachineIdentifier
- Handler test-connection : propagation vers ConnectorConfig temporaire
- JS btnTestConnection : envoi PlexMachineIdentifier + ServerUrl vide pour PlexTV
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: PlexConnector — item count, relay timeout, sync updates
- Add X-Plex-Container-Start=0 to GetItemCountAsync URL so Plex includes
totalSize in response (was returning 0 without this parameter)
- Increase PlexConnector HTTP timeout from 30s to 120s for slow relay connections
- Reuse authenticated connector in GetConnectorLibraries instead of creating
a second PlexTvConnector for item count fetches
- Update RemoteItemCount during sync for both checked and unchecked libraries
- Save config after sync to persist updated item counts
- Fix toggleLibrary to preserve PlexMachineIdentifier in PUT payload
- Fix GetConnectorLibraries to only provision user-selected libraries
- Add per-server accessToken support from plex.tv resources API
- Improve PickBestConnection to prefer plex.direct over relay, exclude LAN IPs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: config UI — arbre collapsable par type de bibliothèque
Remplace la table plate par un arbre à deux niveaux :
- Niveau 1 : connecteurs (triés A→Z, collapsed par défaut)
- Niveau 2 : groupes par type de bibliothèque (Movies, TV Shows, Music…)
triés A→Z, collapsed par défaut
- Bibliothèques triées A→Z dans chaque groupe
- Cliquer sur l'en-tête collapse/expand ; boutons Edit/Delete/Sync
toujours accessibles
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: auto-découverte des nouvelles libraries au sync + refresh UI
- SyncConnectorAsync fusionne les nouvelles libraries distantes dans
KnownLibraries à chaque sync (sans écraser RemoteItemCount existant)
- L'arbre de la page de config se recharge automatiquement après un sync
(plus besoin de refresh manuel de la page)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: v1.3.0 — Plex connector, collapsible tree UI, auto-discovery, password pre-fill
- PlexConnector + PlexTvConnector: plex.tv auth, relay support, 120s timeout, per-server accessToken
- Refonte UI: arbre collapsible par type (Movies/TvShows...), trié A→Z, replié par défaut
- Compteurs résumés (X/Y libs · A/B items) sur connecteur et groupe de type
- Auto-découverte de nouvelles bibliothèques lors du sync (merge dans KnownLibraries)
- Rafraîchissement automatique de l'UI après sync
- Pré-remplissage du mot de passe en édition de connecteur
- Mise à jour du compteur d'items distants pour toutes les bibliothèques lors du sync
- Docs ROADMAP + CONFIGURATION mis à jour
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
| Nom d'affichage |`Serveur B - Bureau`| Nom libre pour identifier la source |
56
-
| Type de serveur |`Emby`| Emby / Jellyfin / Plex |
57
-
| URL du serveur |`http://192.168.1.200:8096` ou `https://media.example.com/emby`| URL complète avec port **et chemin de base** Emby |
56
+
| Type de serveur |`Emby`| Emby / Jellyfin / Plex / Plex via plex.tv |
57
+
| URL du serveur |`http://192.168.1.200:8096` ou `https://media.example.com/emby`| URL complète avec port **et chemin de base** Emby (non requis pour Plex via plex.tv) |
0 commit comments