Răsfoiți Sursa

switch recordings to ts when preserving original audio

Luke Pulverenti 9 ani în urmă
părinte
comite
383110f9af

+ 23 - 16
MediaBrowser.Providers/TV/SeriesPostScanTask.cs

@@ -195,28 +195,35 @@ namespace MediaBrowser.Providers.TV
 
         private async void LibraryUpdateTimerCallback(object state)
         {
-            if (MissingEpisodeProvider.IsRunning)
+            try
             {
-                return;
-            }
+                if (MissingEpisodeProvider.IsRunning)
+                {
+                    return;
+                }
 
-            if (_libraryManager.IsScanRunning)
-            {
-                return ;
-            }
+                if (_libraryManager.IsScanRunning)
+                {
+                    return;
+                }
 
-            var seriesList = _libraryManager.GetItemList(new InternalItemsQuery()
-            {
-                IncludeItemTypes = new[] { typeof(Series).Name },
-                Recursive = true,
-                GroupByPresentationUniqueKey = false
+                var seriesList = _libraryManager.GetItemList(new InternalItemsQuery()
+                {
+                    IncludeItemTypes = new[] { typeof(Series).Name },
+                    Recursive = true,
+                    GroupByPresentationUniqueKey = false
 
-            }).Cast<Series>().ToList();
+                }).Cast<Series>().ToList();
 
-            var seriesGroups = SeriesPostScanTask.FindSeriesGroups(seriesList).Where(g => !string.IsNullOrEmpty(g.Key)).ToList();
+                var seriesGroups = SeriesPostScanTask.FindSeriesGroups(seriesList).Where(g => !string.IsNullOrEmpty(g.Key)).ToList();
 
-            await new MissingEpisodeProvider(_logger, _config, _libraryManager, _localization, _fileSystem)
-                .Run(seriesGroups, false, CancellationToken.None).ConfigureAwait(false);
+                await new MissingEpisodeProvider(_logger, _config, _libraryManager, _localization, _fileSystem)
+                    .Run(seriesGroups, false, CancellationToken.None).ConfigureAwait(false);
+            }
+            catch (Exception ex)
+            {
+                _logger.ErrorException("Error in SeriesPostScanTask", ex);
+            }
         }
 
         private bool FilterItem(BaseItem item)

+ 1 - 1
MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs

@@ -50,7 +50,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
                 var streams = mediaSource.MediaStreams ?? new List<MediaStream>();
                 if (streams.Any(i => i.Type == MediaStreamType.Audio && (i.Codec ?? string.Empty).IndexOf("aac", StringComparison.OrdinalIgnoreCase) != -1))
                 {
-                    return Path.ChangeExtension(targetFile, ".mkv");
+                    return Path.ChangeExtension(targetFile, ".ts");
                 }
             }
 

+ 38 - 2
MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs

@@ -8,6 +8,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
 {
     public abstract class BaseSqliteRepository : IDisposable
     {
+        protected readonly SemaphoreSlim WriteLock = new SemaphoreSlim(1, 1);
         protected readonly IDbConnector DbConnector;
         protected ILogger Logger;
 
@@ -19,11 +20,16 @@ namespace MediaBrowser.Server.Implementations.Persistence
             Logger = logManager.GetLogger(GetType().Name);
         }
 
+        protected virtual bool EnableConnectionPooling
+        {
+            get { return true; }
+        }
+
         protected virtual async Task<IDbConnection> CreateConnection(bool isReadOnly = false)
         {
             var connection = await DbConnector.Connect(DbFilePath, false, true).ConfigureAwait(false);
 
-            connection.RunQueries(new []
+            connection.RunQueries(new[]
             {
                 "pragma temp_store = memory"
 
@@ -45,12 +51,15 @@ namespace MediaBrowser.Server.Implementations.Persistence
         {
             _disposed = true;
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
 
         protected async Task Vacuum(IDbConnection connection)
         {
             CheckDisposed();
 
+            await WriteLock.WaitAsync().ConfigureAwait(false);
+
             try
             {
                 using (var cmd = connection.CreateCommand())
@@ -65,14 +74,41 @@ namespace MediaBrowser.Server.Implementations.Persistence
 
                 throw;
             }
+            finally
+            {
+                WriteLock.Release();
+            }
         }
 
+        private readonly object _disposeLock = new object();
+
         /// <summary>
         /// Releases unmanaged and - optionally - managed resources.
         /// </summary>
         /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
         protected virtual void Dispose(bool dispose)
         {
+            if (dispose)
+            {
+                try
+                {
+                    lock (_disposeLock)
+                    {
+                        WriteLock.Wait();
+
+                        CloseConnection();
+                    }
+                }
+                catch (Exception ex)
+                {
+                    Logger.ErrorException("Error disposing database", ex);
+                }
+            }
+        }
+
+        protected virtual void CloseConnection()
+        {
+
         }
     }
-}
+}

+ 1 - 5
MediaBrowser.Server.Implementations/Persistence/SqliteExtensions.cs

@@ -39,12 +39,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
 
             var connectionString = connectionstr.ConnectionString;
 
-            if (enablePooling)
-            {
-                connectionString += ";Max Pool Size=100";
-            }
-
             //logger.Info("Sqlite {0} opening {1}", SQLiteConnection.SQLiteVersion, connectionString);
+            SQLiteConnection.SetMemoryStatus(false);
 
             var connection = new SQLiteConnection(connectionString);
 

Fișier diff suprimat deoarece este prea mare
+ 635 - 489
MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs


+ 168 - 154
MediaBrowser.Server.Implementations/Persistence/SqliteUserDataRepository.cs

@@ -15,11 +15,18 @@ namespace MediaBrowser.Server.Implementations.Persistence
 {
     public class SqliteUserDataRepository : BaseSqliteRepository, IUserDataRepository
     {
+        private IDbConnection _connection;
+
         public SqliteUserDataRepository(ILogManager logManager, IApplicationPaths appPaths, IDbConnector connector) : base(logManager, connector)
         {
             DbFilePath = Path.Combine(appPaths.DataPath, "userdata_v2.db");
         }
 
+        protected override bool EnableConnectionPooling
+        {
+            get { return false; }
+        }
+
         /// <summary>
         /// Gets the name of the repository
         /// </summary>
@@ -36,23 +43,27 @@ namespace MediaBrowser.Server.Implementations.Persistence
         /// Opens the connection to the database
         /// </summary>
         /// <returns>Task.</returns>
-        public async Task Initialize(IDbConnector dbConnector)
+        public async Task Initialize()
         {
-            using (var connection = await CreateConnection().ConfigureAwait(false))
-            {
-                string[] queries = {
+            _connection = await CreateConnection(false).ConfigureAwait(false);
+
+            string[] queries = {
 
                                 "create table if not exists userdata (key nvarchar, userId GUID, rating float null, played bit, playCount int, isFavorite bit, playbackPositionTicks bigint, lastPlayedDate datetime null)",
 
                                 "create index if not exists idx_userdata on userdata(key)",
-                                "create unique index if not exists userdataindex on userdata (key, userId)"
+                                "create unique index if not exists userdataindex on userdata (key, userId)",
+
+                                //pragmas
+                                "pragma temp_store = memory",
+
+                                "pragma shrink_memory"
                                };
 
-                connection.RunQueries(queries, Logger);
+            _connection.RunQueries(queries, Logger);
 
-                connection.AddColumn(Logger, "userdata", "AudioStreamIndex", "int");
-                connection.AddColumn(Logger, "userdata", "SubtitleStreamIndex", "int");
-            }
+            _connection.AddColumn(Logger, "userdata", "AudioStreamIndex", "int");
+            _connection.AddColumn(Logger, "userdata", "SubtitleStreamIndex", "int");
         }
 
         /// <summary>
@@ -114,63 +125,64 @@ namespace MediaBrowser.Server.Implementations.Persistence
         {
             cancellationToken.ThrowIfCancellationRequested();
 
-            using (var connection = await CreateConnection().ConfigureAwait(false))
-            {
-                IDbTransaction transaction = null;
-
-                try
-                {
-                    transaction = connection.BeginTransaction();
-
-                    using (var cmd = connection.CreateCommand())
-                    {
-                        cmd.CommandText = "replace into userdata (key, userId, rating,played,playCount,isFavorite,playbackPositionTicks,lastPlayedDate,AudioStreamIndex,SubtitleStreamIndex) values (@key, @userId, @rating,@played,@playCount,@isFavorite,@playbackPositionTicks,@lastPlayedDate,@AudioStreamIndex,@SubtitleStreamIndex)";
-
-                        cmd.Parameters.Add(cmd, "@key", DbType.String).Value = key;
-                        cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId;
-                        cmd.Parameters.Add(cmd, "@rating", DbType.Double).Value = userData.Rating;
-                        cmd.Parameters.Add(cmd, "@played", DbType.Boolean).Value = userData.Played;
-                        cmd.Parameters.Add(cmd, "@playCount", DbType.Int32).Value = userData.PlayCount;
-                        cmd.Parameters.Add(cmd, "@isFavorite", DbType.Boolean).Value = userData.IsFavorite;
-                        cmd.Parameters.Add(cmd, "@playbackPositionTicks", DbType.Int64).Value = userData.PlaybackPositionTicks;
-                        cmd.Parameters.Add(cmd, "@lastPlayedDate", DbType.DateTime).Value = userData.LastPlayedDate;
-                        cmd.Parameters.Add(cmd, "@AudioStreamIndex", DbType.Int32).Value = userData.AudioStreamIndex;
-                        cmd.Parameters.Add(cmd, "@SubtitleStreamIndex", DbType.Int32).Value = userData.SubtitleStreamIndex;
+            await WriteLock.WaitAsync(cancellationToken).ConfigureAwait(false);
 
-                        cmd.Transaction = transaction;
+            IDbTransaction transaction = null;
 
-                        cmd.ExecuteNonQuery();
-                    }
+            try
+            {
+                transaction = _connection.BeginTransaction();
 
-                    transaction.Commit();
-                }
-                catch (OperationCanceledException)
+                using (var cmd = _connection.CreateCommand())
                 {
-                    if (transaction != null)
-                    {
-                        transaction.Rollback();
-                    }
+                    cmd.CommandText = "replace into userdata (key, userId, rating,played,playCount,isFavorite,playbackPositionTicks,lastPlayedDate,AudioStreamIndex,SubtitleStreamIndex) values (@key, @userId, @rating,@played,@playCount,@isFavorite,@playbackPositionTicks,@lastPlayedDate,@AudioStreamIndex,@SubtitleStreamIndex)";
 
-                    throw;
+                    cmd.Parameters.Add(cmd, "@key", DbType.String).Value = key;
+                    cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId;
+                    cmd.Parameters.Add(cmd, "@rating", DbType.Double).Value = userData.Rating;
+                    cmd.Parameters.Add(cmd, "@played", DbType.Boolean).Value = userData.Played;
+                    cmd.Parameters.Add(cmd, "@playCount", DbType.Int32).Value = userData.PlayCount;
+                    cmd.Parameters.Add(cmd, "@isFavorite", DbType.Boolean).Value = userData.IsFavorite;
+                    cmd.Parameters.Add(cmd, "@playbackPositionTicks", DbType.Int64).Value = userData.PlaybackPositionTicks;
+                    cmd.Parameters.Add(cmd, "@lastPlayedDate", DbType.DateTime).Value = userData.LastPlayedDate;
+                    cmd.Parameters.Add(cmd, "@AudioStreamIndex", DbType.Int32).Value = userData.AudioStreamIndex;
+                    cmd.Parameters.Add(cmd, "@SubtitleStreamIndex", DbType.Int32).Value = userData.SubtitleStreamIndex;
+
+                    cmd.Transaction = transaction;
+
+                    cmd.ExecuteNonQuery();
                 }
-                catch (Exception e)
+
+                transaction.Commit();
+            }
+            catch (OperationCanceledException)
+            {
+                if (transaction != null)
                 {
-                    Logger.ErrorException("Failed to save user data:", e);
+                    transaction.Rollback();
+                }
 
-                    if (transaction != null)
-                    {
-                        transaction.Rollback();
-                    }
+                throw;
+            }
+            catch (Exception e)
+            {
+                Logger.ErrorException("Failed to save user data:", e);
 
-                    throw;
+                if (transaction != null)
+                {
+                    transaction.Rollback();
                 }
-                finally
+
+                throw;
+            }
+            finally
+            {
+                if (transaction != null)
                 {
-                    if (transaction != null)
-                    {
-                        transaction.Dispose();
-                    }
+                    transaction.Dispose();
                 }
+
+                WriteLock.Release();
             }
         }
 
@@ -185,68 +197,69 @@ namespace MediaBrowser.Server.Implementations.Persistence
         {
             cancellationToken.ThrowIfCancellationRequested();
 
-            using (var connection = await CreateConnection().ConfigureAwait(false))
-            {
-                IDbTransaction transaction = null;
+            await WriteLock.WaitAsync(cancellationToken).ConfigureAwait(false);
 
-                try
-                {
-                    transaction = connection.BeginTransaction();
+            IDbTransaction transaction = null;
 
-                    foreach (var userItemData in userData)
-                    {
-                        using (var cmd = connection.CreateCommand())
-                        {
-                            cmd.CommandText = "replace into userdata (key, userId, rating,played,playCount,isFavorite,playbackPositionTicks,lastPlayedDate,AudioStreamIndex,SubtitleStreamIndex) values (@key, @userId, @rating,@played,@playCount,@isFavorite,@playbackPositionTicks,@lastPlayedDate,@AudioStreamIndex,@SubtitleStreamIndex)";
-
-                            cmd.Parameters.Add(cmd, "@key", DbType.String).Value = userItemData.Key;
-                            cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId;
-                            cmd.Parameters.Add(cmd, "@rating", DbType.Double).Value = userItemData.Rating;
-                            cmd.Parameters.Add(cmd, "@played", DbType.Boolean).Value = userItemData.Played;
-                            cmd.Parameters.Add(cmd, "@playCount", DbType.Int32).Value = userItemData.PlayCount;
-                            cmd.Parameters.Add(cmd, "@isFavorite", DbType.Boolean).Value = userItemData.IsFavorite;
-                            cmd.Parameters.Add(cmd, "@playbackPositionTicks", DbType.Int64).Value = userItemData.PlaybackPositionTicks;
-                            cmd.Parameters.Add(cmd, "@lastPlayedDate", DbType.DateTime).Value = userItemData.LastPlayedDate;
-                            cmd.Parameters.Add(cmd, "@AudioStreamIndex", DbType.Int32).Value = userItemData.AudioStreamIndex;
-                            cmd.Parameters.Add(cmd, "@SubtitleStreamIndex", DbType.Int32).Value = userItemData.SubtitleStreamIndex;
-
-                            cmd.Transaction = transaction;
-
-                            cmd.ExecuteNonQuery();
-                        }
-
-                        cancellationToken.ThrowIfCancellationRequested();
-                    }
+            try
+            {
+                transaction = _connection.BeginTransaction();
 
-                    transaction.Commit();
-                }
-                catch (OperationCanceledException)
+                foreach (var userItemData in userData)
                 {
-                    if (transaction != null)
+                    using (var cmd = _connection.CreateCommand())
                     {
-                        transaction.Rollback();
+                        cmd.CommandText = "replace into userdata (key, userId, rating,played,playCount,isFavorite,playbackPositionTicks,lastPlayedDate,AudioStreamIndex,SubtitleStreamIndex) values (@key, @userId, @rating,@played,@playCount,@isFavorite,@playbackPositionTicks,@lastPlayedDate,@AudioStreamIndex,@SubtitleStreamIndex)";
+
+                        cmd.Parameters.Add(cmd, "@key", DbType.String).Value = userItemData.Key;
+                        cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId;
+                        cmd.Parameters.Add(cmd, "@rating", DbType.Double).Value = userItemData.Rating;
+                        cmd.Parameters.Add(cmd, "@played", DbType.Boolean).Value = userItemData.Played;
+                        cmd.Parameters.Add(cmd, "@playCount", DbType.Int32).Value = userItemData.PlayCount;
+                        cmd.Parameters.Add(cmd, "@isFavorite", DbType.Boolean).Value = userItemData.IsFavorite;
+                        cmd.Parameters.Add(cmd, "@playbackPositionTicks", DbType.Int64).Value = userItemData.PlaybackPositionTicks;
+                        cmd.Parameters.Add(cmd, "@lastPlayedDate", DbType.DateTime).Value = userItemData.LastPlayedDate;
+                        cmd.Parameters.Add(cmd, "@AudioStreamIndex", DbType.Int32).Value = userItemData.AudioStreamIndex;
+                        cmd.Parameters.Add(cmd, "@SubtitleStreamIndex", DbType.Int32).Value = userItemData.SubtitleStreamIndex;
+
+                        cmd.Transaction = transaction;
+
+                        cmd.ExecuteNonQuery();
                     }
 
-                    throw;
+                    cancellationToken.ThrowIfCancellationRequested();
                 }
-                catch (Exception e)
+
+                transaction.Commit();
+            }
+            catch (OperationCanceledException)
+            {
+                if (transaction != null)
                 {
-                    Logger.ErrorException("Failed to save user data:", e);
+                    transaction.Rollback();
+                }
 
-                    if (transaction != null)
-                    {
-                        transaction.Rollback();
-                    }
+                throw;
+            }
+            catch (Exception e)
+            {
+                Logger.ErrorException("Failed to save user data:", e);
 
-                    throw;
+                if (transaction != null)
+                {
+                    transaction.Rollback();
                 }
-                finally
+
+                throw;
+            }
+            finally
+            {
+                if (transaction != null)
                 {
-                    if (transaction != null)
-                    {
-                        transaction.Dispose();
-                    }
+                    transaction.Dispose();
                 }
+
+                WriteLock.Release();
             }
         }
 
@@ -272,25 +285,22 @@ namespace MediaBrowser.Server.Implementations.Persistence
                 throw new ArgumentNullException("key");
             }
 
-            using (var connection = CreateConnection(true).Result)
+            using (var cmd = _connection.CreateCommand())
             {
-                using (var cmd = connection.CreateCommand())
-                {
-                    cmd.CommandText = "select key,userid,rating,played,playCount,isFavorite,playbackPositionTicks,lastPlayedDate,AudioStreamIndex,SubtitleStreamIndex from userdata where key = @key and userId=@userId";
+                cmd.CommandText = "select key,userid,rating,played,playCount,isFavorite,playbackPositionTicks,lastPlayedDate,AudioStreamIndex,SubtitleStreamIndex from userdata where key = @key and userId=@userId";
 
-                    cmd.Parameters.Add(cmd, "@key", DbType.String).Value = key;
-                    cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId;
+                cmd.Parameters.Add(cmd, "@key", DbType.String).Value = key;
+                cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId;
 
-                    using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow))
+                using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow))
+                {
+                    if (reader.Read())
                     {
-                        if (reader.Read())
-                        {
-                            return ReadRow(reader);
-                        }
+                        return ReadRow(reader);
                     }
-
-                    return null;
                 }
+
+                return null;
             }
         }
 
@@ -305,41 +315,38 @@ namespace MediaBrowser.Server.Implementations.Persistence
                 throw new ArgumentNullException("keys");
             }
 
-            using (var connection = CreateConnection(true).Result)
+            using (var cmd = _connection.CreateCommand())
             {
-                using (var cmd = connection.CreateCommand())
+                var index = 0;
+                var excludeIds = new List<string>();
+                var builder = new StringBuilder();
+                foreach (var key in keys)
                 {
-                    var index = 0;
-                    var excludeIds = new List<string>();
-                    var builder = new StringBuilder();
-                    foreach (var key in keys)
-                    {
-                        var paramName = "@Key" + index;
-                        excludeIds.Add("Key =" + paramName);
-                        cmd.Parameters.Add(cmd, paramName, DbType.String).Value = key;
-                        builder.Append(" WHEN Key=" + paramName + " THEN " + index);
-                        index++;
-                    }
+                    var paramName = "@Key" + index;
+                    excludeIds.Add("Key =" + paramName);
+                    cmd.Parameters.Add(cmd, paramName, DbType.String).Value = key;
+                    builder.Append(" WHEN Key=" + paramName + " THEN " + index);
+                    index++;
+                }
 
-                    var keyText = string.Join(" OR ", excludeIds.ToArray());
+                var keyText = string.Join(" OR ", excludeIds.ToArray());
 
-                    cmd.CommandText = "select key,userid,rating,played,playCount,isFavorite,playbackPositionTicks,lastPlayedDate,AudioStreamIndex,SubtitleStreamIndex from userdata where userId=@userId AND (" + keyText + ") ";
+                cmd.CommandText = "select key,userid,rating,played,playCount,isFavorite,playbackPositionTicks,lastPlayedDate,AudioStreamIndex,SubtitleStreamIndex from userdata where userId=@userId AND (" + keyText + ") ";
 
-                    cmd.CommandText += " ORDER BY (Case " + builder + " Else " + keys.Count.ToString(CultureInfo.InvariantCulture) + " End )";
-                    cmd.CommandText += " LIMIT 1";
+                cmd.CommandText += " ORDER BY (Case " + builder + " Else " + keys.Count.ToString(CultureInfo.InvariantCulture) + " End )";
+                cmd.CommandText += " LIMIT 1";
 
-                    cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId;
+                cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId;
 
-                    using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow))
+                using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow))
+                {
+                    if (reader.Read())
                     {
-                        if (reader.Read())
-                        {
-                            return ReadRow(reader);
-                        }
+                        return ReadRow(reader);
                     }
-
-                    return null;
                 }
+
+                return null;
             }
         }
 
@@ -355,27 +362,20 @@ namespace MediaBrowser.Server.Implementations.Persistence
                 throw new ArgumentNullException("userId");
             }
 
-            var list = new List<UserItemData>();
-
-            using (var connection = CreateConnection(true).Result)
+            using (var cmd = _connection.CreateCommand())
             {
-                using (var cmd = connection.CreateCommand())
-                {
-                    cmd.CommandText = "select key,userid,rating,played,playCount,isFavorite,playbackPositionTicks,lastPlayedDate,AudioStreamIndex,SubtitleStreamIndex from userdata where userId=@userId";
+                cmd.CommandText = "select key,userid,rating,played,playCount,isFavorite,playbackPositionTicks,lastPlayedDate,AudioStreamIndex,SubtitleStreamIndex from userdata where userId=@userId";
 
-                    cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId;
+                cmd.Parameters.Add(cmd, "@userId", DbType.Guid).Value = userId;
 
-                    using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
+                using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
+                {
+                    while (reader.Read())
                     {
-                        while (reader.Read())
-                        {
-                            list.Add(ReadRow(reader));
-                        }
+                        yield return ReadRow(reader);
                     }
                 }
             }
-
-            return list;
         }
 
         /// <summary>
@@ -416,5 +416,19 @@ namespace MediaBrowser.Server.Implementations.Persistence
 
             return userData;
         }
+
+        protected override void CloseConnection()
+        {
+            if (_connection != null)
+            {
+                if (_connection.IsOpen())
+                {
+                    _connection.Close();
+                }
+
+                _connection.Dispose();
+                _connection = null;
+            }
+        }
     }
 }

+ 2 - 2
MediaBrowser.Server.Startup.Common/ApplicationHost.cs

@@ -573,7 +573,7 @@ namespace MediaBrowser.Server.Startup.Common
 
             await displayPreferencesRepo.Initialize().ConfigureAwait(false);
             await ConfigureUserDataRepositories().ConfigureAwait(false);
-            await itemRepo.Initialize(NativeApp.GetDbConnector()).ConfigureAwait(false);
+            await itemRepo.Initialize().ConfigureAwait(false);
             ((LibraryManager)LibraryManager).ItemRepository = ItemRepository;
             await ConfigureNotificationsRepository().ConfigureAwait(false);
             progress.Report(100);
@@ -746,7 +746,7 @@ namespace MediaBrowser.Server.Startup.Common
         {
             var repo = new SqliteUserDataRepository(LogManager, ApplicationPaths, NativeApp.GetDbConnector());
 
-            await repo.Initialize(NativeApp.GetDbConnector()).ConfigureAwait(false);
+            await repo.Initialize().ConfigureAwait(false);
 
             ((UserDataManager)UserDataManager).Repository = repo;
         }

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff