diff --git a/Dotnet/Program.cs b/Dotnet/Program.cs index 99e2a69e..be2988c2 100644 --- a/Dotnet/Program.cs +++ b/Dotnet/Program.cs @@ -7,12 +7,12 @@ using NLog; using NLog.Targets; using System; +using System.Data.SQLite; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Text.Json; using System.Threading; using System.Windows.Forms; -using Microsoft.Data.Sqlite; namespace VRCX { @@ -172,7 +172,7 @@ namespace VRCX #region Handle Database Error - catch (SqliteException e) + catch (SQLiteException e) { logger.Fatal(e, "Unhandled SQLite Exception, closing."); var messageBoxResult = MessageBox.Show( diff --git a/Dotnet/SQLite.cs b/Dotnet/SQLite.cs index dfba1f2e..32a69747 100644 --- a/Dotnet/SQLite.cs +++ b/Dotnet/SQLite.cs @@ -1,17 +1,18 @@ -#nullable enable using System; using System.Collections.Generic; +using System.Data.SQLite; +using System.IO; +using System.Text.Json.Nodes; using System.Threading; using System.Text.Json; -using Microsoft.Data.Sqlite; namespace VRCX { public class SQLite { public static SQLite Instance; - private readonly ReaderWriterLockSlim _connectionLock; - private SqliteConnection _connection; + private readonly ReaderWriterLockSlim m_ConnectionLock; + private SQLiteConnection m_Connection; static SQLite() { @@ -20,7 +21,7 @@ namespace VRCX public SQLite() { - _connectionLock = new ReaderWriterLockSlim(); + m_ConnectionLock = new ReaderWriterLockSlim(); } public void Init() @@ -33,24 +34,18 @@ namespace VRCX if (!string.IsNullOrEmpty(jsonDataSource)) dataSource = jsonDataSource; - _connection = new SqliteConnection($"Data Source=\"{dataSource}\";Mode=ReadWriteCreate;Cache=Shared;"); - _connection.Open(); - using var command = _connection.CreateCommand(); - command.CommandText = @"PRAGMA locking_mode=NORMAL; - PRAGMA busy_timeout=5000; - PRAGMA journal_mode=WAL; - PRAGMA optimize=0x10002;"; - command.ExecuteNonQuery(); + m_Connection = new SQLiteConnection($"Data Source=\"{dataSource}\";Version=3;PRAGMA locking_mode=NORMAL;PRAGMA busy_timeout=5000;PRAGMA journal_mode=WAL;PRAGMA optimize=0x10002;", true); + + m_Connection.Open(); } public void Exit() { - _connection.Close(); - _connection.Dispose(); + m_Connection.Close(); + m_Connection.Dispose(); } - // for Electron - public string ExecuteJson(string sql, IDictionary? args = null) + public string ExecuteJson(string sql, IDictionary args = null) { var result = Execute(sql, args); if (result.Item1 != null) @@ -68,17 +63,17 @@ namespace VRCX }); } - public Tuple Execute(string sql, IDictionary? args = null) + public Tuple Execute(string sql, IDictionary args = null) { - _connectionLock.EnterReadLock(); + m_ConnectionLock.EnterReadLock(); try { - using var command = new SqliteCommand(sql, _connection); + using var command = new SQLiteCommand(sql, m_Connection); if (args != null) { foreach (var arg in args) { - command.Parameters.Add(new SqliteParameter(arg.Key, arg.Value)); + command.Parameters.Add(new SQLiteParameter(arg.Key, arg.Value)); } } @@ -93,37 +88,37 @@ namespace VRCX } result.Add(values); } - return new Tuple(null, result.ToArray()); + return new Tuple(null, result.ToArray()); } catch (Exception ex) { - return new Tuple(ex.Message, null); + return new Tuple(ex.Message, null); } finally { - _connectionLock.ExitReadLock(); + m_ConnectionLock.ExitReadLock(); } } - public int ExecuteNonQuery(string sql, IDictionary? args = null) + public int ExecuteNonQuery(string sql, IDictionary args = null) { int result = -1; - _connectionLock.EnterWriteLock(); + m_ConnectionLock.EnterWriteLock(); try { - using var command = new SqliteCommand(sql, _connection); + using var command = new SQLiteCommand(sql, m_Connection); if (args != null) { foreach (var arg in args) { - command.Parameters.Add(new SqliteParameter(arg.Key, arg.Value)); + command.Parameters.Add(new SQLiteParameter(arg.Key, arg.Value)); } } result = command.ExecuteNonQuery(); } finally { - _connectionLock.ExitWriteLock(); + m_ConnectionLock.ExitWriteLock(); } return result; diff --git a/Dotnet/ScreenshotMetadata/ScreenshotMetadataDatabase.cs b/Dotnet/ScreenshotMetadata/ScreenshotMetadataDatabase.cs index 8e991807..af76c5e0 100644 --- a/Dotnet/ScreenshotMetadata/ScreenshotMetadataDatabase.cs +++ b/Dotnet/ScreenshotMetadata/ScreenshotMetadataDatabase.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using Microsoft.Data.Sqlite; +using System.Data.SQLite; namespace VRCX { @@ -16,27 +16,20 @@ namespace VRCX // Couldn't be me... oh wait internal class ScreenshotMetadataDatabase { - private readonly SqliteConnection _sqlite; + private readonly SQLiteConnection _sqlite; public ScreenshotMetadataDatabase(string databaseLocation) { - _sqlite = new SqliteConnection($"Data Source=\"{databaseLocation}\";Mode=ReadWriteCreate;Cache=Shared;"); + _sqlite = new SQLiteConnection($"Data Source=\"{databaseLocation}\";Version=3;PRAGMA locking_mode=NORMAL;PRAGMA busy_timeout=5000;PRAGMA journal_mode=WAL;PRAGMA optimize=0x10002;", true); _sqlite.Open(); - using var command = _sqlite.CreateCommand(); - command.CommandText = @"PRAGMA locking_mode=NORMAL; - PRAGMA busy_timeout=5000; - PRAGMA journal_mode=WAL; - PRAGMA optimize=0x10002;"; - command.ExecuteNonQuery(); - - var createCommand = _sqlite.CreateCommand(); - createCommand.CommandText = @"CREATE TABLE IF NOT EXISTS cache ( + using var cmd = new SQLiteCommand(_sqlite); + cmd.CommandText = @"CREATE TABLE IF NOT EXISTS cache ( id INTEGER PRIMARY KEY AUTOINCREMENT, file_path TEXT NOT NULL UNIQUE, metadata TEXT, cached_at INTEGER NOT NULL );"; - createCommand.ExecuteNonQuery(); + cmd.ExecuteNonQuery(); } public void AddMetadataCache(string filePath, string metadata) @@ -53,7 +46,7 @@ namespace VRCX CachedAt = DateTimeOffset.Now }; const string sql = "INSERT OR REPLACE INTO cache (file_path, metadata, cached_at) VALUES (@FilePath, @Metadata, @CachedAt);"; - using var command = new SqliteCommand(sql, _sqlite); + using var command = new SQLiteCommand(sql, _sqlite); command.Parameters.AddWithValue("@FilePath", cache.FilePath); command.Parameters.AddWithValue("@Metadata", cache.Metadata); command.Parameters.AddWithValue("@CachedAt", cache.CachedAt.Ticks); @@ -63,12 +56,12 @@ namespace VRCX public void BulkAddMetadataCache(IEnumerable cache) { using var transaction = _sqlite.BeginTransaction(); - using var command = _sqlite.CreateCommand(); + using var command = new SQLiteCommand(_sqlite); const string sql = "INSERT OR REPLACE INTO cache (file_path, metadata, cached_at) VALUES (@FilePath, @Metadata, @CachedAt);"; command.CommandText = sql; - var filePathParam = command.Parameters.Add("@FilePath", SqliteType.Text); - var metadataParam = command.Parameters.Add("@Metadata", SqliteType.Text); - var cachedAtParam = command.Parameters.Add("@CachedAt", SqliteType.Integer); + var filePathParam = command.Parameters.Add("@FilePath", System.Data.DbType.String); + var metadataParam = command.Parameters.Add("@Metadata", System.Data.DbType.String); + var cachedAtParam = command.Parameters.Add("@CachedAt", System.Data.DbType.Int64); foreach (var item in cache) { var isFileCached = IsFileCached(item.FilePath); @@ -86,8 +79,7 @@ namespace VRCX public int IsFileCached(string filePath) { const string sql = "SELECT id FROM cache WHERE file_path = @FilePath;"; - using var command = _sqlite.CreateCommand(); - command.CommandText = sql; + using var command = new SQLiteCommand(sql, _sqlite); command.Parameters.AddWithValue("@FilePath", filePath); using var reader = command.ExecuteReader(); var result = new List(); @@ -105,8 +97,7 @@ namespace VRCX public string? GetMetadata(string filePath) { const string sql = "SELECT id, file_path, metadata, cached_at FROM cache WHERE file_path = @FilePath;"; - using var command = _sqlite.CreateCommand(); - command.CommandText = sql; + using var command = new SQLiteCommand(sql, _sqlite); command.Parameters.AddWithValue("@FilePath", filePath); using var reader = command.ExecuteReader(); var result = new List(); @@ -130,8 +121,7 @@ namespace VRCX public string? GetMetadataById(int id) { const string sql = "SELECT id, file_path, metadata, cached_at FROM cache WHERE id = @Id;"; - using var command = _sqlite.CreateCommand(); - command.CommandText = sql; + using var command = new SQLiteCommand(sql, _sqlite); command.Parameters.AddWithValue("@Id", id); using var reader = command.ExecuteReader(); var result = new List(); diff --git a/Dotnet/VRCX-Cef.csproj b/Dotnet/VRCX-Cef.csproj index 9fa22b89..b4ffaaf8 100644 --- a/Dotnet/VRCX-Cef.csproj +++ b/Dotnet/VRCX-Cef.csproj @@ -91,7 +91,6 @@ - @@ -99,6 +98,8 @@ + + diff --git a/Dotnet/VRCX-Electron.csproj b/Dotnet/VRCX-Electron.csproj index d63c021e..f37cc34b 100644 --- a/Dotnet/VRCX-Electron.csproj +++ b/Dotnet/VRCX-Electron.csproj @@ -87,7 +87,6 @@ - @@ -95,6 +94,8 @@ + +