From 0ad21b74ab8d8bc0ebb61166089c1b831ddb7327 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 8 Dec 2013 12:57:33 -0500 Subject: add de-16 rating --- MediaBrowser.Server.Implementations/Localization/Ratings/de.txt | 1 + 1 file changed, 1 insertion(+) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/Localization/Ratings/de.txt b/MediaBrowser.Server.Implementations/Localization/Ratings/de.txt index 571b6eba95..e1c3639cb4 100644 --- a/MediaBrowser.Server.Implementations/Localization/Ratings/de.txt +++ b/MediaBrowser.Server.Implementations/Localization/Ratings/de.txt @@ -2,4 +2,5 @@ DE-FSK0,1 DE-FSK6+,5 DE-FSK12+,7 DE-FSK16+,8 +DE-16,8 DE-FSK18+,9 -- cgit v1.2.3 From b5958142543cf21da1b9a8adf0b272946711ba4c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 8 Dec 2013 12:57:49 -0500 Subject: added mono sqlite implementation --- MediaBrowser.Api/MediaBrowser.Api.csproj | 14 ++++----- .../MediaBrowser.Common.Implementations.csproj | 14 ++++----- .../MediaBrowser.Controller.csproj | 7 ++--- MediaBrowser.Mono.sln | 6 ++-- MediaBrowser.Mono.userprefs | 18 +++++++++-- .../MediaBrowser.Server.Implementations.csproj | 36 ++++++++++------------ .../MediaBrowser.Server.Mono.csproj | 5 +-- .../MediaBrowser.WebDashboard.csproj | 7 ++--- 8 files changed, 54 insertions(+), 53 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index b1e0339fcb..f33db49790 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -38,14 +38,6 @@ Always - - False - ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll - - - False - ..\ThirdParty\ServiceStack\ServiceStack.Text.dll - @@ -56,6 +48,12 @@ ..\packages\morelinq.1.0.16006\lib\net35\MoreLinq.dll + + ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll + + + ..\ThirdParty\ServiceStack\ServiceStack.Text.dll + diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index 7d75cfd3db..0d35cb4da0 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -37,14 +37,6 @@ Always - - False - ..\ThirdParty\ServiceStack\ServiceStack.Text.dll - - - False - ..\packages\sharpcompress.0.10.2\lib\net40\SharpCompress.dll - @@ -58,6 +50,12 @@ ..\packages\SimpleInjector.2.3.6\lib\net40-client\SimpleInjector.dll + + ..\ThirdParty\ServiceStack\ServiceStack.Text.dll + + + ..\packages\sharpcompress.0.10.2\lib\net40\SharpCompress.dll + diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index f1f2aaf5ef..8d03f84807 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -58,10 +58,6 @@ 4 - - False - ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll - @@ -74,6 +70,9 @@ ..\packages\morelinq.1.0.16006\lib\net35\MoreLinq.dll + + ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll + diff --git a/MediaBrowser.Mono.sln b/MediaBrowser.Mono.sln index 397763489a..bfd30573ec 100644 --- a/MediaBrowser.Mono.sln +++ b/MediaBrowser.Mono.sln @@ -36,8 +36,8 @@ Global {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug|x86.Build.0 = Debug|x86 {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|Any CPU.ActiveCfg = Release|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|Any CPU.Build.0 = Release|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|x86.ActiveCfg = Release|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|x86.Build.0 = Release|Any CPU + {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|x86.ActiveCfg = Release|x86 + {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|x86.Build.0 = Release|x86 {2E781478-814D-4A48-9D80-BFF206441A65}.Debug|x86.ActiveCfg = Debug|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Debug|x86.Build.0 = Debug|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -82,6 +82,6 @@ Global {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution - StartupItem = MediaBrowser.Model\MediaBrowser.Model.csproj + StartupItem = MediaBrowser.Server.Mono\MediaBrowser.Server.Mono.csproj EndGlobalSection EndGlobal diff --git a/MediaBrowser.Mono.userprefs b/MediaBrowser.Mono.userprefs index 51ba9d804b..26e63f6a87 100644 --- a/MediaBrowser.Mono.userprefs +++ b/MediaBrowser.Mono.userprefs @@ -1,13 +1,25 @@  - - + + - + + + + + + + + + + + + + diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 39966f0d7a..3d50de86cb 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -37,25 +37,8 @@ ..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll - - False - ..\ThirdParty\ServiceStack\ServiceStack.dll - - - False - ..\ThirdParty\ServiceStack\ServiceStack.Client.dll - - - False - ..\ThirdParty\ServiceStack\ServiceStack.Common.dll - - - False - ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll - - - False - ..\ThirdParty\ServiceStack\ServiceStack.Text.dll + + ..\ThirdParty\Mono.Data.Sqlite\Mono.Data.Sqlite.dll @@ -73,6 +56,21 @@ ..\packages\System.Data.SQLite.x86.1.0.89.0\lib\net45\System.Data.SQLite.dll + + ..\ThirdParty\ServiceStack\ServiceStack.dll + + + ..\ThirdParty\ServiceStack\ServiceStack.Client.dll + + + ..\ThirdParty\ServiceStack\ServiceStack.Common.dll + + + ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll + + + ..\ThirdParty\ServiceStack\ServiceStack.Text.dll + diff --git a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj index be7fb7b278..7df6146444 100644 --- a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj +++ b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj @@ -39,11 +39,8 @@ - - ..\packages\ServiceStack.Common.3.9.70\lib\net35\ServiceStack.Common.dll - - ..\packages\ServiceStack.Common.3.9.70\lib\net35\ServiceStack.Interfaces.dll + ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 35ed3f1e26..9d2b42c85d 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -37,16 +37,15 @@ Always - - False - ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll - + + ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll + -- cgit v1.2.3 From fe42a6d1d9c43bf23bc2c196c48252f2790323a9 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 8 Dec 2013 13:07:58 -0500 Subject: fix local trailers being resolved as movies --- .../Library/Resolvers/Movies/MovieResolver.cs | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index 03e29dd38f..e335f4ad5d 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -116,6 +116,13 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies return null; } + var filename = Path.GetFileName(args.Path); + // Don't misidentify xbmc trailers as a movie + if (filename.IndexOf(BaseItem.XbmcTrailerFileSuffix, StringComparison.OrdinalIgnoreCase) != -1) + { + return null; + } + // Find movies that are mixed in the same folder if (args.Path.IndexOf("[trailers]", StringComparison.OrdinalIgnoreCase) != -1 || string.Equals(collectionType, CollectionType.Trailers, StringComparison.OrdinalIgnoreCase)) -- cgit v1.2.3 From f856e166ff1a4d95dc7f8f0656751557c2cd7949 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 8 Dec 2013 14:39:39 -0500 Subject: Add WanAddress to SystemInfo --- MediaBrowser.Model/System/SystemInfo.cs | 6 +++ .../Persistence/SqliteChapterRepository.cs | 10 ++++ .../Persistence/SqliteProviderInfoRepository.cs | 10 ++++ MediaBrowser.ServerApplication/ApplicationHost.cs | 5 +- .../EntryPoints/WanAddressEntryPoint.cs | 56 ++++++++++++++++++++++ .../MediaBrowser.ServerApplication.csproj | 1 + 6 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 MediaBrowser.ServerApplication/EntryPoints/WanAddressEntryPoint.cs (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Model/System/SystemInfo.cs b/MediaBrowser.Model/System/SystemInfo.cs index 6a17ad133a..ade4e96fdf 100644 --- a/MediaBrowser.Model/System/SystemInfo.cs +++ b/MediaBrowser.Model/System/SystemInfo.cs @@ -110,6 +110,12 @@ namespace MediaBrowser.Model.System /// The HTTP server port number. public int HttpServerPortNumber { get; set; } + /// + /// Gets or sets the wan address. + /// + /// The wan address. + public string WanAddress { get; set; } + /// /// Initializes a new instance of the class. /// diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteChapterRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteChapterRepository.cs index 075ef42398..5842b05a34 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteChapterRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteChapterRepository.cs @@ -32,6 +32,8 @@ namespace MediaBrowser.Server.Implementations.Persistence _logger = logManager.GetLogger(GetType().Name); } + private SqliteShrinkMemoryTimer _shrinkMemoryTimer; + /// /// Opens the connection to the database /// @@ -52,6 +54,8 @@ namespace MediaBrowser.Server.Implementations.Persistence _connection.RunQueries(queries, _logger); PrepareStatements(); + + _shrinkMemoryTimer = new SqliteShrinkMemoryTimer(_connection, _writeLock, _logger); } /// @@ -282,6 +286,12 @@ namespace MediaBrowser.Server.Implementations.Persistence { lock (_disposeLock) { + if (_shrinkMemoryTimer != null) + { + _shrinkMemoryTimer.Dispose(); + _shrinkMemoryTimer = null; + } + if (_connection != null) { if (_connection.IsOpen()) diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs index 5d836b090d..9971c74605 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs @@ -25,6 +25,8 @@ namespace MediaBrowser.Server.Implementations.Persistence _logger = logManager.GetLogger(GetType().Name); } + private SqliteShrinkMemoryTimer _shrinkMemoryTimer; + /// /// Opens the connection to the database /// @@ -50,6 +52,8 @@ namespace MediaBrowser.Server.Implementations.Persistence _connection.RunQueries(queries, _logger); PrepareStatements(); + + _shrinkMemoryTimer = new SqliteShrinkMemoryTimer(_connection, _writeLock, _logger); } private static readonly string[] SaveColumns = @@ -240,6 +244,12 @@ namespace MediaBrowser.Server.Implementations.Persistence { lock (_disposeLock) { + if (_shrinkMemoryTimer != null) + { + _shrinkMemoryTimer.Dispose(); + _shrinkMemoryTimer = null; + } + if (_connection != null) { if (_connection.IsOpen()) diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 6058c59581..46a7430b02 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -28,7 +28,6 @@ using MediaBrowser.Controller.Session; using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Logging; using MediaBrowser.Model.MediaInfo; -using MediaBrowser.Model.Serialization; using MediaBrowser.Model.System; using MediaBrowser.Model.Updates; using MediaBrowser.Providers; @@ -49,6 +48,7 @@ using MediaBrowser.Server.Implementations.Providers; using MediaBrowser.Server.Implementations.ServerManager; using MediaBrowser.Server.Implementations.Session; using MediaBrowser.Server.Implementations.WebSocket; +using MediaBrowser.ServerApplication.EntryPoints; using MediaBrowser.ServerApplication.FFMpeg; using MediaBrowser.ServerApplication.IO; using MediaBrowser.ServerApplication.Native; @@ -616,7 +616,8 @@ namespace MediaBrowser.ServerApplication HttpServerPortNumber = ServerConfigurationManager.Configuration.HttpServerPortNumber, OperatingSystem = Environment.OSVersion.ToString(), CanSelfRestart = CanSelfRestart, - CanSelfUpdate = CanSelfUpdate + CanSelfUpdate = CanSelfUpdate, + WanAddress = WanAddressEntryPoint.WanAddress }; } diff --git a/MediaBrowser.ServerApplication/EntryPoints/WanAddressEntryPoint.cs b/MediaBrowser.ServerApplication/EntryPoints/WanAddressEntryPoint.cs new file mode 100644 index 0000000000..44819b3903 --- /dev/null +++ b/MediaBrowser.ServerApplication/EntryPoints/WanAddressEntryPoint.cs @@ -0,0 +1,56 @@ +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Plugins; +using System; +using System.IO; +using System.Threading; + +namespace MediaBrowser.ServerApplication.EntryPoints +{ + public class WanAddressEntryPoint : IServerEntryPoint + { + public static string WanAddress; + private Timer _timer; + private readonly IHttpClient _httpClient; + + public WanAddressEntryPoint(IHttpClient httpClient) + { + _httpClient = httpClient; + } + + public void Run() + { + _timer = new Timer(TimerCallback, null, TimeSpan.FromMinutes(1), TimeSpan.FromHours(24)); + } + + private async void TimerCallback(object state) + { + try + { + using (var stream = await _httpClient.Get(new HttpRequestOptions + { + Url = "http://bot.whatismyipaddress.com/" + + }).ConfigureAwait(false)) + { + using (var reader = new StreamReader(stream)) + { + WanAddress = await reader.ReadToEndAsync().ConfigureAwait(false); + } + } + } + catch (Exception ex) + { + var b = true; + } + } + + public void Dispose() + { + if (_timer != null) + { + _timer.Dispose(); + _timer = null; + } + } + } +} diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index e02bb1d69a..38e082f12e 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -162,6 +162,7 @@ + -- cgit v1.2.3 From 207280197dc3783c72b5e27de8009722440ce767 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 8 Dec 2013 15:33:24 -0500 Subject: added more episode values to metadata editor --- MediaBrowser.Api/ItemUpdateService.cs | 10 ++++++++++ MediaBrowser.Model/Dto/BaseItemDto.cs | 15 ++++++++++++--- MediaBrowser.Providers/TV/EpisodeXmlParser.cs | 17 +++++++++-------- MediaBrowser.Providers/TV/SeriesPostScanTask.cs | 2 +- MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs | 14 ++++++-------- MediaBrowser.Server.Implementations/Dto/DtoService.cs | 7 ++++++- 6 files changed, 44 insertions(+), 21 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs index 9fc4bb3d04..a244b71df5 100644 --- a/MediaBrowser.Api/ItemUpdateService.cs +++ b/MediaBrowser.Api/ItemUpdateService.cs @@ -271,6 +271,16 @@ namespace MediaBrowser.Api item.Overview = request.Overview; item.Genres = request.Genres; + var episode = item as Episode; + if (episode != null) + { + episode.DvdSeasonNumber = request.DvdSeasonNumber; + episode.DvdEpisodeNumber = request.DvdEpisodeNumber; + episode.AirsAfterSeasonNumber = request.AirsAfterSeasonNumber; + episode.AirsBeforeEpisodeNumber = request.AirsBeforeEpisodeNumber; + episode.AirsBeforeSeasonNumber = request.AirsBeforeSeasonNumber; + } + var hasTags = item as IHasTags; if (hasTags != null) { diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index 20f60586c1..08d8df21f6 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -30,11 +30,20 @@ namespace MediaBrowser.Model.Dto /// The date created. public DateTime? DateCreated { get; set; } + public int? AirsBeforeSeasonNumber { get; set; } + public int? AirsAfterSeasonNumber { get; set; } + public int? AirsBeforeEpisodeNumber { get; set; } + + /// + /// Gets or sets the DVD season number. + /// + /// The DVD season number. + public int? DvdSeasonNumber { get; set; } /// - /// Gets or sets the special season number. + /// Gets or sets the DVD episode number. /// - /// The special season number. - public int? SpecialSeasonNumber { get; set; } + /// The DVD episode number. + public int? DvdEpisodeNumber { get; set; } /// /// Gets or sets the name of the sort. diff --git a/MediaBrowser.Providers/TV/EpisodeXmlParser.cs b/MediaBrowser.Providers/TV/EpisodeXmlParser.cs index b6ad6b11c4..b17ef6ebb8 100644 --- a/MediaBrowser.Providers/TV/EpisodeXmlParser.cs +++ b/MediaBrowser.Providers/TV/EpisodeXmlParser.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities.TV; +using System; +using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Logging; @@ -40,7 +41,7 @@ namespace MediaBrowser.Providers.TV } private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - + /// /// Fetches the data from XML node. /// @@ -148,11 +149,11 @@ namespace MediaBrowser.Providers.TV if (!string.IsNullOrWhiteSpace(number)) { - int num; + float num; - if (int.TryParse(number, out num)) + if (float.TryParse(number, NumberStyles.Any, UsCulture, out num)) { - item.DvdEpisodeNumber = num; + item.DvdEpisodeNumber = Convert.ToInt32(num); } } break; @@ -164,11 +165,11 @@ namespace MediaBrowser.Providers.TV if (!string.IsNullOrWhiteSpace(number)) { - int num; + float num; - if (int.TryParse(number, out num)) + if (float.TryParse(number, NumberStyles.Any, UsCulture, out num)) { - item.DvdSeasonNumber = num; + item.DvdSeasonNumber = Convert.ToInt32(num); } } break; diff --git a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs index 56b06f4906..74d54a3914 100644 --- a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs +++ b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs @@ -225,7 +225,7 @@ namespace MediaBrowser.Providers.TV foreach (var tuple in episodeLookup) { - if (tuple.Item1 <= 0) + if (tuple.Item1 < 0) { // Ignore season zeros continue; diff --git a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs index d80985fe1a..4cf7c79da9 100644 --- a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs @@ -410,12 +410,11 @@ namespace MediaBrowser.Providers.TV if (!string.IsNullOrWhiteSpace(val)) { - int rval; + float num; - // int.TryParse is local aware, so it can be probamatic, force us culture - if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval)) + if (float.TryParse(val, NumberStyles.Any, _usCulture, out num)) { - item.DvdEpisodeNumber = rval; + item.DvdEpisodeNumber = Convert.ToInt32(num); } } @@ -428,12 +427,11 @@ namespace MediaBrowser.Providers.TV if (!string.IsNullOrWhiteSpace(val)) { - int rval; + float num; - // int.TryParse is local aware, so it can be probamatic, force us culture - if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval)) + if (float.TryParse(val, NumberStyles.Any, _usCulture, out num)) { - item.DvdSeasonNumber = rval; + item.DvdSeasonNumber = Convert.ToInt32(num); } } diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index ba9dd170df..6e8c9d3ebe 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -1061,7 +1061,12 @@ namespace MediaBrowser.Server.Implementations.Dto if (episode != null) { dto.IndexNumberEnd = episode.IndexNumberEnd; - dto.SpecialSeasonNumber = episode.AirsAfterSeasonNumber ?? episode.AirsBeforeSeasonNumber; + + dto.DvdSeasonNumber = episode.DvdSeasonNumber; + dto.DvdEpisodeNumber = episode.DvdEpisodeNumber; + dto.AirsAfterSeasonNumber = episode.AirsAfterSeasonNumber; + dto.AirsBeforeEpisodeNumber = episode.AirsBeforeEpisodeNumber; + dto.AirsBeforeSeasonNumber = episode.AirsBeforeSeasonNumber; var seasonId = episode.SeasonId; if (seasonId.HasValue) -- cgit v1.2.3 From 803d60d9cff49bad9e6a53d43c2a39cc5dffb2dc Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 8 Dec 2013 15:47:11 -0500 Subject: support natural sorting --- .../MediaBrowser.Server.Implementations.csproj | 1 + .../Sorting/AlphanumComparator.cs | 113 +++++++++++++++++++++ .../Sorting/SortNameComparer.cs | 3 +- 3 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 3d50de86cb..70b173fd9f 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -167,6 +167,7 @@ + diff --git a/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs b/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs new file mode 100644 index 0000000000..2ced9a5668 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace MediaBrowser.Server.Implementations.Sorting +{ + public class AlphanumComparator : IComparer + { + private enum ChunkType { Alphanumeric, Numeric }; + + private static bool InChunk(char ch, char otherCh) + { + var type = ChunkType.Alphanumeric; + + if (char.IsDigit(otherCh)) + { + type = ChunkType.Numeric; + } + + if ((type == ChunkType.Alphanumeric && char.IsDigit(ch)) + || (type == ChunkType.Numeric && !char.IsDigit(ch))) + { + return false; + } + + return true; + } + + public static int CompareValues(string s1, string s2) + { + if (s1 == null || s2 == null) + { + return 0; + } + + var thisMarker = 0; + var thatMarker = 0; + + while ((thisMarker < s1.Length) || (thatMarker < s2.Length)) + { + if (thisMarker >= s1.Length) + { + return -1; + } + if (thatMarker >= s2.Length) + { + return 1; + } + var thisCh = s1[thisMarker]; + var thatCh = s2[thatMarker]; + + var thisChunk = new StringBuilder(); + var thatChunk = new StringBuilder(); + + while ((thisMarker < s1.Length) && (thisChunk.Length == 0 || InChunk(thisCh, thisChunk[0]))) + { + thisChunk.Append(thisCh); + thisMarker++; + + if (thisMarker < s1.Length) + { + thisCh = s1[thisMarker]; + } + } + + while ((thatMarker < s2.Length) && (thatChunk.Length == 0 || InChunk(thatCh, thatChunk[0]))) + { + thatChunk.Append(thatCh); + thatMarker++; + + if (thatMarker < s2.Length) + { + thatCh = s2[thatMarker]; + } + } + + int result = 0; + // If both chunks contain numeric characters, sort them numerically + if (char.IsDigit(thisChunk[0]) && char.IsDigit(thatChunk[0])) + { + var thisNumericChunk = Convert.ToInt32(thisChunk.ToString()); + var thatNumericChunk = Convert.ToInt32(thatChunk.ToString()); + + if (thisNumericChunk < thatNumericChunk) + { + result = -1; + } + + if (thisNumericChunk > thatNumericChunk) + { + result = 1; + } + } + else + { + return string.Compare(thisChunk.ToString(), thatChunk.ToString(), StringComparison.CurrentCultureIgnoreCase); + } + + if (result != 0) + { + return result; + } + } + + return 0; + } + + public int Compare(string x, string y) + { + return CompareValues(x, y); + } + } +} diff --git a/MediaBrowser.Server.Implementations/Sorting/SortNameComparer.cs b/MediaBrowser.Server.Implementations/Sorting/SortNameComparer.cs index 873753a2b2..e635cfbe52 100644 --- a/MediaBrowser.Server.Implementations/Sorting/SortNameComparer.cs +++ b/MediaBrowser.Server.Implementations/Sorting/SortNameComparer.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -using System; namespace MediaBrowser.Server.Implementations.Sorting { @@ -18,7 +17,7 @@ namespace MediaBrowser.Server.Implementations.Sorting /// System.Int32. public int Compare(BaseItem x, BaseItem y) { - return string.Compare(x.SortName, y.SortName, StringComparison.CurrentCultureIgnoreCase); + return AlphanumComparator.CompareValues(x.SortName, y.SortName); } /// -- cgit v1.2.3 From 91b5a8101f60efd824b2111b52955208fb705e08 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 8 Dec 2013 16:31:14 -0500 Subject: improve episode sorting --- .../Sorting/AiredEpisodeOrderComparer.cs | 11 ++++++++++- MediaBrowser.Server.Implementations/Sorting/NameComparer.cs | 3 +-- .../Sorting/SeriesSortNameComparer.cs | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs b/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs index 76971342a0..d6b78bd84b 100644 --- a/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs +++ b/MediaBrowser.Server.Implementations/Sorting/AiredEpisodeOrderComparer.cs @@ -62,7 +62,7 @@ namespace MediaBrowser.Server.Implementations.Sorting return CompareEpisodes(x, y); } - if (!isXSpecial && isYSpecial) + if (!isXSpecial) { return CompareEpisodeToSpecial(x, y); } @@ -87,8 +87,17 @@ namespace MediaBrowser.Server.Implementations.Sorting // Add 1 to to non-specials to account for AirsBeforeEpisodeNumber var xEpisode = x.IndexNumber ?? -1; xEpisode++; + var yEpisode = y.AirsBeforeEpisodeNumber ?? 10000; + // Sometimes they'll both have a value. + // For example AirsAfterSeasonNumber=1, AirsBeforeSeasonNumber=2, AirsBeforeEpisodeNumber=1 + // The episode should be displayed at the end of season 1 + if (y.AirsAfterSeasonNumber.HasValue && y.AirsBeforeSeasonNumber.HasValue && y.AirsBeforeSeasonNumber.Value > y.AirsAfterSeasonNumber.Value) + { + yEpisode = 10000; + } + return xEpisode.CompareTo(yEpisode); } diff --git a/MediaBrowser.Server.Implementations/Sorting/NameComparer.cs b/MediaBrowser.Server.Implementations/Sorting/NameComparer.cs index 49f86c485a..83b1b2d16f 100644 --- a/MediaBrowser.Server.Implementations/Sorting/NameComparer.cs +++ b/MediaBrowser.Server.Implementations/Sorting/NameComparer.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Querying; -using System; namespace MediaBrowser.Server.Implementations.Sorting { @@ -18,7 +17,7 @@ namespace MediaBrowser.Server.Implementations.Sorting /// System.Int32. public int Compare(BaseItem x, BaseItem y) { - return string.Compare(x.Name, y.Name, StringComparison.CurrentCultureIgnoreCase); + return AlphanumComparator.CompareValues(x.Name, y.Name); } /// diff --git a/MediaBrowser.Server.Implementations/Sorting/SeriesSortNameComparer.cs b/MediaBrowser.Server.Implementations/Sorting/SeriesSortNameComparer.cs index 4efc3218b2..09612a49c9 100644 --- a/MediaBrowser.Server.Implementations/Sorting/SeriesSortNameComparer.cs +++ b/MediaBrowser.Server.Implementations/Sorting/SeriesSortNameComparer.cs @@ -16,7 +16,7 @@ namespace MediaBrowser.Server.Implementations.Sorting /// System.Int32. public int Compare(BaseItem x, BaseItem y) { - return string.Compare(GetValue(x), GetValue(y), StringComparison.CurrentCultureIgnoreCase); + return AlphanumComparator.CompareValues(GetValue(x), GetValue(y)); } private string GetValue(BaseItem item) -- cgit v1.2.3 From d7c25fa53f636d9882b6fd77bc877fc71ddd8902 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 8 Dec 2013 21:24:23 -0500 Subject: fixed issue with natural sort --- .../Sorting/AlphanumComparator.cs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs b/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs index 2ced9a5668..3fbb01f779 100644 --- a/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs +++ b/MediaBrowser.Server.Implementations/Sorting/AlphanumComparator.cs @@ -33,8 +33,8 @@ namespace MediaBrowser.Server.Implementations.Sorting return 0; } - var thisMarker = 0; - var thatMarker = 0; + int thisMarker = 0, thisNumericChunk = 0; + int thatMarker = 0, thatNumericChunk = 0; while ((thisMarker < s1.Length) || (thatMarker < s2.Length)) { @@ -42,15 +42,15 @@ namespace MediaBrowser.Server.Implementations.Sorting { return -1; } - if (thatMarker >= s2.Length) + else if (thatMarker >= s2.Length) { return 1; } - var thisCh = s1[thisMarker]; - var thatCh = s2[thatMarker]; + char thisCh = s1[thisMarker]; + char thatCh = s2[thatMarker]; - var thisChunk = new StringBuilder(); - var thatChunk = new StringBuilder(); + StringBuilder thisChunk = new StringBuilder(); + StringBuilder thatChunk = new StringBuilder(); while ((thisMarker < s1.Length) && (thisChunk.Length == 0 || InChunk(thisCh, thisChunk[0]))) { @@ -78,8 +78,8 @@ namespace MediaBrowser.Server.Implementations.Sorting // If both chunks contain numeric characters, sort them numerically if (char.IsDigit(thisChunk[0]) && char.IsDigit(thatChunk[0])) { - var thisNumericChunk = Convert.ToInt32(thisChunk.ToString()); - var thatNumericChunk = Convert.ToInt32(thatChunk.ToString()); + thisNumericChunk = Convert.ToInt32(thisChunk.ToString()); + thatNumericChunk = Convert.ToInt32(thatChunk.ToString()); if (thisNumericChunk < thatNumericChunk) { @@ -93,7 +93,7 @@ namespace MediaBrowser.Server.Implementations.Sorting } else { - return string.Compare(thisChunk.ToString(), thatChunk.ToString(), StringComparison.CurrentCultureIgnoreCase); + result = thisChunk.ToString().CompareTo(thatChunk.ToString()); } if (result != 0) -- cgit v1.2.3 From 41ed3c15ffee7430b0718114bc7732f354198fb7 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 8 Dec 2013 21:24:48 -0500 Subject: fixed service stack logging --- MediaBrowser.Mono.userprefs | 17 +++++++++++------ .../HttpServer/HttpListenerHost.cs | 5 ++--- .../HttpServer/ServerFactory.cs | 3 +++ .../MediaBrowser.Server.Mono.csproj | 3 +++ 4 files changed, 19 insertions(+), 9 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Mono.userprefs b/MediaBrowser.Mono.userprefs index 26e63f6a87..d07dfa4cbf 100644 --- a/MediaBrowser.Mono.userprefs +++ b/MediaBrowser.Mono.userprefs @@ -1,20 +1,24 @@  - + - - + - + + - + - + + + + + @@ -33,6 +37,7 @@ + diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs index 29dce67476..5e4c6f0aaf 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs @@ -63,8 +63,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer _logger = logManager.GetLogger("HttpServer"); - LogManager.LogFactory = new ServerLogFactory(logManager); - _containerAdapter = new ContainerAdapter(applicationHost); for (var i = 0; i < 2; i++) @@ -477,7 +475,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer ServiceController = CreateServiceController(); _logger.Info("Calling ServiceStack AppHost.Init"); - Init(); + + base.Init(); } /// diff --git a/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs b/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs index 57acddc432..c403c09b44 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; +using ServiceStack.Logging; namespace MediaBrowser.Server.Implementations.HttpServer { @@ -20,6 +21,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer /// IHttpServer. public static IHttpServer CreateServer(IApplicationHost applicationHost, ILogManager logManager, string serverName, string handlerPath, string defaultRedirectpath) { + LogManager.LogFactory = new ServerLogFactory(logManager); + return new HttpListenerHost(applicationHost, logManager, serverName, handlerPath, defaultRedirectpath); } } diff --git a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj index 7df6146444..8d59a9a141 100644 --- a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj +++ b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj @@ -71,6 +71,9 @@ + + EntryPoints\WanAddressEntryPoint.cs + -- cgit v1.2.3