diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
index 038116703..78d7a480e 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
@@ -268,13 +268,18 @@ namespace MediaBrowser.Server.Implementations.HttpServer
private bool EnableLogging(string url)
{
- var parts = url.Split(new[] { '?' }, 2);
-
- var extension = Path.GetExtension(parts[0]);
+ var extension = GetExtension(url);
return string.IsNullOrWhiteSpace(extension) || !_skipLogExtensions.ContainsKey(extension);
}
+ private string GetExtension(string url)
+ {
+ var parts = url.Split(new[] { '?' }, 2);
+
+ return Path.GetExtension(parts[0]);
+ }
+
///
/// Overridable method that can be used to implement a custom hnandler
///
@@ -339,6 +344,12 @@ namespace MediaBrowser.Server.Implementations.HttpServer
{
httpRes.Write(GlobalResponse);
httpRes.ContentType = "text/plain";
+
+ if (!string.Equals(GetExtension(urlString), "html", StringComparison.OrdinalIgnoreCase))
+ {
+ httpRes.StatusCode = 503;
+ }
+
return Task.FromResult(true);
}
diff --git a/MediaBrowser.Server.Implementations/Localization/Core/core.json b/MediaBrowser.Server.Implementations/Localization/Core/core.json
index 5f11b9436..976faa8cb 100644
--- a/MediaBrowser.Server.Implementations/Localization/Core/core.json
+++ b/MediaBrowser.Server.Implementations/Localization/Core/core.json
@@ -174,5 +174,6 @@
"HeaderWriter": "Writers",
"HeaderParentalRatings": "Parental Ratings",
"HeaderCommunityRatings": "Community ratings",
- "StartupEmbyServerIsLoading": "Emby Server is loading. Please try again shortly."
+ "StartupEmbyServerIsLoading": "Emby Server is loading. Please try again shortly.",
+ "DbUpgradeMessage": "Please wait while your Emby Server database is upgraded. {0}% complete."
}
diff --git a/MediaBrowser.Server.Implementations/Localization/Core/en-US.json b/MediaBrowser.Server.Implementations/Localization/Core/en-US.json
index e444c0e93..b1e8658de 100644
--- a/MediaBrowser.Server.Implementations/Localization/Core/en-US.json
+++ b/MediaBrowser.Server.Implementations/Localization/Core/en-US.json
@@ -173,5 +173,6 @@
"HeaderWriter": "Writers",
"HeaderParentalRatings": "Parental Ratings",
"HeaderCommunityRatings": "Community ratings",
- "StartupEmbyServerIsLoading": "Emby Server is loading. Please try again shortly."
+ "StartupEmbyServerIsLoading": "Emby Server is loading. Please try again shortly.",
+ "DbUpgradeMessage": "Please wait while your Emby Server database is upgraded. {0}% complete."
}
\ No newline at end of file
diff --git a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs b/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs
index 69ddb4d13..f4eb4ef8a 100644
--- a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs
@@ -9,11 +9,14 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
+using System.Globalization;
using System.Threading;
using System.Threading.Tasks;
using CommonIO;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Localization;
+using MediaBrowser.Controller.Net;
namespace MediaBrowser.Server.Implementations.Persistence
{
@@ -24,16 +27,21 @@ namespace MediaBrowser.Server.Implementations.Persistence
private readonly ILogger _logger;
private readonly IServerConfigurationManager _config;
private readonly IFileSystem _fileSystem;
+ private readonly IHttpServer _httpServer;
+ private readonly ILocalizationManager _localization;
- public const int MigrationVersion = 7;
+ public const int MigrationVersion = 12;
+ public static bool EnableUnavailableMessage = false;
- public CleanDatabaseScheduledTask(ILibraryManager libraryManager, IItemRepository itemRepo, ILogger logger, IServerConfigurationManager config, IFileSystem fileSystem)
+ public CleanDatabaseScheduledTask(ILibraryManager libraryManager, IItemRepository itemRepo, ILogger logger, IServerConfigurationManager config, IFileSystem fileSystem, IHttpServer httpServer, ILocalizationManager localization)
{
_libraryManager = libraryManager;
_itemRepo = itemRepo;
_logger = logger;
_config = config;
_fileSystem = fileSystem;
+ _httpServer = httpServer;
+ _localization = localization;
}
public string Name
@@ -54,7 +62,23 @@ namespace MediaBrowser.Server.Implementations.Persistence
public async Task Execute(CancellationToken cancellationToken, IProgress progress)
{
var innerProgress = new ActionableProgress();
- innerProgress.RegisterAction(p => progress.Report(.4 * p));
+ innerProgress.RegisterAction(p =>
+ {
+ double newPercentCommplete = .4 * p;
+ if (EnableUnavailableMessage)
+ {
+ var html = "Emby";
+ var text = _localization.GetLocalizedString("DbUpgradeMessage");
+ html += string.Format(text, newPercentCommplete.ToString("N2", CultureInfo.InvariantCulture));
+
+ html += "";
+ html += "";
+
+ _httpServer.GlobalResponse = html;
+ }
+
+ progress.Report(newPercentCommplete);
+ });
await UpdateToLatestSchema(cancellationToken, innerProgress).ConfigureAwait(false);
@@ -69,6 +93,12 @@ namespace MediaBrowser.Server.Implementations.Persistence
progress.Report(100);
await _itemRepo.UpdateInheritedValues(cancellationToken).ConfigureAwait(false);
+
+ if (EnableUnavailableMessage)
+ {
+ EnableUnavailableMessage = false;
+ _httpServer.GlobalResponse = null;
+ }
}
private async Task UpdateToLatestSchema(CancellationToken cancellationToken, IProgress progress)
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index 3d5ddcf49..7898dc1ef 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -82,7 +82,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
private IDbCommand _updateInheritedRatingCommand;
- private const int LatestSchemaVersion = 40;
+ private const int LatestSchemaVersion = 44;
///
/// Initializes a new instance of the class.
diff --git a/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs b/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs
index cdb69025a..1df49845b 100644
--- a/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs
+++ b/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs
@@ -20,9 +20,11 @@ namespace MediaBrowser.Server.Startup.Common.Migrations
{
if (_config.Configuration.MigrationVersion < CleanDatabaseScheduledTask.MigrationVersion)
{
+ CleanDatabaseScheduledTask.EnableUnavailableMessage = true;
+
Task.Run(async () =>
{
- await Task.Delay(2000).ConfigureAwait(false);
+ await Task.Delay(1000).ConfigureAwait(false);
_taskManager.QueueScheduledTask();
});