fixes #2904 - disabling transcoding for a user is not working

pull/1154/head
Luke Pulverenti 7 years ago
parent e5f340d6b7
commit 2d29d903be

@ -10,20 +10,39 @@ using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Querying; using MediaBrowser.Model.Querying;
using SQLitePCL.pretty; using SQLitePCL.pretty;
using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.IO;
namespace Emby.Server.Implementations.Activity namespace Emby.Server.Implementations.Activity
{ {
public class ActivityRepository : BaseSqliteRepository, IActivityRepository public class ActivityRepository : BaseSqliteRepository, IActivityRepository
{ {
private readonly CultureInfo _usCulture = new CultureInfo("en-US"); private readonly CultureInfo _usCulture = new CultureInfo("en-US");
protected IFileSystem FileSystem { get; private set; }
public ActivityRepository(ILogger logger, IServerApplicationPaths appPaths) public ActivityRepository(ILogger logger, IServerApplicationPaths appPaths, IFileSystem fileSystem)
: base(logger) : base(logger)
{ {
DbFilePath = Path.Combine(appPaths.DataPath, "activitylog.db"); DbFilePath = Path.Combine(appPaths.DataPath, "activitylog.db");
FileSystem = fileSystem;
} }
public void Initialize() public void Initialize()
{
try
{
InitializeInternal();
}
catch (Exception ex)
{
Logger.ErrorException("Error loading database file. Will reset and retry.", ex);
FileSystem.DeleteFile(DbFilePath);
InitializeInternal();
}
}
private void InitializeInternal()
{ {
using (var connection = CreateConnection()) using (var connection = CreateConnection())
{ {

@ -879,7 +879,7 @@ namespace Emby.Server.Implementations
// This is only needed for disposal purposes. If removing this, make sure to have the manager handle disposing it // This is only needed for disposal purposes. If removing this, make sure to have the manager handle disposing it
RegisterSingleInstance(UserRepository); RegisterSingleInstance(UserRepository);
var displayPreferencesRepo = new SqliteDisplayPreferencesRepository(LogManager.GetLogger("SqliteDisplayPreferencesRepository"), JsonSerializer, ApplicationPaths, MemoryStreamFactory); var displayPreferencesRepo = new SqliteDisplayPreferencesRepository(LogManager.GetLogger("SqliteDisplayPreferencesRepository"), JsonSerializer, ApplicationPaths, MemoryStreamFactory, FileSystemManager);
DisplayPreferencesRepository = displayPreferencesRepo; DisplayPreferencesRepository = displayPreferencesRepo;
RegisterSingleInstance(DisplayPreferencesRepository); RegisterSingleInstance(DisplayPreferencesRepository);
@ -997,7 +997,7 @@ namespace Emby.Server.Implementations
EncodingManager = new EncodingManager(FileSystemManager, Logger, MediaEncoder, ChapterManager, LibraryManager); EncodingManager = new EncodingManager(FileSystemManager, Logger, MediaEncoder, ChapterManager, LibraryManager);
RegisterSingleInstance(EncodingManager); RegisterSingleInstance(EncodingManager);
var sharingRepo = new SharingRepository(LogManager.GetLogger("SharingRepository"), ApplicationPaths); var sharingRepo = new SharingRepository(LogManager.GetLogger("SharingRepository"), ApplicationPaths, FileSystemManager);
sharingRepo.Initialize(); sharingRepo.Initialize();
// This is only needed for disposal purposes. If removing this, make sure to have the manager handle disposing it // This is only needed for disposal purposes. If removing this, make sure to have the manager handle disposing it
RegisterSingleInstance<ISharingRepository>(sharingRepo); RegisterSingleInstance<ISharingRepository>(sharingRepo);
@ -1351,7 +1351,7 @@ namespace Emby.Server.Implementations
private IActivityRepository GetActivityLogRepository() private IActivityRepository GetActivityLogRepository()
{ {
var repo = new ActivityRepository(LogManager.GetLogger("ActivityRepository"), ServerConfigurationManager.ApplicationPaths); var repo = new ActivityRepository(LogManager.GetLogger("ActivityRepository"), ServerConfigurationManager.ApplicationPaths, FileSystemManager);
repo.Initialize(); repo.Initialize();

@ -108,37 +108,49 @@ namespace Emby.Server.Implementations.Data
var db = SQLite3.Open(DbFilePath, connectionFlags, null); var db = SQLite3.Open(DbFilePath, connectionFlags, null);
if (string.IsNullOrWhiteSpace(_defaultWal)) try
{ {
_defaultWal = db.Query("PRAGMA journal_mode").SelectScalarString().First(); if (string.IsNullOrWhiteSpace(_defaultWal))
{
_defaultWal = db.Query("PRAGMA journal_mode").SelectScalarString().First();
Logger.Info("Default journal_mode for {0} is {1}", DbFilePath, _defaultWal); Logger.Info("Default journal_mode for {0} is {1}", DbFilePath, _defaultWal);
} }
var queries = new List<string> var queries = new List<string>
{ {
//"PRAGMA cache size=-10000" //"PRAGMA cache size=-10000"
//"PRAGMA read_uncommitted = true", //"PRAGMA read_uncommitted = true",
"PRAGMA synchronous=Normal" "PRAGMA synchronous=Normal"
}; };
if (CacheSize.HasValue) if (CacheSize.HasValue)
{ {
queries.Add("PRAGMA cache_size=" + CacheSize.Value.ToString(CultureInfo.InvariantCulture)); queries.Add("PRAGMA cache_size=" + CacheSize.Value.ToString(CultureInfo.InvariantCulture));
} }
if (EnableTempStoreMemory) if (EnableTempStoreMemory)
{ {
queries.Add("PRAGMA temp_store = memory"); queries.Add("PRAGMA temp_store = memory");
}
else
{
queries.Add("PRAGMA temp_store = file");
}
foreach (var query in queries)
{
db.Execute(query);
}
} }
else catch
{ {
queries.Add("PRAGMA temp_store = file"); using (db)
} {
foreach (var query in queries) }
{
db.Execute(query); throw;
} }
_connection = new ManagedConnection(db, false); _connection = new ManagedConnection(db, false);
@ -265,29 +277,34 @@ namespace Emby.Server.Implementations.Data
{ {
if (dispose) if (dispose)
{ {
try DisposeConnection();
}
}
private void DisposeConnection()
{
try
{
lock (_disposeLock)
{ {
lock (_disposeLock) using (WriteLock.Write())
{ {
using (WriteLock.Write()) if (_connection != null)
{ {
if (_connection != null) using (_connection)
{ {
using (_connection) _connection.Close();
{
}
_connection = null;
} }
_connection = null;
CloseConnection();
} }
CloseConnection();
} }
} }
catch (Exception ex) }
{ catch (Exception ex)
Logger.ErrorException("Error disposing database", ex); {
} Logger.ErrorException("Error disposing database", ex);
} }
} }

@ -19,12 +19,14 @@ namespace Emby.Server.Implementations.Data
public class SqliteDisplayPreferencesRepository : BaseSqliteRepository, IDisplayPreferencesRepository public class SqliteDisplayPreferencesRepository : BaseSqliteRepository, IDisplayPreferencesRepository
{ {
private readonly IMemoryStreamFactory _memoryStreamProvider; private readonly IMemoryStreamFactory _memoryStreamProvider;
protected IFileSystem FileSystem { get; private set; }
public SqliteDisplayPreferencesRepository(ILogger logger, IJsonSerializer jsonSerializer, IApplicationPaths appPaths, IMemoryStreamFactory memoryStreamProvider) public SqliteDisplayPreferencesRepository(ILogger logger, IJsonSerializer jsonSerializer, IApplicationPaths appPaths, IMemoryStreamFactory memoryStreamProvider, IFileSystem fileSystem)
: base(logger) : base(logger)
{ {
_jsonSerializer = jsonSerializer; _jsonSerializer = jsonSerializer;
_memoryStreamProvider = memoryStreamProvider; _memoryStreamProvider = memoryStreamProvider;
FileSystem = fileSystem;
DbFilePath = Path.Combine(appPaths.DataPath, "displaypreferences.db"); DbFilePath = Path.Combine(appPaths.DataPath, "displaypreferences.db");
} }
@ -45,11 +47,27 @@ namespace Emby.Server.Implementations.Data
/// </summary> /// </summary>
private readonly IJsonSerializer _jsonSerializer; private readonly IJsonSerializer _jsonSerializer;
public void Initialize()
{
try
{
InitializeInternal();
}
catch (Exception ex)
{
Logger.ErrorException("Error loading database file. Will reset and retry.", ex);
FileSystem.DeleteFile(DbFilePath);
InitializeInternal();
}
}
/// <summary> /// <summary>
/// Opens the connection to the database /// Opens the connection to the database
/// </summary> /// </summary>
/// <returns>Task.</returns> /// <returns>Task.</returns>
public void Initialize() private void InitializeInternal()
{ {
using (var connection = CreateConnection()) using (var connection = CreateConnection())
{ {

@ -120,13 +120,13 @@ namespace Emby.Server.Implementations.Data
protected override void CloseConnection() protected override void CloseConnection()
{ {
base.CloseConnection();
if (_shrinkMemoryTimer != null) if (_shrinkMemoryTimer != null)
{ {
_shrinkMemoryTimer.Dispose(); _shrinkMemoryTimer.Dispose();
_shrinkMemoryTimer = null; _shrinkMemoryTimer = null;
} }
base.CloseConnection();
} }
/// <summary> /// <summary>

@ -38,7 +38,7 @@ namespace Emby.Server.Implementations.Notifications
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.ErrorException("Error loading notifications database file. Will reset and retry.", ex); Logger.ErrorException("Error loading database file. Will reset and retry.", ex);
FileSystem.DeleteFile(DbFilePath); FileSystem.DeleteFile(DbFilePath);

@ -7,22 +7,42 @@ using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Social; using MediaBrowser.Model.Social;
using SQLitePCL.pretty; using SQLitePCL.pretty;
using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.IO;
namespace Emby.Server.Implementations.Social namespace Emby.Server.Implementations.Social
{ {
public class SharingRepository : BaseSqliteRepository, ISharingRepository public class SharingRepository : BaseSqliteRepository, ISharingRepository
{ {
public SharingRepository(ILogger logger, IApplicationPaths appPaths) protected IFileSystem FileSystem { get; private set; }
public SharingRepository(ILogger logger, IApplicationPaths appPaths, IFileSystem fileSystem)
: base(logger) : base(logger)
{ {
FileSystem = fileSystem;
DbFilePath = Path.Combine(appPaths.DataPath, "shares.db"); DbFilePath = Path.Combine(appPaths.DataPath, "shares.db");
} }
public void Initialize()
{
try
{
InitializeInternal();
}
catch (Exception ex)
{
Logger.ErrorException("Error loading database file. Will reset and retry.", ex);
FileSystem.DeleteFile(DbFilePath);
InitializeInternal();
}
}
/// <summary> /// <summary>
/// Opens the connection to the database /// Opens the connection to the database
/// </summary> /// </summary>
/// <returns>Task.</returns> /// <returns>Task.</returns>
public void Initialize() private void InitializeInternal()
{ {
using (var connection = CreateConnection()) using (var connection = CreateConnection())
{ {

Loading…
Cancel
Save