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.
78 lines
2.9 KiB
78 lines
2.9 KiB
using Dapper; |
|
using ErsatzTV.Core.Interfaces.Repositories; |
|
using ErsatzTV.Core.Scripting; |
|
using Microsoft.EntityFrameworkCore; |
|
|
|
namespace ErsatzTV.Infrastructure.Data.Repositories; |
|
|
|
public class StreamSelectorRepository : IStreamSelectorRepository |
|
{ |
|
private readonly IDbContextFactory<TvContext> _dbContextFactory; |
|
|
|
public StreamSelectorRepository(IDbContextFactory<TvContext> dbContextFactory) => |
|
_dbContextFactory = dbContextFactory; |
|
|
|
public async Task<EpisodeAudioStreamSelectorData> GetEpisodeData(int episodeId) |
|
{ |
|
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(); |
|
|
|
dynamic episodeData = await dbContext.Connection.QuerySingleAsync( |
|
@"select |
|
SM.Id AS ShowMetadataId, |
|
SM.Title as ShowTitle, |
|
S.SeasonNumber, |
|
EM.EpisodeNumber, |
|
EM.Id as EpisodeMetadataId |
|
from EpisodeMetadata EM |
|
inner join Episode E on EM.EpisodeId = E.Id |
|
inner join Season S on S.Id = E.SeasonId |
|
inner join ShowMetadata SM on S.ShowId = SM.ShowId |
|
where EpisodeId = @Id", |
|
new { Id = episodeId }); |
|
|
|
string[] showGuids = await dbContext.Connection |
|
.QueryAsync<string>( |
|
@"SELECT Guid FROM MetadataGuid WHERE ShowMetadataId = @Id", |
|
new { Id = (int)episodeData.ShowMetadataId }) |
|
.MapT(FormatGuid) |
|
.Map(result => result.ToArray()); |
|
|
|
string[] episodeGuids = await dbContext.Connection |
|
.QueryAsync<string>( |
|
@"SELECT Guid FROM MetadataGuid WHERE EpisodeMetadataId = @Id", |
|
new { Id = (int)episodeData.EpisodeMetadataId }) |
|
.MapT(FormatGuid) |
|
.Map(result => result.ToArray()); |
|
|
|
return new EpisodeAudioStreamSelectorData( |
|
(string)episodeData.ShowTitle, |
|
showGuids, |
|
(int)episodeData.SeasonNumber, |
|
(int)episodeData.EpisodeNumber, |
|
episodeGuids); |
|
} |
|
|
|
public async Task<MovieAudioStreamSelectorData> GetMovieData(int movieId) |
|
{ |
|
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(); |
|
|
|
dynamic movieData = await dbContext.Connection.QuerySingleAsync( |
|
@"select |
|
MM.Id AS MovieMetadataId, |
|
MM.Title as Title |
|
from MovieMetadata MM |
|
where MovieId = @Id", |
|
new { Id = movieId }); |
|
|
|
string[] movieGuids = await dbContext.Connection |
|
.QueryAsync<string>( |
|
@"SELECT Guid FROM MetadataGuid WHERE MovieMetadataId = @Id", |
|
new { Id = (int)movieData.MovieMetadataId }) |
|
.MapT(FormatGuid) |
|
.Map(result => result.ToArray()); |
|
|
|
return new MovieAudioStreamSelectorData(movieData.Title, movieGuids); |
|
} |
|
|
|
private static string FormatGuid(string guid) => guid.Replace("://", "_"); |
|
}
|
|
|