Horizon – Diff between revs 5 and 10

Subversion Repositories:
Rev:
Show entire fileIgnore whitespace
Rev 5 Rev 10
Line 96... Line 96...
96   96  
Line 97... Line 97...
97 #region Private Delegates, Events, Enums, Properties, Indexers and Fields 97 #region Private Delegates, Events, Enums, Properties, Indexers and Fields
98   98  
-   99 private readonly CancellationTokenSource _cancellationTokenSource;
Line 99... Line 100...
99 private readonly CancellationTokenSource _cancellationTokenSource; 100 private readonly SemaphoreSlim _databaseLock;
Line 100... Line 101...
100 private readonly SemaphoreSlim _databaseLock; 101 private readonly SQLiteConnectionStringBuilder _sqliteConnectionStringBuilder;
Line 101... Line 102...
101   102  
102 #endregion 103 #endregion
103   104  
Line 104... Line 105...
104 #region Constructors, Destructors and Finalizers 105 #region Constructors, Destructors and Finalizers
-   106  
-   107 private SnapshotDatabase()
-   108 {
-   109 Directory.CreateDirectory(Constants.DatabaseDirectory);
-   110  
105   111 _databaseLock = new SemaphoreSlim(1, 1);
Line 106... Line 112...
106 private SnapshotDatabase() 112  
107 { 113 _sqliteConnectionStringBuilder = new SQLiteConnectionStringBuilder
108 Directory.CreateDirectory(Constants.DatabaseDirectory); 114 {
109   115 ConnectionString = DatabaseConnectionString
110 _databaseLock = new SemaphoreSlim(1, 1); 116 };
111 } 117 }
112   118  
Line 113... Line -...
113 public SnapshotDatabase(CancellationToken cancellationToken) : this() -  
114 { -  
115 _cancellationTokenSource = new CancellationTokenSource(); 119 public SnapshotDatabase(CancellationToken cancellationToken) : this()
116 var localCancellationToken = _cancellationTokenSource.Token; 120 {
117 var combinedCancellationTokenSource = 121 _cancellationTokenSource = new CancellationTokenSource();
118 CancellationTokenSource.CreateLinkedTokenSource(localCancellationToken, cancellationToken); 122 var localCancellationToken = _cancellationTokenSource.Token;
119 _cancellationToken = combinedCancellationTokenSource.Token; 123 var combinedCancellationTokenSource =
Line 120... Line 124...
120   124 CancellationTokenSource.CreateLinkedTokenSource(localCancellationToken, cancellationToken);
121 125 _cancellationToken = combinedCancellationTokenSource.Token;
122   126  
123 CreateDatabase(_cancellationToken).ContinueWith(async createDatabaseTask => 127 CreateDatabase(_cancellationToken).ContinueWith(async createDatabaseTask =>
124 { 128 {
125 try 129 try
126 { 130 {
127 await createDatabaseTask; 131 await createDatabaseTask;
128   132  
129 try 133 try
130 { 134 {
131 await SetAutoVacuum(_cancellationToken); 135 await SetAutoVacuum(_cancellationToken);
132 } 136 }
133 catch(Exception exception) 137 catch (Exception exception)
134 { 138 {
Line 135... Line 139...
135 Log.Error(exception,"Unable to set auto vacuum for database."); 139 Log.Error(exception, "Unable to set auto vacuum for database.");
Line 200... Line 204...
200 } 204 }
201 } 205 }
Line 202... Line 206...
202   206  
203 public async Task NormalizeTime(string hash, CancellationToken cancellationToken) 207 public async Task NormalizeTime(string hash, CancellationToken cancellationToken)
204 { -  
205 var connectionString = new SQLiteConnectionStringBuilder -  
206 { -  
207 ConnectionString = DatabaseConnectionString -  
208 }; -  
209   208 {
210 await _databaseLock.WaitAsync(cancellationToken); 209 await _databaseLock.WaitAsync(cancellationToken);
211 try 210 try
212 { 211 {
213 using (var sqliteConnection = 212 using (var sqliteConnection =
214 new SQLiteConnection(connectionString.ConnectionString)) 213 new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
215 { 214 {
Line 216... Line 215...
216 await sqliteConnection.OpenAsync(cancellationToken); 215 await sqliteConnection.OpenAsync(cancellationToken);
217   216  
Line 283... Line 282...
283 } 282 }
284 } 283 }
Line 285... Line 284...
285   284  
286 public async Task<long> CountSnapshots(CancellationToken cancellationToken) 285 public async Task<long> CountSnapshots(CancellationToken cancellationToken)
287 { -  
288 var connectionString = new SQLiteConnectionStringBuilder -  
289 { -  
290 ConnectionString = DatabaseConnectionString -  
291 }; -  
292   286 {
293 await _databaseLock.WaitAsync(cancellationToken); 287 await _databaseLock.WaitAsync(cancellationToken);
294 try 288 try
295 { 289 {
296 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 290 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
297 { 291 {
Line 298... Line 292...
298 await sqliteConnection.OpenAsync(cancellationToken); 292 await sqliteConnection.OpenAsync(cancellationToken);
299   293  
Line 328... Line 322...
328 } 322 }
329 } 323 }
Line 330... Line 324...
330   324  
331 public async IAsyncEnumerable<Snapshot> LoadSnapshots([EnumeratorCancellation] CancellationToken cancellationToken) 325 public async IAsyncEnumerable<Snapshot> LoadSnapshots([EnumeratorCancellation] CancellationToken cancellationToken)
332 { -  
333 var connectionString = new SQLiteConnectionStringBuilder -  
334 { -  
335 ConnectionString = DatabaseConnectionString -  
336 }; -  
337   326 {
338 await _databaseLock.WaitAsync(cancellationToken); 327 await _databaseLock.WaitAsync(cancellationToken);
339 try 328 try
340 { 329 {
341 using (var sqliteConnection = 330 using (var sqliteConnection =
342 new SQLiteConnection(connectionString.ConnectionString)) 331 new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
343 { 332 {
Line 344... Line 333...
344 await sqliteConnection.OpenAsync(cancellationToken); 333 await sqliteConnection.OpenAsync(cancellationToken);
345   334  
Line 387... Line 376...
387 } 376 }
388 } 377 }
Line 389... Line 378...
389   378  
390 public async Task CreateSnapshot(string name, string path, Color color, CancellationToken cancellationToken) 379 public async Task CreateSnapshot(string name, string path, Color color, CancellationToken cancellationToken)
391 { -  
392 var connectionString = new SQLiteConnectionStringBuilder -  
393 { -  
394 ConnectionString = DatabaseConnectionString -  
395 }; -  
396   380 {
397 await _databaseLock.WaitAsync(cancellationToken); 381 await _databaseLock.WaitAsync(cancellationToken);
398 try 382 try
399 { 383 {
400 using (var sqliteConnection = 384 using (var sqliteConnection =
401 new SQLiteConnection(connectionString.ConnectionString)) 385 new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
402 { 386 {
Line 403... Line 387...
403 await sqliteConnection.OpenAsync(cancellationToken); 387 await sqliteConnection.OpenAsync(cancellationToken);
404   388  
Line 535... Line 519...
535 } 519 }
Line 536... Line 520...
536   520  
537 public async Task CreateSnapshot(string name, string path, 521 public async Task CreateSnapshot(string name, string path,
538 Bitmap shot, Color color, CancellationToken cancellationToken) 522 Bitmap shot, Color color, CancellationToken cancellationToken)
539 { -  
540 var connectionString = new SQLiteConnectionStringBuilder -  
541 { -  
542 ConnectionString = DatabaseConnectionString -  
543 }; -  
544   523 {
545 await _databaseLock.WaitAsync(cancellationToken); 524 await _databaseLock.WaitAsync(cancellationToken);
546 try 525 try
547 { 526 {
548 using (var sqliteConnection = 527 using (var sqliteConnection =
549 new SQLiteConnection(connectionString.ConnectionString)) 528 new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
550 { 529 {
Line 551... Line 530...
551 await sqliteConnection.OpenAsync(cancellationToken); 530 await sqliteConnection.OpenAsync(cancellationToken);
552   531  
Line 713... Line 692...
713 } 692 }
714 } 693 }
Line 715... Line 694...
715   694  
716 public async Task SaveFile(string path, string hash, CancellationToken cancellationToken) 695 public async Task SaveFile(string path, string hash, CancellationToken cancellationToken)
717 { -  
718 var connectionString = new SQLiteConnectionStringBuilder -  
719 { -  
720 ConnectionString = DatabaseConnectionString -  
721 }; -  
722   696 {
723 await _databaseLock.WaitAsync(cancellationToken); 697 await _databaseLock.WaitAsync(cancellationToken);
724 try 698 try
725 { 699 {
726 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 700 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
727 { 701 {
Line 728... Line 702...
728 await sqliteConnection.OpenAsync(cancellationToken); 702 await sqliteConnection.OpenAsync(cancellationToken);
729   703  
Line 776... Line 750...
776 } 750 }
777 } 751 }
Line 778... Line 752...
778   752  
779 public async Task RevertFile(string name, string hash, CancellationToken cancellationToken, bool atomic = true) 753 public async Task RevertFile(string name, string hash, CancellationToken cancellationToken, bool atomic = true)
780 { -  
781 var connectionString = new SQLiteConnectionStringBuilder -  
782 { -  
783 ConnectionString = DatabaseConnectionString -  
784 }; -  
785   754 {
786 await _databaseLock.WaitAsync(cancellationToken); 755 await _databaseLock.WaitAsync(cancellationToken);
787 try 756 try
788 { 757 {
789 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 758 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
790 { 759 {
Line 791... Line 760...
791 await sqliteConnection.OpenAsync(cancellationToken); 760 await sqliteConnection.OpenAsync(cancellationToken);
792   761  
Line 901... Line 870...
901 } 870 }
902 } 871 }
Line 903... Line 872...
903   872  
904 public async Task RemoveFileFast(IEnumerable<string> hashes, CancellationToken cancellationToken) 873 public async Task RemoveFileFast(IEnumerable<string> hashes, CancellationToken cancellationToken)
905 { -  
906 var connectionString = new SQLiteConnectionStringBuilder -  
907 { -  
908 ConnectionString = DatabaseConnectionString -  
909 }; -  
910   874 {
911 await _databaseLock.WaitAsync(cancellationToken); 875 await _databaseLock.WaitAsync(cancellationToken);
912 try 876 try
913 { 877 {
914 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 878 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
915 { 879 {
Line 916... Line 880...
916 await sqliteConnection.OpenAsync(cancellationToken); 880 await sqliteConnection.OpenAsync(cancellationToken);
917   881  
Line 959... Line 923...
959 } 923 }
960 } 924 }
Line 961... Line 925...
961   925  
962 public async Task RemoveFile(string hash, CancellationToken cancellationToken) 926 public async Task RemoveFile(string hash, CancellationToken cancellationToken)
963 { -  
964 var connectionString = new SQLiteConnectionStringBuilder -  
965 { -  
966 ConnectionString = DatabaseConnectionString -  
967 }; 927 {
968 await _databaseLock.WaitAsync(cancellationToken); 928 await _databaseLock.WaitAsync(cancellationToken);
969 try 929 try
970 { 930 {
971 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 931 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
972 { 932 {
Line 973... Line 933...
973 await sqliteConnection.OpenAsync(cancellationToken); 933 await sqliteConnection.OpenAsync(cancellationToken);
974   934  
Line 1007... Line 967...
1007 } 967 }
1008 } 968 }
Line 1009... Line 969...
1009   969  
1010 public async Task UpdateColor(string hash, Color color, CancellationToken cancellationToken) 970 public async Task UpdateColor(string hash, Color color, CancellationToken cancellationToken)
1011 { -  
1012 var connectionString = new SQLiteConnectionStringBuilder -  
1013 { -  
1014 ConnectionString = DatabaseConnectionString -  
1015 }; -  
1016   971 {
Line 1017... Line 972...
1017 await _databaseLock.WaitAsync(cancellationToken); 972 await _databaseLock.WaitAsync(cancellationToken);
1018   973  
1019 try 974 try
1020 { 975 {
1021 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 976 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
Line 1022... Line 977...
1022 { 977 {
1023 await sqliteConnection.OpenAsync(cancellationToken); 978 await sqliteConnection.OpenAsync(cancellationToken);
Line 1058... Line 1013...
1058 } 1013 }
1059 } 1014 }
Line 1060... Line 1015...
1060   1015  
1061 public async Task RemoveColor(string hash, CancellationToken cancellationToken) 1016 public async Task RemoveColor(string hash, CancellationToken cancellationToken)
1062 { -  
1063 var connectionString = new SQLiteConnectionStringBuilder -  
1064 { -  
1065 ConnectionString = DatabaseConnectionString -  
1066 }; -  
1067   1017 {
1068 await _databaseLock.WaitAsync(cancellationToken); 1018 await _databaseLock.WaitAsync(cancellationToken);
1069 try 1019 try
1070 { 1020 {
1071 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 1021 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
1072 { 1022 {
Line 1073... Line 1023...
1073 await sqliteConnection.OpenAsync(cancellationToken); 1023 await sqliteConnection.OpenAsync(cancellationToken);
1074   1024  
Line 1107... Line 1057...
1107 } 1057 }
1108 } 1058 }
Line 1109... Line 1059...
1109   1059  
1110 public async Task<SnapshotPreview> RetrievePreview(string hash, CancellationToken cancellationToken) 1060 public async Task<SnapshotPreview> RetrievePreview(string hash, CancellationToken cancellationToken)
1111 { -  
1112 var connectionString = new SQLiteConnectionStringBuilder -  
1113 { -  
1114 ConnectionString = DatabaseConnectionString -  
1115 }; -  
1116   1061 {
1117 await _databaseLock.WaitAsync(cancellationToken); 1062 await _databaseLock.WaitAsync(cancellationToken);
1118 try 1063 try
1119 { 1064 {
1120 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 1065 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
1121 { 1066 {
Line 1122... Line 1067...
1122 await sqliteConnection.OpenAsync(cancellationToken); 1067 await sqliteConnection.OpenAsync(cancellationToken);
1123   1068  
Line 1173... Line 1118...
1173 } 1118 }
1174 } 1119 }
Line 1175... Line 1120...
1175   1120  
1176 public async Task<MemoryStream> RetrieveFileStream(string hash, CancellationToken cancellationToken) 1121 public async Task<MemoryStream> RetrieveFileStream(string hash, CancellationToken cancellationToken)
1177 { -  
1178 var connectionString = new SQLiteConnectionStringBuilder -  
1179 { -  
1180 ConnectionString = DatabaseConnectionString -  
1181 }; -  
1182   1122 {
1183 await _databaseLock.WaitAsync(cancellationToken); 1123 await _databaseLock.WaitAsync(cancellationToken);
1184 try 1124 try
1185 { 1125 {
1186 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 1126 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
1187 { 1127 {
Line 1188... Line 1128...
1188 await sqliteConnection.OpenAsync(cancellationToken); 1128 await sqliteConnection.OpenAsync(cancellationToken);
1189   1129  
Line 1237... Line 1177...
1237 } 1177 }
1238 } 1178 }
Line 1239... Line 1179...
1239   1179  
1240 public async Task RelocateFile(string hash, string path, CancellationToken cancellationToken) 1180 public async Task RelocateFile(string hash, string path, CancellationToken cancellationToken)
1241 { -  
1242 var connectionString = new SQLiteConnectionStringBuilder -  
1243 { -  
1244 ConnectionString = DatabaseConnectionString -  
1245 }; -  
1246   1181 {
1247 await _databaseLock.WaitAsync(cancellationToken); 1182 await _databaseLock.WaitAsync(cancellationToken);
1248 try 1183 try
1249 { 1184 {
1250 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 1185 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
1251 { 1186 {
Line 1252... Line 1187...
1252 await sqliteConnection.OpenAsync(cancellationToken); 1187 await sqliteConnection.OpenAsync(cancellationToken);
1253   1188  
Line 1288... Line 1223...
1288 } 1223 }
1289 } 1224 }
Line 1290... Line 1225...
1290   1225  
1291 public async Task UpdateNote(string hash, string note, CancellationToken cancellationToken) 1226 public async Task UpdateNote(string hash, string note, CancellationToken cancellationToken)
1292 { -  
1293 var connectionString = new SQLiteConnectionStringBuilder -  
1294 { -  
1295 ConnectionString = DatabaseConnectionString -  
1296 }; -  
1297   1227 {
1298 await _databaseLock.WaitAsync(cancellationToken); 1228 await _databaseLock.WaitAsync(cancellationToken);
1299 try 1229 try
1300 { 1230 {
1301 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 1231 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
1302 { 1232 {
Line 1303... Line 1233...
1303 await sqliteConnection.OpenAsync(cancellationToken); 1233 await sqliteConnection.OpenAsync(cancellationToken);
1304   1234  
Line 1342... Line 1272...
1342 } 1272 }
1343 } 1273 }
Line 1344... Line 1274...
1344   1274  
1345 public async Task<string> UpdateFile(string hash, byte[] data, CancellationToken cancellationToken) 1275 public async Task<string> UpdateFile(string hash, byte[] data, CancellationToken cancellationToken)
1346 { -  
1347 var connectionString = new SQLiteConnectionStringBuilder -  
1348 { -  
1349 ConnectionString = DatabaseConnectionString -  
1350 }; -  
1351   1276 {
1352 await _databaseLock.WaitAsync(cancellationToken); 1277 await _databaseLock.WaitAsync(cancellationToken);
1353 try 1278 try
1354 { 1279 {
1355 using (var dataMemoryStream = new MemoryStream(data)) 1280 using (var dataMemoryStream = new MemoryStream(data))
1356 { 1281 {
1357 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 1282 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
1358 { 1283 {
Line 1359... Line 1284...
1359 await sqliteConnection.OpenAsync(cancellationToken); 1284 await sqliteConnection.OpenAsync(cancellationToken);
1360   1285  
Line 1467... Line 1392...
1467 } 1392 }
1468 } 1393 }
Line 1469... Line 1394...
1469   1394  
1470 public async Task UpdateHash(string from, string to, CancellationToken cancellationToken) 1395 public async Task UpdateHash(string from, string to, CancellationToken cancellationToken)
1471 { -  
1472 var connectionString = new SQLiteConnectionStringBuilder -  
1473 { -  
1474 ConnectionString = DatabaseConnectionString -  
1475 }; -  
1476   1396 {
1477 await _databaseLock.WaitAsync(cancellationToken); 1397 await _databaseLock.WaitAsync(cancellationToken);
1478 try 1398 try
1479 { 1399 {
1480 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 1400 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
1481 { 1401 {
Line 1482... Line 1402...
1482 await sqliteConnection.OpenAsync(cancellationToken); 1402 await sqliteConnection.OpenAsync(cancellationToken);
1483   1403  
Line 1521... Line 1441...
1521   1441  
Line 1522... Line 1442...
1522 #region Private Methods 1442 #region Private Methods
1523   1443  
1524 private async Task SetAutoVacuum(CancellationToken cancellationToken) -  
1525 { -  
1526 var connectionString = new SQLiteConnectionStringBuilder -  
1527 { -  
1528 ConnectionString = DatabaseConnectionString -  
1529 }; 1444 private async Task SetAutoVacuum(CancellationToken cancellationToken)
1530   1445 {
1531 await _databaseLock.WaitAsync(cancellationToken); 1446 await _databaseLock.WaitAsync(cancellationToken);
1532 try 1447 try
1533 { 1448 {
1534 using (var sqliteConnection = 1449 using (var sqliteConnection =
1535 new SQLiteConnection(connectionString.ConnectionString)) 1450 new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
Line 1536... Line 1451...
1536 { 1451 {
1537 await sqliteConnection.OpenAsync(cancellationToken); 1452 await sqliteConnection.OpenAsync(cancellationToken);
Line 1549... Line 1464...
1549 } 1464 }
1550 } 1465 }
Line 1551... Line 1466...
1551   1466  
1552 private async Task CreateDatabase(CancellationToken cancellationToken) 1467 private async Task CreateDatabase(CancellationToken cancellationToken)
1553 { -  
1554 var connectionString = new SQLiteConnectionStringBuilder -  
1555 { -  
1556 ConnectionString = DatabaseConnectionString -  
1557 }; -  
1558   1468 {
1559 await _databaseLock.WaitAsync(cancellationToken); 1469 await _databaseLock.WaitAsync(cancellationToken);
1560 try 1470 try
1561 { 1471 {
1562 using (var sqliteConnection = new SQLiteConnection(connectionString.ConnectionString)) 1472 using (var sqliteConnection = new SQLiteConnection(_sqliteConnectionStringBuilder.ConnectionString))
1563 { 1473 {
Line 1564... Line 1474...
1564 await sqliteConnection.OpenAsync(cancellationToken); 1474 await sqliteConnection.OpenAsync(cancellationToken);
1565   1475