aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2016-11-29 14:47:45 -0500
committerGitHub <noreply@github.com>2016-11-29 14:47:45 -0500
commit8c2095b24ee3228c0e112ebc3cfcb73e146d2a78 (patch)
tree6a83c8132f9eac18c0a0bc2461e191c5c725c3c1 /Emby.Server.Implementations
parent1d09262963fb1d09f3a04843922a6a7a2f4364b3 (diff)
parent456d5e5b760abe46c8dedf08b2465d2bd3ced4af (diff)
Merge pull request #2317 from MediaBrowser/dev
Dev
Diffstat (limited to 'Emby.Server.Implementations')
-rw-r--r--Emby.Server.Implementations/Activity/ActivityRepository.cs22
-rw-r--r--Emby.Server.Implementations/Data/BaseSqliteRepository.cs47
-rw-r--r--Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs11
-rw-r--r--Emby.Server.Implementations/Data/SqliteFileOrganizationRepository.cs13
-rw-r--r--Emby.Server.Implementations/Data/SqliteItemRepository.cs19
-rw-r--r--Emby.Server.Implementations/Data/SqliteUserDataRepository.cs12
-rw-r--r--Emby.Server.Implementations/Data/SqliteUserRepository.cs11
-rw-r--r--Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs7
-rw-r--r--Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs83
-rw-r--r--Emby.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs35
-rw-r--r--Emby.Server.Implementations/Notifications/SqliteNotificationsRepository.cs17
-rw-r--r--Emby.Server.Implementations/Security/AuthenticationRepository.cs133
-rw-r--r--Emby.Server.Implementations/Social/SharingRepository.cs9
-rw-r--r--Emby.Server.Implementations/Sync/SyncRepository.cs15
14 files changed, 182 insertions, 252 deletions
diff --git a/Emby.Server.Implementations/Activity/ActivityRepository.cs b/Emby.Server.Implementations/Activity/ActivityRepository.cs
index ba81992ac..9513c224f 100644
--- a/Emby.Server.Implementations/Activity/ActivityRepository.cs
+++ b/Emby.Server.Implementations/Activity/ActivityRepository.cs
@@ -27,17 +27,11 @@ namespace Emby.Server.Implementations.Activity
{
using (var connection = CreateConnection())
{
- connection.ExecuteAll(string.Join(";", new[]
- {
- "PRAGMA page_size=4096",
- "pragma default_temp_store = memory",
- "pragma temp_store = memory"
- }));
+ RunDefaultInitialization(connection);
string[] queries = {
-
- "create table if not exists ActivityLogEntries (Id GUID PRIMARY KEY, Name TEXT, Overview TEXT, ShortOverview TEXT, Type TEXT, ItemId TEXT, UserId TEXT, DateCreated DATETIME, LogSeverity TEXT)",
- "create index if not exists idx_ActivityLogEntries on ActivityLogEntries(Id)"
+ "create table if not exists ActivityLogEntries (Id GUID PRIMARY KEY, Name TEXT, Overview TEXT, ShortOverview TEXT, Type TEXT, ItemId TEXT, UserId TEXT, DateCreated DATETIME, LogSeverity TEXT)",
+ "create index if not exists idx_ActivityLogEntries on ActivityLogEntries(Id)"
};
connection.RunQueries(queries);
@@ -58,9 +52,9 @@ namespace Emby.Server.Implementations.Activity
throw new ArgumentNullException("entry");
}
- using (WriteLock.Write())
+ using (var connection = CreateConnection())
{
- using (var connection = CreateConnection())
+ using (WriteLock.Write())
{
connection.RunInTransaction(db =>
{
@@ -79,16 +73,16 @@ namespace Emby.Server.Implementations.Activity
statement.MoveNext();
}
- });
+ }, TransactionMode);
}
}
}
public QueryResult<ActivityLogEntry> GetActivityLogEntries(DateTime? minDate, int? startIndex, int? limit)
{
- using (WriteLock.Read())
+ using (var connection = CreateConnection(true))
{
- using (var connection = CreateConnection(true))
+ using (WriteLock.Read())
{
var commandText = BaseActivitySelectText;
var whereClauses = new List<string>();
diff --git a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
index 308b8356f..e066d02d3 100644
--- a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
+++ b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
@@ -30,6 +30,11 @@ namespace Emby.Server.Implementations.Data
get { return false; }
}
+ protected TransactionMode TransactionMode
+ {
+ get { return TransactionMode.Immediate; }
+ }
+
static BaseSqliteRepository()
{
SQLite3.EnableSharedCache = false;
@@ -62,20 +67,8 @@ namespace Emby.Server.Implementations.Data
//Logger.Info("Opening write connection");
}
- isReadOnly = false;
-
- if (isReadOnly)
- {
- connectionFlags = ConnectionFlags.ReadOnly;
- //connectionFlags = ConnectionFlags.Create;
- //connectionFlags |= ConnectionFlags.ReadWrite;
- }
- else
- {
- connectionFlags = ConnectionFlags.Create;
- connectionFlags |= ConnectionFlags.ReadWrite;
- }
-
+ connectionFlags = ConnectionFlags.Create;
+ connectionFlags |= ConnectionFlags.ReadWrite;
connectionFlags |= ConnectionFlags.SharedCached;
connectionFlags |= ConnectionFlags.NoMutex;
@@ -84,6 +77,8 @@ namespace Emby.Server.Implementations.Data
if (string.IsNullOrWhiteSpace(_defaultWal))
{
_defaultWal = db.Query("PRAGMA journal_mode").SelectScalarString().First();
+
+ Logger.Info("Default journal_mode for {0} is {1}", DbFilePath, _defaultWal);
}
var queries = new List<string>
@@ -110,7 +105,7 @@ namespace Emby.Server.Implementations.Data
//Logger.Info("synchronous: " + db.Query("PRAGMA synchronous").SelectScalarString().First());
//Logger.Info("temp_store: " + db.Query("PRAGMA temp_store").SelectScalarString().First());
- if (!string.Equals(_defaultWal, "wal", StringComparison.OrdinalIgnoreCase))
+ /*if (!string.Equals(_defaultWal, "wal", StringComparison.OrdinalIgnoreCase))
{
queries.Add("PRAGMA journal_mode=WAL");
@@ -119,7 +114,7 @@ namespace Emby.Server.Implementations.Data
db.ExecuteAll(string.Join(";", queries.ToArray()));
}
}
- else if (queries.Count > 0)
+ else*/ if (queries.Count > 0)
{
db.ExecuteAll(string.Join(";", queries.ToArray()));
}
@@ -127,6 +122,26 @@ namespace Emby.Server.Implementations.Data
return db;
}
+ protected void RunDefaultInitialization(IDatabaseConnection db)
+ {
+ var queries = new List<string>
+ {
+ "PRAGMA journal_mode=WAL",
+ "PRAGMA page_size=4096",
+ };
+
+ if (EnableTempStoreMemory)
+ {
+ queries.AddRange(new List<string>
+ {
+ "pragma default_temp_store = memory",
+ "pragma temp_store = memory"
+ });
+ }
+
+ db.ExecuteAll(string.Join(";", queries.ToArray()));
+ }
+
protected virtual bool EnableTempStoreMemory
{
get
diff --git a/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs b/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs
index 1bd64b21d..0197efb51 100644
--- a/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteDisplayPreferencesRepository.cs
@@ -54,12 +54,7 @@ namespace Emby.Server.Implementations.Data
{
using (var connection = CreateConnection())
{
- connection.ExecuteAll(string.Join(";", new[]
- {
- "PRAGMA page_size=4096",
- "pragma default_temp_store = memory",
- "pragma temp_store = memory"
- }));
+ RunDefaultInitialization(connection);
string[] queries = {
@@ -100,7 +95,7 @@ namespace Emby.Server.Implementations.Data
connection.RunInTransaction(db =>
{
SaveDisplayPreferences(displayPreferences, userId, client, db);
- });
+ }, TransactionMode);
}
}
}
@@ -147,7 +142,7 @@ namespace Emby.Server.Implementations.Data
{
SaveDisplayPreferences(displayPreference, userId, displayPreference.Client, db);
}
- });
+ }, TransactionMode);
}
}
}
diff --git a/Emby.Server.Implementations/Data/SqliteFileOrganizationRepository.cs b/Emby.Server.Implementations/Data/SqliteFileOrganizationRepository.cs
index 23bab883e..603437120 100644
--- a/Emby.Server.Implementations/Data/SqliteFileOrganizationRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteFileOrganizationRepository.cs
@@ -31,12 +31,7 @@ namespace Emby.Server.Implementations.Data
{
using (var connection = CreateConnection())
{
- connection.ExecuteAll(string.Join(";", new[]
- {
- "PRAGMA page_size=4096",
- "pragma default_temp_store = memory",
- "pragma temp_store = memory"
- }));
+ RunDefaultInitialization(connection);
string[] queries = {
@@ -85,7 +80,7 @@ namespace Emby.Server.Implementations.Data
statement.MoveNext();
}
- });
+ }, TransactionMode);
}
}
}
@@ -108,7 +103,7 @@ namespace Emby.Server.Implementations.Data
statement.TryBind("@ResultId", id.ToGuidParamValue());
statement.MoveNext();
}
- });
+ }, TransactionMode);
}
}
}
@@ -124,7 +119,7 @@ namespace Emby.Server.Implementations.Data
var commandText = "delete from FileOrganizerResults";
db.Execute(commandText);
- });
+ }, TransactionMode);
}
}
}
diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
index 29aacc059..9c096916f 100644
--- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
@@ -157,12 +157,7 @@ namespace Emby.Server.Implementations.Data
{
using (var connection = CreateConnection())
{
- connection.ExecuteAll(string.Join(";", new[]
- {
- "PRAGMA page_size=4096",
- "PRAGMA default_temp_store=memory",
- "PRAGMA temp_store=memory"
- }));
+ RunDefaultInitialization(connection);
var createMediaStreamsTableCommand
= "create table if not exists mediastreams (ItemId GUID, StreamIndex INT, StreamType TEXT, Codec TEXT, Language TEXT, ChannelLayout TEXT, Profile TEXT, AspectRatio TEXT, Path TEXT, IsInterlaced BIT, BitRate INT NULL, Channels INT NULL, SampleRate INT NULL, IsDefault BIT, IsForced BIT, IsExternal BIT, Height INT NULL, Width INT NULL, AverageFrameRate FLOAT NULL, RealFrameRate FLOAT NULL, Level FLOAT NULL, PixelFormat TEXT, BitDepth INT NULL, IsAnamorphic BIT NULL, RefFrames INT NULL, CodecTag TEXT NULL, Comment TEXT NULL, NalLengthSize TEXT NULL, IsAvc BIT NULL, Title TEXT NULL, TimeBase TEXT NULL, CodecTimeBase TEXT NULL, PRIMARY KEY (ItemId, StreamIndex))";
@@ -316,7 +311,7 @@ namespace Emby.Server.Implementations.Data
AddColumn(db, "MediaStreams", "RefFrames", "INT", existingColumnNames);
AddColumn(db, "MediaStreams", "KeyFrames", "TEXT", existingColumnNames);
AddColumn(db, "MediaStreams", "IsAnamorphic", "BIT", existingColumnNames);
- });
+ }, TransactionMode);
string[] postQueries =
@@ -396,9 +391,9 @@ namespace Emby.Server.Implementations.Data
{
try
{
- using (WriteLock.Write())
+ using (var connection = CreateConnection())
{
- using (var connection = CreateConnection())
+ using (WriteLock.Write())
{
connection.RunQueries(new string[]
{
@@ -697,7 +692,7 @@ namespace Emby.Server.Implementations.Data
connection.RunInTransaction(db =>
{
SaveItemsInTranscation(db, tuples);
- });
+ }, TransactionMode);
}
}
}
@@ -2211,7 +2206,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
}
- });
+ }, TransactionMode);
}
}
}
@@ -4531,7 +4526,7 @@ namespace Emby.Server.Implementations.Data
// Delete the item
ExecuteWithSingleParam(db, "delete from TypedBaseItems where guid=@Id", id.ToGuidParamValue());
- });
+ }, TransactionMode);
}
}
}
diff --git a/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs b/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs
index b01f215e0..b65e5d1b3 100644
--- a/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs
@@ -51,8 +51,6 @@ namespace Emby.Server.Implementations.Data
{
string[] queries = {
- "pragma temp_store = memory",
-
"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 table if not exists DataSettings (IsUserDataImported bit)",
@@ -78,7 +76,7 @@ namespace Emby.Server.Implementations.Data
AddColumn(db, "userdata", "AudioStreamIndex", "int", existingColumnNames);
AddColumn(db, "userdata", "SubtitleStreamIndex", "int", existingColumnNames);
- });
+ }, TransactionMode);
ImportUserDataIfNeeded(connection);
}
@@ -116,7 +114,7 @@ namespace Emby.Server.Implementations.Data
statement.TryBind("@IsUserDataImported", true);
statement.MoveNext();
}
- });
+ }, TransactionMode);
}
private void ImportUserData(IDatabaseConnection connection, string file)
@@ -128,7 +126,7 @@ namespace Emby.Server.Implementations.Data
connection.RunInTransaction(db =>
{
db.Execute("REPLACE INTO userdata(" + columns + ") SELECT " + columns + " FROM UserDataBackup.userdata;");
- });
+ }, TransactionMode);
}
/// <summary>
@@ -197,7 +195,7 @@ namespace Emby.Server.Implementations.Data
connection.RunInTransaction(db =>
{
SaveUserData(db, userId, key, userData);
- });
+ }, TransactionMode);
}
}
}
@@ -271,7 +269,7 @@ namespace Emby.Server.Implementations.Data
{
SaveUserData(db, userId, userItemData.Key, userItemData);
}
- });
+ }, TransactionMode);
}
}
}
diff --git a/Emby.Server.Implementations/Data/SqliteUserRepository.cs b/Emby.Server.Implementations/Data/SqliteUserRepository.cs
index f902d981f..99d7563c7 100644
--- a/Emby.Server.Implementations/Data/SqliteUserRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteUserRepository.cs
@@ -50,12 +50,7 @@ namespace Emby.Server.Implementations.Data
{
using (var connection = CreateConnection())
{
- connection.ExecuteAll(string.Join(";", new[]
- {
- "PRAGMA page_size=4096",
- "pragma default_temp_store = memory",
- "pragma temp_store = memory"
- }));
+ RunDefaultInitialization(connection);
string[] queries = {
@@ -102,7 +97,7 @@ namespace Emby.Server.Implementations.Data
statement.TryBind("@data", serialized);
statement.MoveNext();
}
- });
+ }, TransactionMode);
}
}
}
@@ -164,7 +159,7 @@ namespace Emby.Server.Implementations.Data
statement.TryBind("@id", user.Id.ToGuidParamValue());
statement.MoveNext();
}
- });
+ }, TransactionMode);
}
}
}
diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
index 36a4dc608..d74cf41e8 100644
--- a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
+++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
@@ -2064,6 +2064,13 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
enabledTimersForSeries.Add(existingTimer);
}
+ existingTimer.KeepUntil = seriesTimer.KeepUntil;
+ existingTimer.IsPostPaddingRequired = seriesTimer.IsPostPaddingRequired;
+ existingTimer.IsPrePaddingRequired = seriesTimer.IsPrePaddingRequired;
+ existingTimer.PostPaddingSeconds = seriesTimer.PostPaddingSeconds;
+ existingTimer.PrePaddingSeconds = seriesTimer.PrePaddingSeconds;
+ existingTimer.Priority = seriesTimer.Priority;
+
existingTimer.SeriesTimerId = seriesTimer.Id;
_timerProvider.Update(existingTimer);
}
diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
index 5e55b893f..5bb65b650 100644
--- a/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
+++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
@@ -31,7 +31,6 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
private readonly IServerApplicationPaths _appPaths;
private readonly LiveTvOptions _liveTvOptions;
private bool _hasExited;
- private Stream _logFileStream;
private string _targetPath;
private IProcess _process;
private readonly IProcessFactory _processFactory;
@@ -85,22 +84,26 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
_targetPath = targetFile;
_fileSystem.CreateDirectory(Path.GetDirectoryName(targetFile));
+ var logFilePath = Path.Combine(_appPaths.LogDirectoryPath, "record-transcode-" + Guid.NewGuid().ToString("N") + ".txt");
+ _fileSystem.CreateDirectory(Path.GetDirectoryName(logFilePath));
+
var process = _processFactory.Create(new ProcessOptions
{
CreateNoWindow = true,
- UseShellExecute = false,
+ UseShellExecute = true,
// Must consume both stdout and stderr or deadlocks may occur
//RedirectStandardOutput = true,
- RedirectStandardError = true,
- RedirectStandardInput = true,
+ RedirectStandardError = false,
+ RedirectStandardInput = false,
FileName = _mediaEncoder.EncoderPath,
Arguments = GetCommandLineArgs(mediaSource, inputFile, targetFile, duration),
IsHidden = true,
ErrorDialog = false,
- EnableRaisingEvents = true
+ EnableRaisingEvents = true,
+ WorkingDirectory = Path.GetDirectoryName(logFilePath)
});
_process = process;
@@ -108,14 +111,9 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
var commandLineLogMessage = process.StartInfo.FileName + " " + process.StartInfo.Arguments;
_logger.Info(commandLineLogMessage);
- var logFilePath = Path.Combine(_appPaths.LogDirectoryPath, "record-transcode-" + Guid.NewGuid() + ".txt");
- _fileSystem.CreateDirectory(Path.GetDirectoryName(logFilePath));
+ _mediaEncoder.SetLogFilename(Path.GetFileName(logFilePath));
- // FFMpeg writes debug/error info to stderr. This is useful when debugging so let's put it in the log directory.
- _logFileStream = _fileSystem.GetFileStream(logFilePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true);
-
- var commandLineLogMessageBytes = Encoding.UTF8.GetBytes(_json.SerializeToString(mediaSource) + Environment.NewLine + Environment.NewLine + commandLineLogMessage + Environment.NewLine + Environment.NewLine);
- _logFileStream.Write(commandLineLogMessageBytes, 0, commandLineLogMessageBytes.Length);
+ //var commandLineLogMessageBytes = Encoding.UTF8.GetBytes(_json.SerializeToString(mediaSource) + Environment.NewLine + Environment.NewLine + commandLineLogMessage + Environment.NewLine + Environment.NewLine);
process.Exited += (sender, args) => OnFfMpegProcessExited(process, inputFile);
@@ -128,10 +126,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
onStarted();
- // Important - don't await the log task or we won't be able to kill ffmpeg when the user stops playback
- StartStreamingLog(process.StandardError.BaseStream, _logFileStream);
-
_logger.Info("ffmpeg recording process started for {0}", _targetPath);
+ _mediaEncoder.ClearLogFilename();
return _taskCompletionSource.Task;
}
@@ -154,7 +150,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
var durationParam = " -t " + _mediaEncoder.GetTimeParameter(duration.Ticks);
var inputModifiers = "-fflags +genpts -async 1 -vsync -1";
- var commandLineArgs = "-i \"{0}\"{4} -sn {2} -map_metadata -1 -threads 0 {3} -y \"{1}\"";
+ var commandLineArgs = "-i \"{0}\"{4} -sn {2} -map_metadata -1 -threads 0 {3} -loglevel info -y \"{1}\"";
long startTimeTicks = 0;
//if (mediaSource.DateLiveStreamOpened.HasValue)
@@ -234,16 +230,19 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
return output;
}
+ private bool _isCancelled;
private void Stop()
{
if (!_hasExited)
{
try
{
+ _isCancelled = true;
+
_logger.Info("Killing ffmpeg recording process for {0}", _targetPath);
- //process.Kill();
- _process.StandardInput.WriteLine("q");
+ _process.Kill();
+ //_process.StandardInput.WriteLine("q");
}
catch (Exception ex)
{
@@ -259,11 +258,9 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
{
_hasExited = true;
- DisposeLogStream();
-
try
{
- var exitCode = process.ExitCode;
+ var exitCode = _isCancelled ? 0 : process.ExitCode;
_logger.Info("FFMpeg recording exited with code {0} for {1}", exitCode, _targetPath);
@@ -282,49 +279,5 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
_taskCompletionSource.TrySetException(new Exception(string.Format("Recording for {0} failed", _targetPath)));
}
}
-
- private void DisposeLogStream()
- {
- if (_logFileStream != null)
- {
- try
- {
- _logFileStream.Dispose();
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error disposing recording log stream", ex);
- }
-
- _logFileStream = null;
- }
- }
-
- private async void StartStreamingLog(Stream source, Stream target)
- {
- try
- {
- using (var reader = new StreamReader(source))
- {
- while (!reader.EndOfStream)
- {
- var line = await reader.ReadLineAsync().ConfigureAwait(false);
-
- var bytes = Encoding.UTF8.GetBytes(Environment.NewLine + line);
-
- await target.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
- await target.FlushAsync().ConfigureAwait(false);
- }
- }
- }
- catch (ObjectDisposedException)
- {
- // Don't spam the log. This doesn't seem to throw in windows, but sometimes under linux
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error reading ffmpeg recording log", ex);
- }
- }
}
} \ No newline at end of file
diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs
index 1b6ddc73f..881aaaf0d 100644
--- a/Emby.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs
+++ b/Emby.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs
@@ -15,23 +15,24 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
public static TimerInfo CreateTimer(ProgramInfo parent, SeriesTimerInfo seriesTimer)
{
- var timer = new TimerInfo();
-
- timer.ChannelId = parent.ChannelId;
- timer.Id = (seriesTimer.Id + parent.Id).GetMD5().ToString("N");
- timer.StartDate = parent.StartDate;
- timer.EndDate = parent.EndDate;
- timer.ProgramId = parent.Id;
- timer.PrePaddingSeconds = seriesTimer.PrePaddingSeconds;
- timer.PostPaddingSeconds = seriesTimer.PostPaddingSeconds;
- timer.IsPostPaddingRequired = seriesTimer.IsPostPaddingRequired;
- timer.IsPrePaddingRequired = seriesTimer.IsPrePaddingRequired;
- timer.KeepUntil = seriesTimer.KeepUntil;
- timer.Priority = seriesTimer.Priority;
- timer.Name = parent.Name;
- timer.Overview = parent.Overview;
- timer.SeriesTimerId = seriesTimer.Id;
- timer.ShowId = parent.ShowId;
+ var timer = new TimerInfo
+ {
+ ChannelId = parent.ChannelId,
+ Id = (seriesTimer.Id + parent.Id).GetMD5().ToString("N"),
+ StartDate = parent.StartDate,
+ EndDate = parent.EndDate,
+ ProgramId = parent.Id,
+ PrePaddingSeconds = seriesTimer.PrePaddingSeconds,
+ PostPaddingSeconds = seriesTimer.PostPaddingSeconds,
+ IsPostPaddingRequired = seriesTimer.IsPostPaddingRequired,
+ IsPrePaddingRequired = seriesTimer.IsPrePaddingRequired,
+ KeepUntil = seriesTimer.KeepUntil,
+ Priority = seriesTimer.Priority,
+ Name = parent.Name,
+ Overview = parent.Overview,
+ SeriesTimerId = seriesTimer.Id,
+ ShowId = parent.ShowId
+ };
CopyProgramInfoToTimerInfo(parent, timer);
diff --git a/Emby.Server.Implementations/Notifications/SqliteNotificationsRepository.cs b/Emby.Server.Implementations/Notifications/SqliteNotificationsRepository.cs
index 66ef5d5d1..767ba5504 100644
--- a/Emby.Server.Implementations/Notifications/SqliteNotificationsRepository.cs
+++ b/Emby.Server.Implementations/Notifications/SqliteNotificationsRepository.cs
@@ -29,12 +29,7 @@ namespace Emby.Server.Implementations.Notifications
{
using (var connection = CreateConnection())
{
- connection.ExecuteAll(string.Join(";", new[]
- {
- "PRAGMA page_size=4096",
- "pragma default_temp_store = memory",
- "pragma temp_store = memory"
- }));
+ RunDefaultInitialization(connection);
string[] queries = {
@@ -58,7 +53,7 @@ namespace Emby.Server.Implementations.Notifications
using (var connection = CreateConnection(true))
{
- //using (WriteLock.Read())
+ using (WriteLock.Read())
{
var clauses = new List<string>();
var paramList = new List<object>();
@@ -113,7 +108,7 @@ namespace Emby.Server.Implementations.Notifications
using (var connection = CreateConnection(true))
{
- //using (WriteLock.Read())
+ using (WriteLock.Read())
{
using (var statement = connection.PrepareStatement("select Level from Notifications where UserId=@UserId and IsRead=@IsRead"))
{
@@ -249,7 +244,7 @@ namespace Emby.Server.Implementations.Notifications
statement.MoveNext();
}
- });
+ }, TransactionMode);
}
}
}
@@ -304,7 +299,7 @@ namespace Emby.Server.Implementations.Notifications
statement.MoveNext();
}
- });
+ }, TransactionMode);
}
}
}
@@ -334,7 +329,7 @@ namespace Emby.Server.Implementations.Notifications
}
}
- });
+ }, TransactionMode);
}
}
}
diff --git a/Emby.Server.Implementations/Security/AuthenticationRepository.cs b/Emby.Server.Implementations/Security/AuthenticationRepository.cs
index 2632b9666..dbda4a460 100644
--- a/Emby.Server.Implementations/Security/AuthenticationRepository.cs
+++ b/Emby.Server.Implementations/Security/AuthenticationRepository.cs
@@ -30,12 +30,7 @@ namespace Emby.Server.Implementations.Security
{
using (var connection = CreateConnection())
{
- connection.ExecuteAll(string.Join(";", new[]
- {
- "PRAGMA page_size=4096",
- "pragma default_temp_store = memory",
- "pragma temp_store = memory"
- }));
+ RunDefaultInitialization(connection);
string[] queries = {
@@ -50,7 +45,8 @@ namespace Emby.Server.Implementations.Security
var existingColumnNames = GetColumnNames(db, "AccessTokens");
AddColumn(db, "AccessTokens", "AppVersion", "TEXT", existingColumnNames);
- });
+
+ }, TransactionMode);
}
}
@@ -70,9 +66,9 @@ namespace Emby.Server.Implementations.Security
cancellationToken.ThrowIfCancellationRequested();
- using (WriteLock.Write())
+ using (var connection = CreateConnection())
{
- using (var connection = CreateConnection())
+ using (WriteLock.Write())
{
connection.RunInTransaction(db =>
{
@@ -100,7 +96,8 @@ namespace Emby.Server.Implementations.Security
statement.MoveNext();
}
- });
+
+ }, TransactionMode);
}
}
}
@@ -137,78 +134,78 @@ namespace Emby.Server.Implementations.Security
throw new ArgumentNullException("query");
}
- using (WriteLock.Read())
- {
- using (var connection = CreateConnection(true))
- {
- var commandText = BaseSelectText;
+ var commandText = BaseSelectText;
- var whereClauses = new List<string>();
+ var whereClauses = new List<string>();
- var startIndex = query.StartIndex ?? 0;
+ var startIndex = query.StartIndex ?? 0;
- if (!string.IsNullOrWhiteSpace(query.AccessToken))
- {
- whereClauses.Add("AccessToken=@AccessToken");
- }
+ if (!string.IsNullOrWhiteSpace(query.AccessToken))
+ {
+ whereClauses.Add("AccessToken=@AccessToken");
+ }
- if (!string.IsNullOrWhiteSpace(query.UserId))
- {
- whereClauses.Add("UserId=@UserId");
- }
+ if (!string.IsNullOrWhiteSpace(query.UserId))
+ {
+ whereClauses.Add("UserId=@UserId");
+ }
- if (!string.IsNullOrWhiteSpace(query.DeviceId))
- {
- whereClauses.Add("DeviceId=@DeviceId");
- }
+ if (!string.IsNullOrWhiteSpace(query.DeviceId))
+ {
+ whereClauses.Add("DeviceId=@DeviceId");
+ }
- if (query.IsActive.HasValue)
- {
- whereClauses.Add("IsActive=@IsActive");
- }
+ if (query.IsActive.HasValue)
+ {
+ whereClauses.Add("IsActive=@IsActive");
+ }
- if (query.HasUser.HasValue)
- {
- if (query.HasUser.Value)
- {
- whereClauses.Add("UserId not null");
- }
- else
- {
- whereClauses.Add("UserId is null");
- }
- }
+ if (query.HasUser.HasValue)
+ {
+ if (query.HasUser.Value)
+ {
+ whereClauses.Add("UserId not null");
+ }
+ else
+ {
+ whereClauses.Add("UserId is null");
+ }
+ }
- var whereTextWithoutPaging = whereClauses.Count == 0 ?
- string.Empty :
- " where " + string.Join(" AND ", whereClauses.ToArray());
+ var whereTextWithoutPaging = whereClauses.Count == 0 ?
+ string.Empty :
+ " where " + string.Join(" AND ", whereClauses.ToArray());
- if (startIndex > 0)
- {
- var pagingWhereText = whereClauses.Count == 0 ?
- string.Empty :
- " where " + string.Join(" AND ", whereClauses.ToArray());
+ if (startIndex > 0)
+ {
+ var pagingWhereText = whereClauses.Count == 0 ?
+ string.Empty :
+ " where " + string.Join(" AND ", whereClauses.ToArray());
- whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM AccessTokens {0} ORDER BY DateCreated LIMIT {1})",
- pagingWhereText,
- startIndex.ToString(_usCulture)));
- }
+ whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM AccessTokens {0} ORDER BY DateCreated LIMIT {1})",
+ pagingWhereText,
+ startIndex.ToString(_usCulture)));
+ }
- var whereText = whereClauses.Count == 0 ?
- string.Empty :
- " where " + string.Join(" AND ", whereClauses.ToArray());
+ var whereText = whereClauses.Count == 0 ?
+ string.Empty :
+ " where " + string.Join(" AND ", whereClauses.ToArray());
- commandText += whereText;
+ commandText += whereText;
- commandText += " ORDER BY DateCreated";
+ commandText += " ORDER BY DateCreated";
- if (query.Limit.HasValue)
- {
- commandText += " LIMIT " + query.Limit.Value.ToString(_usCulture);
- }
+ if (query.Limit.HasValue)
+ {
+ commandText += " LIMIT " + query.Limit.Value.ToString(_usCulture);
+ }
- var list = new List<AuthenticationInfo>();
+ var list = new List<AuthenticationInfo>();
+ using (var connection = CreateConnection(true))
+ {
+ using (WriteLock.Read())
+ {
using (var statement = connection.PrepareStatement(commandText))
{
BindAuthenticationQueryParams(query, statement);
@@ -244,9 +241,9 @@ namespace Emby.Server.Implementations.Security
throw new ArgumentNullException("id");
}
- using (WriteLock.Read())
+ using (var connection = CreateConnection(true))
{
- using (var connection = CreateConnection(true))
+ using (WriteLock.Read())
{
var commandText = BaseSelectText + " where Id=@Id";
diff --git a/Emby.Server.Implementations/Social/SharingRepository.cs b/Emby.Server.Implementations/Social/SharingRepository.cs
index 6dab54bc6..12d846e81 100644
--- a/Emby.Server.Implementations/Social/SharingRepository.cs
+++ b/Emby.Server.Implementations/Social/SharingRepository.cs
@@ -27,12 +27,7 @@ namespace Emby.Server.Implementations.Social
{
using (var connection = CreateConnection())
{
- connection.ExecuteAll(string.Join(";", new[]
- {
- "PRAGMA page_size=4096",
- "pragma default_temp_store = memory",
- "pragma temp_store = memory"
- }));
+ RunDefaultInitialization(connection);
string[] queries = {
@@ -70,7 +65,7 @@ namespace Emby.Server.Implementations.Social
info.ItemId,
info.UserId,
info.ExpirationDate.ToDateTimeParamValue());
- });
+ }, TransactionMode);
}
}
}
diff --git a/Emby.Server.Implementations/Sync/SyncRepository.cs b/Emby.Server.Implementations/Sync/SyncRepository.cs
index b2d9fbcc9..037507872 100644
--- a/Emby.Server.Implementations/Sync/SyncRepository.cs
+++ b/Emby.Server.Implementations/Sync/SyncRepository.cs
@@ -43,12 +43,7 @@ namespace Emby.Server.Implementations.Sync
{
using (var connection = CreateConnection())
{
- connection.ExecuteAll(string.Join(";", new[]
- {
- "PRAGMA page_size=4096",
- "pragma default_temp_store = memory",
- "pragma temp_store = memory"
- }));
+ RunDefaultInitialization(connection);
string[] queries = {
@@ -79,7 +74,7 @@ namespace Emby.Server.Implementations.Sync
existingColumnNames = GetColumnNames(db, "SyncJobItems");
AddColumn(db, "SyncJobItems", "ItemDateModifiedTicks", "BIGINT", existingColumnNames);
- });
+ }, TransactionMode);
}
}
@@ -268,7 +263,7 @@ namespace Emby.Server.Implementations.Sync
connection.RunInTransaction(conn =>
{
conn.Execute(commandText, paramList.ToArray());
- });
+ }, TransactionMode);
}
}
}
@@ -290,7 +285,7 @@ namespace Emby.Server.Implementations.Sync
{
conn.Execute("delete from SyncJobs where Id=?", id.ToGuidParamValue());
conn.Execute("delete from SyncJobItems where JobId=?", id);
- });
+ }, TransactionMode);
}
}
}
@@ -743,7 +738,7 @@ namespace Emby.Server.Implementations.Sync
connection.RunInTransaction(conn =>
{
conn.Execute(commandText, paramList.ToArray());
- });
+ }, TransactionMode);
}
}
}