Exemplo n.º 1
0
        public void RemovePackage(int pkgId)
        {
            InstalledPackages.RemoveAll(x => x.PackageId == pkgId);
            List <string> removedFiles = Utils.RemoveFiles(SqLiteAdapter.LoadPackageFiles(pkgId));

            SqLiteAdapter.RemovePackageFiles(removedFiles);
            SqLiteAdapter.RemoveInstalledPackage(pkgId);
            SqLiteAdapter.FlushToFile(true);
        }
Exemplo n.º 2
0
        private async Task GetDependenciesInternal()
        {
            /*bool loftsChanged = GetDirectoryChanged(Path.Combine(RoutePath, "Networks", "Loft Tiles"), ref SavedRoute.LoftLastWrite, ref SavedRoute.LoftChecksum);
             * bool roadsChanged = GetDirectoryChanged(Path.Combine(RoutePath, "Networks", "Road Tiles"), ref SavedRoute.RoadLastWrite, ref SavedRoute.LoftChecksum);
             * bool tracksChanged = GetDirectoryChanged(Path.Combine(RoutePath, "Networks", "Track Tiles"), ref SavedRoute.TrackLastWrite, ref SavedRoute.TrackChecksum);
             * bool sceneryChanged = GetDirectoryChanged(Path.Combine(RoutePath, "Scenery"), ref SavedRoute.SceneryLastWrite, ref SavedRoute.SceneryChecksum);
             * bool rpChanged = GetFileChanged(Path.Combine(RoutePath, "RouteProperties.xml"), ref SavedRoute.RoutePropertiesLastWrite, ref SavedRoute.RoutePropertiesChecksum);
             * bool scenariosChanged = GetDirectoryChanged(Path.Combine(RoutePath, "Scenarios"), ref SavedRoute.ScenariosLastWrite, ref SavedRoute.ScenariosChecksum);*/

            lock (Dependencies)
            {
                if (SavedRoute.Dependencies != null)
                {
                    lock (Dependencies)
                        Dependencies.UnionWith(SavedRoute.Dependencies);
                }

                if (SavedRoute.ScenarioDeps != null)
                {
                    lock (ScenarioDeps)
                        ScenarioDeps.UnionWith(SavedRoute.ScenarioDeps);
                }
            }

            if (LoftsChanged || RoadsChanged || TracksChanged || SceneryChanged || RPchanged || ScenariosChanged)
            {
                Task n1   = null;
                Task n2   = null;
                Task n3   = null;
                Task s    = null;
                Task t    = null;
                Task prop = null;

                if (RPchanged)
                {
                    prop = GetSingleFileDependencies(Utils.FindFile(RoutePath, "RouteProperties.*"));
                }

                Parallel.ForEach(Directory.GetDirectories(RoutePath), dir =>
                {
                    switch (Path.GetFileName(dir).ToLower())
                    {
                    case "networks":
                        // Foreach all network directories
                        Parallel.ForEach(Directory.GetDirectories(dir), network_dir =>
                        {
                            switch (Path.GetFileName(network_dir).ToLower())
                            {
                            case "loft tiles":
                                if (LoftsChanged)
                                {
                                    n1 = GetTilesDependencies(network_dir);
                                }
                                break;

                            case "road tiles":
                                if (RoadsChanged)
                                {
                                    n2 = GetTilesDependencies(network_dir);
                                }
                                break;

                            case "track tiles":
                                if (TracksChanged)
                                {
                                    n3 = GetTilesDependencies(network_dir);
                                }
                                break;
                            }
                        });
                        break;

                    case "scenarios":
                        if (ScenariosChanged)
                        {
                            s = GetScenariosDependencies(dir);
                        }
                        break;

                    case "scenery":
                        if (SceneryChanged)
                        {
                            t = GetTilesDependencies(dir);
                        }
                        break;
                    }
                });

                if (n1 != null)
                {
                    await n1;
                }
                if (n2 != null)
                {
                    await n2;
                }
                if (n3 != null)
                {
                    await n3;
                }
                if (s != null)
                {
                    await s;
                }
                if (t != null)
                {
                    await t;
                }
                if (prop != null)
                {
                    await prop;
                }
            }

            SavedRoute.Dependencies = Dependencies;
            SavedRoute.ScenarioDeps = ScenarioDeps;

            Thread tt = new Thread(() =>
            {
                RouteSaving?.Invoke(false);
                Adapter.SaveRoute(SavedRoute);
                Adapter.FlushToFile();
                RouteSaving?.Invoke(true);
            });

            tt.Start();
        }
Exemplo n.º 3
0
        private async Task GetDependenciesInternal()
        {
            bool loftsChanged     = GetDirectoryMD5(Path.Combine(RoutePath, "Networks", "Loft Tiles")) != SavedRoute.LoftChecksum;
            bool roadsChanged     = GetDirectoryMD5(Path.Combine(RoutePath, "Networks", "Road Tiles")) != SavedRoute.RoadChecksum;
            bool tracksChanged    = GetDirectoryMD5(Path.Combine(RoutePath, "Networks", "Track Tiles")) != SavedRoute.TrackChecksum;
            bool sceneryChanged   = GetDirectoryMD5(Path.Combine(RoutePath, "Scenery")) != SavedRoute.SceneryChecksum;
            bool rpChanged        = GetFileMD5(Path.Combine(RoutePath, "RouteProperties.xml")) != SavedRoute.RoutePropertiesChecksum;
            bool scenariosChanged = GetDirectoryMD5(Path.Combine(RoutePath, "Scenarios")) != SavedRoute.ScenariosChecksum;

            Task md5 = ComputeChecksums();

            lock (Dependencies)
            {
                if (SavedRoute.Dependencies != null)
                {
                    lock (Dependencies)
                        Dependencies.UnionWith(SavedRoute.Dependencies);
                }

                if (SavedRoute.ScenarioDeps != null)
                {
                    lock (ScenarioDeps)
                        ScenarioDeps.UnionWith(SavedRoute.ScenarioDeps);
                }
            }

            if (loftsChanged || roadsChanged || tracksChanged || sceneryChanged || rpChanged || scenariosChanged)
            {
                Task n1 = null;
                Task n2 = null;
                Task n3 = null;
                Task s  = null;
                Task t  = null;
                Task <List <string> > prop = null;

                if (rpChanged)
                {
                    prop = GetRoutePropertiesDependencies(Path.Combine(RoutePath, "RouteProperties.xml"));
                }

                Parallel.ForEach(Directory.GetDirectories(RoutePath), dir =>
                {
                    switch (Path.GetFileName(dir).ToLower())
                    {
                    case "networks":
                        // Foreach all network directories
                        Parallel.ForEach(Directory.GetDirectories(dir), network_dir =>
                        {
                            switch (Path.GetFileName(network_dir).ToLower())
                            {
                            case "loft tiles":
                                if (loftsChanged)
                                {
                                    n1 = GetNetworkDependencies(network_dir);
                                }
                                break;

                            case "road tiles":
                                if (roadsChanged)
                                {
                                    n2 = GetNetworkDependencies(network_dir);
                                }
                                break;

                            case "track tiles":
                                if (tracksChanged)
                                {
                                    n3 = GetNetworkDependencies(network_dir);
                                }
                                break;
                            }
                        });
                        break;

                    case "scenarios":
                        if (scenariosChanged)
                        {
                            s = GetScenariosDependencies(dir);
                        }
                        break;

                    case "scenery":
                        if (sceneryChanged)
                        {
                            t = GetSceneryDependencies(dir);
                        }
                        break;
                    }
                });

                if (n1 != null)
                {
                    await n1;
                }
                if (n2 != null)
                {
                    await n2;
                }
                if (n3 != null)
                {
                    await n3;
                }
                if (s != null)
                {
                    await s;
                }
                if (t != null)
                {
                    await t;
                }

                List <string> routeProperties = new List <string>();
                if (prop != null)
                {
                    routeProperties = await prop;

                    lock (Dependencies)
                        Dependencies.UnionWith(routeProperties);
                }
            }

            await md5;

            SavedRoute.Dependencies = Dependencies;
            SavedRoute.ScenarioDeps = ScenarioDeps;

            Thread tt = new Thread(() =>
            {
                RouteSaving?.Invoke(false);
                Adapter.SaveRoute(SavedRoute);
                Adapter.FlushToFile();
                RouteSaving?.Invoke(true);
            });

            tt.Start();
        }
Exemplo n.º 4
0
        public async Task VerifyCache()
        {
            List <Package> localCache = SqLiteAdapter.LoadPackages(true);

            ServerVersions = new Dictionary <int, int>();
            localCache.ForEach(x => ServerVersions[x.PackageId] = x.Version);
            Tuple <IEnumerable <Package>, HashSet <int> > tRemoteCache = await WebWrapper.ValidateCache(ServerVersions);

            IEnumerable <Package> remoteCache    = tRemoteCache.Item1;
            HashSet <int>         remoteVersions = tRemoteCache.Item2;

            lock (CachedPackages)
            {
                CachedPackages = remoteCache.ToList();
                localCache.ForEach(x =>
                {
                    if (!remoteVersions.Contains(x.PackageId))
                    {
                        CachedPackages.Add(x);
                    }
                    else
                    {
                        ServerVersions[x.PackageId] = CachedPackages.First(y => y.PackageId == x.PackageId).Version;
                    }
                });
                foreach (Package pkg in remoteCache)
                {
                    ServerVersions[pkg.PackageId] = pkg.Version;
                }
            }
            if (remoteVersions.Count > 0)
            {
                new Task(() =>
                {
                    foreach (Package pkg in CachedPackages)
                    {
                        SqLiteAdapter.SavePackage(pkg, true);
                    }
                    SqLiteAdapter.FlushToFile(true);
                }).Start();
            }
            CachedPackages.ForEach(x =>
            {
                if (x.IsPaid)
                {
                    x.FilesContained.ForEach(y =>
                    {
                        DownloadablePaidDepsPackages[y] = x.PackageId;
                        DownloadablePaidDeps.Add(y);
                    });
                }
                else
                {
                    x.FilesContained.ForEach(y =>
                    {
                        DownloadableDepsPackages[y] = x.PackageId;
                        DownloadableDeps.Add(y);
                    });
                }
            });
        }