resolves #19, resolves #20

This commit is contained in:
Steven Hildreth 2019-07-13 07:28:27 -05:00
parent 7e2d3449cb
commit 0c1b276cda
21 changed files with 119 additions and 307 deletions

View file

@ -1,64 +1,8 @@
{
"RoadieSettings": {
"SiteName": "Roadie",
"DefaultTimeZone": "US/Central",
"DiagnosticsPassword": "RoadieDiagPassword",
"InboundFolder": "C:\\roadie_dev_root\\inbound",
"LibraryFolder": "C:\\\\roadie_dev_root\\\\library",
"Thumbnails": {
"Height": 80,
"Width": 80
},
"MediumThumbnails": {
"Height": 160,
"Width": 160
},
"LargeThumbnails": {
"Height": 320,
"Width": 320
},
"DontDoMetaDataProvidersSearchArtists": [ "Various Artists", "Sound Tracks" ],
"FileExtensionsToDelete": [ ".accurip", ".bmp", ".cue", ".dat", ".db", ".exe", ".htm", ".html", ".ini", ".log", ".jpg", ".jpeg", ".par", ".par2", ".pdf", ".png", ".md5", ".mht", ".mpg", ".m3u", ".nfo", ".nzb", ".pls", ".sfv", ".srr", ".txt", ".url" ],
"RecordNoResultSearches": true,
"ArtistNameReplace": {
"AC/DC": [ "AC; DC", "AC;DC", "AC/ DC", "AC DC" ],
"Love/Hate": [ "Love; Hate", "Love;Hate", "Love/ Hate", "Love Hate" ]
},
"Integrations": {
"ITunesProviderEnabled": true,
"MusicBrainzProviderEnabled": true,
"SpotifyProviderEnabled": true,
"ApiKeys": [
{
"ApiName": "BingImageSearch",
"Key": "<KEY HERE>"
},
{
"ApiName": "LastFMApiKey",
"Key": "<KEY HERE>",
"KeySecret": "<SECRET HERE>"
},
{
"ApiName": "DiscogsConsumerKey",
"Key": "<KEY HERE>",
"KeySecret": "<SECRET HERE>"
}
]
},
"Processing": {
"DoAudioCleanup": true,
"DoSaveEditsToTags": true,
"DoClearComments": true,
"DoParseFromFileName": true,
"DoParseFromDiscogsDBFindingTrackForArtist": true,
"DoParseFromDiscogsDB": true,
"DoParseFromMusicBrainz": true,
"DoParseFromLastFM": true,
"MaximumArtistImagesToAdd": 12,
"MaximumReleaseImagesToAdd": 12,
"MaxImageWidth": 2048,
"PreInspectScript": "PreInspectScript.ps1",
"PostInspectScript": "",
"RemoveStringsRegex": "\\b[0-9]+\\s#\\s\\b",
"ReleaseRemoveStringsRegex": "(\\\\s*(-\\\\s)*((CD[_\\-#\\s]*[0-9]*)))|((\\\\(|\\\\[)+([0-9]|,|self|bonus|re(leas|master|(e|d)*)*|th|anniversary|cd|disc|deluxe|dig(ipack)*|vinyl|japan(ese)*|asian|remastered|limited|ltd|expanded|edition|\\\\s)+(]|\\\\)*))",
"TrackRemoveStringsRegex": "^([0-9]+)(\\.|-|\\s)*",
"ReplaceStrings": [

View file

@ -1,62 +1,10 @@
{
"RoadieSettings": {
"SiteName": "Roadie",
"DefaultTimeZone": "US/Central",
"DiagnosticsPassword": "RoadieDiagPassword",
"InboundFolder": "C:\\roadie_dev_root\\inbound",
"LibraryFolder": "C:\\\\roadie_dev_root\\\\library",
"Thumbnails": {
"Height": 80,
"Width": 80
},
"MediumThumbnails": {
"Height": 160,
"Width": 160
},
"LargeThumbnails": {
"Height": 320,
"Width": 320
},
"DontDoMetaDataProvidersSearchArtists": [ "Various Artists", "Sound Tracks" ],
"FileExtensionsToDelete": [ ".cue", ".db", ".gif", ".html", ".ini", ".jpg", ".jpeg", ".log", ".mpg", ".m3u", ".png", ".nfo", ".nzb", ".sfv", ".srr", ".txt", ".url" ],
"RecordNoResultSearches": true,
"ArtistNameReplace": {
"AC/DC": [ "AC; DC", "AC;DC", "AC/ DC", "AC DC" ],
"Love/Hate": [ "Love; Hate", "Love;Hate", "Love/ Hate", "Love Hate" ]
},
"Integrations": {
"ITunesProviderEnabled": false,
"MusicBrainzProviderEnabled": false,
"SpotifyProviderEnabled": false,
"ApiKeys": [
{
"ApiName": "BingImageSearch",
"Key": ""
},
{
"ApiName": "LastFMApiKey",
"Key": "<",
"KeySecret": ""
},
{
"ApiName": "DiscogsConsumerKey",
"Key": "",
"KeySecret": ""
}
]
},
"Processing": {
"DoAudioCleanup": true,
"DoSaveEditsToTags": true,
"DoClearComments": true,
"DoParseFromFileName": true,
"DoParseFromDiscogsDBFindingTrackForArtist": true,
"DoParseFromDiscogsDB": true,
"DoParseFromMusicBrainz": true,
"DoParseFromLastFM": true,
"MaximumArtistImagesToAdd": 12,
"MaximumReleaseImagesToAdd": 12,
"MaxImageWidth": 800,
"RemoveStringsRegex": "\\b[0-9]+\\s#\\s\\b",
"ReleaseRemoveStringsRegex": "(\\\\s*(-\\\\s)*((CD[_\\-#\\s]*[0-9]*)))|((\\\\(|\\\\[)+([0-9]|,|self|bonus|re(leas|master|(e|d)*)*|th|anniversary|cd|disc|deluxe|dig(ipack)*|vinyl|japan(ese)*|asian|remastered|limited|ltd|expanded|edition|\\\\s)+(]|\\\\)*))",
"TrackRemoveStringsRegex": "^([0-9]+)(\\.|-|\\s)*",
"ReplaceStrings": [
{

View file

@ -8,10 +8,8 @@ namespace Roadie.Library.Configuration
bool DoAudioCleanup { get; set; }
bool DoClearComments { get; set; }
bool DoDeleteUnknowns { get; set; }
bool DoFolderArtistNameSet { get; set; }
bool DoMoveUnknowns { get; set; }
bool DoParseFromDiscogsDB { get; }
bool DoParseFromDiscogsDBFindingTrackForArtist { get; }
bool DoParseFromFileName { get; set; }
bool DoParseFromLastFM { get; }
bool DoParseFromMusicBrainz { get; }

View file

@ -4,13 +4,12 @@ namespace Roadie.Library.Configuration
{
public interface IRoadieSettings
{
Dictionary<string, List<string>> ArtistNameReplace { get; set; }
Dictionary<string, IEnumerable<string>> ArtistNameReplace { get; set; }
string BehindProxyHost { get; set; }
string ConnectionString { get; set; }
string ContentPath { get; set; }
Converting Converting { get; set; }
string DefaultTimeZone { get; set; }
string DiagnosticsPassword { get; set; }
IEnumerable<string> DontDoMetaDataProvidersSearchArtists { get; set; }
IEnumerable<string> FileExtensionsToDelete { get; set; }
FilePlugins FilePlugins { get; set; }

View file

@ -109,6 +109,11 @@ namespace Roadie.Library.Configuration
public Integrations()
{
ITunesProviderEnabled = true;
MusicBrainzProviderEnabled = true;
LastFmProviderEnabled = true;
SpotifyProviderEnabled = true;
DiscogsReadWriteTimeout = short.MaxValue;
DiscogsTimeout = short.MaxValue;
}

View file

@ -14,14 +14,10 @@ namespace Roadie.Library.Configuration
public bool DoDeleteUnknowns { get; set; }
public bool DoFolderArtistNameSet { get; set; }
public bool DoMoveUnknowns { get; set; }
public bool DoParseFromDiscogsDB { get; private set; }
public bool DoParseFromDiscogsDBFindingTrackForArtist { get; private set; }
public bool DoParseFromFileName { get; set; }
public bool DoParseFromLastFM { get; private set; }
@ -52,9 +48,21 @@ namespace Roadie.Library.Configuration
public Processing()
{
ReplaceStrings = new List<ReplacementString>();
DoAudioCleanup = true;
DoClearComments = true;
DoParseFromDiscogsDB = true;
DoParseFromFileName = true;
DoParseFromLastFM = true;
DoParseFromMusicBrainz = true;
DoSaveEditsToTags = true;
MaximumArtistImagesToAdd = 12;
MaximumReleaseImagesToAdd = 12;
MaxImageWidth = 2048;
RemoveStringsRegex = "\\b[0-9]+\\s#\\s\\b";
ReplaceStrings = new List<ReplacementString>();
}
}
}

View file

@ -10,7 +10,7 @@ namespace Roadie.Library.Configuration
/// If the artist name is found in the values then use the key.
/// <remark>This was desgined to handle 'AC/DC' type names as they contain the ID3 v2.3 spec artist seperator</remark>
/// </summary>
public Dictionary<string, List<string>> ArtistNameReplace { get; set; }
public Dictionary<string, IEnumerable<string>> ArtistNameReplace { get; set; }
public string BehindProxyHost { get; set; }
@ -28,8 +28,6 @@ namespace Roadie.Library.Configuration
public string DefaultTimeZone { get; set; }
public string DiagnosticsPassword { get; set; }
public IEnumerable<string> DontDoMetaDataProvidersSearchArtists { get; set; }
public IEnumerable<string> FileExtensionsToDelete { get; set; }
@ -88,11 +86,30 @@ namespace Roadie.Library.Configuration
public RoadieSettings()
{
ThumbnailImageSize = new ImageSize { Width = 80, Height = 80 };
SmallImageSize = new ImageSize { Width = 160, Height = 160 };
MediumImageSize = new ImageSize { Width = 320, Height = 320 };
ArtistNameReplace = new Dictionary<string, IEnumerable<string>>
{
{ "AC/DC", new List<string>{ "AC; DC", "AC;DC", "AC/ DC", "AC DC" }},
{ "Love/Hate", new List<string>{ "Love; Hate", "Love;Hate", "Love/ Hate", "Love Hate" }}
};
DefaultTimeZone = "US / Central";
DontDoMetaDataProvidersSearchArtists = new List<string> { "Various Artists", "Sound Tracks" };
FileExtensionsToDelete = new List<string>{ ".accurip", ".bmp", ".cue", ".dat", ".db", ".exe", ".htm", ".html", ".ini", ".log", ".jpg", ".jpeg", ".par", ".par2", ".pdf", ".png", ".md5", ".mht", ".mpg", ".m3u", ".nfo", ".nzb", ".pls", ".sfv", ".srr", ".txt", ".url" };
InboundFolder = "M:/inbound";
LargeImageSize = new ImageSize { Width = 500, Height = 500 };
MaximumImageSize = new ImageSize { Width = 1024, Height = 1024 };
LibraryFolder = "M:/library";
MaximumImageSize = new ImageSize { Width = 2048, Height = 2048 };
MediumImageSize = new ImageSize { Width = 320, Height = 320 };
RecordNoResultSearches = true;
SiteName = "Roadie";
SmallImageSize = new ImageSize { Width = 160, Height = 160 };
ThumbnailImageSize = new ImageSize { Width = 80, Height = 80 };
SmtpFromAddress = "noreply@roadie.rocks";
SmtpPort = 587;
SmtpUsername = "roadie";
SmtpHost = "smtp.roadie.rocks";
SmtpUseSSl = true;
Inspector = new Inspector();
Converting = new Converting();
Integrations = new Integrations();

View file

@ -10,8 +10,7 @@ using System.Threading.Tasks;
namespace Roadie.Library.Data
{
public interface IRoadieDbContext : IDisposable, IInfrastructure<IServiceProvider>, IDbContextDependencies,
IDbSetCache, IDbQueryCache, IDbContextPoolable
public interface IRoadieDbContext : IDisposable, IInfrastructure<IServiceProvider>, IDbContextDependencies, IDbSetCache, IDbQueryCache, IDbContextPoolable
{
DbSet<ArtistAssociation> ArtistAssociations { get; set; }
DbSet<ArtistGenre> ArtistGenres { get; set; }

View file

@ -193,32 +193,65 @@ namespace Roadie.Library.Imaging
RegexOptions.IgnoreCase);
}
public static byte[] ResizeImage(byte[] imageBytes, int width, int height) => ImageHelper.ResizeImage(imageBytes, width, height, false).Item2;
/// <summary>
/// Resize a given image to given dimensions
/// Resize a given image to given dimensions if needed
/// </summary>
public static byte[] ResizeImage(byte[] imageBytes, int width, int height)
/// <param name="imageBytes">Image bytes to resize</param>
/// <param name="width">Resize to width</param>
/// <param name="height">Resize to height</param>
/// <param name="forceResize">Force resize</param>
/// <returns>Tuple with bool for did resize and byte array of image</returns>
public static Tuple<bool, byte[]> ResizeImage(byte[] imageBytes, int width, int height, bool? forceResize = false)
{
if (imageBytes == null) return null;
if (imageBytes == null)
{
return null;
}
try
{
using (var outStream = new MemoryStream())
{
var resized = false;
IImageFormat imageFormat = null;
using (var image = Image.Load(imageBytes, out imageFormat))
{
if (image.Width > width || image.Height > height)
image.Mutate(ctx => ctx.Resize(width, height));
var doForce = forceResize ?? false;
if (doForce || image.Width > width || image.Height > height)
{
int newWidth, newHeight;
if(doForce)
{
newWidth = width;
newHeight = height;
}
else
{
float aspect = image.Width / (float)image.Height;
if (aspect < 1)
{
newWidth = (int)(width * aspect);
newHeight = (int)(newWidth / aspect);
}
else
{
newHeight = (int)(height / aspect);
newWidth = (int)(newHeight * aspect);
}
}
image.Mutate(ctx => ctx.Resize(newWidth, newHeight));
resized = true;
}
image.Save(outStream, imageFormat);
}
return outStream.ToArray();
return new Tuple<bool, byte[]>(resized, outStream.ToArray());
}
}
catch (Exception ex)
{
Trace.WriteLine($"Error Resizing Image [{ex}]");
}
return null;
}

View file

@ -11,7 +11,7 @@
<PackageReference Include="AutoCompare.Core" Version="1.0.0" />
<PackageReference Include="CsvHelper" Version="12.1.2" />
<PackageReference Include="EFCore.BulkExtensions" Version="2.4.9" />
<PackageReference Include="FluentFTP" Version="25.0.5" />
<PackageReference Include="FluentFTP" Version="25.0.6" />
<PackageReference Include="Hashids.net" Version="1.2.2" />
<PackageReference Include="HtmlAgilityPack" Version="1.11.9" />
<PackageReference Include="IdSharp.Common" Version="1.0.1" />

View file

@ -69,7 +69,6 @@ namespace Roadie.Library.MetaData.Audio
ArtistLookupEngine = artistLookupEngine;
DoParseFromFileName = configuration.Processing.DoParseFromFileName;
DoParseFromDiscogsDBFindingTrackForArtist = configuration.Processing.DoParseFromDiscogsDBFindingTrackForArtist;
DoParseFromDiscogsDB = configuration.Processing.DoParseFromDiscogsDB;
DoParseFromMusicBrainz = configuration.Processing.DoParseFromMusicBrainz;
DoParseFromLastFM = configuration.Processing.DoParseFromLastFM;
@ -113,8 +112,7 @@ namespace Roadie.Library.MetaData.Audio
if (!result.IsValid)
{
Logger.LogWarning("File [{0}] MetaData Invalid, TagSources [{1}] MetaData [{2}]", fileInfo.FullName,
string.Join(",", tagSources), result.ToString());
Logger.LogWarning("File [{0}] MetaData Invalid, TagSources [{1}] MetaData [{2}]", fileInfo.FullName, string.Join(",", tagSources), result.ToString());
}
else
{
@ -150,7 +148,11 @@ namespace Roadie.Library.MetaData.Audio
public bool WriteTags(AudioMetaData metaData, FileInfo fileInfo)
{
return ID3TagsHelper.WriteTags(metaData, fileInfo.FullName);
if (Configuration.Processing.DoSaveEditsToTags)
{
return ID3TagsHelper.WriteTags(metaData, fileInfo.FullName);
}
return false;
}
private static AudioMetaData MergeAudioData(IRoadieSettings settings, AudioMetaData left, AudioMetaData right)

View file

@ -1,8 +0,0 @@
using System.Threading.Tasks;
namespace Roadie.Library.SearchEngines.MetaData.iTunes
{
public interface IiTunesHelper : IArtistSearchEngine, IReleaseSearchEngine
{
}
}

View file

@ -1,29 +0,0 @@
using Microsoft.Extensions.Logging;
using Roadie.Library.Caching;
using Roadie.Library.Configuration;
using Roadie.Library.MetaData;
using Roadie.Library.SearchEngines.Imaging;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Roadie.Library.SearchEngines.MetaData.iTunes
{
public class iTunesHelper : MetaDataProviderBase, IiTunesHelper
{
private readonly ITunesSearchEngine _iTunesSearchEngine;
public override bool IsEnabled => Configuration.Integrations.ITunesProviderEnabled;
public iTunesHelper(IRoadieSettings configuration, ICacheManager cacheManager, ILogger<iTunesHelper> logger,
ITunesSearchEngine iTunesSearchEngine)
: base(configuration, cacheManager, logger)
{
_iTunesSearchEngine = iTunesSearchEngine;
}
public async Task<OperationResult<IEnumerable<ArtistSearchResult>>> PerformArtistSearch(string query, int resultsCount) => await _iTunesSearchEngine.PerformArtistSearch(query, resultsCount);
public async Task<OperationResult<IEnumerable<ReleaseSearchResult>>> PerformReleaseSearch(string artistName, string query, int resultsCount) => await _iTunesSearchEngine.PerformReleaseSearch(artistName, query, resultsCount);
}
}

View file

@ -697,8 +697,7 @@ namespace Roadie.Api.Services
File.WriteAllBytes(artistImageName, artist.Thumbnail);
// Resize to store in database as thumbnail
artist.Thumbnail = ImageHelper.ResizeImage(artist.Thumbnail, Configuration.MediumImageSize.Width,
Configuration.MediumImageSize.Height);
artist.Thumbnail = ImageHelper.ResizeImage(artist.Thumbnail, Configuration.MediumImageSize.Width, Configuration.MediumImageSize.Height);
didChangeThumbnail = true;
}
@ -714,13 +713,11 @@ namespace Roadie.Api.Services
// Ensure is jpeg first
artistSecondaryImage = ImageHelper.ConvertToJpegFormat(artistSecondaryImage);
var artistImageFilename = Path.Combine(newArtistFolder,
string.Format(ImageHelper.ArtistSecondaryImageFilename, looper.ToString("00")));
var artistImageFilename = Path.Combine(newArtistFolder,string.Format(ImageHelper.ArtistSecondaryImageFilename, looper.ToString("00")));
while (File.Exists(artistImageFilename))
{
looper++;
artistImageFilename = Path.Combine(newArtistFolder,
string.Format(ImageHelper.ArtistSecondaryImageFilename, looper.ToString("00")));
artistImageFilename = Path.Combine(newArtistFolder,string.Format(ImageHelper.ArtistSecondaryImageFilename, looper.ToString("00")));
}
File.WriteAllBytes(artistImageFilename, artistSecondaryImage);

View file

@ -352,24 +352,27 @@ namespace Roadie.Api.Services
};
}
private async Task<FileOperationResult<Image>> GetImageFileOperation(string type, string regionUrn, Guid id,
int? width, int? height, Func<Task<FileOperationResult<Image>>> action, EntityTagHeaderValue etag = null)
private async Task<FileOperationResult<Image>> GetImageFileOperation(string type, string regionUrn, Guid id, int? width, int? height, Func<Task<FileOperationResult<Image>>> action, EntityTagHeaderValue etag = null)
{
try
{
var sw = Stopwatch.StartNew();
var result = (await CacheManager.GetAsync($"urn:{type}_by_id_operation:{id}", action, regionUrn))
.Adapt<FileOperationResult<Image>>();
var result = (await CacheManager.GetAsync($"urn:{type}_by_id_operation:{id}", action, regionUrn)).Adapt<FileOperationResult<Image>>();
if (!result.IsSuccess) return new FileOperationResult<Image>(result.IsNotFoundResult, result.Messages);
if (result.ETag == etag) return new FileOperationResult<Image>(OperationMessages.NotModified);
if ((width.HasValue || height.HasValue) && result?.Data?.Bytes != null)
var force = width.HasValue || height.HasValue;
var newWidth = width ?? Configuration.MaximumImageSize.Width;
var newHeight = height ?? Configuration.MaximumImageSize.Height;
if (result?.Data?.Bytes != null)
{
result.Data.Bytes = ImageHelper.ResizeImage(result?.Data?.Bytes, width.Value, height.Value);
var resized = ImageHelper.ResizeImage(result?.Data?.Bytes, newWidth, newHeight, force);
result.Data.Bytes = resized.Item2;
result.ETag = EtagHelper.GenerateETag(HttpEncoder, result.Data.Bytes);
result.LastModified = DateTime.UtcNow;
if (width.Value != Configuration.ThumbnailImageSize.Width ||
height.Value != Configuration.ThumbnailImageSize.Height)
Logger.LogTrace($"{type}: Resized [{id}], Width [{width.Value}], Height [{height.Value}]");
if (resized.Item1)
{
Logger.LogTrace($"{type}: Resized [{id}], Width [{ newWidth}], Height [{ newHeight}], Forced [{ force }]");
}
}
sw.Stop();

View file

@ -62,17 +62,14 @@ namespace Roadie.Api.Services
{
var hashids = new Hashids(TrackTokenSalt);
var trackIdPart = BitConverter.ToInt32(trackId.ToByteArray(), 6);
if (trackIdPart < 0) trackIdPart = trackIdPart * -1;
var token = hashids.Encode(user.Id, SafeParser.ToNumber<int>(user.CreatedDate.Value.ToString("DDHHmmss")),
trackIdPart);
if (trackIdPart < 0) trackIdPart *= -1;
var token = hashids.Encode(user.Id, SafeParser.ToNumber<int>(user.CreatedDate.Value.ToString("DDHHmmss")), trackIdPart);
return token;
}
public Image MakeThumbnailImage(Guid id, string type, int? width = null, int? height = null,
bool includeCachebuster = false)
public Image MakeThumbnailImage(Guid id, string type, int? width = null, int? height = null, bool includeCachebuster = false)
{
return MakeImage(id, type, width ?? Configuration.ThumbnailImageSize.Width,
height ?? Configuration.ThumbnailImageSize.Height, null, includeCachebuster);
return MakeImage(id, type, width ?? Configuration.ThumbnailImageSize.Width, height ?? Configuration.ThumbnailImageSize.Height, null, includeCachebuster);
}
protected IEnumerable<int> ArtistIdsForRelease(int releaseId)
@ -221,8 +218,10 @@ namespace Roadie.Api.Services
protected Image MakeFullsizeSecondaryImage(Guid id, ImageType type, int imageId, string caption = null)
{
if (type == ImageType.ArtistSecondary)
{
return new Image($"{HttpContext.ImageBaseUrl}/artist-secondary/{id}/{imageId}", caption,
$"{HttpContext.ImageBaseUrl}/artist-secondary/{id}/{imageId}/{Configuration.SmallImageSize.Width}/{Configuration.SmallImageSize.Height}");
}
return new Image($"{HttpContext.ImageBaseUrl}/release-secondary/{id}/{imageId}", caption,
$"{HttpContext.ImageBaseUrl}/release-secondary/{id}/{imageId}/{Configuration.SmallImageSize.Width}/{Configuration.SmallImageSize.Height}");
}

View file

@ -49,8 +49,7 @@ namespace Roadie.Api.Controllers
[ProducesResponseType(404)]
public async Task<IActionResult> ArtistSecondaryImage(Guid id, int imageId, int? width, int? height)
{
var result = await ImageService.ArtistSecondaryImage(id, imageId,
width ?? RoadieSettings.MaximumImageSize.Width, height ?? RoadieSettings.MaximumImageSize.Height);
var result = await ImageService.ArtistSecondaryImage(id, imageId, width, height);
if (result == null || result.IsNotFoundResult) return NotFound();
if (!result.IsSuccess) return StatusCode((int)HttpStatusCode.InternalServerError);
return File(result.Data.Bytes,

View file

@ -3,7 +3,7 @@
"Roadie.Api": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
"ASPNETCORE_ENVIRONMENT": "Production"
},
"applicationUrl": "http://localhost:5123/"
}

View file

@ -34,7 +34,7 @@
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
<PackageReference Include="Serilog.AspNetCore" Version="2.1.1" />
<PackageReference Include="Serilog.Exceptions" Version="5.3.0" />
<PackageReference Include="Serilog.Exceptions" Version="5.3.1" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.RollingFileAlternate" Version="2.0.9" />

View file

@ -52,48 +52,9 @@
},
"CORSOrigins": "http://localhost:4200|http://localhost:8080|https://localhost:8080|http://localhost:80|https://localhost:80|http://192.168.1.177:8080",
"RoadieSettings": {
"SiteName": "Roadie",
"DefaultTimeZone": "US/Central",
"DiagnosticsPassword": "RoadieDiagPassword",
"InboundFolder": "C:\\roadie_dev_root\\inbound",
"LibraryFolder": "C:\\\\roadie_dev_root\\\\library",
"Thumbnails": {
"Height": 80,
"Width": 80
},
"MediumThumbnails": {
"Height": 160,
"Width": 160
},
"LargeThumbnails": {
"Height": 320,
"Width": 320
},
"DontDoMetaDataProvidersSearchArtists": [ "Various Artists", "Sound Tracks" ],
"FileExtensionsToDelete": [ ".cue", ".db", ".gif", ".html", ".ini", ".jpg", ".jpeg", ".log", ".mpg", ".m3u", ".png", ".nfo", ".nzb", ".sfv", ".srr", ".txt", ".url" ],
"RecordNoResultSearches": true,
"ArtistNameReplace": {
"AC/DC": [ "AC; DC", "AC;DC", "AC/ DC", "AC DC" ],
"Love/Hate": [ "Love; Hate", "Love;Hate", "Love/ Hate", "Love Hate" ]
},
"Integrations": {
"ITunesProviderEnabled": true,
"MusicBrainzProviderEnabled": true,
"LastFmProviderEnabled": true,
"SpotifyProviderEnabled": true
},
"Processing": {
"DoAudioCleanup": true,
"DoSaveEditsToTags": true,
"DoClearComments": true,
"DoParseFromFileName": true,
"DoParseFromDiscogsDBFindingTrackForArtist": true,
"DoParseFromDiscogsDB": true,
"DoParseFromMusicBrainz": true,
"DoParseFromLastFM": true,
"MaximumArtistImagesToAdd": 12,
"MaximumReleaseImagesToAdd": 12,
"MaxImageWidth": 800,
"RemoveStringsRegex": "\\b[0-9]+\\s#\\s\\b",
"ReplaceStrings": [
{

View file

@ -52,30 +52,6 @@
},
"CORSOrigins": "http://localhost:4200|http://localhost:8080|https://localhost:8080|http://localhost:80|https://localhost:80",
"RoadieSettings": {
"SiteName": "Roadie",
"DefaultTimeZone": "US/Central",
"DiagnosticsPassword": "RoadieDiagPassword",
"InboundFolder": "M:/incoming/",
"LibraryFolder": "M:/library/",
"Thumbnails": {
"Height": 80,
"Width": 80
},
"MediumThumbnails": {
"Height": 160,
"Width": 160
},
"LargeThumbnails": {
"Height": 320,
"Width": 320
},
"DontDoMetaDataProvidersSearchArtists": [ "Various Artists", "Sound Tracks" ],
"FileExtensionsToDelete": [ ".accurip", ".cue", ".dat", ".db", ".exe", ".html", ".ini", ".log", ".jpg", ".jpeg", ".par", ".par2", ".pdf", ".png", ".md5", ".mht", ".mpg", ".m3u", ".nfo", ".nzb", ".pls", ".sfv", ".srr", ".txt", ".url" ],
"RecordNoResultSearches": true,
"ArtistNameReplace": {
"AC/DC": [ "AC; DC", "AC;DC", "AC/ DC", "AC DC" ],
"Love/Hate": [ "Love; Hate", "Love;Hate", "Love/ Hate", "Love Hate" ]
},
"Converting": {
"ConvertingEnabled": true,
"DoDeleteAfter": true,
@ -84,46 +60,7 @@
"APEConvertCommand": "ffmpeg -i \"{0}\" \"{1}\"",
"FLACConvertCommand": "ffmpeg -i \"{0}\" -q:a 0 \"{1}\""
},
"SmtpFromAddress": "roadie@roadie.rocks",
"SmtpPort": 2525,
"SmtpUsername": "apikey",
"SmtpHost": "smtp.sendgrid.net",
"SmtpUseSSl": true,
"Integrations": {
"ITunesProviderEnabled": true,
"MusicBrainzProviderEnabled": true,
"LastFmProviderEnabled": true,
"SpotifyProviderEnabled": true,
"ApiKeys": [
{
"ApiName": "BingImageSearch",
"Key": ""
},
{
"ApiName": "LastFMApiKey",
"Key": "",
"KeySecret": ""
},
{
"ApiName": "DiscogsConsumerKey",
"Key": "",
"KeySecret": ""
}
]
},
"Processing": {
"DoAudioCleanup": true,
"DoSaveEditsToTags": true,
"DoClearComments": true,
"DoParseFromFileName": true,
"DoParseFromDiscogsDBFindingTrackForArtist": true,
"DoParseFromDiscogsDB": true,
"DoParseFromMusicBrainz": true,
"DoParseFromLastFM": true,
"MaximumArtistImagesToAdd": 12,
"MaximumReleaseImagesToAdd": 12,
"MaxImageWidth": 800,
"RemoveStringsRegex": "\\b[0-9]+\\s#\\s\\b",
"ReplaceStrings": [
{
"order": 1,