mirror of https://github.com/lidarr/Lidarr
Support for Artist Disambiguation and Type
This commit is contained in:
parent
6e4638f7b1
commit
ed3b47d76a
|
@ -48,7 +48,8 @@ class AddNewArtistSearchResult extends Component {
|
|||
artistName,
|
||||
nameSlug,
|
||||
year,
|
||||
network,
|
||||
disambiguation,
|
||||
artistType,
|
||||
status,
|
||||
overview,
|
||||
albumCount,
|
||||
|
@ -59,10 +60,10 @@ class AddNewArtistSearchResult extends Component {
|
|||
} = this.props;
|
||||
|
||||
const linkProps = isExistingArtist ? { to: `/artist/${nameSlug}` } : { onPress: this.onPress };
|
||||
let seasons = '1 Season';
|
||||
let albums = '1 Album';
|
||||
|
||||
if (albumCount > 1) {
|
||||
seasons = `${albumCount} Seasons`;
|
||||
albums = `${albumCount} Albums`;
|
||||
}
|
||||
|
||||
return (
|
||||
|
@ -88,6 +89,11 @@ class AddNewArtistSearchResult extends Component {
|
|||
<span className={styles.year}>({year})</span>
|
||||
}
|
||||
|
||||
{
|
||||
!!disambiguation &&
|
||||
<span className={styles.year}>({disambiguation})</span>
|
||||
}
|
||||
|
||||
{
|
||||
isExistingArtist &&
|
||||
<Icon
|
||||
|
@ -108,16 +114,16 @@ class AddNewArtistSearchResult extends Component {
|
|||
</Label>
|
||||
|
||||
{
|
||||
!!network &&
|
||||
!!artistType &&
|
||||
<Label size={sizes.LARGE}>
|
||||
{network}
|
||||
{artistType}
|
||||
</Label>
|
||||
}
|
||||
|
||||
{
|
||||
!!albumCount &&
|
||||
<Label size={sizes.LARGE}>
|
||||
{seasons}
|
||||
{albums}
|
||||
</Label>
|
||||
}
|
||||
|
||||
|
@ -156,7 +162,8 @@ AddNewArtistSearchResult.propTypes = {
|
|||
artistName: PropTypes.string.isRequired,
|
||||
nameSlug: PropTypes.string.isRequired,
|
||||
year: PropTypes.number,
|
||||
network: PropTypes.string,
|
||||
disambiguation: PropTypes.string,
|
||||
artistType: PropTypes.string,
|
||||
status: PropTypes.string.isRequired,
|
||||
overview: PropTypes.string,
|
||||
albumCount: PropTypes.number,
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.overview {
|
||||
.disambiguation {
|
||||
margin-right: 5px;
|
||||
color: $disabledColor;
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import styles from './ImportArtistName.css';
|
|||
function ImportArtistName(props) {
|
||||
const {
|
||||
artistName,
|
||||
disambiguation,
|
||||
// year,
|
||||
isExistingArtist
|
||||
} = props;
|
||||
|
@ -16,6 +17,9 @@ function ImportArtistName(props) {
|
|||
<div className={styles.artistName}>
|
||||
{artistName}
|
||||
</div>
|
||||
<div className={styles.disambiguation}>
|
||||
{disambiguation}
|
||||
</div>
|
||||
|
||||
{
|
||||
isExistingArtist &&
|
||||
|
@ -31,6 +35,7 @@ function ImportArtistName(props) {
|
|||
|
||||
ImportArtistName.propTypes = {
|
||||
artistName: PropTypes.string.isRequired,
|
||||
disambiguation: PropTypes.string,
|
||||
// year: PropTypes.number.isRequired,
|
||||
isExistingArtist: PropTypes.bool.isRequired
|
||||
};
|
||||
|
|
|
@ -19,7 +19,7 @@ class ImportArtistSearchResult extends Component {
|
|||
render() {
|
||||
const {
|
||||
artistName,
|
||||
// overview,
|
||||
disambiguation,
|
||||
// year,
|
||||
isExistingArtist
|
||||
} = this.props;
|
||||
|
@ -31,7 +31,7 @@ class ImportArtistSearchResult extends Component {
|
|||
>
|
||||
<ImportArtistName
|
||||
artistName={artistName}
|
||||
// overview={overview}
|
||||
disambiguation={disambiguation}
|
||||
// year={year}
|
||||
isExistingArtist={isExistingArtist}
|
||||
/>
|
||||
|
@ -43,7 +43,7 @@ class ImportArtistSearchResult extends Component {
|
|||
ImportArtistSearchResult.propTypes = {
|
||||
foreignArtistId: PropTypes.string.isRequired,
|
||||
artistName: PropTypes.string.isRequired,
|
||||
// overview: PropTypes.string.isRequired,
|
||||
disambiguation: PropTypes.string,
|
||||
// year: PropTypes.number.isRequired,
|
||||
isExistingArtist: PropTypes.bool.isRequired,
|
||||
onPress: PropTypes.func.isRequired
|
||||
|
|
|
@ -158,7 +158,7 @@ class ImportArtistSelectArtist extends Component {
|
|||
isPopulated && selectedArtist &&
|
||||
<ImportArtistName
|
||||
artistName={selectedArtist.artistName}
|
||||
overview={selectedArtist.overview}
|
||||
disambiguation={selectedArtist.disambiguation}
|
||||
// year={selectedArtist.year}
|
||||
isExistingArtist={isExistingArtist}
|
||||
/>
|
||||
|
@ -229,7 +229,7 @@ class ImportArtistSelectArtist extends Component {
|
|||
key={item.foreignArtistId}
|
||||
foreignArtistId={item.foreignArtistId}
|
||||
artistName={item.artistName}
|
||||
// overview={item.overview}
|
||||
disambiguation={item.disambiguation}
|
||||
// year={item.year}
|
||||
onPress={this.onArtistSelect}
|
||||
/>
|
||||
|
|
|
@ -24,6 +24,15 @@ function ArtistIndexSortMenu(props) {
|
|||
Name
|
||||
</SortMenuItem>
|
||||
|
||||
<SortMenuItem
|
||||
name="artistType"
|
||||
sortKey={sortKey}
|
||||
sortDirection={sortDirection}
|
||||
onPress={onSortSelect}
|
||||
>
|
||||
Type
|
||||
</SortMenuItem>
|
||||
|
||||
<SortMenuItem
|
||||
name="qualityProfileId"
|
||||
sortKey={sortKey}
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
flex: 0 0 150px;
|
||||
}
|
||||
|
||||
.artistType,
|
||||
.trackCount {
|
||||
composes: headerCell from 'Components/Table/VirtualTableHeaderCell.css';
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
flex-direction: column;
|
||||
}
|
||||
|
||||
.artistType,
|
||||
.trackCount {
|
||||
composes: cell from 'Components/Table/Cells/VirtualTableRowCell.css';
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ class ArtistIndexRow extends Component {
|
|||
status,
|
||||
artistName,
|
||||
nameSlug,
|
||||
artistType,
|
||||
qualityProfile,
|
||||
languageProfile,
|
||||
nextAiring,
|
||||
|
@ -129,6 +130,17 @@ class ArtistIndexRow extends Component {
|
|||
);
|
||||
}
|
||||
|
||||
if (name === 'artistType') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
key={name}
|
||||
className={styles[name]}
|
||||
>
|
||||
{artistType}
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'qualityProfileId') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
|
@ -282,23 +294,6 @@ class ArtistIndexRow extends Component {
|
|||
);
|
||||
}
|
||||
|
||||
// if (name === 'useSceneNumbering') {
|
||||
// return (
|
||||
// <VirtualTableRowCell
|
||||
// key={name}
|
||||
// className={styles[name]}
|
||||
// >
|
||||
// <CheckInput
|
||||
// className={styles.checkInput}
|
||||
// name="useSceneNumbering"
|
||||
// value={useSceneNumbering}
|
||||
// isDisabled={true}
|
||||
// onChange={this.onUseSceneNumberingChange}
|
||||
// />
|
||||
// </VirtualTableRowCell>
|
||||
// );
|
||||
// }
|
||||
|
||||
if (name === 'actions') {
|
||||
return (
|
||||
<VirtualTableRowCell
|
||||
|
@ -349,6 +344,7 @@ ArtistIndexRow.propTypes = {
|
|||
status: PropTypes.string.isRequired,
|
||||
artistName: PropTypes.string.isRequired,
|
||||
nameSlug: PropTypes.string.isRequired,
|
||||
artistType: PropTypes.string,
|
||||
qualityProfile: PropTypes.object.isRequired,
|
||||
languageProfile: PropTypes.object.isRequired,
|
||||
nextAiring: PropTypes.string,
|
||||
|
|
|
@ -45,6 +45,13 @@ export const defaultState = {
|
|||
isVisible: true,
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'artistType',
|
||||
label: 'Type',
|
||||
isSortable: true,
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'qualityProfileId',
|
||||
label: 'Quality Profile',
|
||||
|
|
|
@ -6,7 +6,7 @@ function getNewSeries(series, payload) {
|
|||
monitor,
|
||||
qualityProfileId,
|
||||
languageProfileId,
|
||||
// seriesType,
|
||||
artistType,
|
||||
albumFolder,
|
||||
tags,
|
||||
searchForMissingAlbums = false
|
||||
|
@ -24,7 +24,7 @@ function getNewSeries(series, payload) {
|
|||
series.qualityProfileId = qualityProfileId;
|
||||
series.languageProfileId = languageProfileId;
|
||||
series.rootFolderPath = rootFolderPath;
|
||||
// series.seriesType = seriesType;
|
||||
series.artistType = artistType;
|
||||
series.albumFolder = albumFolder;
|
||||
series.tags = tags;
|
||||
|
||||
|
|
|
@ -14,65 +14,11 @@ namespace Lidarr.Api.V3.Artist
|
|||
//Todo: Is there an easy way to keep IgnoreArticlesWhenSorting in sync between, Series, History, Missing?
|
||||
//Todo: We should get the entire Profile instead of ID and Name separately
|
||||
|
||||
////View Only
|
||||
//public string Title { get; set; }
|
||||
////public List<AlternateTitleResource> AlternateTitles { get; set; }
|
||||
//public string SortTitle { get; set; }
|
||||
|
||||
//public int SeasonCount
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// if (Seasons == null) return 0;
|
||||
|
||||
// return Seasons.Where(s => s.SeasonNumber > 0).Count();
|
||||
// }
|
||||
//}
|
||||
|
||||
//public int? TotalEpisodeCount { get; set; }
|
||||
//public int? EpisodeCount { get; set; }
|
||||
//public int? EpisodeFileCount { get; set; }
|
||||
//public long? SizeOnDisk { get; set; }
|
||||
|
||||
//// V3: replace with Ended
|
||||
|
||||
public ArtistStatusType Status { get; set; }
|
||||
|
||||
public bool Ended => Status == ArtistStatusType.Ended;
|
||||
|
||||
//public string ProfileName { get; set; }
|
||||
//public string Overview { get; set; }
|
||||
//public DateTime? NextAiring { get; set; }
|
||||
//public DateTime? PreviousAiring { get; set; }
|
||||
//public string Network { get; set; }
|
||||
//public string AirTime { get; set; }
|
||||
//public List<MediaCover> Images { get; set; }
|
||||
|
||||
//public string RemotePoster { get; set; }
|
||||
//public int Year { get; set; }
|
||||
|
||||
////View & Edit
|
||||
//public string Path { get; set; }
|
||||
//public int QualityProfileId { get; set; }
|
||||
//public int LanguageProfileId { get; set; }
|
||||
|
||||
////Editing Only
|
||||
//public bool SeasonFolder { get; set; }
|
||||
//public bool Monitored { get; set; }
|
||||
|
||||
//public DateTime? FirstAired { get; set; }
|
||||
public DateTime? LastInfoSync { get; set; }
|
||||
////public SeriesTypes SeriesType { get; set; }
|
||||
//public string CleanTitle { get; set; }
|
||||
//public string ImdbId { get; set; }
|
||||
//public string TitleSlug { get; set; }
|
||||
//public string RootFolderPath { get; set; }
|
||||
//public string Certification { get; set; }
|
||||
//public List<string> Genres { get; set; }
|
||||
//public HashSet<int> Tags { get; set; }
|
||||
//public DateTime Added { get; set; }
|
||||
//public AddSeriesOptions AddOptions { get; set; }
|
||||
//public Ratings Ratings { get; set; }
|
||||
|
||||
public string ArtistName { get; set; }
|
||||
public string ForeignArtistId { get; set; }
|
||||
|
@ -81,6 +27,8 @@ namespace Lidarr.Api.V3.Artist
|
|||
public int DiscogsId { get; set; }
|
||||
public string AllMusicId { get; set; }
|
||||
public string Overview { get; set; }
|
||||
public string ArtistType { get; set; }
|
||||
public string Disambiguation { get; set; }
|
||||
public List<Links> Links { get; set; }
|
||||
|
||||
public int? AlbumCount { get; set; }
|
||||
|
@ -136,10 +84,9 @@ namespace Lidarr.Api.V3.Artist
|
|||
|
||||
Status = model.Status,
|
||||
Overview = model.Overview,
|
||||
//NextAiring
|
||||
//PreviousAiring
|
||||
//Network = model.Network,
|
||||
//AirTime = model.AirTime,
|
||||
ArtistType = model.ArtistType,
|
||||
Disambiguation = model.Disambiguation,
|
||||
|
||||
Images = model.Images,
|
||||
|
||||
Albums = model.Albums.ToResource(),
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
using FluentMigrator;
|
||||
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration
|
||||
{
|
||||
[Migration(119)]
|
||||
public class artist_type : NzbDroneMigrationBase
|
||||
{
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Alter.Table("Artists")
|
||||
.AddColumn("ArtistType").AsString().Nullable()
|
||||
.AddColumn("Disambiguation").AsString().Nullable();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -14,6 +14,8 @@ namespace NzbDrone.Core.MetadataSource.SkyHook.Resource
|
|||
public List<string> Genres { get; set; }
|
||||
public string AristUrl { get; set; }
|
||||
public string Overview { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Disambiguation { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<ImageResource> Images { get; set; }
|
||||
public List<LinkResource> Links { get; set; }
|
||||
|
|
|
@ -176,7 +176,9 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
|
|||
artist.Overview = resource.Overview;
|
||||
artist.NameSlug = Parser.Parser.CleanArtistTitle(artist.Name);
|
||||
artist.CleanName = Parser.Parser.CleanArtistTitle(artist.Name);
|
||||
artist.SortName = SeriesTitleNormalizer.Normalize(artist.Name, 0);
|
||||
artist.SortName = Parser.Parser.NormalizeTitle(artist.Name);
|
||||
artist.Disambiguation = resource.Disambiguation;
|
||||
artist.ArtistType = resource.Type;
|
||||
artist.Images = resource.Images.Select(MapImage).ToList();
|
||||
artist.Status = MapArtistStatus(resource.Status);
|
||||
artist.Ratings = MapRatings(resource.Rating);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
|
|
@ -34,6 +34,8 @@ namespace NzbDrone.Core.Music
|
|||
public string CleanName { get; set; }
|
||||
public string SortName { get; set; }
|
||||
public string Overview { get; set; }
|
||||
public string Disambiguation { get; set; }
|
||||
public string ArtistType { get; set; }
|
||||
public bool Monitored { get; set; }
|
||||
public bool AlbumFolder { get; set; }
|
||||
public DateTime? LastInfoSync { get; set; }
|
||||
|
|
|
@ -80,6 +80,8 @@ namespace NzbDrone.Core.Music
|
|||
artist.Images = artistInfo.Images;
|
||||
artist.Genres = artistInfo.Genres;
|
||||
artist.Links = artistInfo.Links;
|
||||
artist.Disambiguation = artistInfo.Disambiguation;
|
||||
artist.ArtistType = artistInfo.ArtistType;
|
||||
|
||||
try
|
||||
{
|
||||
|
|
|
@ -293,6 +293,7 @@
|
|||
</Compile>
|
||||
<Compile Include="Datastore\Migration\105_rename_torrent_downloadstation.cs" />
|
||||
<Compile Include="Datastore\Migration\111_create_language_profiles.cs" />
|
||||
<Compile Include="Datastore\Migration\119_artist_type.cs" />
|
||||
<Compile Include="Datastore\Migration\118_history_trackid.cs" />
|
||||
<Compile Include="Datastore\Migration\117_artist_links.cs" />
|
||||
<Compile Include="Datastore\Migration\116_change_drone_factory_variable_name.cs" />
|
||||
|
|
Loading…
Reference in New Issue