Beispiel #1
0
 /// <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();
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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();
                }
            }
        }
Beispiel #4
0
        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();
                    }
                }
            }
        }
Beispiel #5
0
        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);
        }