diff --git a/frontend/src/Organize/OrganizePreviewModalContent.js b/frontend/src/Organize/OrganizePreviewModalContent.js
index 5e9124db6..061d623bd 100644
--- a/frontend/src/Organize/OrganizePreviewModalContent.js
+++ b/frontend/src/Organize/OrganizePreviewModalContent.js
@@ -74,7 +74,7 @@ class OrganizePreviewModalContent extends Component {
isPopulated,
error,
items,
- renameEpisodes,
+ renameTracks,
episodeFormat,
path,
onModalClose
@@ -109,7 +109,7 @@ class OrganizePreviewModalContent extends Component {
!isFetching && isPopulated && !items.length &&
{
- renameEpisodes ?
+ renameTracks ?
Success! My work is done, no files to rename.
:
Renaming is disabled, nothing to rename
}
@@ -191,7 +191,7 @@ OrganizePreviewModalContent.propTypes = {
error: PropTypes.object,
items: PropTypes.arrayOf(PropTypes.object).isRequired,
path: PropTypes.string.isRequired,
- renameEpisodes: PropTypes.bool,
+ renameTracks: PropTypes.bool,
episodeFormat: PropTypes.string,
onOrganizePress: PropTypes.func.isRequired,
onModalClose: PropTypes.func.isRequired
diff --git a/frontend/src/Organize/OrganizePreviewModalContentConnector.js b/frontend/src/Organize/OrganizePreviewModalContentConnector.js
index 6fbd2b9eb..4efa06089 100644
--- a/frontend/src/Organize/OrganizePreviewModalContentConnector.js
+++ b/frontend/src/Organize/OrganizePreviewModalContentConnector.js
@@ -19,7 +19,7 @@ function createMapStateToProps() {
props.isFetching = organizePreview.isFetching || naming.isFetching;
props.isPopulated = organizePreview.isPopulated && naming.isPopulated;
props.error = organizePreview.error || naming.error;
- props.renameEpisodes = naming.item.renameEpisodes;
+ props.renameTracks = naming.item.renameTracks;
props.episodeFormat = naming.item[`${series.seriesType}EpisodeFormat`];
props.path = series.path;
diff --git a/frontend/src/Settings/General/GeneralSettings.js b/frontend/src/Settings/General/GeneralSettings.js
index 3ab73148f..2bd2f789a 100644
--- a/frontend/src/Settings/General/GeneralSettings.js
+++ b/frontend/src/Settings/General/GeneralSettings.js
@@ -519,7 +519,7 @@ class GeneralSettings extends Component {
- Create empty series folders
+ Create empty artist folders
@@ -103,7 +103,7 @@ class MediaManagement extends Component {
@@ -133,7 +133,7 @@ class MediaManagement extends Component {
@@ -163,14 +163,14 @@ class MediaManagement extends Component {
legend="File Management"
>
- Ignore Deleted Episodes
+ Ignore Deleted Tracks
@@ -195,12 +195,12 @@ class MediaManagement extends Component {
isAdvanced={true}
size={sizes.MEDIUM}
>
- Analyse video files
+ Analyse audio files
@@ -231,7 +231,7 @@ class MediaManagement extends Component {
diff --git a/frontend/src/Settings/MediaManagement/Naming/Naming.js b/frontend/src/Settings/MediaManagement/Naming/Naming.js
index 03f45e908..8e060aea0 100644
--- a/frontend/src/Settings/MediaManagement/Naming/Naming.js
+++ b/frontend/src/Settings/MediaManagement/Naming/Naming.js
@@ -32,55 +32,29 @@ class Naming extends Component {
this.setState({
isNamingModalOpen: true,
namingModalOptions: {
- name: 'standardEpisodeFormat',
- season: true,
- episode: true,
+ name: 'standardTrackFormat',
+ album: true,
+ track: true,
additional: true
}
});
}
- onDailyNamingModalOpenClick = () => {
+ onArtistFolderNamingModalOpenClick = () => {
this.setState({
isNamingModalOpen: true,
namingModalOptions: {
- name: 'dailyEpisodeFormat',
- season: true,
- episode: true,
- daily: true,
- additional: true
- }
- });
- }
-
- onAnimeNamingModalOpenClick = () => {
- this.setState({
- isNamingModalOpen: true,
- namingModalOptions: {
- name: 'animeEpisodeFormat',
- season: true,
- episode: true,
- anime: true,
- additional: true
+ name: 'artistFolderFormat'
}
});
}
- onSeriesFolderNamingModalOpenClick = () => {
+ onAlbumFolderNamingModalOpenClick = () => {
this.setState({
isNamingModalOpen: true,
namingModalOptions: {
- name: 'seriesFolderFormat'
- }
- });
- }
-
- onSeasonFolderNamingModalOpenClick = () => {
- this.setState({
- isNamingModalOpen: true,
- namingModalOptions: {
- name: 'seasonFolderFormat',
- season: true
+ name: 'albumFolderFormat',
+ album: true
}
});
}
@@ -109,69 +83,56 @@ class Naming extends Component {
namingModalOptions
} = this.state;
- const renameEpisodes = hasSettings && settings.renameEpisodes.value;
-
- const multiEpisodeStyleOptions = [
- { key: 0, value: 'Extend' },
- { key: 1, value: 'Duplicate' },
- { key: 2, value: 'Repeat' },
- { key: 3, value: 'Scene' },
- { key: 4, value: 'Range' },
- { key: 5, value: 'Prefixed Range' }
- ];
-
- const standardEpisodeFormatHelpTexts = [];
- const standardEpisodeFormatErrors = [];
- const dailyEpisodeFormatHelpTexts = [];
- const dailyEpisodeFormatErrors = [];
- const animeEpisodeFormatHelpTexts = [];
- const animeEpisodeFormatErrors = [];
- const seriesFolderFormatHelpTexts = [];
- const seriesFolderFormatErrors = [];
- const seasonFolderFormatHelpTexts = [];
- const seasonFolderFormatErrors = [];
+ const renameTracks = hasSettings && settings.renameTracks.value;
- if (examplesPopulated) {
- if (examples.singleEpisodeExample) {
- standardEpisodeFormatHelpTexts.push(`Single Episode: ${examples.singleEpisodeExample}`);
- } else {
- standardEpisodeFormatErrors.push('Single Episode: Invalid Format');
- }
+ const standardTrackFormatHelpTexts = [];
+ const standardTrackFormatErrors = [];
+ const artistFolderFormatHelpTexts = [];
+ const artistFolderFormatErrors = [];
+ const albumFolderFormatHelpTexts = [];
+ const albumFolderFormatErrors = [];
- if (examples.multiEpisodeExample) {
- standardEpisodeFormatHelpTexts.push(`Multi Episode: ${examples.multiEpisodeExample}`);
- } else {
- standardEpisodeFormatErrors.push('Multi Episode: Invalid Format');
- }
-
- if (examples.dailyEpisodeExample) {
- dailyEpisodeFormatHelpTexts.push(`Example: ${examples.dailyEpisodeExample}`);
- } else {
- dailyEpisodeFormatErrors.push('Invalid Format');
- }
-
- if (examples.animeEpisodeExample) {
- animeEpisodeFormatHelpTexts.push(`Single Episode: ${examples.animeEpisodeExample}`);
- } else {
- animeEpisodeFormatErrors.push('Single Episode: Invalid Format');
- }
-
- if (examples.animeMultiEpisodeExample) {
- animeEpisodeFormatHelpTexts.push(`Multi Episode: ${examples.animeMultiEpisodeExample}`);
+ if (examplesPopulated) {
+ if (examples.singleTrackExample) {
+ standardTrackFormatHelpTexts.push(`Single Track: ${examples.singleTrackExample}`);
} else {
- animeEpisodeFormatErrors.push('Multi Episode: Invalid Format');
+ standardTrackFormatErrors.push('Single Track: Invalid Format');
}
- if (examples.seriesFolderExample) {
- seriesFolderFormatHelpTexts.push(`Example: ${examples.seriesFolderExample}`);
+ // if (examples.multiEpisodeExample) {
+ // standardTrackFormatHelpTexts.push(`Multi Episode: ${examples.multiEpisodeExample}`);
+ // } else {
+ // standardTrackFormatErrors.push('Multi Episode: Invalid Format');
+ // }
+
+ // if (examples.dailyEpisodeExample) {
+ // dailyEpisodeFormatHelpTexts.push(`Example: ${examples.dailyEpisodeExample}`);
+ // } else {
+ // dailyEpisodeFormatErrors.push('Invalid Format');
+ // }
+
+ // if (examples.animeEpisodeExample) {
+ // animeEpisodeFormatHelpTexts.push(`Single Episode: ${examples.animeEpisodeExample}`);
+ // } else {
+ // animeEpisodeFormatErrors.push('Single Episode: Invalid Format');
+ // }
+
+ // if (examples.animeMultiEpisodeExample) {
+ // animeEpisodeFormatHelpTexts.push(`Multi Episode: ${examples.animeMultiEpisodeExample}`);
+ // } else {
+ // animeEpisodeFormatErrors.push('Multi Episode: Invalid Format');
+ // }
+
+ if (examples.artistFolderExample) {
+ artistFolderFormatHelpTexts.push(`Example: ${examples.artistFolderExample}`);
} else {
- seriesFolderFormatErrors.push('Invalid Format');
+ artistFolderFormatErrors.push('Invalid Format');
}
- if (examples.seasonFolderExample) {
- seasonFolderFormatHelpTexts.push(`Example: ${examples.seasonFolderExample}`);
+ if (examples.albumFolderExample) {
+ albumFolderFormatHelpTexts.push(`Example: ${examples.albumFolderExample}`);
} else {
- seasonFolderFormatErrors.push('Invalid Format');
+ albumFolderFormatErrors.push('Invalid Format');
}
}
@@ -217,52 +178,23 @@ class Naming extends Component {
{
- renameEpisodes &&
+ renameTracks &&
- Standard Episode Format
+ Standard Track Format
?}
onChange={onInputChange}
- {...settings.standardEpisodeFormat}
- helpTexts={standardEpisodeFormatHelpTexts}
- errors={[...standardEpisodeFormatErrors, ...settings.standardEpisodeFormat.errors]}
+ {...settings.standardTrackFormat}
+ helpTexts={standardTrackFormatHelpTexts}
+ errors={[...standardTrackFormatErrors, ...settings.standardTrackFormat.errors]}
/>
-
- Daily Episode Format
-
- ?}
- onChange={onInputChange}
- {...settings.dailyEpisodeFormat}
- helpTexts={dailyEpisodeFormatHelpTexts}
- errors={[...dailyEpisodeFormatErrors, ...settings.dailyEpisodeFormat.errors]}
- />
-
-
-
- Anime Episode Format
-
- ?}
- onChange={onInputChange}
- {...settings.animeEpisodeFormat}
- helpTexts={animeEpisodeFormatHelpTexts}
- errors={[...animeEpisodeFormatErrors, ...settings.animeEpisodeFormat.errors]}
- />
-
}
@@ -270,45 +202,32 @@ class Naming extends Component {
advancedSettings={advancedSettings}
isAdvanced={true}
>
- Series Folder Format
+ Artist Folder Format
?}
+ name="artistFolderFormat"
+ buttons={?}
onChange={onInputChange}
- {...settings.seriesFolderFormat}
- helpTexts={['Only used when adding a new series', ...seriesFolderFormatHelpTexts]}
- errors={[...seriesFolderFormatErrors, ...settings.seriesFolderFormat.errors]}
+ {...settings.artistFolderFormat}
+ helpTexts={['Only used when adding a new artist', ...artistFolderFormatHelpTexts]}
+ errors={[...artistFolderFormatErrors, ...settings.artistFolderFormat.errors]}
/>
- Season Folder Format
+ Album Folder Format
?}
- onChange={onInputChange}
- {...settings.seasonFolderFormat}
- helpTexts={seasonFolderFormatHelpTexts}
- errors={[...seasonFolderFormatErrors, ...settings.seasonFolderFormat.errors]}
- />
-
-
-
- Multi-Episode Style
-
- ?}
onChange={onInputChange}
- {...settings.multiEpisodeStyle}
+ {...settings.albumFolderFormat}
+ helpTexts={albumFolderFormatHelpTexts}
+ errors={[...albumFolderFormatErrors, ...settings.albumFolderFormat.errors]}
/>
diff --git a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js
index 59800e52a..45869d06f 100644
--- a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js
+++ b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js
@@ -42,10 +42,8 @@ class NamingModal extends Component {
value,
isOpen,
advancedSettings,
- season,
- episode,
- daily,
- anime,
+ album,
+ track,
additional,
onInputChange,
onModalClose
@@ -59,61 +57,55 @@ class NamingModal extends Component {
const fileNameTokens = [
{
- token: '{Series Title} - S{season:00}E{episode:00} - {Episode Title} {Quality Full}',
- example: 'Series Title (2010) - S01E01 - Episode Title HDTV-720p Proper'
+ token: '{Artist Name} - {Album Title} - {track:00} - {Track Title} {Quality Full}',
+ example: 'Artist Name - Album Title - 01 - Track Title MP3-320 Proper'
},
{
- token: '{Series Title} - {season:0}x{episode:00} - {Episode Title} {Quality Full}',
- example: 'Series Title (2010) - 1x01 - Episode Title HDTV-720p Proper'
- },
- {
- token: '{Series.Title}.S{season:00}E{episode:00}.{EpisodeClean.Title}.{Quality.Full}',
- example: 'Series.Title.(2010).S01E01.Episode.Title.HDTV-720p'
+ token: '{Artist.Name}.{Album.Title}.{track:00}.{TrackClean.Title}.{Quality.Full}',
+ example: 'Artist.Name.Album.Title.01.Track.Title.MP3-320'
}
];
- const seriesTokens = [
- { token: '{Series Title}', example: 'Series Title (2010)' },
- { token: '{Series.Title}', example: 'Series.Title.(2010)' },
- { token: '{Series_Title}', example: 'Series_Title_(2010)' },
+ const artistTokens = [
+ { token: '{Artist Name}', example: 'Artist Name' },
+ { token: '{Artist.Name}', example: 'Artist.Name' },
+ { token: '{Artist_Name}', example: 'Artist_Name' },
- { token: '{Series TitleThe}', example: 'Series Title, The (2010)' },
+ { token: '{Artist NameThe}', example: 'Artist Name, The' },
- { token: '{Series CleanTitle}', example: 'Series Title 2010' },
- { token: '{Series.CleanTitle}', example: 'Series.Title.2010' },
- { token: '{Series_CleanTitle}', example: 'Series_Title_2010' }
+ { token: '{Artist CleanName}', example: 'Artist Name' },
+ { token: '{Artist.CleanName}', example: 'Artist.Name' },
+ { token: '{Artist_CleanName}', example: 'Artist_Name' }
];
- const seasonTokens = [
- { token: '{season:0}', example: '1' },
- { token: '{season:00}', example: '01' }
- ];
+ const albumTokens = [
+ { token: '{Album Title}', example: 'Album Title' },
+ { token: '{Album.Title}', example: 'Album.Title' },
+ { token: '{Album_Name}', example: 'Album_Name' },
- const episodeTokens = [
- { token: '{episode:0}', example: '1' },
- { token: '{episode:00}', example: '01' }
+ { token: '{Album TitleThe}', example: 'Album Title, The' },
+
+ { token: '{Album CleanTitle}', example: 'Album Title' },
+ { token: '{Album.CleanTitle}', example: 'Album.Title' },
+ { token: '{Album_CleanTitle}', example: 'Album_Title' }
];
- const airDateTokens = [
- { token: '{Air-Date}', example: '2016-03-20' },
- { token: '{Air Date}', example: '2016 03 20' },
- { token: '{Air.Date}', example: '2016.03.20' },
- { token: '{Air_Date}', example: '2016_03_20' }
+ const trackTokens = [
+ { token: '{track:0}', example: '1' },
+ { token: '{track:00}', example: '01' }
];
- const absoluteTokens = [
- { token: '{absolute:0}', example: '1' },
- { token: '{absolute:00}', example: '01' },
- { token: '{absolute:000}', example: '001' }
+ const releaseDateTokens = [
+ { token: '{Release Year}', example: '2016' }
];
- const episodeTitleTokens = [
- { token: '{Episode Title}', example: 'Episode Title' },
- { token: '{Episode.Title}', example: 'Episode.Title' },
- { token: '{Episode_Title}', example: 'Episode_Title' },
- { token: '{Episode CleanTitle}', example: 'Episode Title' },
- { token: '{Episode.CleanTitle}', example: 'Episode.Title' },
- { token: '{Episode_CleanTitle}', example: 'Episode_Title' }
+ const trackTitleTokens = [
+ { token: '{Track Title}', example: 'Track Title' },
+ { token: '{Track.Title}', example: 'Track.Title' },
+ { token: '{Track_Title}', example: 'Track_Title' },
+ { token: '{Track CleanTitle}', example: 'Track Title' },
+ { token: '{Track.CleanTitle}', example: 'Track.Title' },
+ { token: '{Track_CleanTitle}', example: 'Track_Title' }
];
const qualityTokens = [
@@ -146,8 +138,8 @@ class NamingModal extends Component {
];
const originalTokens = [
- { token: '{Original Title}', example: 'Series.Title.S01E01.HDTV.x264-EVOLVE' },
- { token: '{Original Filename}', example: 'series.title.s01e01.hdtv.x264-EVOLVE' }
+ { token: '{Original Title}', example: 'Artist.Name.S01E01.HDTV.x264-EVOLVE' },
+ { token: '{Original Filename}', example: 'artist.name.s01e01.hdtv.x264-EVOLVE' }
];
return (
@@ -197,10 +189,10 @@ class NamingModal extends Component {
}
-