/Horizon/Database/SnapshotDatabase.cs |
@@ -98,7 +98,6 @@ |
|
private readonly CancellationTokenSource _cancellationTokenSource; |
private readonly SemaphoreSlim _databaseLock; |
private readonly SQLiteConnectionStringBuilder _sqliteConnectionStringBuilder; |
|
#endregion |
|
@@ -109,11 +108,6 @@ |
Directory.CreateDirectory(Constants.DatabaseDirectory); |
|
_databaseLock = new SemaphoreSlim(1, 1); |
|
_sqliteConnectionStringBuilder = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
} |
|
public SnapshotDatabase(CancellationToken cancellationToken) : this() |
@@ -124,6 +118,8 @@ |
CancellationTokenSource.CreateLinkedTokenSource(localCancellationToken, cancellationToken); |
_cancellationToken = combinedCancellationTokenSource.Token; |
|
|
|
CreateDatabase(_cancellationToken).ContinueWith(async createDatabaseTask => |
{ |
try |
@@ -134,14 +130,14 @@ |
{ |
await SetAutoVacuum(_cancellationToken); |
} |
catch (Exception exception) |
catch(Exception exception) |
{ |
Log.Error(exception, "Unable to set auto vacuum for database."); |
Log.Error(exception,"Unable to set auto vacuum for database."); |
} |
} |
catch (Exception exception) |
{ |
Log.Error(exception, "Unable to create database;"); |
Log.Error(exception,"Unable to create database;"); |
} |
}).Wait(_cancellationToken); |
} |
@@ -206,11 +202,16 @@ |
|
public async Task NormalizeTime(string hash, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = |
new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -284,10 +285,15 @@ |
|
public async Task<long> CountSnapshots(CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -324,11 +330,16 @@ |
|
public async IAsyncEnumerable<Snapshot> LoadSnapshots([EnumeratorCancellation] CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = |
new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -378,11 +389,16 @@ |
|
public async Task CreateSnapshot(string name, string path, Color color, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = |
new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -521,11 +537,16 @@ |
public async Task CreateSnapshot(string name, string path, |
Bitmap shot, Color color, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = |
new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -694,10 +715,15 @@ |
|
public async Task SaveFile(string path, string hash, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -752,10 +778,15 @@ |
|
public async Task RevertFile(string name, string hash, CancellationToken cancellationToken, bool atomic = true) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -872,10 +903,15 @@ |
|
public async Task RemoveFileFast(IEnumerable<string> hashes, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -925,10 +961,14 @@ |
|
public async Task RemoveFile(string hash, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -969,11 +1009,16 @@ |
|
public async Task UpdateColor(string hash, Color color, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
|
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -1015,10 +1060,15 @@ |
|
public async Task RemoveColor(string hash, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -1059,10 +1109,15 @@ |
|
public async Task<SnapshotPreview> RetrievePreview(string hash, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -1120,10 +1175,15 @@ |
|
public async Task<MemoryStream> RetrieveFileStream(string hash, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -1179,10 +1239,15 @@ |
|
public async Task RelocateFile(string hash, string path, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -1225,10 +1290,15 @@ |
|
public async Task UpdateNote(string hash, string note, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -1274,12 +1344,17 @@ |
|
public async Task<string> UpdateFile(string hash, byte[] data, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var dataMemoryStream = new MemoryStream(data)) |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -1394,10 +1469,15 @@ |
|
public async Task UpdateHash(string from, string to, CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -1443,11 +1523,16 @@ |
|
private async Task SetAutoVacuum(CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = |
new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|
@@ -1466,10 +1551,15 @@ |
|
private async Task CreateDatabase(CancellationToken cancellationToken) |
{ |
var connectionString = new SQLiteConnectionStringBuilder |
{ |
ConnectionString = DatabaseConnectionString |
}; |
|
await _databaseLock.WaitAsync(cancellationToken); |
try |
{ |
using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString)) |
using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) |
{ |
await sqliteConnection.OpenAsync(cancellationToken); |
|