mirror of
https://github.com/Radarr/Radarr.git
synced 2024-10-03 22:57:18 +02:00
parent
856a55a9c9
commit
53a9c849cb
@ -10,6 +10,12 @@
|
|||||||
width: 80px;
|
width: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.customFormatScore {
|
||||||
|
composes: cell from '~Components/Table/Cells/TableRowCell.css';
|
||||||
|
|
||||||
|
width: 55px;
|
||||||
|
}
|
||||||
|
|
||||||
.releaseGroup {
|
.releaseGroup {
|
||||||
composes: cell from '~Components/Table/Cells/TableRowCell.css';
|
composes: cell from '~Components/Table/Cells/TableRowCell.css';
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import MovieFormats from 'Movie/MovieFormats';
|
|||||||
import MovieLanguage from 'Movie/MovieLanguage';
|
import MovieLanguage from 'Movie/MovieLanguage';
|
||||||
import MovieQuality from 'Movie/MovieQuality';
|
import MovieQuality from 'Movie/MovieQuality';
|
||||||
import MovieTitleLink from 'Movie/MovieTitleLink';
|
import MovieTitleLink from 'Movie/MovieTitleLink';
|
||||||
|
import formatCustomFormatScore from 'Utilities/Number/formatCustomFormatScore';
|
||||||
import HistoryDetailsModal from './Details/HistoryDetailsModal';
|
import HistoryDetailsModal from './Details/HistoryDetailsModal';
|
||||||
import HistoryEventTypeCell from './HistoryEventTypeCell';
|
import HistoryEventTypeCell from './HistoryEventTypeCell';
|
||||||
import styles from './HistoryRow.css';
|
import styles from './HistoryRow.css';
|
||||||
@ -168,6 +169,17 @@ class HistoryRow extends Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (name === 'customFormatScore') {
|
||||||
|
return (
|
||||||
|
<TableRowCell
|
||||||
|
key={name}
|
||||||
|
className={styles.customFormatScore}
|
||||||
|
>
|
||||||
|
{formatCustomFormatScore(data.customFormatScore)}
|
||||||
|
</TableRowCell>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (name === 'releaseGroup') {
|
if (name === 'releaseGroup') {
|
||||||
return (
|
return (
|
||||||
<TableRowCell
|
<TableRowCell
|
||||||
|
@ -192,7 +192,7 @@ class TableOptionsModal extends Component {
|
|||||||
<TableOptionsColumnDragSource
|
<TableOptionsColumnDragSource
|
||||||
key={name}
|
key={name}
|
||||||
name={name}
|
name={name}
|
||||||
label={label || columnLabel}
|
label={columnLabel || label}
|
||||||
isVisible={isVisible}
|
isVisible={isVisible}
|
||||||
isModifiable={true}
|
isModifiable={true}
|
||||||
index={index}
|
index={index}
|
||||||
@ -210,7 +210,7 @@ class TableOptionsModal extends Component {
|
|||||||
<TableOptionsColumn
|
<TableOptionsColumn
|
||||||
key={name}
|
key={name}
|
||||||
name={name}
|
name={name}
|
||||||
label={label || columnLabel}
|
label={columnLabel || label}
|
||||||
isVisible={isVisible}
|
isVisible={isVisible}
|
||||||
index={index}
|
index={index}
|
||||||
isModifiable={false}
|
isModifiable={false}
|
||||||
|
@ -11,6 +11,7 @@ import { icons, kinds } from 'Helpers/Props';
|
|||||||
import MovieFormats from 'Movie/MovieFormats';
|
import MovieFormats from 'Movie/MovieFormats';
|
||||||
import MovieLanguage from 'Movie/MovieLanguage';
|
import MovieLanguage from 'Movie/MovieLanguage';
|
||||||
import MovieQuality from 'Movie/MovieQuality';
|
import MovieQuality from 'Movie/MovieQuality';
|
||||||
|
import formatCustomFormatScore from 'Utilities/Number/formatCustomFormatScore';
|
||||||
import translate from 'Utilities/String/translate';
|
import translate from 'Utilities/String/translate';
|
||||||
import styles from './MovieHistoryRow.css';
|
import styles from './MovieHistoryRow.css';
|
||||||
|
|
||||||
@ -104,6 +105,10 @@ class MovieHistoryRow extends Component {
|
|||||||
/>
|
/>
|
||||||
</TableRowCell>
|
</TableRowCell>
|
||||||
|
|
||||||
|
<TableRowCell key={name}>
|
||||||
|
{formatCustomFormatScore(data.customFormatScore)}
|
||||||
|
</TableRowCell>
|
||||||
|
|
||||||
<RelativeDateCellConnector
|
<RelativeDateCellConnector
|
||||||
date={date}
|
date={date}
|
||||||
/>
|
/>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
|
import Icon from 'Components/Icon';
|
||||||
import IconButton from 'Components/Link/IconButton';
|
import IconButton from 'Components/Link/IconButton';
|
||||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||||
import Table from 'Components/Table/Table';
|
import Table from 'Components/Table/Table';
|
||||||
@ -35,6 +36,15 @@ const columns = [
|
|||||||
isSortable: false,
|
isSortable: false,
|
||||||
isVisible: true
|
isVisible: true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'customFormatScore',
|
||||||
|
label: React.createElement(Icon, {
|
||||||
|
name: icons.SCORE,
|
||||||
|
title: 'Custom format score'
|
||||||
|
}),
|
||||||
|
isSortable: true,
|
||||||
|
isVisible: true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'date',
|
name: 'date',
|
||||||
label: translate('Date'),
|
label: translate('Date'),
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
import React from 'react';
|
||||||
import { createAction } from 'redux-actions';
|
import { createAction } from 'redux-actions';
|
||||||
import { filterTypes, sortDirections } from 'Helpers/Props';
|
import Icon from 'Components/Icon';
|
||||||
|
import { filterTypes, icons, sortDirections } from 'Helpers/Props';
|
||||||
import { createThunk, handleThunks } from 'Store/thunks';
|
import { createThunk, handleThunks } from 'Store/thunks';
|
||||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||||
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
|
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
|
||||||
@ -84,6 +86,15 @@ export const defaultState = {
|
|||||||
label: translate('SourceTitle'),
|
label: translate('SourceTitle'),
|
||||||
isVisible: false
|
isVisible: false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'customFormatScore',
|
||||||
|
columnLabel: translate('CustomFormatScore'),
|
||||||
|
label: React.createElement(Icon, {
|
||||||
|
name: icons.SCORE,
|
||||||
|
title: 'Custom format score'
|
||||||
|
}),
|
||||||
|
isVisible: false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'details',
|
name: 'details',
|
||||||
columnLabel: translate('Details'),
|
columnLabel: translate('Details'),
|
||||||
|
16
frontend/src/Utilities/Number/formatCustomFormatScore.js
Normal file
16
frontend/src/Utilities/Number/formatCustomFormatScore.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
function formatCustomFormatScore(input) {
|
||||||
|
const score = Number(input);
|
||||||
|
|
||||||
|
if (score > 0) {
|
||||||
|
return `+${score}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (score < 0) {
|
||||||
|
return score;
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
export default formatCustomFormatScore;
|
@ -70,7 +70,7 @@ private ParsedMovieInfo GetParsedMovieInfo(List<Language> languages)
|
|||||||
[Test]
|
[Test]
|
||||||
public void should_return_default_if_no_info_is_known()
|
public void should_return_default_if_no_info_is_known()
|
||||||
{
|
{
|
||||||
var result = Subject.Aggregate(_localMovie, null, false);
|
var result = Subject.Aggregate(_localMovie, null);
|
||||||
|
|
||||||
result.Languages.Should().Contain(_movie.MovieMetadata.Value.OriginalLanguage);
|
result.Languages.Should().Contain(_movie.MovieMetadata.Value.OriginalLanguage);
|
||||||
}
|
}
|
||||||
@ -83,7 +83,7 @@ public void should_return_file_language_when_only_file_info_is_known()
|
|||||||
null,
|
null,
|
||||||
null);
|
null);
|
||||||
|
|
||||||
Subject.Aggregate(_localMovie, null, false).Languages.Should().Equal(new List<Language> { Language.French });
|
Subject.Aggregate(_localMovie, null).Languages.Should().Equal(new List<Language> { Language.French });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -94,7 +94,7 @@ public void should_return_folder_language_when_folder_info_is_known()
|
|||||||
null,
|
null,
|
||||||
null);
|
null);
|
||||||
|
|
||||||
var aggregation = Subject.Aggregate(_localMovie, null, false);
|
var aggregation = Subject.Aggregate(_localMovie, null);
|
||||||
|
|
||||||
aggregation.Languages.Should().Equal(new List<Language> { Language.German });
|
aggregation.Languages.Should().Equal(new List<Language> { Language.German });
|
||||||
}
|
}
|
||||||
@ -107,7 +107,7 @@ public void should_return_download_client_item_language_when_download_client_ite
|
|||||||
new List<Language> { Language.Spanish },
|
new List<Language> { Language.Spanish },
|
||||||
null);
|
null);
|
||||||
|
|
||||||
Subject.Aggregate(_localMovie, null, false).Languages.Should().Equal(new List<Language> { Language.Spanish });
|
Subject.Aggregate(_localMovie, null).Languages.Should().Equal(new List<Language> { Language.Spanish });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -118,7 +118,7 @@ public void should_return_multi_language()
|
|||||||
new List<Language> { Language.Unknown },
|
new List<Language> { Language.Unknown },
|
||||||
null);
|
null);
|
||||||
|
|
||||||
Subject.Aggregate(_localMovie, null, false).Languages.Should().Equal(new List<Language> { Language.French, Language.German });
|
Subject.Aggregate(_localMovie, null).Languages.Should().Equal(new List<Language> { Language.French, Language.German });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -129,7 +129,7 @@ public void should_use_mediainfo_over_others()
|
|||||||
new List<Language> { Language.Unknown },
|
new List<Language> { Language.Unknown },
|
||||||
new List<Language> { Language.Japanese, Language.English });
|
new List<Language> { Language.Japanese, Language.English });
|
||||||
|
|
||||||
Subject.Aggregate(_localMovie, null, false).Languages.Should().Equal(new List<Language> { Language.Japanese, Language.English });
|
Subject.Aggregate(_localMovie, null).Languages.Should().Equal(new List<Language> { Language.Japanese, Language.English });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -140,7 +140,7 @@ public void should_not_use_mediainfo_if_unknown()
|
|||||||
new List<Language> { Language.Unknown },
|
new List<Language> { Language.Unknown },
|
||||||
new List<Language> { Language.Unknown });
|
new List<Language> { Language.Unknown });
|
||||||
|
|
||||||
Subject.Aggregate(_localMovie, null, false).Languages.Should().Equal(new List<Language> { Language.French, Language.German });
|
Subject.Aggregate(_localMovie, null).Languages.Should().Equal(new List<Language> { Language.French, Language.German });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ public void should_return_HDTV720_from_extension_when_other_augments_are_null()
|
|||||||
|
|
||||||
GivenAugmenters(_fileExtensionAugmenter, nullMock);
|
GivenAugmenters(_fileExtensionAugmenter, nullMock);
|
||||||
|
|
||||||
var result = Subject.Aggregate(new LocalMovie(), null, false);
|
var result = Subject.Aggregate(new LocalMovie(), null);
|
||||||
|
|
||||||
result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Extension);
|
result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Extension);
|
||||||
result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.Extension);
|
result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.Extension);
|
||||||
@ -72,7 +72,7 @@ public void should_return_SDTV_when_HDTV720_came_from_extension()
|
|||||||
{
|
{
|
||||||
GivenAugmenters(_fileExtensionAugmenter, _nameAugmenter);
|
GivenAugmenters(_fileExtensionAugmenter, _nameAugmenter);
|
||||||
|
|
||||||
var result = Subject.Aggregate(new LocalMovie(), null, false);
|
var result = Subject.Aggregate(new LocalMovie(), null);
|
||||||
|
|
||||||
result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Name);
|
result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Name);
|
||||||
result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.Name);
|
result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.Name);
|
||||||
@ -84,7 +84,7 @@ public void should_return_HDTV1080p_when_HDTV720_came_from_extension_and_mediain
|
|||||||
{
|
{
|
||||||
GivenAugmenters(_fileExtensionAugmenter, _mediaInfoAugmenter);
|
GivenAugmenters(_fileExtensionAugmenter, _mediaInfoAugmenter);
|
||||||
|
|
||||||
var result = Subject.Aggregate(new LocalMovie(), null, false);
|
var result = Subject.Aggregate(new LocalMovie(), null);
|
||||||
|
|
||||||
result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Extension);
|
result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Extension);
|
||||||
result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.MediaInfo);
|
result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.MediaInfo);
|
||||||
@ -96,7 +96,7 @@ public void should_return_HDTV1080p_when_SDTV_came_from_name_and_mediainfo_indic
|
|||||||
{
|
{
|
||||||
GivenAugmenters(_nameAugmenter, _mediaInfoAugmenter);
|
GivenAugmenters(_nameAugmenter, _mediaInfoAugmenter);
|
||||||
|
|
||||||
var result = Subject.Aggregate(new LocalMovie(), null, false);
|
var result = Subject.Aggregate(new LocalMovie(), null);
|
||||||
|
|
||||||
result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Name);
|
result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Name);
|
||||||
result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.MediaInfo);
|
result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.MediaInfo);
|
||||||
@ -108,7 +108,7 @@ public void should_return_WEBDL480p_when_file_name_has_HDTV480p_but_release_name
|
|||||||
{
|
{
|
||||||
GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
|
GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
|
||||||
|
|
||||||
var result = Subject.Aggregate(new LocalMovie(), new DownloadClientItem(), false);
|
var result = Subject.Aggregate(new LocalMovie(), new DownloadClientItem());
|
||||||
|
|
||||||
result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Name);
|
result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Name);
|
||||||
result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.Name);
|
result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.Name);
|
||||||
@ -120,7 +120,7 @@ public void should_return_version_1_when_no_version_specified()
|
|||||||
{
|
{
|
||||||
GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
|
GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
|
||||||
|
|
||||||
var result = Subject.Aggregate(new LocalMovie(), new DownloadClientItem(), false);
|
var result = Subject.Aggregate(new LocalMovie(), new DownloadClientItem());
|
||||||
|
|
||||||
result.Quality.Revision.Version.Should().Be(1);
|
result.Quality.Revision.Version.Should().Be(1);
|
||||||
result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Unknown);
|
result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Unknown);
|
||||||
@ -134,7 +134,7 @@ public void should_return_version_2_when_name_indicates_proper()
|
|||||||
|
|
||||||
GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
|
GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
|
||||||
|
|
||||||
var result = Subject.Aggregate(new LocalMovie(), new DownloadClientItem(), false);
|
var result = Subject.Aggregate(new LocalMovie(), new DownloadClientItem());
|
||||||
|
|
||||||
result.Quality.Revision.Version.Should().Be(2);
|
result.Quality.Revision.Version.Should().Be(2);
|
||||||
result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Name);
|
result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Name);
|
||||||
@ -148,7 +148,7 @@ public void should_return_version_0_when_file_name_indicates_v0()
|
|||||||
|
|
||||||
GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
|
GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
|
||||||
|
|
||||||
var result = Subject.Aggregate(new LocalMovie(), new DownloadClientItem(), false);
|
var result = Subject.Aggregate(new LocalMovie(), new DownloadClientItem());
|
||||||
|
|
||||||
result.Quality.Revision.Version.Should().Be(0);
|
result.Quality.Revision.Version.Should().Be(0);
|
||||||
result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Name);
|
result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Name);
|
||||||
@ -165,7 +165,7 @@ public void should_return_version_2_when_file_name_indicates_v0_and_release_name
|
|||||||
|
|
||||||
GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
|
GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
|
||||||
|
|
||||||
var result = Subject.Aggregate(new LocalMovie(), new DownloadClientItem(), false);
|
var result = Subject.Aggregate(new LocalMovie(), new DownloadClientItem());
|
||||||
|
|
||||||
result.Quality.Revision.Version.Should().Be(2);
|
result.Quality.Revision.Version.Should().Be(2);
|
||||||
result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Name);
|
result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Name);
|
||||||
|
@ -35,7 +35,7 @@ public void should_prefer_downloadclient()
|
|||||||
Movie = _movie
|
Movie = _movie
|
||||||
};
|
};
|
||||||
|
|
||||||
Subject.Aggregate(localMovie, null, false);
|
Subject.Aggregate(localMovie, null);
|
||||||
|
|
||||||
localMovie.ReleaseGroup.Should().Be("Viva");
|
localMovie.ReleaseGroup.Should().Be("Viva");
|
||||||
}
|
}
|
||||||
@ -55,7 +55,7 @@ public void should_prefer_folder()
|
|||||||
Movie = _movie
|
Movie = _movie
|
||||||
};
|
};
|
||||||
|
|
||||||
Subject.Aggregate(localMovie, null, false);
|
Subject.Aggregate(localMovie, null);
|
||||||
|
|
||||||
localMovie.ReleaseGroup.Should().Be("Drone");
|
localMovie.ReleaseGroup.Should().Be("Drone");
|
||||||
}
|
}
|
||||||
@ -75,7 +75,7 @@ public void should_fallback_to_file()
|
|||||||
Movie = _movie
|
Movie = _movie
|
||||||
};
|
};
|
||||||
|
|
||||||
Subject.Aggregate(localMovie, null, false);
|
Subject.Aggregate(localMovie, null);
|
||||||
|
|
||||||
localMovie.ReleaseGroup.Should().Be("Wizzy");
|
localMovie.ReleaseGroup.Should().Be("Wizzy");
|
||||||
}
|
}
|
||||||
@ -95,7 +95,7 @@ public void should_not_use_imdbId()
|
|||||||
Movie = _movie
|
Movie = _movie
|
||||||
};
|
};
|
||||||
|
|
||||||
Subject.Aggregate(localMovie, null, false);
|
Subject.Aggregate(localMovie, null);
|
||||||
|
|
||||||
localMovie.ReleaseGroup.Should().Be("FraMeSToR");
|
localMovie.ReleaseGroup.Should().Be("FraMeSToR");
|
||||||
}
|
}
|
||||||
@ -115,7 +115,7 @@ public void should_not_use_tmdbbId()
|
|||||||
Movie = _movie
|
Movie = _movie
|
||||||
};
|
};
|
||||||
|
|
||||||
Subject.Aggregate(localMovie, null, false);
|
Subject.Aggregate(localMovie, null);
|
||||||
|
|
||||||
localMovie.ReleaseGroup.Should().Be("FraMeSToR");
|
localMovie.ReleaseGroup.Should().Be("FraMeSToR");
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,153 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using FizzWare.NBuilder;
|
||||||
|
using FluentAssertions;
|
||||||
|
using Moq;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using NzbDrone.Core.MediaFiles;
|
||||||
|
using NzbDrone.Core.MediaFiles.MovieImport;
|
||||||
|
using NzbDrone.Core.Movies;
|
||||||
|
using NzbDrone.Core.Parser.Model;
|
||||||
|
using NzbDrone.Core.Profiles;
|
||||||
|
using NzbDrone.Core.Qualities;
|
||||||
|
using NzbDrone.Core.Test.Framework;
|
||||||
|
using NzbDrone.Test.Common;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Test.MediaFiles.MovieImport
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class GetSceneNameFixture : CoreTest
|
||||||
|
{
|
||||||
|
private LocalMovie _localMovie;
|
||||||
|
private string _movieName = "movie.title.2022.dvdrip.x264-ingot";
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
var movie = Builder<Movie>.CreateNew()
|
||||||
|
.With(e => e.Profile = new Profile { Items = Qualities.QualityFixture.GetDefaultQualities() })
|
||||||
|
.With(s => s.Path = @"C:\Test\Movies\Movie Title".AsOsAgnostic())
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
_localMovie = new LocalMovie
|
||||||
|
{
|
||||||
|
Movie = movie,
|
||||||
|
Path = Path.Combine(movie.Path, "Movie Title - 2022 - Episode Title.mkv"),
|
||||||
|
Quality = new QualityModel(Quality.Bluray720p),
|
||||||
|
ReleaseGroup = "DRONE"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GivenExistingFileOnDisk()
|
||||||
|
{
|
||||||
|
Mocker.GetMock<IMediaFileService>()
|
||||||
|
.Setup(s => s.GetFilesWithRelativePath(It.IsAny<int>(), It.IsAny<string>()))
|
||||||
|
.Returns(new List<MovieFile>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_use_download_client_item_title_as_scene_name()
|
||||||
|
{
|
||||||
|
_localMovie.DownloadClientMovieInfo = new ParsedMovieInfo
|
||||||
|
{
|
||||||
|
ReleaseTitle = _movieName
|
||||||
|
};
|
||||||
|
|
||||||
|
SceneNameCalculator.GetSceneName(_localMovie).Should()
|
||||||
|
.Be(_movieName);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_not_use_download_client_item_title_as_scene_name_if_there_are_other_video_files()
|
||||||
|
{
|
||||||
|
_localMovie.OtherVideoFiles = true;
|
||||||
|
_localMovie.DownloadClientMovieInfo = new ParsedMovieInfo
|
||||||
|
{
|
||||||
|
ReleaseTitle = _movieName
|
||||||
|
};
|
||||||
|
|
||||||
|
_localMovie.Path = Path.Combine(@"C:\Test\Unsorted Movies", _movieName)
|
||||||
|
.AsOsAgnostic();
|
||||||
|
|
||||||
|
SceneNameCalculator.GetSceneName(_localMovie).Should()
|
||||||
|
.BeNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_use_file_name_as_scenename_only_if_it_looks_like_scenename()
|
||||||
|
{
|
||||||
|
_localMovie.Path = Path.Combine(@"C:\Test\Unsorted Movies", _movieName + ".mkv")
|
||||||
|
.AsOsAgnostic();
|
||||||
|
|
||||||
|
SceneNameCalculator.GetSceneName(_localMovie).Should()
|
||||||
|
.Be(_movieName);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_not_use_file_name_as_scenename_if_it_doesnt_look_like_scenename()
|
||||||
|
{
|
||||||
|
_localMovie.Path = Path.Combine(@"C:\Test\Unsorted Movies", _movieName, "aaaaa.mkv")
|
||||||
|
.AsOsAgnostic();
|
||||||
|
|
||||||
|
SceneNameCalculator.GetSceneName(_localMovie).Should()
|
||||||
|
.BeNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_use_folder_name_as_scenename_only_if_it_looks_like_scenename()
|
||||||
|
{
|
||||||
|
_localMovie.FolderMovieInfo = new ParsedMovieInfo
|
||||||
|
{
|
||||||
|
ReleaseTitle = _movieName
|
||||||
|
};
|
||||||
|
|
||||||
|
SceneNameCalculator.GetSceneName(_localMovie).Should()
|
||||||
|
.Be(_movieName);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_not_use_folder_name_as_scenename_if_it_doesnt_look_like_scenename()
|
||||||
|
{
|
||||||
|
_localMovie.Path = Path.Combine(@"C:\Test\Unsorted Movies", _movieName, "aaaaa.mkv")
|
||||||
|
.AsOsAgnostic();
|
||||||
|
|
||||||
|
_localMovie.FolderMovieInfo = new ParsedMovieInfo
|
||||||
|
{
|
||||||
|
ReleaseTitle = "aaaaa"
|
||||||
|
};
|
||||||
|
|
||||||
|
SceneNameCalculator.GetSceneName(_localMovie).Should()
|
||||||
|
.BeNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_not_use_folder_name_as_scenename_if_there_are_other_video_files()
|
||||||
|
{
|
||||||
|
_localMovie.OtherVideoFiles = true;
|
||||||
|
_localMovie.Path = Path.Combine(@"C:\Test\Unsorted Movies", _movieName, "aaaaa.mkv")
|
||||||
|
.AsOsAgnostic();
|
||||||
|
|
||||||
|
_localMovie.FolderMovieInfo = new ParsedMovieInfo
|
||||||
|
{
|
||||||
|
ReleaseTitle = _movieName
|
||||||
|
};
|
||||||
|
|
||||||
|
SceneNameCalculator.GetSceneName(_localMovie).Should()
|
||||||
|
.BeNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(".mkv")]
|
||||||
|
[TestCase(".par2")]
|
||||||
|
[TestCase(".nzb")]
|
||||||
|
public void should_remove_extension_from_nzb_title_for_scene_name(string extension)
|
||||||
|
{
|
||||||
|
_localMovie.DownloadClientMovieInfo = new ParsedMovieInfo
|
||||||
|
{
|
||||||
|
ReleaseTitle = _movieName + extension
|
||||||
|
};
|
||||||
|
|
||||||
|
SceneNameCalculator.GetSceneName(_localMovie).Should()
|
||||||
|
.Be(_movieName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -159,84 +159,6 @@ public void should_not_move_existing_files()
|
|||||||
Times.Never());
|
Times.Never());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_use_nzb_title_as_scene_name()
|
|
||||||
{
|
|
||||||
GivenNewDownload();
|
|
||||||
_downloadClientItem.Title = "malcolm.in.the.middle.2015.dvdrip.xvid-ingot";
|
|
||||||
|
|
||||||
Subject.Import(new List<ImportDecision> { _approvedDecisions.First() }, true, _downloadClientItem);
|
|
||||||
|
|
||||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Add(It.Is<MovieFile>(c => c.SceneName == _downloadClientItem.Title)));
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestCase(".mkv")]
|
|
||||||
[TestCase(".par2")]
|
|
||||||
[TestCase(".nzb")]
|
|
||||||
public void should_remove_extension_from_nzb_title_for_scene_name(string extension)
|
|
||||||
{
|
|
||||||
GivenNewDownload();
|
|
||||||
var title = "malcolm.in.the.middle.2015.dvdrip.xvid-ingot";
|
|
||||||
|
|
||||||
_downloadClientItem.Title = title + extension;
|
|
||||||
|
|
||||||
Subject.Import(new List<ImportDecision> { _approvedDecisions.First() }, true, _downloadClientItem);
|
|
||||||
|
|
||||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Add(It.Is<MovieFile>(c => c.SceneName == title)));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_use_file_name_as_scenename_only_if_it_looks_like_scenename()
|
|
||||||
{
|
|
||||||
GivenNewDownload();
|
|
||||||
_approvedDecisions.First().LocalMovie.Path = Path.Combine(_downloadClientItem.OutputPath.ToString(), "movie.title.2018.dvdrip.xvid-ingot.mkv");
|
|
||||||
|
|
||||||
Subject.Import(new List<ImportDecision> { _approvedDecisions.First() }, true);
|
|
||||||
|
|
||||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Add(It.Is<MovieFile>(c => c.SceneName == "movie.title.2018.dvdrip.xvid-ingot")));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_not_use_file_name_as_scenename_if_it_doesnt_looks_like_scenename()
|
|
||||||
{
|
|
||||||
GivenNewDownload();
|
|
||||||
_approvedDecisions.First().LocalMovie.Path = Path.Combine(_downloadClientItem.OutputPath.ToString(), "aaaaa.mkv");
|
|
||||||
|
|
||||||
Subject.Import(new List<ImportDecision> { _approvedDecisions.First() }, true);
|
|
||||||
|
|
||||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Add(It.Is<MovieFile>(c => c.SceneName == null)));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_use_folder_name_as_scenename_only_if_it_looks_like_scenename()
|
|
||||||
{
|
|
||||||
GivenNewDownload();
|
|
||||||
_approvedDecisions.First().LocalMovie.Path = Path.Combine(_downloadClientItem.OutputPath.ToString(), "aaaaa.mkv");
|
|
||||||
_approvedDecisions.First().LocalMovie.FolderMovieInfo = new ParsedMovieInfo
|
|
||||||
{
|
|
||||||
ReleaseTitle = "movie.title.2018.dvdrip.xvid-ingot"
|
|
||||||
};
|
|
||||||
|
|
||||||
Subject.Import(new List<ImportDecision> { _approvedDecisions.First() }, true);
|
|
||||||
|
|
||||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Add(It.Is<MovieFile>(c => c.SceneName == "movie.title.2018.dvdrip.xvid-ingot")));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void should_not_use_folder_name_as_scenename_if_it_doesnt_looks_like_scenename()
|
|
||||||
{
|
|
||||||
GivenNewDownload();
|
|
||||||
_approvedDecisions.First().LocalMovie.Path = Path.Combine(_downloadClientItem.OutputPath.ToString(), "aaaaa.mkv");
|
|
||||||
_approvedDecisions.First().LocalMovie.FolderMovieInfo = new ParsedMovieInfo
|
|
||||||
{
|
|
||||||
ReleaseTitle = "aaaaa.mkv"
|
|
||||||
};
|
|
||||||
|
|
||||||
Subject.Import(new List<ImportDecision> { _approvedDecisions.First() }, true);
|
|
||||||
|
|
||||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Add(It.Is<MovieFile>(c => c.SceneName == null)));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void should_import_larger_files_first()
|
public void should_import_larger_files_first()
|
||||||
{
|
{
|
||||||
@ -411,5 +333,18 @@ public void should_use_folder_info_original_title_to_find_relative_path_when_dow
|
|||||||
|
|
||||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Add(It.Is<MovieFile>(c => c.OriginalFilePath == $"subfolder\\{name}.mkv".AsOsAgnostic())));
|
Mocker.GetMock<IMediaFileService>().Verify(v => v.Add(It.Is<MovieFile>(c => c.OriginalFilePath == $"subfolder\\{name}.mkv".AsOsAgnostic())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_include_scene_name_with_new_downloads()
|
||||||
|
{
|
||||||
|
var firstDecision = _approvedDecisions.First();
|
||||||
|
firstDecision.LocalMovie.SceneName = "Movie.Title.2022.dvdrip-DRONE";
|
||||||
|
|
||||||
|
Subject.Import(new List<ImportDecision> { _approvedDecisions.First() }, true);
|
||||||
|
|
||||||
|
Mocker.GetMock<IUpgradeMediaFiles>()
|
||||||
|
.Verify(v => v.UpgradeMovieFile(It.Is<MovieFile>(e => e.SceneName == firstDecision.LocalMovie.SceneName), _approvedDecisions.First().LocalMovie, false),
|
||||||
|
Times.Once());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -102,8 +102,8 @@ private void GivenVideoFiles(IEnumerable<string> videoFiles)
|
|||||||
private void GivenAugmentationSuccess()
|
private void GivenAugmentationSuccess()
|
||||||
{
|
{
|
||||||
Mocker.GetMock<IAggregationService>()
|
Mocker.GetMock<IAggregationService>()
|
||||||
.Setup(s => s.Augment(It.IsAny<LocalMovie>(), It.IsAny<DownloadClientItem>(), It.IsAny<bool>()))
|
.Setup(s => s.Augment(It.IsAny<LocalMovie>(), It.IsAny<DownloadClientItem>()))
|
||||||
.Callback<LocalMovie, DownloadClientItem, bool>((localMovie, downloadClientItem, otherFiles) =>
|
.Callback<LocalMovie, DownloadClientItem>((localMovie, downloadClientItem) =>
|
||||||
{
|
{
|
||||||
localMovie.Movie = _localMovie.Movie;
|
localMovie.Movie = _localMovie.Movie;
|
||||||
});
|
});
|
||||||
@ -173,7 +173,7 @@ public void should_not_blowup_the_process_due_to_failed_parse()
|
|||||||
GivenSpecifications(_pass1);
|
GivenSpecifications(_pass1);
|
||||||
|
|
||||||
Mocker.GetMock<IAggregationService>()
|
Mocker.GetMock<IAggregationService>()
|
||||||
.Setup(c => c.Augment(It.IsAny<LocalMovie>(), It.IsAny<DownloadClientItem>(), It.IsAny<bool>()))
|
.Setup(c => c.Augment(It.IsAny<LocalMovie>(), It.IsAny<DownloadClientItem>()))
|
||||||
.Throws<TestException>();
|
.Throws<TestException>();
|
||||||
|
|
||||||
_videoFiles = new List<string>
|
_videoFiles = new List<string>
|
||||||
@ -188,7 +188,7 @@ public void should_not_blowup_the_process_due_to_failed_parse()
|
|||||||
Subject.GetImportDecisions(_videoFiles, _movie);
|
Subject.GetImportDecisions(_videoFiles, _movie);
|
||||||
|
|
||||||
Mocker.GetMock<IAggregationService>()
|
Mocker.GetMock<IAggregationService>()
|
||||||
.Verify(c => c.Augment(It.IsAny<LocalMovie>(), It.IsAny<DownloadClientItem>(), It.IsAny<bool>()), Times.Exactly(_videoFiles.Count));
|
.Verify(c => c.Augment(It.IsAny<LocalMovie>(), It.IsAny<DownloadClientItem>()), Times.Exactly(_videoFiles.Count));
|
||||||
|
|
||||||
ExceptionVerification.ExpectedErrors(3);
|
ExceptionVerification.ExpectedErrors(3);
|
||||||
}
|
}
|
||||||
@ -209,7 +209,7 @@ public void should_call_parsing_service_with_filename_as_simpletitle()
|
|||||||
var fileNames = _videoFiles.Select(System.IO.Path.GetFileName);
|
var fileNames = _videoFiles.Select(System.IO.Path.GetFileName);
|
||||||
|
|
||||||
Mocker.GetMock<IAggregationService>()
|
Mocker.GetMock<IAggregationService>()
|
||||||
.Setup(c => c.Augment(It.IsAny<LocalMovie>(), It.IsAny<DownloadClientItem>(), It.IsAny<bool>()))
|
.Setup(c => c.Augment(It.IsAny<LocalMovie>(), It.IsAny<DownloadClientItem>()))
|
||||||
.Throws<TestException>();
|
.Throws<TestException>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +217,7 @@ public void should_call_parsing_service_with_filename_as_simpletitle()
|
|||||||
public void should_return_a_decision_when_exception_is_caught()
|
public void should_return_a_decision_when_exception_is_caught()
|
||||||
{
|
{
|
||||||
Mocker.GetMock<IAggregationService>()
|
Mocker.GetMock<IAggregationService>()
|
||||||
.Setup(c => c.Augment(It.IsAny<LocalMovie>(), It.IsAny<DownloadClientItem>(), It.IsAny<bool>()))
|
.Setup(c => c.Augment(It.IsAny<LocalMovie>(), It.IsAny<DownloadClientItem>()))
|
||||||
.Throws<TestException>();
|
.Throws<TestException>();
|
||||||
|
|
||||||
_videoFiles = new List<string>
|
_videoFiles = new List<string>
|
||||||
|
@ -152,6 +152,7 @@ public void Handle(MovieGrabbedEvent message)
|
|||||||
history.Data.Add("Guid", message.Movie.Release.Guid);
|
history.Data.Add("Guid", message.Movie.Release.Guid);
|
||||||
history.Data.Add("TmdbId", message.Movie.Release.TmdbId.ToString());
|
history.Data.Add("TmdbId", message.Movie.Release.TmdbId.ToString());
|
||||||
history.Data.Add("Protocol", ((int)message.Movie.Release.DownloadProtocol).ToString());
|
history.Data.Add("Protocol", ((int)message.Movie.Release.DownloadProtocol).ToString());
|
||||||
|
history.Data.Add("CustomFormatScore", message.Movie.CustomFormatScore.ToString());
|
||||||
history.Data.Add("IndexerFlags", message.Movie.Release.IndexerFlags.ToString());
|
history.Data.Add("IndexerFlags", message.Movie.Release.IndexerFlags.ToString());
|
||||||
history.Data.Add("IndexerId", message.Movie.Release.IndexerId.ToString());
|
history.Data.Add("IndexerId", message.Movie.Release.IndexerId.ToString());
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Aggregation
|
|||||||
{
|
{
|
||||||
public interface IAggregationService
|
public interface IAggregationService
|
||||||
{
|
{
|
||||||
LocalMovie Augment(LocalMovie localMovie, DownloadClientItem downloadClientItem, bool otherFiles);
|
LocalMovie Augment(LocalMovie localMovie, DownloadClientItem downloadClientItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AggregationService : IAggregationService
|
public class AggregationService : IAggregationService
|
||||||
@ -37,7 +37,7 @@ public AggregationService(IEnumerable<IAggregateLocalMovie> augmenters,
|
|||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalMovie Augment(LocalMovie localMovie, DownloadClientItem downloadClientItem, bool otherFiles)
|
public LocalMovie Augment(LocalMovie localMovie, DownloadClientItem downloadClientItem)
|
||||||
{
|
{
|
||||||
var isMediaFile = MediaFileExtensions.Extensions.Contains(Path.GetExtension(localMovie.Path));
|
var isMediaFile = MediaFileExtensions.Extensions.Contains(Path.GetExtension(localMovie.Path));
|
||||||
|
|
||||||
@ -52,6 +52,7 @@ public LocalMovie Augment(LocalMovie localMovie, DownloadClientItem downloadClie
|
|||||||
}
|
}
|
||||||
|
|
||||||
localMovie.Size = _diskProvider.GetFileSize(localMovie.Path);
|
localMovie.Size = _diskProvider.GetFileSize(localMovie.Path);
|
||||||
|
localMovie.SceneName = localMovie.SceneSource ? SceneNameCalculator.GetSceneName(localMovie) : null;
|
||||||
|
|
||||||
if (isMediaFile && (!localMovie.ExistingFile || _configService.EnableMediaInfo))
|
if (isMediaFile && (!localMovie.ExistingFile || _configService.EnableMediaInfo))
|
||||||
{
|
{
|
||||||
@ -62,7 +63,7 @@ public LocalMovie Augment(LocalMovie localMovie, DownloadClientItem downloadClie
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
augmenter.Aggregate(localMovie, downloadClientItem, otherFiles);
|
augmenter.Aggregate(localMovie, downloadClientItem);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -6,7 +6,7 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Aggregation.Aggregators
|
|||||||
{
|
{
|
||||||
public class AggregateEdition : IAggregateLocalMovie
|
public class AggregateEdition : IAggregateLocalMovie
|
||||||
{
|
{
|
||||||
public LocalMovie Aggregate(LocalMovie localMovie, DownloadClientItem downloadClientItem, bool otherFiles)
|
public LocalMovie Aggregate(LocalMovie localMovie, DownloadClientItem downloadClientItem)
|
||||||
{
|
{
|
||||||
var movieEdition = localMovie.DownloadClientMovieInfo?.Edition;
|
var movieEdition = localMovie.DownloadClientMovieInfo?.Edition;
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ public AggregateLanguage(IEnumerable<IAugmentLanguage> augmentLanguages,
|
|||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalMovie Aggregate(LocalMovie localMovie, DownloadClientItem downloadClientItem, bool otherFiles)
|
public LocalMovie Aggregate(LocalMovie localMovie, DownloadClientItem downloadClientItem)
|
||||||
{
|
{
|
||||||
var languages = new List<Language> { localMovie.Movie?.MovieMetadata.Value.OriginalLanguage ?? Language.Unknown };
|
var languages = new List<Language> { localMovie.Movie?.MovieMetadata.Value.OriginalLanguage ?? Language.Unknown };
|
||||||
var languagesConfidence = Confidence.Default;
|
var languagesConfidence = Confidence.Default;
|
||||||
|
@ -20,7 +20,7 @@ public AggregateQuality(IEnumerable<IAugmentQuality> augmentQualities,
|
|||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalMovie Aggregate(LocalMovie localMovie, DownloadClientItem downloadClientItem, bool otherFiles)
|
public LocalMovie Aggregate(LocalMovie localMovie, DownloadClientItem downloadClientItem)
|
||||||
{
|
{
|
||||||
var source = Source.UNKNOWN;
|
var source = Source.UNKNOWN;
|
||||||
var sourceConfidence = Confidence.Default;
|
var sourceConfidence = Confidence.Default;
|
||||||
|
@ -6,7 +6,7 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Aggregation.Aggregators
|
|||||||
{
|
{
|
||||||
public class AggregateReleaseGroup : IAggregateLocalMovie
|
public class AggregateReleaseGroup : IAggregateLocalMovie
|
||||||
{
|
{
|
||||||
public LocalMovie Aggregate(LocalMovie localMovie, DownloadClientItem downloadClientItem, bool otherFiles)
|
public LocalMovie Aggregate(LocalMovie localMovie, DownloadClientItem downloadClientItem)
|
||||||
{
|
{
|
||||||
var releaseGroup = localMovie.DownloadClientMovieInfo?.ReleaseGroup;
|
var releaseGroup = localMovie.DownloadClientMovieInfo?.ReleaseGroup;
|
||||||
|
|
||||||
|
@ -5,6 +5,6 @@ namespace NzbDrone.Core.MediaFiles.MovieImport.Aggregation.Aggregators
|
|||||||
{
|
{
|
||||||
public interface IAggregateLocalMovie
|
public interface IAggregateLocalMovie
|
||||||
{
|
{
|
||||||
LocalMovie Aggregate(LocalMovie localMovie, DownloadClientItem downloadClientItem, bool otherFiles);
|
LocalMovie Aggregate(LocalMovie localMovie, DownloadClientItem downloadClientItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,8 +118,8 @@ public List<ImportResult> Import(List<ImportDecision> decisions, bool newDownloa
|
|||||||
|
|
||||||
if (newDownload)
|
if (newDownload)
|
||||||
{
|
{
|
||||||
|
movieFile.SceneName = localMovie.SceneName;
|
||||||
movieFile.OriginalFilePath = GetOriginalFilePath(downloadClientItem, localMovie);
|
movieFile.OriginalFilePath = GetOriginalFilePath(downloadClientItem, localMovie);
|
||||||
movieFile.SceneName = GetSceneName(downloadClientItem, localMovie);
|
|
||||||
var moveResult = _movieFileUpgrader.UpgradeMovieFile(movieFile, localMovie, copyOnly); //TODO: Check if this works
|
var moveResult = _movieFileUpgrader.UpgradeMovieFile(movieFile, localMovie, copyOnly); //TODO: Check if this works
|
||||||
oldFiles = moveResult.OldFiles;
|
oldFiles = moveResult.OldFiles;
|
||||||
}
|
}
|
||||||
@ -208,32 +208,5 @@ private string GetOriginalFilePath(DownloadClientItem downloadClientItem, LocalM
|
|||||||
|
|
||||||
return Path.Combine(Path.GetFileName(parentPath), Path.GetFileName(path));
|
return Path.Combine(Path.GetFileName(parentPath), Path.GetFileName(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetSceneName(DownloadClientItem downloadClientItem, LocalMovie localMovie)
|
|
||||||
{
|
|
||||||
if (downloadClientItem != null)
|
|
||||||
{
|
|
||||||
var sceneNameTitle = SceneChecker.GetSceneTitle(downloadClientItem.Title);
|
|
||||||
if (sceneNameTitle != null)
|
|
||||||
{
|
|
||||||
return sceneNameTitle;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var fileName = Path.GetFileNameWithoutExtension(localMovie.Path.CleanFilePath());
|
|
||||||
var sceneNameFile = SceneChecker.GetSceneTitle(fileName);
|
|
||||||
if (sceneNameFile != null)
|
|
||||||
{
|
|
||||||
return sceneNameFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
var folderTitle = localMovie.FolderMovieInfo?.ReleaseTitle;
|
|
||||||
if (folderTitle.IsNotNullOrWhiteSpace() && SceneChecker.IsSceneTitle(folderTitle))
|
|
||||||
{
|
|
||||||
return folderTitle;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,8 @@ public List<ImportDecision> GetImportDecisions(List<string> videoFiles, Movie mo
|
|||||||
FolderMovieInfo = folderInfo,
|
FolderMovieInfo = folderInfo,
|
||||||
Path = file,
|
Path = file,
|
||||||
SceneSource = sceneSource,
|
SceneSource = sceneSource,
|
||||||
ExistingFile = movie.Path.IsParentPath(file)
|
ExistingFile = movie.Path.IsParentPath(file),
|
||||||
|
OtherVideoFiles = nonSampleVideoFileCount > 1
|
||||||
};
|
};
|
||||||
|
|
||||||
decisions.AddIfNotNull(GetDecision(localMovie, downloadClientItem, nonSampleVideoFileCount > 1));
|
decisions.AddIfNotNull(GetDecision(localMovie, downloadClientItem, nonSampleVideoFileCount > 1));
|
||||||
@ -124,7 +125,7 @@ private ImportDecision GetDecision(LocalMovie localMovie, DownloadClientItem dow
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_aggregationService.Augment(localMovie, downloadClientItem, otherFiles);
|
_aggregationService.Augment(localMovie, downloadClientItem);
|
||||||
|
|
||||||
if (localMovie.Movie == null)
|
if (localMovie.Movie == null)
|
||||||
{
|
{
|
||||||
|
@ -341,7 +341,7 @@ public void Execute(ManualImportCommand message)
|
|||||||
localMovie.SceneSource = !existingFile;
|
localMovie.SceneSource = !existingFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
localMovie = _aggregationService.Augment(localMovie, trackedDownload?.DownloadItem, false);
|
localMovie = _aggregationService.Augment(localMovie, trackedDownload?.DownloadItem);
|
||||||
|
|
||||||
// Apply the user-chosen values.
|
// Apply the user-chosen values.
|
||||||
localMovie.Movie = movie;
|
localMovie.Movie = movie;
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
using System.IO;
|
||||||
|
using NzbDrone.Common.Extensions;
|
||||||
|
using NzbDrone.Core.Parser;
|
||||||
|
using NzbDrone.Core.Parser.Model;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.MediaFiles.MovieImport
|
||||||
|
{
|
||||||
|
public static class SceneNameCalculator
|
||||||
|
{
|
||||||
|
public static string GetSceneName(LocalMovie localMovie)
|
||||||
|
{
|
||||||
|
var otherVideoFiles = localMovie.OtherVideoFiles;
|
||||||
|
var downloadClientInfo = localMovie.DownloadClientMovieInfo;
|
||||||
|
|
||||||
|
if (!otherVideoFiles && downloadClientInfo != null)
|
||||||
|
{
|
||||||
|
return Parser.Parser.RemoveFileExtension(downloadClientInfo.ReleaseTitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
var fileName = Path.GetFileNameWithoutExtension(localMovie.Path.CleanFilePath());
|
||||||
|
|
||||||
|
if (SceneChecker.IsSceneTitle(fileName))
|
||||||
|
{
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
var folderTitle = localMovie.FolderMovieInfo?.ReleaseTitle;
|
||||||
|
|
||||||
|
if (!otherVideoFiles &&
|
||||||
|
folderTitle.IsNotNullOrWhiteSpace() &&
|
||||||
|
SceneChecker.IsSceneTitle(folderTitle))
|
||||||
|
{
|
||||||
|
return folderTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -25,6 +25,8 @@ public LocalMovie()
|
|||||||
public bool SceneSource { get; set; }
|
public bool SceneSource { get; set; }
|
||||||
public string ReleaseGroup { get; set; }
|
public string ReleaseGroup { get; set; }
|
||||||
public string Edition { get; set; }
|
public string Edition { get; set; }
|
||||||
|
public string SceneName { get; set; }
|
||||||
|
public bool OtherVideoFiles { get; set; }
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user