Album Folder
@@ -244,16 +253,15 @@ ImportArtistFooter.propTypes = {
defaultMonitor: PropTypes.string.isRequired,
defaultQualityProfileId: PropTypes.number,
defaultLanguageProfileId: PropTypes.number,
+ defaultMetadataProfileId: PropTypes.number,
defaultAlbumFolder: PropTypes.bool.isRequired,
- defaultPrimaryAlbumTypes: PropTypes.arrayOf(PropTypes.string).isRequired,
- defaultSecondaryAlbumTypes: PropTypes.arrayOf(PropTypes.string).isRequired,
isMonitorMixed: PropTypes.bool.isRequired,
isQualityProfileIdMixed: PropTypes.bool.isRequired,
isLanguageProfileIdMixed: PropTypes.bool.isRequired,
+ isMetadataProfileIdMixed: PropTypes.bool.isRequired,
isAlbumFolderMixed: PropTypes.bool.isRequired,
- isPrimaryAlbumTypesMixed: PropTypes.bool.isRequired,
- isSecondaryAlbumTypesMixed: PropTypes.bool.isRequired,
showLanguageProfile: PropTypes.bool.isRequired,
+ showMetadataProfile: PropTypes.bool.isRequired,
onInputChange: PropTypes.func.isRequired,
onImportPress: PropTypes.func.isRequired
};
diff --git a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooterConnector.js b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooterConnector.js
index 938efd916..bf3c901ec 100644
--- a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooterConnector.js
+++ b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooterConnector.js
@@ -19,9 +19,8 @@ function createMapStateToProps() {
monitor: defaultMonitor,
qualityProfileId: defaultQualityProfileId,
languageProfileId: defaultLanguageProfileId,
- albumFolder: defaultAlbumFolder,
- primaryAlbumTypes: defaultPrimaryAlbumTypes,
- secondaryAlbumTypes: defaultSecondaryAlbumTypes
+ metadataProfileId: defaultMetadataProfileId,
+ albumFolder: defaultAlbumFolder
} = addArtist.defaults;
const items = importArtist.items;
@@ -33,9 +32,8 @@ function createMapStateToProps() {
const isMonitorMixed = isMixed(items, selectedIds, defaultMonitor, 'monitor');
const isQualityProfileIdMixed = isMixed(items, selectedIds, defaultQualityProfileId, 'qualityProfileId');
const isLanguageProfileIdMixed = isMixed(items, selectedIds, defaultLanguageProfileId, 'languageProfileId');
+ const isMetadataProfileIdMixed = isMixed(items, selectedIds, defaultMetadataProfileId, 'metadataProfileId');
const isAlbumFolderMixed = isMixed(items, selectedIds, defaultAlbumFolder, 'albumFolder');
- const isPrimaryAlbumTypesMixed = isMixed(items, selectedIds, defaultPrimaryAlbumTypes, 'primaryAlbumTypes');
- const isSecondaryAlbumTypesMixed = isMixed(items, selectedIds, defaultSecondaryAlbumTypes, 'secondaryAlbumTypes');
return {
selectedCount: selectedIds.length,
@@ -44,15 +42,13 @@ function createMapStateToProps() {
defaultMonitor,
defaultQualityProfileId,
defaultLanguageProfileId,
+ defaultMetadataProfileId,
defaultAlbumFolder,
- defaultPrimaryAlbumTypes,
- defaultSecondaryAlbumTypes,
isMonitorMixed,
isQualityProfileIdMixed,
isLanguageProfileIdMixed,
- isAlbumFolderMixed,
- isPrimaryAlbumTypesMixed,
- isSecondaryAlbumTypesMixed
+ isMetadataProfileIdMixed,
+ isAlbumFolderMixed
};
}
);
diff --git a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistHeader.css b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistHeader.css
index a42c0c696..f43704565 100644
--- a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistHeader.css
+++ b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistHeader.css
@@ -12,7 +12,8 @@
}
.qualityProfile,
-.languageProfile {
+.languageProfile,
+.metadataProfile {
composes: headerCell from 'Components/Table/VirtualTableHeaderCell.css';
flex: 0 1 250px;
diff --git a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistHeader.js b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistHeader.js
index edb07beb4..f0ec10566 100644
--- a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistHeader.js
+++ b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistHeader.js
@@ -13,6 +13,7 @@ import styles from './ImportArtistHeader.css';
function ImportArtistHeader(props) {
const {
showLanguageProfile,
+ showMetadataProfile,
allSelected,
allUnselected,
onSelectAllChange
@@ -69,6 +70,16 @@ function ImportArtistHeader(props) {
}
+ {
+ showMetadataProfile &&
+
+ Metadata Profile
+
+ }
+
+
+
+
+
{
@@ -125,6 +123,7 @@ class ImportArtistTable extends Component {
items,
selectedState,
showLanguageProfile,
+ showMetadataProfile,
onSelectedChange
} = this.props;
@@ -136,6 +135,7 @@ class ImportArtistTable extends Component {
style={style}
rootFolderId={rootFolderId}
showLanguageProfile={showLanguageProfile}
+ showMetadataProfile={showMetadataProfile}
isSelected={selectedState[item.id]}
onSelectedChange={onSelectedChange}
id={item.id}
@@ -154,6 +154,7 @@ class ImportArtistTable extends Component {
isSmallScreen,
contentBody,
showLanguageProfile,
+ showMetadataProfile,
scrollTop,
onSelectAllChange,
onScroll
@@ -176,6 +177,7 @@ class ImportArtistTable extends Component {
header={
{
- primaryAlbumTypes.slice(0).map((albumType) => {
+ albumTypes.slice(0).map((albumType) => {
return (
);
@@ -546,7 +573,6 @@ ArtistDetails.propTypes = {
links: PropTypes.arrayOf(PropTypes.object).isRequired,
images: PropTypes.arrayOf(PropTypes.object).isRequired,
albums: PropTypes.arrayOf(PropTypes.object).isRequired,
- primaryAlbumTypes: PropTypes.arrayOf(PropTypes.string).isRequired,
alternateTitles: PropTypes.arrayOf(PropTypes.string).isRequired,
tags: PropTypes.arrayOf(PropTypes.number).isRequired,
isRefreshing: PropTypes.bool.isRequired,
diff --git a/frontend/src/Artist/Edit/EditArtistModalContent.js b/frontend/src/Artist/Edit/EditArtistModalContent.js
index ae45f6332..390170a49 100644
--- a/frontend/src/Artist/Edit/EditArtistModalContent.js
+++ b/frontend/src/Artist/Edit/EditArtistModalContent.js
@@ -24,6 +24,7 @@ class EditArtistModalContent extends Component {
item,
isSaving,
showLanguageProfile,
+ showMetadataProfile,
onInputChange,
onSavePress,
onModalClose,
@@ -36,6 +37,7 @@ class EditArtistModalContent extends Component {
albumFolder,
qualityProfileId,
languageProfileId,
+ metadataProfileId,
path,
tags
} = item;
@@ -99,6 +101,21 @@ class EditArtistModalContent extends Component {
}
+ {
+ showMetadataProfile &&
+
+ Metadata Profile
+
+
+
+ }
+
Path
@@ -155,6 +172,7 @@ EditArtistModalContent.propTypes = {
item: PropTypes.object.isRequired,
isSaving: PropTypes.bool.isRequired,
showLanguageProfile: PropTypes.bool.isRequired,
+ showMetadataProfile: PropTypes.bool.isRequired,
onInputChange: PropTypes.func.isRequired,
onSavePress: PropTypes.func.isRequired,
onModalClose: PropTypes.func.isRequired,
diff --git a/frontend/src/Artist/Edit/EditArtistModalContentConnector.js b/frontend/src/Artist/Edit/EditArtistModalContentConnector.js
index 8676584a3..2cadea5d5 100644
--- a/frontend/src/Artist/Edit/EditArtistModalContentConnector.js
+++ b/frontend/src/Artist/Edit/EditArtistModalContentConnector.js
@@ -12,8 +12,9 @@ function createMapStateToProps() {
return createSelector(
(state) => state.artist,
(state) => state.settings.languageProfiles,
+ (state) => state.settings.metadataProfiles,
createArtistSelector(),
- (artistState, languageProfiles, artist) => {
+ (artistState, languageProfiles, metadataProfiles, artist) => {
const {
isSaving,
saveError,
@@ -25,6 +26,7 @@ function createMapStateToProps() {
'albumFolder',
'qualityProfileId',
'languageProfileId',
+ 'metadataProfileId',
'path',
'tags'
]);
@@ -38,6 +40,7 @@ function createMapStateToProps() {
pendingChanges,
item: settings.settings,
showLanguageProfile: languageProfiles.items.length > 1,
+ showMetadataProfile: metadataProfiles.items.length > 1,
...settings
};
}
diff --git a/frontend/src/Artist/Editor/ArtistEditor.js b/frontend/src/Artist/Editor/ArtistEditor.js
index 17b0fa91a..1cd9c78f3 100644
--- a/frontend/src/Artist/Editor/ArtistEditor.js
+++ b/frontend/src/Artist/Editor/ArtistEditor.js
@@ -19,7 +19,7 @@ import ArtistEditorRowConnector from './ArtistEditorRowConnector';
import ArtistEditorFooter from './ArtistEditorFooter';
import OrganizeArtistModal from './Organize/OrganizeArtistModal';
-function getColumns(showLanguageProfile) {
+function getColumns(showLanguageProfile, showMetadataProfile) {
return [
{
name: 'status',
@@ -43,6 +43,12 @@ function getColumns(showLanguageProfile) {
isSortable: true,
isVisible: showLanguageProfile
},
+ {
+ name: 'metadataProfileId',
+ label: 'Metadata Profile',
+ isSortable: true,
+ isVisible: showMetadataProfile
+ },
{
name: 'albumFolder',
label: 'Album Folder',
@@ -78,7 +84,7 @@ class ArtistEditor extends Component {
lastToggled: null,
selectedState: {},
isOrganizingArtistModalOpen: false,
- columns: getColumns(props.showLanguageProfile)
+ columns: getColumns(props.showLanguageProfile, props.showMetadataProfile)
};
}
@@ -155,6 +161,7 @@ class ArtistEditor extends Component {
deleteError,
isOrganizingArtist,
showLanguageProfile,
+ showMetadataProfile,
onSortPress,
onFilterSelect
} = this.props;
@@ -285,6 +292,7 @@ class ArtistEditor extends Component {
deleteError={deleteError}
isOrganizingArtist={isOrganizingArtist}
showLanguageProfile={showLanguageProfile}
+ showMetadataProfile={showMetadataProfile}
onSaveSelected={this.onSaveSelected}
onOrganizeArtistPress={this.onOrganizeArtistPress}
/>
@@ -314,6 +322,7 @@ ArtistEditor.propTypes = {
deleteError: PropTypes.object,
isOrganizingArtist: PropTypes.bool.isRequired,
showLanguageProfile: PropTypes.bool.isRequired,
+ showMetadataProfile: PropTypes.bool.isRequired,
onSortPress: PropTypes.func.isRequired,
onFilterSelect: PropTypes.func.isRequired,
onSaveSelected: PropTypes.func.isRequired
diff --git a/frontend/src/Artist/Editor/ArtistEditorConnector.js b/frontend/src/Artist/Editor/ArtistEditorConnector.js
index e99e09861..55b859f58 100644
--- a/frontend/src/Artist/Editor/ArtistEditorConnector.js
+++ b/frontend/src/Artist/Editor/ArtistEditorConnector.js
@@ -12,12 +12,14 @@ import ArtistEditor from './ArtistEditor';
function createMapStateToProps() {
return createSelector(
(state) => state.settings.languageProfiles,
+ (state) => state.settings.metadataProfiles,
createClientSideCollectionSelector(),
createCommandSelector(commandNames.RENAME_ARTIST),
- (languageProfiles, artist, isOrganizingArtist) => {
+ (languageProfiles, metadataProfiles, artist, isOrganizingArtist) => {
return {
isOrganizingArtist,
showLanguageProfile: languageProfiles.items.length > 1,
+ showMetadataProfile: metadataProfiles.items.length > 1,
...artist
};
}
diff --git a/frontend/src/Artist/Editor/ArtistEditorFooter.js b/frontend/src/Artist/Editor/ArtistEditorFooter.js
index 382c5d092..13efff18f 100644
--- a/frontend/src/Artist/Editor/ArtistEditorFooter.js
+++ b/frontend/src/Artist/Editor/ArtistEditorFooter.js
@@ -3,6 +3,7 @@ import React, { Component } from 'react';
import { kinds } from 'Helpers/Props';
import SelectInput from 'Components/Form/SelectInput';
import LanguageProfileSelectInputConnector from 'Components/Form/LanguageProfileSelectInputConnector';
+import MetadataProfileSelectInputConnector from 'Components/Form/MetadataProfileSelectInputConnector';
import QualityProfileSelectInputConnector from 'Components/Form/QualityProfileSelectInputConnector';
import RootFolderSelectInputConnector from 'Components/Form/RootFolderSelectInputConnector';
import SpinnerButton from 'Components/Link/SpinnerButton';
@@ -26,6 +27,7 @@ class ArtistEditorFooter extends Component {
monitored: NO_CHANGE,
qualityProfileId: NO_CHANGE,
languageProfileId: NO_CHANGE,
+ metadataProfileId: NO_CHANGE,
albumFolder: NO_CHANGE,
rootFolderPath: NO_CHANGE,
savingTags: false,
@@ -45,6 +47,7 @@ class ArtistEditorFooter extends Component {
monitored: NO_CHANGE,
qualityProfileId: NO_CHANGE,
languageProfileId: NO_CHANGE,
+ metadataProfileId: NO_CHANGE,
albumFolder: NO_CHANGE,
rootFolderPath: NO_CHANGE,
savingTags: false
@@ -113,6 +116,7 @@ class ArtistEditorFooter extends Component {
isDeleting,
isOrganizingArtist,
showLanguageProfile,
+ showMetadataProfile,
onOrganizeArtistPress
} = this.props;
@@ -120,6 +124,7 @@ class ArtistEditorFooter extends Component {
monitored,
qualityProfileId,
languageProfileId,
+ metadataProfileId,
albumFolder,
rootFolderPath,
savingTags,
@@ -189,6 +194,24 @@ class ArtistEditorFooter extends Component {