Skip to content

Commit 9f42934

Browse files
Kevin JensenKevin Jensen
authored andcommitted
added Shared Items functionality
1 parent def1868 commit 9f42934

File tree

7 files changed

+87
-0
lines changed

7 files changed

+87
-0
lines changed

Source/Plex.ServerApi/Clients/Interfaces/IPlexAccountClient.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace Plex.ServerApi.Clients.Interfaces
88
using PlexModels.Account.Announcements;
99
using PlexModels.Account.Discover;
1010
using PlexModels.Account.Resources;
11+
using PlexModels.Account.SharedItems;
1112
using PlexModels.Account.User;
1213
using PlexModels.OAuth;
1314
using PlexModels.Watchlist;
@@ -181,5 +182,12 @@ public interface IPlexAccountClient
181182
/// <param name="ratingKey">Item Rating Key</param>
182183
/// <returns></returns>
183184
Task RemoveFromWatchlist(string authToken, string ratingKey);
185+
186+
/// <summary>
187+
/// Get Shared Items for Admin Account
188+
/// </summary>
189+
/// <param name="authToken">Plex Auth Token</param>
190+
/// <returns>List of Shared Items and the Users associated</returns>
191+
Task<List<SharedItemContainer>> GetSharedItems(string authToken);
184192
}
185193
}

Source/Plex.ServerApi/Clients/PlexAccountClient.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ namespace Plex.ServerApi.Clients
1212
using PlexModels.Account.Announcements;
1313
using PlexModels.Account.Discover;
1414
using PlexModels.Account.Resources;
15+
using PlexModels.Account.SharedItems;
1516
using PlexModels.Account.User;
1617
using PlexModels.OAuth;
1718
using PlexModels.Watchlist;
@@ -402,5 +403,27 @@ public async Task RemoveFromWatchlist(string authToken, string ratingKey)
402403

403404
await this.apiService.InvokeApiAsync(apiRequest);
404405
}
406+
407+
/// <inheritdoc/>
408+
public async Task<List<SharedItemContainer>> GetSharedItems(string authToken)
409+
{
410+
var queryParams = new Dictionary<string, string>
411+
{
412+
{"includeItems", "true"}
413+
};
414+
415+
var apiRequest =
416+
new ApiRequestBuilder("https://plex.tv/api/v2/shared_sources/owned", string.Empty, HttpMethod.Get)
417+
.AddPlexToken(authToken)
418+
.AddRequestHeaders(ClientUtilities.GetClientMetaHeaders(this.clientOptions))
419+
.AddRequestHeaders(ClientUtilities.GetClientIdentifierHeader(this.clientOptions.ClientId))
420+
.AddQueryParams(queryParams)
421+
.AcceptJson()
422+
.Build();
423+
424+
var items = await this.apiService.InvokeApiAsync<List<SharedItemContainer>>(apiRequest);
425+
426+
return items;
427+
}
405428
}
406429
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace Plex.ServerApi.PlexModels.Account.SharedItems;
2+
3+
public class SharedItem
4+
{
5+
public int Id { get; set; }
6+
public string Uri { get; set; }
7+
public string Status { get; set; }
8+
public string Title { get; set; }
9+
public string Type { get; set; }
10+
public string CreatedAt { get; set; }
11+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace Plex.ServerApi.PlexModels.Account.SharedItems;
2+
3+
public class SharedItemAddModel
4+
{
5+
6+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
namespace Plex.ServerApi.PlexModels.Account.SharedItems;
2+
3+
using System.Collections.Generic;
4+
5+
public class SharedItemContainer
6+
{
7+
public int Id { get; set; }
8+
public string Origin { get; set; }
9+
public string Name { get; set; }
10+
public int ServerId { get; set; }
11+
public string Status { get; set; }
12+
public int SharedItemsCount { get; set; }
13+
public string CreatedAt { get; set; }
14+
public string AccessToken { get; set; }
15+
16+
public SharedItemUser Invited { get; set; }
17+
public SharedItemUser Owner { get; set; }
18+
19+
public List<SharedItem> SharedItems { get; set; }
20+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace Plex.ServerApi.PlexModels.Account.SharedItems;
2+
3+
public class SharedItemUser
4+
{
5+
public int Id { get; set; }
6+
public string Uuid { get; set; }
7+
public string Title { get; set; }
8+
public string Username { get; set; }
9+
public bool Restricted { get; set; }
10+
public string Thumb { get; set; }
11+
}

Tests/Plex.Library.Test/Tests/AccountTest.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ public async void Test_GetWatchlist()
3030
Assert.NotNull(mediaContainer);
3131
}
3232

33+
[Fact]
34+
public async void Test_GetAccountSharedItems()
35+
{
36+
var sharedItems = await this.plexAccountClient.GetSharedItems(this.config.AuthenticationKey);
37+
38+
Assert.NotEmpty(sharedItems);
39+
}
40+
3341
[Fact]
3442
public async void Test_OnWatchlist()
3543
{

0 commit comments

Comments
 (0)