mirror of
https://github.com/Readarr/Readarr.git
synced 2026-04-21 22:04:31 -04:00
Many UI and API Improvements (#8)
This fixes and implements many items on the ArtistIndex Page and ArtistDetailPage * Create ArtistStatistics Core Module and tie into API. * Create Members Class and tie into ArtistModel and Artist API resource. * Finish Out Album API resources and pass to ArtistDetailPage. * Finish Out Track and TrackFile API resources and pass to ArtistDetailPage. * Lots of UI work on Artist Detail Page to get Albums and Track list working. * Add Cover and Disc Image Types to MediaCover Class * Remove AddSeries UI Flow, since we have replaced with AddArtist (Cleanup)
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using NzbDrone.Core.Datastore;
|
||||
|
||||
namespace NzbDrone.Core.ArtistStats
|
||||
{
|
||||
public interface IArtistStatisticsRepository
|
||||
{
|
||||
List<AlbumStatistics> ArtistStatistics();
|
||||
List<AlbumStatistics> ArtistStatistics(int artistId);
|
||||
}
|
||||
|
||||
public class ArtistStatisticsRepository : IArtistStatisticsRepository
|
||||
{
|
||||
private readonly IMainDatabase _database;
|
||||
|
||||
public ArtistStatisticsRepository(IMainDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
|
||||
public List<AlbumStatistics> ArtistStatistics()
|
||||
{
|
||||
var mapper = _database.GetDataMapper();
|
||||
|
||||
mapper.AddParameter("currentDate", DateTime.UtcNow);
|
||||
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(GetSelectClause());
|
||||
sb.AppendLine(GetTrackFilesJoin());
|
||||
sb.AppendLine(GetGroupByClause());
|
||||
var queryText = sb.ToString();
|
||||
|
||||
return mapper.Query<AlbumStatistics>(queryText);
|
||||
}
|
||||
|
||||
public List<AlbumStatistics> ArtistStatistics(int artistId)
|
||||
{
|
||||
var mapper = _database.GetDataMapper();
|
||||
|
||||
mapper.AddParameter("currentDate", DateTime.UtcNow);
|
||||
mapper.AddParameter("artistId", artistId);
|
||||
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(GetSelectClause());
|
||||
sb.AppendLine(GetTrackFilesJoin());
|
||||
sb.AppendLine("WHERE Tracks.ArtistId = @artistId");
|
||||
sb.AppendLine(GetGroupByClause());
|
||||
var queryText = sb.ToString();
|
||||
|
||||
return mapper.Query<AlbumStatistics>(queryText);
|
||||
}
|
||||
|
||||
private string GetSelectClause()
|
||||
{
|
||||
return @"SELECT Tracks.*, SUM(TrackFiles.Size) as SizeOnDisk FROM
|
||||
(SELECT
|
||||
Tracks.ArtistId,
|
||||
Tracks.AlbumId,
|
||||
SUM(CASE WHEN TrackFileId > 0 THEN 1 ELSE 0 END) AS TotalTrackCount,
|
||||
SUM(CASE WHEN Monitored = 1 OR TrackFileId > 0 THEN 1 ELSE 0 END) AS TrackCount,
|
||||
SUM(CASE WHEN TrackFileId > 0 THEN 1 ELSE 0 END) AS TrackFileCount
|
||||
FROM Tracks
|
||||
GROUP BY Tracks.ArtistId, Tracks.AlbumId) as Tracks";
|
||||
}
|
||||
|
||||
private string GetGroupByClause()
|
||||
{
|
||||
return "GROUP BY Tracks.ArtistId, Tracks.AlbumId";
|
||||
}
|
||||
|
||||
private string GetTrackFilesJoin()
|
||||
{
|
||||
return @"LEFT OUTER JOIN TrackFiles
|
||||
ON TrackFiles.ArtistId = Tracks.ArtistId
|
||||
AND TrackFiles.AlbumId = Tracks.AlbumId";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user