/// <summary> /// Initializes route crawler /// </summary> /// <param name="path">Route path</param> /// <param name="railworksPath">RailWorks path</param> public RouteCrawler(string path, HashSet <string> dependencies, HashSet <string> scenarioDeps) { RoutePath = path; Dependencies = dependencies; ScenarioDeps = scenarioDeps; Adapter = new SqLiteAdapter(Path.Combine(RoutePath, "cache.dls")); SavedRoute = Adapter.LoadSavedRoute(); }
internal LoadedRoute LoadSavedRoute() { LoadedRoute loadedRoute = new LoadedRoute(); using (SQLiteCommand cmd = new SQLiteCommand(SQLqueries.SelectAllChckSums, MemoryConn)) { using (SQLiteDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { DateTime lastWrite = new DateTime(); object _lastWrite = reader["last_write"]; if (!(_lastWrite is DBNull)) { lastWrite = Convert.ToDateTime(_lastWrite); } switch (reader["folder"]) { case "loft": loadedRoute.LoftChecksum = Convert.ToString(reader["chcksum"]); loadedRoute.LoftLastWrite = lastWrite; break; case "road": loadedRoute.RoadChecksum = Convert.ToString(reader["chcksum"]); loadedRoute.RoadLastWrite = lastWrite; break; case "track": loadedRoute.TrackChecksum = Convert.ToString(reader["chcksum"]); loadedRoute.TrackLastWrite = lastWrite; break; case "scenarios": loadedRoute.ScenariosChecksum = Convert.ToString(reader["chcksum"]); loadedRoute.ScenariosLastWrite = lastWrite; break; case "scenery": loadedRoute.SceneryChecksum = Convert.ToString(reader["chcksum"]); loadedRoute.SceneryLastWrite = lastWrite; break; case "AP": loadedRoute.APChecksum = Convert.ToString(reader["chcksum"]); loadedRoute.APLastWrite = lastWrite; break; case "routeProperties": loadedRoute.RoutePropertiesChecksum = Convert.ToString(reader["chcksum"]); loadedRoute.RoutePropertiesLastWrite = lastWrite; break; } } } } loadedRoute.Dependencies = new HashSet <string>(); loadedRoute.ScenarioDeps = new HashSet <string>(); using (SQLiteCommand cmd = new SQLiteCommand(SQLqueries.SelectAllDeps, MemoryConn)) { using (SQLiteDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { switch (Convert.ToInt32(reader["isScenario"])) { case 1: loadedRoute.ScenarioDeps.Add(NormalizePath(Convert.ToString(reader["path"]))); break; default: loadedRoute.Dependencies.Add(NormalizePath(Convert.ToString(reader["path"]))); break; } } } } return(loadedRoute); }
internal void SaveRoute(LoadedRoute route) { SQLiteCommand cmd = new SQLiteCommand("INSERT INTO checksums (folder, chcksum) VALUES (@folder,@chcksum) ON CONFLICT(folder) DO UPDATE SET folder = @folder, chcksum = @chcksum;", MemoryConn); for (int i = 0; i < 7; i++) { switch (i) { case 0: cmd.Parameters.AddWithValue("@folder", "loft"); cmd.Parameters.AddWithValue("@chcksum", route.LoftChecksum); break; case 1: cmd.Parameters.AddWithValue("@folder", "road"); cmd.Parameters.AddWithValue("@chcksum", route.RoadChecksum); break; case 2: cmd.Parameters.AddWithValue("@folder", "track"); cmd.Parameters.AddWithValue("@chcksum", route.TrackChecksum); break; case 3: cmd.Parameters.AddWithValue("@folder", "scenery"); cmd.Parameters.AddWithValue("@chcksum", route.SceneryChecksum); break; case 4: cmd.Parameters.AddWithValue("@folder", "AP"); cmd.Parameters.AddWithValue("@chcksum", route.APChecksum); break; case 5: cmd.Parameters.AddWithValue("@folder", "routeProperties"); cmd.Parameters.AddWithValue("@chcksum", route.RoutePropertiesChecksum); break; case 6: cmd.Parameters.AddWithValue("@folder", "scenarios"); cmd.Parameters.AddWithValue("@chcksum", route.ScenariosChecksum); break; } cmd.ExecuteNonQuery(); } SQLiteCommand clear = new SQLiteCommand("DELETE FROM dependencies;", MemoryConn); clear.ExecuteNonQuery(); SQLiteCommand insertSQL = new SQLiteCommand("INSERT INTO dependencies (path, isScenario) VALUES (@path,@isScenario);", MemoryConn); int depsCount = route.Dependencies.Count; for (int i = 0; i < depsCount + route.ScenarioDeps.Count; i++) { if (i < depsCount) { if (string.IsNullOrWhiteSpace(route.Dependencies.ElementAt(i))) { continue; } insertSQL.Parameters.AddWithValue("@path", route.Dependencies.ElementAt(i)); insertSQL.Parameters.AddWithValue("@isScenario", false); insertSQL.ExecuteNonQuery(); } else { if (string.IsNullOrWhiteSpace(route.ScenarioDeps.ElementAt(i - depsCount))) { continue; } insertSQL.Parameters.AddWithValue("@path", route.ScenarioDeps.ElementAt(i - depsCount)); insertSQL.Parameters.AddWithValue("@isScenario", true); insertSQL.ExecuteNonQuery(); } } }
internal void SaveRoute(LoadedRoute route) { using (SQLiteCommand cmd = new SQLiteCommand(SQLqueries.InsertChckSum, MemoryConn)) { for (int i = 0; i < 7; i++) { switch (i) { case 0: cmd.Parameters.AddWithValue("folder", "loft"); cmd.Parameters.AddWithValue("chcksum", route.LoftChecksum); cmd.Parameters.AddWithValue("last_write", route.LoftLastWrite); break; case 1: cmd.Parameters.AddWithValue("folder", "road"); cmd.Parameters.AddWithValue("chcksum", route.RoadChecksum); cmd.Parameters.AddWithValue("last_write", route.RoadLastWrite); break; case 2: cmd.Parameters.AddWithValue("folder", "track"); cmd.Parameters.AddWithValue("chcksum", route.TrackChecksum); cmd.Parameters.AddWithValue("last_write", route.TrackLastWrite); break; case 3: cmd.Parameters.AddWithValue("folder", "scenery"); cmd.Parameters.AddWithValue("chcksum", route.SceneryChecksum); cmd.Parameters.AddWithValue("last_write", route.SceneryLastWrite); break; case 4: cmd.Parameters.AddWithValue("folder", "AP"); cmd.Parameters.AddWithValue("chcksum", route.APChecksum); cmd.Parameters.AddWithValue("last_write", route.APLastWrite); break; case 5: cmd.Parameters.AddWithValue("folder", "routeProperties"); cmd.Parameters.AddWithValue("chcksum", route.RoutePropertiesChecksum); cmd.Parameters.AddWithValue("last_write", route.RoutePropertiesLastWrite); break; case 6: cmd.Parameters.AddWithValue("folder", "scenarios"); cmd.Parameters.AddWithValue("chcksum", route.ScenariosChecksum); cmd.Parameters.AddWithValue("last_write", route.ScenariosLastWrite); break; } cmd.ExecuteNonQuery(); } } using (SQLiteCommand cmd = new SQLiteCommand(SQLqueries.DeleteAllDeps, MemoryConn)) { cmd.ExecuteNonQuery(); } using (SQLiteCommand cmd = new SQLiteCommand(SQLqueries.InsertDeps, MemoryConn)) { int depsCount = route.Dependencies.Count; for (int i = 0; i < depsCount + route.ScenarioDeps.Count; i++) { if (i < depsCount) { if (string.IsNullOrWhiteSpace(route.Dependencies.ElementAt(i))) { continue; } cmd.Parameters.AddWithValue("path", route.Dependencies.ElementAt(i)); cmd.Parameters.AddWithValue("isScenario", false); cmd.ExecuteNonQuery(); } else { if (string.IsNullOrWhiteSpace(route.ScenarioDeps.ElementAt(i - depsCount))) { continue; } cmd.Parameters.AddWithValue("path", route.ScenarioDeps.ElementAt(i - depsCount)); cmd.Parameters.AddWithValue("isScenario", true); cmd.ExecuteNonQuery(); } } } }
internal LoadedRoute LoadSavedRoute(bool isAP = false) { LoadedRoute loadedRoute = new LoadedRoute(); if (File.Exists(DatabasePath)) { SQLiteCommand command = new SQLiteCommand(MemoryConn) { CommandText = "SELECT * FROM checksums;" }; SQLiteDataReader reader = command.ExecuteReader(); while (reader.Read()) { switch (reader["folder"]) { case "loft": loadedRoute.LoftChecksum = Convert.ToString(reader["chcksum"]); break; case "road": loadedRoute.RoadChecksum = Convert.ToString(reader["chcksum"]); break; case "track": loadedRoute.TrackChecksum = Convert.ToString(reader["chcksum"]); break; case "scenarios": loadedRoute.ScenariosChecksum = Convert.ToString(reader["chcksum"]); break; case "scenery": loadedRoute.SceneryChecksum = Convert.ToString(reader["chcksum"]); break; case "AP": loadedRoute.APChecksum = Convert.ToString(reader["chcksum"]); break; case "routeProperties": loadedRoute.RoutePropertiesChecksum = Convert.ToString(reader["chcksum"]); break; } } command.Dispose(); loadedRoute.Dependencies = new HashSet <string>(); loadedRoute.ScenarioDeps = new HashSet <string>(); command = new SQLiteCommand(MemoryConn) { CommandText = "SELECT * FROM dependencies" }; reader = command.ExecuteReader(); while (reader.Read()) { switch (Convert.ToInt32(reader["isScenario"])) { case 1: loadedRoute.ScenarioDeps.Add(NormalizePath(Convert.ToString(reader["path"]))); break; default: loadedRoute.Dependencies.Add(NormalizePath(Convert.ToString(reader["path"]))); break; } } command.Dispose(); } else { CreateRouteCacheFile(); } return(loadedRoute); }