diff --git a/API/Controllers/SeriesController.cs b/API/Controllers/SeriesController.cs
index 7cd897c32..84eacc838 100644
--- a/API/Controllers/SeriesController.cs
+++ b/API/Controllers/SeriesController.cs
@@ -310,7 +310,7 @@ public class SeriesController : BaseApiController
///
///
///
- ///
+ /// This is not in use
///
[HttpPost("all-v2")]
public async Task>> GetAllSeriesV2(FilterV2Dto filterDto, [FromQuery] UserParams userParams,
@@ -321,8 +321,6 @@ public class SeriesController : BaseApiController
await _unitOfWork.SeriesRepository.GetSeriesDtoForLibraryIdV2Async(userId, userParams, filterDto, context);
// Apply progress/rating information (I can't work out how to do this in initial query)
- if (series == null) return BadRequest(await _localizationService.Translate(User.GetUserId(), "no-series"));
-
await _unitOfWork.SeriesRepository.AddSeriesModifiers(userId, series);
Response.AddPaginationHeader(series.CurrentPage, series.PageSize, series.TotalCount, series.TotalPages);
diff --git a/API/Controllers/UsersController.cs b/API/Controllers/UsersController.cs
index 944ea987b..e5cfb626a 100644
--- a/API/Controllers/UsersController.cs
+++ b/API/Controllers/UsersController.cs
@@ -128,6 +128,7 @@ public class UsersController : BaseApiController
existingPreferences.PromptForDownloadSize = preferencesDto.PromptForDownloadSize;
existingPreferences.NoTransitions = preferencesDto.NoTransitions;
existingPreferences.SwipeToPaginate = preferencesDto.SwipeToPaginate;
+ existingPreferences.AllowAutomaticWebtoonReaderDetection = preferencesDto.AllowAutomaticWebtoonReaderDetection;
existingPreferences.CollapseSeriesRelationships = preferencesDto.CollapseSeriesRelationships;
existingPreferences.ShareReviews = preferencesDto.ShareReviews;
diff --git a/UI/Web/src/app/_services/account.service.ts b/UI/Web/src/app/_services/account.service.ts
index 6b8cdc243..8e8576069 100644
--- a/UI/Web/src/app/_services/account.service.ts
+++ b/UI/Web/src/app/_services/account.service.ts
@@ -102,11 +102,22 @@ export class AccountService {
return true;
}
+ /**
+ * If the user has any role in the restricted roles array or is an Admin
+ * @param user
+ * @param roles
+ * @param restrictedRoles
+ */
hasAnyRole(user: User, roles: Array, restrictedRoles: Array = []) {
if (!user || !user.roles) {
return false;
}
+ // If the user is an admin, they have the role
+ if (this.hasAdminRole(user)) {
+ return true;
+ }
+
// If restricted roles are provided and the user has any of them, deny access
if (restrictedRoles.length > 0 && restrictedRoles.some(role => user.roles.includes(role))) {
return false;
diff --git a/UI/Web/src/app/_single-module/actionable-modal/actionable-modal.component.html b/UI/Web/src/app/_single-module/actionable-modal/actionable-modal.component.html
index caf8bf683..7573c554a 100644
--- a/UI/Web/src/app/_single-module/actionable-modal/actionable-modal.component.html
+++ b/UI/Web/src/app/_single-module/actionable-modal/actionable-modal.component.html
@@ -15,7 +15,7 @@