1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-04-22 22:15:17 -04:00

New: Improved Plex library updating

Closes #8235
Closes #8244

(cherry picked from commit 98308737cfa78a41ec22a2b23a80bf316bd779ea)
This commit is contained in:
Mark McDowall
2023-03-16 20:25:31 -07:00
committed by Qstick
parent 9ec1235b62
commit 85aac789f4
2 changed files with 46 additions and 230 deletions
@@ -14,12 +14,8 @@ namespace NzbDrone.Core.Notifications.Plex.Server
public interface IPlexServerProxy
{
List<PlexSection> GetMovieSections(PlexServerSettings settings);
void Update(int sectionId, PlexServerSettings settings);
void UpdateMovie(string metadataId, PlexServerSettings settings);
void UpdatePath(string path, int sectionId, PlexServerSettings settings);
string Version(PlexServerSettings settings);
List<PlexPreference> Preferences(PlexServerSettings settings);
string GetMetadataId(int sectionId, string imdbId, string language, PlexServerSettings settings);
void Update(int sectionId, string path, PlexServerSettings settings);
}
public class PlexServerProxy : IPlexServerProxy
@@ -64,29 +60,13 @@ namespace NzbDrone.Core.Notifications.Plex.Server
.ToList();
}
public void Update(int sectionId, PlexServerSettings settings)
public void Update(int sectionId, string path, PlexServerSettings settings)
{
var resource = $"library/sections/{sectionId}/refresh";
var request = BuildRequest(resource, HttpMethod.Get, settings);
var response = ProcessRequest(request);
CheckForError(response);
}
public void UpdateMovie(string metadataId, PlexServerSettings settings)
{
var resource = $"library/metadata/{metadataId}/refresh";
var request = BuildRequest(resource, HttpMethod.Put, settings);
var response = ProcessRequest(request);
CheckForError(response);
}
public void UpdatePath(string path, int sectionId, PlexServerSettings settings)
{
var resource = $"library/sections/{sectionId}/refresh";
var request = BuildRequest(resource, HttpMethod.Get, settings);
request.AddQueryParam("path", path);
var response = ProcessRequest(request);
CheckForError(response);
@@ -110,55 +90,6 @@ namespace NzbDrone.Core.Notifications.Plex.Server
.Version;
}
public List<PlexPreference> Preferences(PlexServerSettings settings)
{
var request = BuildRequest(":/prefs", HttpMethod.Get, settings);
var response = ProcessRequest(request);
CheckForError(response);
if (response.Contains("_children"))
{
return Json.Deserialize<PlexPreferencesLegacy>(response)
.Preferences;
}
return Json.Deserialize<PlexResponse<PlexPreferences>>(response)
.MediaContainer
.Preferences;
}
public string GetMetadataId(int sectionId, string imdbId, string language, PlexServerSettings settings)
{
var guid = $"com.plexapp.agents.imdb://{imdbId}?lang={language}";
var resource = $"library/sections/{sectionId}/all?guid={System.Web.HttpUtility.UrlEncode(guid)}";
var request = BuildRequest(resource, HttpMethod.Get, settings);
var response = ProcessRequest(request);
CheckForError(response);
List<PlexSectionItem> items;
if (response.Contains("_children"))
{
items = Json.Deserialize<PlexSectionResponseLegacy>(response)
.Items;
}
else
{
items = Json.Deserialize<PlexResponse<PlexSectionResponse>>(response)
.MediaContainer
.Items;
}
if (items == null || items.Empty())
{
return null;
}
return items.First().Id;
}
private HttpRequestBuilder BuildRequest(string resource, HttpMethod method, PlexServerSettings settings)
{
var scheme = settings.UseSsl ? "https" : "http";