mirror of https://github.com/lidarr/Lidarr
Updates to UI, Update NLog to 4.4.12
This commit is contained in:
parent
31db4e2026
commit
c8ed46850a
|
@ -240,7 +240,6 @@
|
|||
one-var-declaration-per-line: ["error", "always"],
|
||||
operator-assignment: ["off", "never"],
|
||||
operator-linebreak: ["error", "after"],
|
||||
padded-blocks: ["error", "never"],
|
||||
quote-props: ["error", "as-needed"],
|
||||
quotes: ["error", "single"],
|
||||
require-jsdoc: "off",
|
||||
|
@ -283,6 +282,6 @@
|
|||
"react/react-in-jsx-scope": 2,
|
||||
"react/self-closing-comp": 2,
|
||||
"react/sort-comp": 2,
|
||||
"react/wrap-multilines": 2
|
||||
"react/jsx-wrap-multilines": 2
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,9 @@
|
|||
const _ = require('lodash');
|
||||
const gulp = require('gulp');
|
||||
const simpleVars = require('postcss-simple-vars');
|
||||
const nested = require('postcss-nested');
|
||||
const autoprefixer = require('autoprefixer');
|
||||
const webpackStream = require('webpack-stream');
|
||||
const livereload = require('gulp-livereload');
|
||||
const path = require('path');
|
||||
const webpack = require('webpack');
|
||||
const errorHandler = require('./helpers/errorHandler');
|
||||
const reload = require('require-nocache')(module);
|
||||
const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
||||
|
||||
const uiFolder = 'UI';
|
||||
|
@ -18,13 +13,20 @@ const isProduction = process.argv.indexOf('--production') > -1;
|
|||
console.log('ROOT:', root);
|
||||
console.log('isProduction:', isProduction);
|
||||
|
||||
const cssVariables = [
|
||||
const cssVarsFiles = [
|
||||
'../src/Styles/Variables/colors',
|
||||
'../src/Styles/Variables/dimensions',
|
||||
'../src/Styles/Variables/fonts',
|
||||
'../src/Styles/Variables/animations'
|
||||
].map(require.resolve);
|
||||
|
||||
const extractCSSPlugin = new ExtractTextPlugin({
|
||||
filename: path.join('_output', uiFolder, 'Content', 'styles.css'),
|
||||
allChunks: true,
|
||||
disable: false,
|
||||
ignoreOrder: true
|
||||
});
|
||||
|
||||
const config = {
|
||||
devtool: '#source-map',
|
||||
stats: {
|
||||
|
@ -39,9 +41,10 @@ const config = {
|
|||
index: 'index.js'
|
||||
},
|
||||
resolve: {
|
||||
root: [
|
||||
modules: [
|
||||
root,
|
||||
path.join(root, 'Shims')
|
||||
path.join(root, 'Shims'),
|
||||
'node_modules'
|
||||
],
|
||||
alias: {
|
||||
jquery: 'jquery/src/jquery'
|
||||
|
@ -52,10 +55,11 @@ const config = {
|
|||
sourceMapFilename: '[file].map'
|
||||
},
|
||||
plugins: [
|
||||
new ExtractTextPlugin(path.join('_output', uiFolder, 'Content', 'styles.css'), { allChunks: true }),
|
||||
extractCSSPlugin,
|
||||
new webpack.optimize.CommonsChunkPlugin({
|
||||
name: 'vendor'
|
||||
}),
|
||||
|
||||
new webpack.DefinePlugin({
|
||||
__DEV__: !isProduction,
|
||||
'process.env': {
|
||||
|
@ -64,22 +68,23 @@ const config = {
|
|||
})
|
||||
],
|
||||
resolveLoader: {
|
||||
modulesDirectories: [
|
||||
modules: [
|
||||
'node_modules',
|
||||
'gulp/webpack/'
|
||||
'frontend/gulp/webpack/'
|
||||
]
|
||||
},
|
||||
eslint: {
|
||||
formatter: function(results) {
|
||||
return JSON.stringify(results);
|
||||
}
|
||||
},
|
||||
// TODO: Do we need this loader?
|
||||
// eslint: {
|
||||
// formatter: function(results) {
|
||||
// return JSON.stringify(results);
|
||||
// }
|
||||
// },
|
||||
module: {
|
||||
loaders: [
|
||||
rules: [
|
||||
{
|
||||
test: /\.js?$/,
|
||||
exclude: /(node_modules|JsLibraries)/,
|
||||
loader: 'babel',
|
||||
loader: 'babel-loader',
|
||||
query: {
|
||||
plugins: ['transform-class-properties'],
|
||||
presets: ['es2015', 'decorators-legacy', 'react', 'stage-2'],
|
||||
|
@ -95,51 +100,80 @@ const config = {
|
|||
{
|
||||
test: /\.css$/,
|
||||
exclude: /(node_modules|globals.css)/,
|
||||
loader: ExtractTextPlugin.extract('style', 'css-loader?modules&importLoaders=1&sourceMap&localIdentName=[name]__[local]___[hash:base64:5]!postcss-loader')
|
||||
use: extractCSSPlugin.extract({
|
||||
fallback: 'style-loader',
|
||||
use: [
|
||||
{
|
||||
loader: 'css-variables-loader',
|
||||
options: {
|
||||
cssVarsFiles
|
||||
}
|
||||
},
|
||||
{
|
||||
loader: 'css-loader',
|
||||
options: {
|
||||
modules: true,
|
||||
importLoaders: 1,
|
||||
localIdentName: '[name]-[local]-[hash:base64:5]',
|
||||
sourceMap: true
|
||||
}
|
||||
},
|
||||
{
|
||||
loader: 'postcss-loader',
|
||||
options: {
|
||||
config: {
|
||||
ctx: {
|
||||
cssVarsFiles
|
||||
},
|
||||
path: 'frontend/postcss.config.js'
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
},
|
||||
|
||||
// Global styles
|
||||
{
|
||||
test: /\.css$/,
|
||||
include: /(node_modules|globals.css)/,
|
||||
loader: 'style!css-loader'
|
||||
use: [
|
||||
'style-loader',
|
||||
{
|
||||
loader: 'css-loader'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// Fonts
|
||||
{
|
||||
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
|
||||
loader: 'url?limit=10240&mimetype=application/font-woff&emitFile=false&name=Content/Fonts/[name].[ext]'
|
||||
use: [
|
||||
{
|
||||
loader: 'url-loader',
|
||||
options: {
|
||||
limit: 10240,
|
||||
mimetype: 'application/font-woff',
|
||||
emitFile: false,
|
||||
name: 'Content/Fonts/[name].[ext]'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
test: /\.(ttf|eot|eot?#iefix|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
|
||||
loader: 'file-loader?emitFile=false&name=Content/Fonts/[name].[ext]'
|
||||
use: [
|
||||
{
|
||||
loader: 'file-loader',
|
||||
options: {
|
||||
emitFile: false,
|
||||
name: 'Content/Fonts/[name].[ext]'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
postcss: function(wpack) {
|
||||
cssVariables.forEach(wpack.addDependency);
|
||||
|
||||
return [
|
||||
simpleVars({
|
||||
variables: function() {
|
||||
return cssVariables.reduce(function(obj, vars) {
|
||||
return _.extend(obj, reload(vars));
|
||||
}, {});
|
||||
}
|
||||
}),
|
||||
nested(),
|
||||
autoprefixer({
|
||||
browsers: [
|
||||
'Chrome >= 30',
|
||||
'Firefox >= 30',
|
||||
'Safari >= 6',
|
||||
'Edge >= 12',
|
||||
'Explorer >= 10',
|
||||
'iOS >= 7',
|
||||
'Android >= 4.4'
|
||||
]
|
||||
})
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
const loaderUtils = require('loader-utils');
|
||||
|
||||
module.exports = function cssVariablesLoader(source) {
|
||||
const options = loaderUtils.getOptions(this);
|
||||
|
||||
options.cssVarsFiles.forEach((cssVarsFile) => {
|
||||
this.addDependency(cssVarsFile);
|
||||
});
|
||||
|
||||
return source;
|
||||
};
|
|
@ -0,0 +1,33 @@
|
|||
const reload = require('require-nocache')(module);
|
||||
|
||||
module.exports = (ctx, configPath, options) => {
|
||||
const config = {
|
||||
plugins: {
|
||||
'postcss-simple-vars': {
|
||||
variables: () =>
|
||||
ctx.options.cssVarsFiles.reduce((acc, vars) => {
|
||||
return Object.assign(acc, reload(vars));
|
||||
}, {})
|
||||
},
|
||||
'postcss-nested': {},
|
||||
'postcss-mixins': {
|
||||
mixinsDir: [
|
||||
'frontend/src/Styles/Mixins'
|
||||
]
|
||||
},
|
||||
autoprefixer: {
|
||||
browsers: [
|
||||
'Chrome >= 30',
|
||||
'Firefox >= 30',
|
||||
'Safari >= 6',
|
||||
'Edge >= 12',
|
||||
'Explorer >= 11',
|
||||
'iOS >= 7',
|
||||
'Android >= 4.4'
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return config;
|
||||
};
|
|
@ -3,16 +3,19 @@ import React, { Component } from 'react';
|
|||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import { fetchHistory, markAsFailed } from 'Store/Actions/historyActions';
|
||||
import createArtistSelector from 'Store/Selectors/createArtistSelector';
|
||||
import createEpisodeSelector from 'Store/Selectors/createEpisodeSelector';
|
||||
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
|
||||
import HistoryRow from './HistoryRow';
|
||||
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
createArtistSelector(),
|
||||
createEpisodeSelector(),
|
||||
createUISettingsSelector(),
|
||||
(episode, uiSettings) => {
|
||||
(artist, episode, uiSettings) => {
|
||||
return {
|
||||
artist,
|
||||
episode,
|
||||
shortDateFormat: uiSettings.shortDateFormat,
|
||||
timeFormat: uiSettings.timeFormat
|
||||
|
@ -28,6 +31,9 @@ const mapDispatchToProps = {
|
|||
|
||||
class HistoryRowConnector extends Component {
|
||||
|
||||
//
|
||||
// Lifecycle
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
if (
|
||||
prevProps.isMarkingAsFailed &&
|
||||
|
|
|
@ -52,8 +52,8 @@
|
|||
}
|
||||
|
||||
.addButton {
|
||||
@add-mixin truncate;
|
||||
composes: button from 'Components/Link/SpinnerButton.css';
|
||||
composes: truncate from 'Styles/mixins/truncate.css';
|
||||
}
|
||||
|
||||
.hideLanguageProfile {
|
||||
|
|
|
@ -42,7 +42,7 @@ $hoverScale: 1.05;
|
|||
}
|
||||
|
||||
.title {
|
||||
composes: truncate from 'Styles/mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
background-color: $defaultColor;
|
||||
color: $white;
|
||||
|
|
|
@ -41,7 +41,7 @@ $hoverScale: 1.05;
|
|||
}
|
||||
|
||||
.title {
|
||||
composes: truncate from 'Styles/mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
background-color: $defaultColor;
|
||||
color: $white;
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
.artistName,
|
||||
.albumTitle {
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
flex: 0 1 300px;
|
||||
margin-right: 10px;
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
.artistName,
|
||||
.albumTitle {
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
flex: 1 0 1px;
|
||||
margin-right: 10px;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
@media (min-width: 768px) {
|
||||
.title {
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
float: left;
|
||||
clear: left;
|
||||
|
|
|
@ -24,9 +24,9 @@
|
|||
}
|
||||
|
||||
.pathContainer {
|
||||
composes: scrollbar from 'Styles/Mixins/scroller.css';
|
||||
composes: scrollbarTrack from 'Styles/Mixins/scroller.css';
|
||||
composes: scrollbarThumb from 'Styles/Mixins/scroller.css';
|
||||
@add-mixin scrollbar;
|
||||
@add-mixin scrollbarTrack;
|
||||
@add-mixin scrollbarThumb;
|
||||
}
|
||||
|
||||
.pathInputContainerOpen {
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
}
|
||||
|
||||
.path {
|
||||
composes: truncate from 'Styles/mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
flex: 1 0 0;
|
||||
}
|
||||
|
||||
.freeSpace {
|
||||
composes: truncate from 'Styles/mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
flex: 1 0 0;
|
||||
margin-left: 15px;
|
||||
|
|
|
@ -14,7 +14,7 @@ function Icon(props) {
|
|||
} = props;
|
||||
|
||||
return (
|
||||
<icon
|
||||
<i
|
||||
className={classNames(
|
||||
name,
|
||||
className,
|
||||
|
@ -25,7 +25,7 @@ function Icon(props) {
|
|||
fontSize: `${size}px`
|
||||
}}
|
||||
>
|
||||
</icon>
|
||||
</i>
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.menuItem {
|
||||
composes: truncate from 'Styles/mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
display: block;
|
||||
flex-shrink: 0;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.modalHeader {
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
flex-shrink: 0;
|
||||
padding: 15px 50px 15px 30px;
|
||||
|
|
|
@ -37,9 +37,9 @@
|
|||
}
|
||||
|
||||
.seriesContainer {
|
||||
composes: scrollbar from 'Styles/Mixins/scroller.css';
|
||||
composes: scrollbarTrack from 'Styles/Mixins/scroller.css';
|
||||
composes: scrollbarThumb from 'Styles/Mixins/scroller.css';
|
||||
@add-mixin scrollbar;
|
||||
@add-mixin scrollbarTrack;
|
||||
@add-mixin scrollbarThumb;
|
||||
}
|
||||
|
||||
.containerOpen {
|
||||
|
|
|
@ -29,6 +29,6 @@
|
|||
.titles,
|
||||
.title,
|
||||
.alternateTitle {
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -330,9 +330,9 @@ class PageSidebar extends Component {
|
|||
return;
|
||||
}
|
||||
|
||||
if (isSidebarVisible && (touchStartX > 210 || touchStartX < 50)) {
|
||||
if (isSidebarVisible && (touchStartX > 210 || touchStartX < 180)) {
|
||||
return;
|
||||
} else if (!isSidebarVisible && touchStartX > 50) {
|
||||
} else if (!isSidebarVisible && touchStartX > 30) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -373,6 +373,15 @@ class PageSidebar extends Component {
|
|||
}
|
||||
|
||||
if (Math.abs(this._touchStartY - currentTouchY) > 20) {
|
||||
this.setState({
|
||||
transition: 'none',
|
||||
transform: 0
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (Math.abs(this._touchStartX - currentTouchX) < 20) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ class PageSidebarItem extends Component {
|
|||
</span>
|
||||
}
|
||||
|
||||
<span className={isChildItem && styles.noIcon}>
|
||||
<span className={isChildItem ? styles.noIcon : null}>
|
||||
{title}
|
||||
</span>
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.scroller {
|
||||
composes: scrollbar from 'Styles/Mixins/scroller.css';
|
||||
composes: scrollbarTrack from 'Styles/Mixins/scroller.css';
|
||||
composes: scrollbarThumb from 'Styles/Mixins/scroller.css';
|
||||
@add-mixin scrollbar;
|
||||
@add-mixin scrollbarTrack;
|
||||
@add-mixin scrollbarThumb;
|
||||
}
|
||||
|
||||
.none {
|
||||
|
|
|
@ -306,15 +306,17 @@ class SignalRConnector extends Component {
|
|||
}
|
||||
|
||||
onDisconnected = () => {
|
||||
if (this.props.isReconnecting) {
|
||||
this.props.setAppValue({
|
||||
isConnected: false,
|
||||
isReconnecting: true,
|
||||
isDisconnected: true
|
||||
});
|
||||
|
||||
this.retryConnection();
|
||||
if (window.Sonarr.unloading) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.props.setAppValue({
|
||||
isConnected: false,
|
||||
isReconnecting: true,
|
||||
isDisconnected: true
|
||||
});
|
||||
|
||||
this.retryConnection();
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.cell {
|
||||
@add-mixin truncate;
|
||||
composes: cell from 'Components/Table/Cells/TableRowCell.css';
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
|
||||
flex-grow: 0;
|
||||
flex-shrink: 1;
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
}
|
||||
|
||||
.path {
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
flex: 1 0 1px;
|
||||
}
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
}
|
||||
|
||||
.underlay {
|
||||
composes: cover from 'Styles/Mixins/cover.css';
|
||||
@add-mixin cover;
|
||||
}
|
||||
|
||||
.overlay {
|
||||
composes: linkOverlay from 'Styles/Mixins/linkOverlay.css';
|
||||
@add-mixin linkOverlay;
|
||||
|
||||
padding: 10px;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
}
|
||||
|
||||
.name {
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
margin-bottom: 20px;
|
||||
font-weight: 300;
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
}
|
||||
|
||||
.underlay {
|
||||
composes: cover from 'Styles/Mixins/cover.css';
|
||||
@add-mixin cover;
|
||||
}
|
||||
|
||||
.overlay {
|
||||
composes: linkOverlay from 'Styles/Mixins/linkOverlay.css';
|
||||
@add-mixin linkOverlay;
|
||||
|
||||
padding: 10px;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
}
|
||||
|
||||
.name {
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
margin-bottom: 20px;
|
||||
font-weight: 300;
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
}
|
||||
|
||||
.underlay {
|
||||
composes: cover from 'Styles/Mixins/cover.css';
|
||||
@add-mixin cover;
|
||||
}
|
||||
|
||||
.overlay {
|
||||
composes: linkOverlay from 'Styles/Mixins/linkOverlay.css';
|
||||
@add-mixin linkOverlay;
|
||||
|
||||
padding: 10px;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
}
|
||||
|
||||
.name {
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
margin-bottom: 20px;
|
||||
font-weight: 300;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
}
|
||||
|
||||
.name {
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
margin-bottom: 20px;
|
||||
font-weight: 300;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
}
|
||||
|
||||
.name {
|
||||
composes: truncate from 'Styles/Mixins/truncate.css';
|
||||
@add-mixin truncate;
|
||||
|
||||
margin-bottom: 20px;
|
||||
font-weight: 300;
|
||||
|
|
|
@ -25,25 +25,23 @@
|
|||
}
|
||||
|
||||
.bar {
|
||||
top: 6px;
|
||||
top: 9px;
|
||||
margin: 0 5px;
|
||||
height: 10px;
|
||||
border: 1px solid $sliderAccentColor;
|
||||
border-radius: 4px;
|
||||
height: 3px;
|
||||
background-color: $sliderAccentColor;
|
||||
box-shadow: 0 0 0 #000;
|
||||
|
||||
&:nth-child(odd) {
|
||||
background-color: $white;
|
||||
background-color: #ddd;
|
||||
}
|
||||
}
|
||||
|
||||
.handle {
|
||||
top: 1px;
|
||||
z-index: 0 !important;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border: 1px solid $sliderAccentColor;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
border: 3px solid $sliderAccentColor;
|
||||
border-radius: 50%;
|
||||
background-color: $white;
|
||||
text-align: center;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.cover {
|
||||
@define-mixin cover {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.linkOverlay {
|
||||
composes: cover from 'Styles/Mixins/cover.css';
|
||||
@define-mixin linkOverlay {
|
||||
@add-mixin cover;
|
||||
|
||||
pointer-events: none;
|
||||
user-select: none;
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
.scrollbar {
|
||||
@define-mixin scrollbar {
|
||||
&::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
.scrollbarTrack {
|
||||
@define-mixin scrollbarTrack {
|
||||
&&::-webkit-scrollbar-track {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.scrollbarThumb {
|
||||
@define-mixin scrollbarThumb {
|
||||
&::-webkit-scrollbar-thumb {
|
||||
min-height: 50px;
|
||||
border: 1px solid transparent;
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
* occur.
|
||||
*/
|
||||
|
||||
.truncate {
|
||||
@define-mixin truncate {
|
||||
overflow: hidden !important;
|
||||
max-width: 100%; /* 1 */
|
||||
text-overflow: ellipsis !important;
|
||||
|
|
|
@ -20,7 +20,7 @@ import FilterMenu from 'Components/Menu/FilterMenu';
|
|||
import MenuContent from 'Components/Menu/MenuContent';
|
||||
import FilterMenuItem from 'Components/Menu/FilterMenuItem';
|
||||
import ConfirmModal from 'Components/Modal/ConfirmModal';
|
||||
import CutoffUnmetRow from './CutoffUnmetRow';
|
||||
import CutoffUnmetRowConnector from './CutoffUnmetRowConnector';
|
||||
|
||||
class CutoffUnmet extends Component {
|
||||
|
||||
|
@ -219,7 +219,7 @@ class CutoffUnmet extends Component {
|
|||
{
|
||||
items.map((item) => {
|
||||
return (
|
||||
<CutoffUnmetRow
|
||||
<CutoffUnmetRowConnector
|
||||
key={item.id}
|
||||
isSelected={selectedState[item.id]}
|
||||
columns={columns}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import createArtistSelector from 'Store/Selectors/createArtistSelector';
|
||||
import CutoffUnmetRow from './CutoffUnmetRow';
|
||||
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
createArtistSelector(),
|
||||
(artist) => {
|
||||
return {
|
||||
artist
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
export default connect(createMapStateToProps)(CutoffUnmetRow);
|
|
@ -21,7 +21,7 @@ import MenuContent from 'Components/Menu/MenuContent';
|
|||
import FilterMenuItem from 'Components/Menu/FilterMenuItem';
|
||||
import ConfirmModal from 'Components/Modal/ConfirmModal';
|
||||
import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';
|
||||
import MissingRow from './MissingRow';
|
||||
import MissingRowConnector from './MissingRowConnector';
|
||||
|
||||
class Missing extends Component {
|
||||
|
||||
|
@ -236,7 +236,7 @@ class Missing extends Component {
|
|||
{
|
||||
items.map((item) => {
|
||||
return (
|
||||
<MissingRow
|
||||
<MissingRowConnector
|
||||
key={item.id}
|
||||
isSelected={selectedState[item.id]}
|
||||
columns={columns}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import createArtistSelector from 'Store/Selectors/createArtistSelector';
|
||||
import MissingRow from './MissingRow';
|
||||
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
createArtistSelector(),
|
||||
(artist) => {
|
||||
return {
|
||||
artist
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
export default connect(createMapStateToProps)(MissingRow);
|
|
@ -48,8 +48,8 @@
|
|||
</head>
|
||||
|
||||
<body>
|
||||
<div id="root" class="root">
|
||||
</div>
|
||||
<div id="modal-root"></div>
|
||||
<div id="root" class="root"></div>
|
||||
</body>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
|
127
package.json
127
package.json
|
@ -13,94 +13,97 @@
|
|||
"author": "Team Lidarr",
|
||||
"license": "GPL-3.0",
|
||||
"readmeFilename": "readme.md",
|
||||
"dependencies": {
|
||||
"autoprefixer": "6.3.6",
|
||||
"babel-core": "6.9.0",
|
||||
"babel-eslint": "7.1.0",
|
||||
"babel-loader": "6.2.4",
|
||||
"babel-plugin-transform-class-properties": "6.16.0",
|
||||
"dependencies": {
|
||||
"autoprefixer": "7.1.4",
|
||||
"babel-core": "6.26.0",
|
||||
"babel-eslint": "8.0.1",
|
||||
"babel-loader": "7.1.2",
|
||||
"babel-plugin-transform-class-properties": "6.24.1",
|
||||
"babel-preset-decorators-legacy": "1.0.0",
|
||||
"babel-preset-es2015": "6.9.0",
|
||||
"babel-preset-react": "6.22.0",
|
||||
"babel-preset-stage-2": "6.5.0",
|
||||
"babel-preset-es2015": "6.24.1",
|
||||
"babel-preset-react": "6.24.1",
|
||||
"babel-preset-stage-2": "6.24.1",
|
||||
"classnames": "2.2.5",
|
||||
"clipboard": "1.7.1",
|
||||
"css-loader": "0.23.1",
|
||||
"del": "2.2.0",
|
||||
"create-react-class": "^15.6.2",
|
||||
"css-loader": "0.28.7",
|
||||
"del": "3.0.0",
|
||||
"element-class": "0.2.2",
|
||||
"esformatter": "0.9.3",
|
||||
"eslint": "2.10.2",
|
||||
"eslint-loader": "1.3.0",
|
||||
"eslint-plugin-filenames": "1.0.0",
|
||||
"eslint-plugin-react": "5.2.2",
|
||||
"extract-text-webpack-plugin": "1.0.1",
|
||||
"file-loader": "0.9.0",
|
||||
"filesize": "3.5.4",
|
||||
"esformatter": "0.10.0",
|
||||
"eslint": "4.7.2",
|
||||
"eslint-loader": "1.9.0",
|
||||
"eslint-plugin-filenames": "1.2.0",
|
||||
"eslint-plugin-react": "7.4.0",
|
||||
"extract-text-webpack-plugin": "3.0.0",
|
||||
"file-loader": "0.11.2",
|
||||
"filesize": "3.5.10",
|
||||
"gulp": "3.9.1",
|
||||
"gulp-cached": "1.1.0",
|
||||
"gulp-clean-css": "3.3.1",
|
||||
"gulp-concat": "2.6.0",
|
||||
"gulp-cached": "1.1.1",
|
||||
"gulp-clean-css": "3.9.0",
|
||||
"gulp-concat": "2.6.1",
|
||||
"gulp-declare": "0.3.0",
|
||||
"gulp-livereload": "3.8.1",
|
||||
"gulp-postcss": "6.1.1",
|
||||
"gulp-postcss": "7.0.0",
|
||||
"gulp-print": "2.0.1",
|
||||
"gulp-sourcemaps": "1.6.0",
|
||||
"gulp-sourcemaps": "2.6.1",
|
||||
"gulp-stripbom": "1.0.4",
|
||||
"gulp-util": "3.0.7",
|
||||
"gulp-watch": "4.3.5",
|
||||
"gulp-util": "3.0.8",
|
||||
"gulp-watch": "4.3.11",
|
||||
"gulp-wrap": "0.13.0",
|
||||
"history": "4.6.3",
|
||||
"history": "4.7.2",
|
||||
"jdu": "1.0.0",
|
||||
"jquery": "2.2.4",
|
||||
"loader-utils": "^1.1.0",
|
||||
"lodash": "4.17.4",
|
||||
"mobile-detect": "1.3.6",
|
||||
"moment": "2.17.1",
|
||||
"mousetrap": "1.6.0",
|
||||
"normalize.css": "5.0.0",
|
||||
"postcss-loader": "0.9.1",
|
||||
"postcss-nested": "1.0.0",
|
||||
"postcss-simple-vars": "3.0.0",
|
||||
"prop-types": "15.5.10",
|
||||
"query-string": "https://registry.npmjs.org/query-string/-/query-string-4.2.2.tgz",
|
||||
"raven-js": "3.17.0",
|
||||
"raven-for-redux": "1.0.0",
|
||||
"react": "15.6.1",
|
||||
"react-addons-shallow-compare": "15.6.0",
|
||||
"mobile-detect": "1.3.7",
|
||||
"moment": "2.18.1",
|
||||
"mousetrap": "1.6.1",
|
||||
"normalize.css": "7.0.0",
|
||||
"postcss-loader": "2.0.6",
|
||||
"postcss-mixins": "6.1.1",
|
||||
"postcss-nested": "2.1.2",
|
||||
"postcss-simple-vars": "4.1.0",
|
||||
"prop-types": "15.6.0",
|
||||
"query-string": "5.0.0",
|
||||
"react": "15.6.0",
|
||||
"react-addons-shallow-compare": "15.6.2",
|
||||
"react-async-script": "0.9.1",
|
||||
"react-autosuggest": "9.3.0",
|
||||
"react-autosuggest": "9.3.2",
|
||||
"react-custom-scrollbars": "4.1.2",
|
||||
"react-dnd": "2.4.0",
|
||||
"react-dnd-html5-backend": "2.4.1",
|
||||
"react-dnd": "2.5.3",
|
||||
"react-dnd-html5-backend": "2.5.3",
|
||||
"react-document-title": "2.0.3",
|
||||
"react-dom": "15.6.1",
|
||||
"react-google-recaptcha": "0.9.6",
|
||||
"react-dom": "15.6.0",
|
||||
"react-google-recaptcha": "0.9.7",
|
||||
"react-lazyload": "2.2.7",
|
||||
"react-measure": "1.4.7",
|
||||
"react-portal": "3.1.0",
|
||||
"react-redux": "5.0.5",
|
||||
"react-router-dom": "4.1.1",
|
||||
"react-redux": "5.0.6",
|
||||
"react-router-dom": "4.2.2",
|
||||
"react-router-redux": "5.0.0-alpha.6",
|
||||
"react-slider": "0.8.0",
|
||||
"react-slider": "0.9.0",
|
||||
"react-tabs": "1.1.0",
|
||||
"react-tag-autocomplete": "5.4.0",
|
||||
"react-tag-autocomplete": "5.4.1",
|
||||
"react-tether": "0.5.7",
|
||||
"react-virtualized": "9.8.0",
|
||||
"redux": "3.7.0",
|
||||
"redux-actions": "2.0.3",
|
||||
"react-virtualized": "9.10.1",
|
||||
"redux": "3.7.2",
|
||||
"redux-actions": "2.2.1",
|
||||
"redux-batched-actions": "0.2.0",
|
||||
"redux-localstorage": "0.4.1",
|
||||
"redux-raven-middleware": "1.2.0",
|
||||
"redux-thunk": "2.2.0",
|
||||
"require-nocache": "1.0.0",
|
||||
"reselect": "3.0.1",
|
||||
"run-sequence": "1.2.0",
|
||||
"run-sequence": "2.2.0",
|
||||
"signalr": "2.2.2",
|
||||
"streamqueue": "1.1.1",
|
||||
"style-loader": "0.13.1",
|
||||
"stylelint": "7.3.1",
|
||||
"stylelint-order": "0.6.0",
|
||||
"tar.gz": "1.0.3",
|
||||
"url-loader": "0.5.7",
|
||||
"webpack": "1.13.1",
|
||||
"webpack-stream": "2.1.1"
|
||||
}
|
||||
}
|
||||
"style-loader": "^0.18.2",
|
||||
"stylelint": "8.1.1",
|
||||
"stylelint-order": "0.7.0",
|
||||
"tar.gz": "1.0.5",
|
||||
"url-loader": "0.5.9",
|
||||
"webpack": "3.6.0",
|
||||
"webpack-stream": "^4.0.0"
|
||||
},
|
||||
"main": "index.js"
|
||||
}
|
|
@ -30,13 +30,23 @@ namespace Lidarr.Api.V3.History
|
|||
Post["/failed"] = x => MarkAsFailed();
|
||||
}
|
||||
|
||||
protected HistoryResource MapToResource(NzbDrone.Core.History.History model)
|
||||
protected HistoryResource MapToResource(NzbDrone.Core.History.History model, bool includeArtist, bool includeAlbum, bool includeTrack)
|
||||
{
|
||||
var resource = model.ToResource();
|
||||
|
||||
resource.Artist = model.Artist.ToResource();
|
||||
resource.Album = model.Album.ToResource();
|
||||
resource.Track = model.Track.ToResource();
|
||||
if (includeArtist)
|
||||
{
|
||||
resource.Artist = model.Artist.ToResource();
|
||||
}
|
||||
if (includeAlbum)
|
||||
{
|
||||
resource.Album = model.Album.ToResource();
|
||||
}
|
||||
if (includeTrack)
|
||||
{
|
||||
resource.Track = model.Track.ToResource();
|
||||
}
|
||||
|
||||
|
||||
if (model.Artist != null)
|
||||
{
|
||||
|
@ -52,6 +62,9 @@ namespace Lidarr.Api.V3.History
|
|||
private PagingResource<HistoryResource> GetHistory(PagingResource<HistoryResource> pagingResource)
|
||||
{
|
||||
var pagingSpec = pagingResource.MapToPagingSpec<HistoryResource, NzbDrone.Core.History.History>("date", SortDirection.Descending);
|
||||
var includeArtist = Request.GetBooleanQueryParameter("includeArtist");
|
||||
var includeAlbum = Request.GetBooleanQueryParameter("includeAlbum");
|
||||
var includeTrack = Request.GetBooleanQueryParameter("includeTrack");
|
||||
|
||||
if (pagingResource.FilterKey == "eventType")
|
||||
{
|
||||
|
@ -65,7 +78,7 @@ namespace Lidarr.Api.V3.History
|
|||
pagingSpec.FilterExpression = h => h.AlbumId == albumId;
|
||||
}
|
||||
|
||||
return ApplyToPage(_historyService.Paged, pagingSpec, MapToResource);
|
||||
return ApplyToPage(_historyService.Paged, pagingSpec, h => MapToResource(h, includeArtist, includeAlbum, includeTrack));
|
||||
}
|
||||
|
||||
private Response MarkAsFailed()
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net40\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NodaTime, Version=1.3.0.0, Culture=neutral, PublicKeyToken=4226afe0d9b296d1, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Ical.Net.2.2.32\lib\net40\NodaTime.dll</HintPath>
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace Lidarr.Api.V3.Queue
|
|||
{
|
||||
var pagingSpec = pagingResource.MapToPagingSpec<QueueResource, NzbDrone.Core.Queue.Queue>("timeleft", SortDirection.Ascending);
|
||||
var includeSeries = Request.GetBooleanQueryParameter("includeSeries");
|
||||
var includeEpisode = Request.GetBooleanQueryParameter("includeEpisode", true);
|
||||
var includeEpisode = Request.GetBooleanQueryParameter("includeEpisode");
|
||||
|
||||
return ApplyToPage(GetQueue, pagingSpec, (q) => MapToResource(q, includeSeries, includeEpisode));
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ using NzbDrone.Core.ArtistStats;
|
|||
using NzbDrone.SignalR;
|
||||
using Lidarr.Api.V3.Albums;
|
||||
using Lidarr.Http;
|
||||
using Lidarr.Http.Extensions;
|
||||
|
||||
namespace Lidarr.Api.V3.Wanted
|
||||
{
|
||||
|
@ -35,6 +36,9 @@ namespace Lidarr.Api.V3.Wanted
|
|||
SortDirection = pagingResource.SortDirection
|
||||
};
|
||||
|
||||
var includeArtist = Request.GetBooleanQueryParameter("includeArtist");
|
||||
var includeTrackFile = Request.GetBooleanQueryParameter("includeTrackFile");
|
||||
|
||||
if (pagingResource.FilterKey == "monitored" && pagingResource.FilterValue == "false")
|
||||
{
|
||||
pagingSpec.FilterExpression = v => v.Monitored == false || v.Artist.Monitored == false;
|
||||
|
@ -44,7 +48,7 @@ namespace Lidarr.Api.V3.Wanted
|
|||
pagingSpec.FilterExpression = v => v.Monitored == true && v.Artist.Monitored == true;
|
||||
}
|
||||
|
||||
//var resource = ApplyToPage(_episodeCutoffService.EpisodesWhereCutoffUnmet, pagingSpec, v => MapToResource(v, true));
|
||||
//var resource = ApplyToPage(_episodeCutoffService.EpisodesWhereCutoffUnmet, pagingSpec, v => MapToResource(v, includeSeries, includeEpisodeFile));
|
||||
return null;
|
||||
//return resource;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ using NzbDrone.Core.ArtistStats;
|
|||
using NzbDrone.SignalR;
|
||||
using Lidarr.Api.V3.Albums;
|
||||
using Lidarr.Http;
|
||||
using Lidarr.Http.Extensions;
|
||||
|
||||
namespace Lidarr.Api.V3.Wanted
|
||||
{
|
||||
|
@ -30,6 +31,8 @@ namespace Lidarr.Api.V3.Wanted
|
|||
SortDirection = pagingResource.SortDirection
|
||||
};
|
||||
|
||||
var includeArtist = Request.GetBooleanQueryParameter("includeSeries");
|
||||
|
||||
if (pagingResource.FilterKey == "monitored" && pagingResource.FilterValue == "false")
|
||||
{
|
||||
pagingSpec.FilterExpression = v => v.Monitored == false || v.Artist.Monitored == false;
|
||||
|
@ -39,7 +42,7 @@ namespace Lidarr.Api.V3.Wanted
|
|||
pagingSpec.FilterExpression = v => v.Monitored == true && v.Artist.Monitored == true;
|
||||
}
|
||||
|
||||
var resource = ApplyToPage(_albumService.AlbumsWithoutFiles, pagingSpec, v => MapToResource(v, true));
|
||||
var resource = ApplyToPage(_albumService.AlbumsWithoutFiles, pagingSpec, v => MapToResource(v, includeArtist));
|
||||
|
||||
return resource;
|
||||
}
|
||||
|
|
|
@ -6,5 +6,5 @@
|
|||
<package id="Nancy.Authentication.Basic" version="1.4.1" targetFramework="net461" />
|
||||
<package id="Nancy.Authentication.Forms" version="1.4.1" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
</packages>
|
|
@ -54,7 +54,7 @@
|
|||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net40\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
|
|
|
@ -5,5 +5,5 @@
|
|||
<package id="Nancy.Authentication.Basic" version="1.4.1" targetFramework="net461" />
|
||||
<package id="Nancy.Authentication.Forms" version="1.4.1" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
</packages>
|
|
@ -52,7 +52,7 @@
|
|||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net40\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net40\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="NLog" version="4.4.3" targetFramework="net40" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net40" />
|
||||
</packages>
|
|
@ -53,7 +53,7 @@
|
|||
<HintPath>..\packages\Moq.4.0.10827\lib\NET40\Moq.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="nunit.framework, Version=3.6.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
<package id="FluentAssertions" version="4.19.0" targetFramework="net461" />
|
||||
<package id="Moq" version="4.0.10827" targetFramework="net461" />
|
||||
<package id="NBuilder" version="4.0.0" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="NUnit" version="3.6.0" targetFramework="net461" />
|
||||
</packages>
|
|
@ -48,7 +48,7 @@
|
|||
<HintPath>..\packages\FluentAssertions.4.19.0\lib\net45\FluentAssertions.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="nunit.framework, Version=3.6.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="FluentAssertions" version="4.19.0" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="NUnit" version="3.6.0" targetFramework="net461" />
|
||||
<package id="Selenium.Support" version="3.2.0" targetFramework="net461" />
|
||||
<package id="Selenium.WebDriver" version="3.2.0" targetFramework="net461" />
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
<HintPath>..\packages\Moq.4.0.10827\lib\NET40\Moq.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="nunit.framework, Version=3.6.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
<packages>
|
||||
<package id="FluentAssertions" version="4.19.0" targetFramework="net461" />
|
||||
<package id="Moq" version="4.0.10827" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="NUnit" version="3.6.0" targetFramework="net461" />
|
||||
</packages>
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Security.AccessControl;
|
||||
using System.Security.Principal;
|
||||
using NLog;
|
||||
|
@ -18,7 +18,10 @@ namespace NzbDrone.Common.EnvironmentInfo
|
|||
private readonly IDiskProvider _diskProvider;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public AppFolderFactory(IAppFolderInfo appFolderInfo, IDiskProvider diskProvider)
|
||||
public AppFolderFactory(IAppFolderInfo appFolderInfo,
|
||||
IStartupContext startupContext,
|
||||
IDiskProvider diskProvider,
|
||||
IDiskTransferService diskTransferService)
|
||||
{
|
||||
_appFolderInfo = appFolderInfo;
|
||||
_diskProvider = diskProvider;
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Org.Mentalis, Version=1.0.0.1, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\DotNet4.SocksProxy.1.3.4.0\lib\net40\Org.Mentalis.dll</HintPath>
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
<package id="DotNet4.SocksProxy" version="1.3.4.0" targetFramework="net461" />
|
||||
<package id="ICSharpCode.SharpZipLib.Patched" version="0.86.5" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="SharpRaven" version="2.2.0" targetFramework="net461" />
|
||||
</packages>
|
|
@ -78,7 +78,7 @@
|
|||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
<package id="Microsoft.Owin" version="3.1.0" targetFramework="net461" />
|
||||
<package id="Microsoft.Owin.Hosting" version="3.1.0" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="Owin" version="1.0" targetFramework="net461" />
|
||||
</packages>
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Core.HealthCheck.Checks;
|
||||
|
@ -18,11 +18,13 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|||
.Returns(new Version(version));
|
||||
}
|
||||
|
||||
[TestCase("3.10")]
|
||||
[TestCase("4.0.0.0")]
|
||||
[TestCase("4.2")]
|
||||
[TestCase("4.6")]
|
||||
[TestCase("4.4.2")]
|
||||
[TestCase("4.6")]
|
||||
[TestCase("4.8")]
|
||||
[TestCase("5.0")]
|
||||
[TestCase("5.2")]
|
||||
[TestCase("5.4")]
|
||||
public void should_return_ok(string version)
|
||||
{
|
||||
GivenOutput(version);
|
||||
|
@ -38,6 +40,9 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
|||
[TestCase("3.2.7")]
|
||||
[TestCase("3.6.1")]
|
||||
[TestCase("3.8")]
|
||||
[TestCase("3.10")]
|
||||
[TestCase("4.0.0.0")]
|
||||
[TestCase("4.2")]
|
||||
public void should_return_warning(string version)
|
||||
{
|
||||
GivenOutput(version);
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="nunit.framework, Version=3.6.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<package id="Moq" version="4.0.10827" targetFramework="net461" />
|
||||
<package id="NBuilder" version="4.0.0" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="NUnit" version="3.6.0" targetFramework="net461" />
|
||||
<package id="NUnit3TestAdapter" version="3.7.0" targetFramework="net461" />
|
||||
<package id="Prowlin" version="0.9.4456.26422" targetFramework="net461" />
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using NLog;
|
||||
|
@ -26,21 +26,15 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||
|
||||
var monoVersion = _platformInfo.Version;
|
||||
|
||||
if (monoVersion == new Version("3.4.0") && HasMonoBug18599())
|
||||
{
|
||||
_logger.Debug("Mono version 3.4.0, checking for Mono bug #18599 returned positive.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "You are running an old and unsupported version of Mono with a known bug. You should upgrade to a higher version");
|
||||
}
|
||||
|
||||
if (monoVersion == new Version("4.4.0") || monoVersion == new Version("4.4.1"))
|
||||
{
|
||||
_logger.Debug("Mono version {0}", monoVersion);
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, $"Your Mono version {monoVersion} has a bug that causes issues connecting to indexers/download clients. You should upgrade to a higher version");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, $"Your Mono version {monoVersion} has a bug that causes issues connecting to indexers/download clients. You should upgrade to a higher version");
|
||||
}
|
||||
|
||||
if (monoVersion >= new Version("3.10"))
|
||||
if (monoVersion >= new Version("4.4"))
|
||||
{
|
||||
_logger.Debug("Mono version is 3.10 or better: {0}", monoVersion);
|
||||
_logger.Debug("Mono version is 4.6 or better: {0}", monoVersion);
|
||||
return new HealthCheck(GetType());
|
||||
}
|
||||
|
||||
|
@ -51,33 +45,5 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
|||
|
||||
public override bool CheckOnSchedule => false;
|
||||
|
||||
private bool HasMonoBug18599()
|
||||
{
|
||||
_logger.Debug("mono version 3.4.0, checking for mono bug #18599.");
|
||||
var numberFormatterType = Type.GetType("System.NumberFormatter");
|
||||
|
||||
if (numberFormatterType == null)
|
||||
{
|
||||
_logger.Debug("Couldn't find System.NumberFormatter. Aborting test.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var fieldInfo = numberFormatterType.GetField("userFormatProvider",
|
||||
BindingFlags.Static | BindingFlags.NonPublic);
|
||||
|
||||
if (fieldInfo == null)
|
||||
{
|
||||
_logger.Debug("userFormatProvider field not found, version likely preceeds the official v3.4.0.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (fieldInfo.GetCustomAttributes(false).Any(v => v is ThreadStaticAttribute))
|
||||
{
|
||||
_logger.Debug("userFormatProvider field doesn't contain the ThreadStatic Attribute, version is affected by the critical bug #18599.");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="OAuth, Version=1.0.0.0, Culture=neutral, PublicKeyToken=75b3c62967edc2a2, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\OAuth.1.0.3\lib\net40\OAuth.dll</HintPath>
|
||||
|
|
|
@ -167,7 +167,7 @@ namespace NzbDrone.Core.Update
|
|||
throw new UpdateFailedException("Update Script: '{0}' does not exist", scriptPath);
|
||||
}
|
||||
|
||||
_logger.Info("Removing NzbDrone.Update");
|
||||
_logger.Info("Removing Lidarr.Update");
|
||||
_diskProvider.DeleteFolder(_appFolderInfo.GetUpdateClientFolder(), true);
|
||||
|
||||
_logger.ProgressInfo("Starting update script: {0}", _configFileProvider.UpdateScriptPath);
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<package id="FluentValidation" version="6.2.1.0" targetFramework="net461" />
|
||||
<package id="ImageResizer" version="3.4.3" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="OAuth" version="1.0.3" targetFramework="net461" />
|
||||
<package id="Prowlin" version="0.9.4456.26422" targetFramework="net461" />
|
||||
<package id="RestSharp" version="105.2.3" targetFramework="net461" />
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
||||
|
|
|
@ -13,6 +13,6 @@
|
|||
<package id="Nancy" version="1.4.4" targetFramework="net461" />
|
||||
<package id="Nancy.Owin" version="1.4.1" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="Owin" version="1.0" targetFramework="net461" />
|
||||
</packages>
|
|
@ -75,7 +75,7 @@
|
|||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="nunit.framework, Version=3.6.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<package id="Nancy" version="1.4.4" targetFramework="net461" />
|
||||
<package id="Nancy.Owin" version="1.4.1" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="NUnit" version="3.6.0" targetFramework="net461" />
|
||||
<package id="Owin" version="1.0" targetFramework="net461" />
|
||||
<package id="RestSharp" version="105.2.3" targetFramework="net461" />
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
</packages>
|
|
@ -65,7 +65,7 @@
|
|||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="nunit.framework, Version=3.6.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<package id="FluentValidation" version="6.2.1.0" targetFramework="net461" />
|
||||
<package id="Moq" version="4.0.10827" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="NUnit" version="3.6.0" targetFramework="net461" />
|
||||
<package id="RestSharp" version="105.2.3" targetFramework="net461" />
|
||||
<package id="Unity" version="2.1.505.2" targetFramework="net461" />
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
<HintPath>..\packages\Moq.4.0.10827\lib\NET40\Moq.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="nunit.framework, Version=3.6.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
<package id="FluentAssertions" version="4.19.0" targetFramework="net461" />
|
||||
<package id="Moq" version="4.0.10827" targetFramework="net461" />
|
||||
<package id="NBuilder" version="4.0.0" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="NUnit" version="3.6.0" targetFramework="net461" />
|
||||
</packages>
|
|
@ -46,7 +46,7 @@
|
|||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
</packages>
|
|
@ -57,7 +57,7 @@
|
|||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
</packages>
|
|
@ -78,7 +78,7 @@
|
|||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.3\lib\net45\NLog.dll</HintPath>
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
<package id="Microsoft.Owin" version="3.1.0" targetFramework="net461" />
|
||||
<package id="Microsoft.Owin.Hosting" version="3.1.0" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.3" targetFramework="net461" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
<package id="Owin" version="1.0" targetFramework="net461" />
|
||||
</packages>
|
Loading…
Reference in New Issue