Don't allow promotion of an implicit RP with the same name
This commit is contained in:
parent
848f0b39bb
commit
b4345b00a2
1 changed files with 20 additions and 21 deletions
|
|
@ -129,11 +129,17 @@ public class ReadingProfileService(IUnitOfWork unitOfWork, ILocalizationService
|
||||||
{
|
{
|
||||||
var profiles = await unitOfWork.AppUserReadingProfileRepository.GetProfilesForUser(userId, skipImplicit);
|
var profiles = await unitOfWork.AppUserReadingProfileRepository.GetProfilesForUser(userId, skipImplicit);
|
||||||
|
|
||||||
|
// If there is an implicit, send back
|
||||||
|
var implicitProfile =
|
||||||
|
profiles.FirstOrDefault(p => p.SeriesIds.Contains(seriesId) && p.Kind == ReadingProfileKind.Implicit);
|
||||||
|
if (implicitProfile != null) return implicitProfile;
|
||||||
|
|
||||||
|
// Next check for a bound Series profile
|
||||||
var seriesProfile = profiles
|
var seriesProfile = profiles
|
||||||
.FirstOrDefault(p => p.SeriesIds.Contains(seriesId) && p.Kind != ReadingProfileKind.Implicit);
|
.FirstOrDefault(p => p.SeriesIds.Contains(seriesId) && p.Kind != ReadingProfileKind.Implicit);
|
||||||
if (seriesProfile != null) return seriesProfile;
|
if (seriesProfile != null) return seriesProfile;
|
||||||
|
|
||||||
|
// Check for a library bound profile
|
||||||
var series = await unitOfWork.SeriesRepository.GetSeriesByIdAsync(seriesId);
|
var series = await unitOfWork.SeriesRepository.GetSeriesByIdAsync(seriesId);
|
||||||
if (series == null) throw new KavitaException(await localizationService.Translate(userId, "series-doesnt-exist"));
|
if (series == null) throw new KavitaException(await localizationService.Translate(userId, "series-doesnt-exist"));
|
||||||
|
|
||||||
|
|
@ -141,6 +147,7 @@ public class ReadingProfileService(IUnitOfWork unitOfWork, ILocalizationService
|
||||||
.FirstOrDefault(p => p.LibraryIds.Contains(series.LibraryId) && p.Kind != ReadingProfileKind.Implicit);
|
.FirstOrDefault(p => p.LibraryIds.Contains(series.LibraryId) && p.Kind != ReadingProfileKind.Implicit);
|
||||||
if (libraryProfile != null) return libraryProfile;
|
if (libraryProfile != null) return libraryProfile;
|
||||||
|
|
||||||
|
// Fallback to the default profile
|
||||||
return profiles.First(p => p.Kind == ReadingProfileKind.Default);
|
return profiles.First(p => p.Kind == ReadingProfileKind.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -201,7 +208,6 @@ public class ReadingProfileService(IUnitOfWork unitOfWork, ILocalizationService
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<UserReadingProfileDto> PromoteImplicitProfile(int userId, int profileId)
|
public async Task<UserReadingProfileDto> PromoteImplicitProfile(int userId, int profileId)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Get all the user's profiles including the implicit
|
// Get all the user's profiles including the implicit
|
||||||
var allUserProfiles = await unitOfWork.AppUserReadingProfileRepository.GetProfilesForUser(userId, false);
|
var allUserProfiles = await unitOfWork.AppUserReadingProfileRepository.GetProfilesForUser(userId, false);
|
||||||
var profileToPromote = allUserProfiles.First(r => r.Id == profileId);
|
var profileToPromote = allUserProfiles.First(r => r.Id == profileId);
|
||||||
|
|
@ -221,33 +227,26 @@ public class ReadingProfileService(IUnitOfWork unitOfWork, ILocalizationService
|
||||||
|
|
||||||
profileToPromote.Kind = ReadingProfileKind.User;
|
profileToPromote.Kind = ReadingProfileKind.User;
|
||||||
profileToPromote.Name = await localizationService.Translate(userId, "generated-reading-profile-name", series.Name);
|
profileToPromote.Name = await localizationService.Translate(userId, "generated-reading-profile-name", series.Name);
|
||||||
|
profileToPromote.Name = EnsureUniqueProfileName(allUserProfiles, profileToPromote.Name);
|
||||||
profileToPromote.NormalizedName = profileToPromote.Name.ToNormalized();
|
profileToPromote.NormalizedName = profileToPromote.Name.ToNormalized();
|
||||||
unitOfWork.AppUserReadingProfileRepository.Update(profileToPromote);
|
unitOfWork.AppUserReadingProfileRepository.Update(profileToPromote);
|
||||||
|
|
||||||
await unitOfWork.CommitAsync();
|
await unitOfWork.CommitAsync();
|
||||||
|
|
||||||
return mapper.Map<UserReadingProfileDto>(profileToPromote);
|
return mapper.Map<UserReadingProfileDto>(profileToPromote);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string EnsureUniqueProfileName(IList<AppUserReadingProfile> allUserProfiles, string name)
|
||||||
|
{
|
||||||
|
var counter = 1;
|
||||||
|
var newName = name;
|
||||||
|
while (allUserProfiles.Any(p => p.Name == newName))
|
||||||
|
{
|
||||||
|
newName = $"{name} ({counter})";
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
|
||||||
// var profile = await unitOfWork.AppUserReadingProfileRepository.GetUserProfile(userId, profileId);
|
return newName;
|
||||||
// if (profile == null) throw new KavitaException("profile-does-not-exist");
|
|
||||||
//
|
|
||||||
// if (profile.Kind != ReadingProfileKind.Implicit) throw new KavitaException("cannot-promote-non-implicit-profile");
|
|
||||||
//
|
|
||||||
// // Implicit profiles are only bound to one profile
|
|
||||||
// var series = await unitOfWork.SeriesRepository.GetSeriesByIdAsync(profile.SeriesIds[0]);
|
|
||||||
// if (series == null) throw new KavitaException("series-doesnt-exist"); // Shouldn't happen
|
|
||||||
//
|
|
||||||
// await RemoveSeriesFromUserProfiles(userId, [series.Id]);
|
|
||||||
//
|
|
||||||
// profile.Kind = ReadingProfileKind.User;
|
|
||||||
// profile.Name = await localizationService.Translate(userId, "generated-reading-profile-name", series.Name);
|
|
||||||
// profile.NormalizedName = profile.Name.ToNormalized();
|
|
||||||
//
|
|
||||||
// unitOfWork.AppUserReadingProfileRepository.Update(profile);
|
|
||||||
// await unitOfWork.CommitAsync();
|
|
||||||
//
|
|
||||||
// return mapper.Map<UserReadingProfileDto>(profile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<UserReadingProfileDto> UpdateImplicitReadingProfile(int userId, int seriesId, UserReadingProfileDto dto)
|
public async Task<UserReadingProfileDto> UpdateImplicitReadingProfile(int userId, int seriesId, UserReadingProfileDto dto)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue