Skip to content

Commit

Permalink
fix: delete preferred image if image is disabled
Browse files Browse the repository at this point in the history
Delete any and all preferred image overrides set to an image that is being disabled.
  • Loading branch information
revam committed Jan 14, 2025
1 parent 252cb62 commit fb9c86a
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@ public class AniDB_Anime_PreferredImageRepository(DatabaseFactory databaseFactor
{
private PocoIndex<int, AniDB_Anime_PreferredImage, int>? _animeIDs;

private PocoIndex<int, AniDB_Anime_PreferredImage, (DataSourceType, ImageEntityType, int)>? _imageTypes;

protected override int SelectKey(AniDB_Anime_PreferredImage entity)
=> entity.AniDB_Anime_PreferredImageID;

public override void PopulateIndexes()
{
_animeIDs = new(Cache, a => a.AnidbAnimeID);
_imageTypes = new(Cache, a => (a.ImageSource, a.ImageType, a.ImageID));
}

public AniDB_Anime_PreferredImage? GetByAnidbAnimeIDAndType(int animeID, ImageEntityType imageType)
Expand All @@ -27,6 +30,9 @@ public override void PopulateIndexes()
public AniDB_Anime_PreferredImage? GetByAnidbAnimeIDAndTypeAndSource(int animeID, ImageEntityType imageType, DataSourceType imageSource)
=> GetByAnimeID(animeID).FirstOrDefault(a => a.ImageType == imageType && a.ImageSource == imageSource);

public List<AniDB_Anime_PreferredImage> GetByAnimeID(int animeID)
public IReadOnlyList<AniDB_Anime_PreferredImage> GetByAnimeID(int animeID)
=> ReadLock(() => _animeIDs!.GetMultiple(animeID));

public IReadOnlyList<AniDB_Anime_PreferredImage> GetByImageSourceAndTypeAndID(DataSourceType imageSource, ImageEntityType imageType, int imageID)
=> ReadLock(() => _imageTypes!.GetMultiple((imageSource, imageType, imageID)));
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@ public class AniDB_Episode_PreferredImageRepository(DatabaseFactory databaseFact
{
private PocoIndex<int, AniDB_Episode_PreferredImage, int>? _episodeIDs;

private PocoIndex<int, AniDB_Episode_PreferredImage, (DataSourceType, ImageEntityType, int)>? _imageTypes;

protected override int SelectKey(AniDB_Episode_PreferredImage entity)
=> entity.AniDB_Episode_PreferredImageID;

public override void PopulateIndexes()
{
_episodeIDs = new(Cache, a => a.AnidbEpisodeID);
_imageTypes = new(Cache, a => (a.ImageSource, a.ImageType, a.ImageID));
}

public AniDB_Episode_PreferredImage? GetByAnidbEpisodeIDAndType(int episodeID, ImageEntityType imageType)
Expand All @@ -27,6 +30,9 @@ public override void PopulateIndexes()
public AniDB_Episode_PreferredImage? GetByAnidbEpisodeIDAndTypeAndSource(int episodeID, ImageEntityType imageType, DataSourceType imageSource)
=> GetByEpisodeID(episodeID).FirstOrDefault(a => a.ImageType == imageType && a.ImageSource == imageSource);

public List<AniDB_Episode_PreferredImage> GetByEpisodeID(int episodeId)
public IReadOnlyList<AniDB_Episode_PreferredImage> GetByEpisodeID(int episodeId)
=> ReadLock(() => _episodeIDs!.GetMultiple(episodeId));

public IReadOnlyList<AniDB_Episode_PreferredImage> GetByImageSourceAndTypeAndID(DataSourceType imageSource, ImageEntityType imageType, int imageID)
=> ReadLock(() => _imageTypes!.GetMultiple((imageSource, imageType, imageID)));
}
8 changes: 8 additions & 0 deletions Shoko.Server/Utilities/ImageUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,14 @@ public static bool SetEnabled(DataSourceType dataSource, ImageEntityType imageTy
return false;
}

if (!value)
{
var animePreferredImages = RepoFactory.AniDB_Anime_PreferredImage.GetByImageSourceAndTypeAndID(dataSource, imageType, imageId);
RepoFactory.AniDB_Anime_PreferredImage.Delete(animePreferredImages);
var episodePreferredImages = RepoFactory.AniDB_Episode_PreferredImage.GetByImageSourceAndTypeAndID(dataSource, imageType, imageId);
RepoFactory.AniDB_Episode_PreferredImage.Delete(episodePreferredImages);
}

var scheduler = _schedulerFactory.GetScheduler().ConfigureAwait(false).GetAwaiter().GetResult();
foreach (var animeID in animeIDs)
scheduler.StartJob<RefreshAnimeStatsJob>(a => a.AnimeID = animeID).GetAwaiter().GetResult();
Expand Down

0 comments on commit fb9c86a

Please sign in to comment.