mirror of https://github.com/ErsatzTV/ErsatzTV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.9 KiB
76 lines
2.9 KiB
using Dapper; |
|
using ErsatzTV.Core.Domain; |
|
using ErsatzTV.Core.Interfaces.Repositories; |
|
using Microsoft.EntityFrameworkCore; |
|
|
|
namespace ErsatzTV.Infrastructure.Data.Repositories; |
|
|
|
public class PlexMovieRepository : IPlexMovieRepository |
|
{ |
|
private readonly IDbContextFactory<TvContext> _dbContextFactory; |
|
|
|
public PlexMovieRepository(IDbContextFactory<TvContext> dbContextFactory) => _dbContextFactory = dbContextFactory; |
|
|
|
public async Task<bool> FlagNormal(PlexLibrary library, PlexMovie movie) |
|
{ |
|
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(); |
|
|
|
movie.State = MediaItemState.Normal; |
|
|
|
return await dbContext.Connection.ExecuteAsync( |
|
@"UPDATE MediaItem SET State = 0 WHERE Id IN |
|
(SELECT PlexMovie.Id FROM PlexMovie |
|
INNER JOIN MediaItem MI ON MI.Id = PlexMovie.Id |
|
INNER JOIN LibraryPath LP on MI.LibraryPathId = LP.Id AND LibraryId = @LibraryId |
|
WHERE PlexMovie.Key = @Key)", |
|
new { LibraryId = library.Id, movie.Key }).Map(count => count > 0); |
|
} |
|
|
|
public async Task<Option<int>> FlagUnavailable(PlexLibrary library, PlexMovie movie) |
|
{ |
|
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(); |
|
|
|
movie.State = MediaItemState.Unavailable; |
|
|
|
Option<int> maybeId = await dbContext.Connection.ExecuteScalarAsync<int>( |
|
@"SELECT PlexMovie.Id FROM PlexMovie |
|
INNER JOIN MediaItem MI ON MI.Id = PlexMovie.Id |
|
INNER JOIN LibraryPath LP on MI.LibraryPathId = LP.Id AND LibraryId = @LibraryId |
|
WHERE PlexMovie.Key = @Key", |
|
new { LibraryId = library.Id, movie.Key }); |
|
|
|
foreach (int id in maybeId) |
|
{ |
|
return await dbContext.Connection.ExecuteAsync( |
|
@"UPDATE MediaItem SET State = 2 WHERE Id = @Id", |
|
new { Id = id }).Map(count => count > 0 ? Some(id) : None); |
|
} |
|
|
|
return None; |
|
} |
|
|
|
public async Task<List<int>> FlagFileNotFound(PlexLibrary library, List<string> plexMovieKeys) |
|
{ |
|
if (plexMovieKeys.Count == 0) |
|
{ |
|
return new List<int>(); |
|
} |
|
|
|
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(); |
|
|
|
List<int> ids = await dbContext.Connection.QueryAsync<int>( |
|
@"SELECT M.Id |
|
FROM MediaItem M |
|
INNER JOIN PlexMovie ON PlexMovie.Id = M.Id |
|
INNER JOIN LibraryPath LP on M.LibraryPathId = LP.Id AND LP.LibraryId = @LibraryId |
|
WHERE PlexMovie.Key IN @MovieKeys", |
|
new { LibraryId = library.Id, MovieKeys = plexMovieKeys }) |
|
.Map(result => result.ToList()); |
|
|
|
await dbContext.Connection.ExecuteAsync( |
|
@"UPDATE MediaItem SET State = 1 WHERE Id IN @Ids", |
|
new { Ids = ids }); |
|
|
|
return ids; |
|
} |
|
}
|
|
|