public ExportClassNames(Savegame.Savegame savegame)
		{
			_runner       = new HierarchyRunner(savegame, false);
			_classnames   = new List<string>();
			_report_sb    = new StringBuilder();
			_report_depth = 0;
		}
Beispiel #2
0
        public DifferenceModel(Savegame.Savegame left, Savegame.Savegame right)
        {
            Root          = new DifferenceNode(@"\", "", "");
            LeftSavegame  = left;
            RightSavegame = right;

            Root.IsExpanded = true;
        }
Beispiel #3
0
 public static void Run(Savegame.Savegame savegame)
 {
     // Show dialog, gather data, then run method below
     ExportAction.Dialog dlg = new ExportAction.Dialog();
     if (dlg.ShowDialog() == true)
     {
         Run(savegame, dlg.Filename, dlg.DestinationType, dlg.Filters, dlg.DeepTraversal, dlg.RecursExport);
     }
 }
        private void _ReadData(string filename, long offset, long length)
        {
            _data = null;

            Header header = null;

            try
            {
                Savegame.Savegame savegame = new Savegame.Savegame(filename);
                header = savegame.PeekHeader();
            }
            catch
            {
            }

            if (header != null)
            {
                if (header.SaveVersion < 21)
                {
                    _data = CoreLib.Helpers.GetFileContents(filename, offset, length);
                }
                else
                {
                    Reader.FileReader      filereader  = null;
                    Reader.CloudsaveReader cloudreader = null;
                    try
                    {
                        filereader = new Reader.FileReader(filename, null);
                        int header_length = header.GetLength();
                        if (filereader.Seek(header_length, Reader.IReader.Positioning.Start) == header_length)
                        {
                            cloudreader = new Reader.CloudsaveReader(filereader, null);
                            offset     += 4;                         // Take leading 'size' into account
                            if (cloudreader.Seek(offset, Reader.IReader.Positioning.Start) == offset)
                            {
                                _data = cloudreader.ReadBytes((int)length);
                            }
                        }
                    }
                    catch
                    {
                    }
                    finally
                    {
                        if (cloudreader != null)
                        {
                            cloudreader.Close();
                        }
                        if (filereader != null)
                        {
                            filereader.Close();
                        }
                    }
                }
            }
        }
        public static IAction Create(string name, Savegame.Savegame savegame)
        {
            IAction action = null;

            if (INSTANCE.IsKnown(name))
            {
                action = INSTANCE[name, savegame];
            }
            return(action);
        }
        private bool _CloseGamefile()
        {
            if (CurrFile != null && CurrFile.Modified)
            {
                var ret = MessageBox.Show(Translate._("MainWindow.Gamefile.UnsavedChanges"),
                                          Translate._("MainWindow.Title"), MessageBoxButton.YesNo, MessageBoxImage.Question);
                if (ret == MessageBoxResult.No)
                {
                    return(false);
                }
            }

            CurrFile = null;

            return(true);
        }
        internal Savegame.Savegame _LoadSave(string filename)
        {
            Log.Info("Loading 2nd savegame '{0}' ...", filename);
            DateTime start_time = DateTime.Now;

            Savegame.Savegame savegame = new Savegame.Savegame(filename);
            try
            {
                savegame.Load(_callback);

                DateTime end_time = DateTime.Now;
                TimeSpan ofs      = end_time - start_time;
                Log.Info("Loading took {0}", ofs);
            }
            catch (Exception exc)
            {
                savegame = null;
                Log.Error("Loading 2nd save failed", exc);
            }

            return(savegame);
        }
Beispiel #8
0
 /// <summary>
 /// Runner constructor
 /// </summary>
 /// <param name="savegame">Savegame to run on</param>
 /// <param name="deep_run">Whether or not to visit child properties too</param>
 public HierarchyRunner(Savegame.Savegame savegame, bool deep_run)
 {
     _savegame = savegame;
     _deep_run = deep_run;
 }
        private async void _LoadGamefile(string filename)
        {
            if (!_CloseGamefile())
            {
                return;
            }

            if (!File.Exists(filename))
            {
                Log.Info("Tried to load a file which didn't exist anymore!");
                return;
            }

            // Setup savegame
            CurrFile = new Savegame.Savegame(filename);

            // Activate features as configured by user
            CurrFile.EnableDeepAnalysis(Config.Root.deep_analysis.enabled);

            // Peek header first, to ensure the savegame version is fully supported
            Header header = CurrFile.PeekHeader();

            if (header == null)
            {
                Log.Error("Failed to peek header");
                MessageBox.Show(string.Format(Translate._("MainWindow.LoadGamefile.PeekHeader.Failed"), filename),
                                Translate._("MainWindow.Title"), MessageBoxButton.OK, MessageBoxImage.Stop);
                return;
            }
            if (header.GetVersionEntry() == null)
            {
                // Log this version info in case tool crashes
                Log.Warning("Save is newer than this tool supports: Build={0}, SaveVersion={1}, SaveType={2}",
                            header.GetBuildVersion(), header.SaveVersion, header.Type);
                string save_version = string.Format("Build {0}", header.GetBuildVersion());
                var    ret          = MessageBox.Show(string.Format(Translate._("MainWindow.LoadGamefile.PeekHeader.Warn"), save_version),
                                                      Translate._("MainWindow.Title"), MessageBoxButton.YesNo, MessageBoxImage.Question);
                if (ret == MessageBoxResult.No)
                {
                    return;
                }
            }

            _BlockUI(true);
            _SetStatusbar(string.Format(Translate._("MainWindow.LoadGamefile.Progress.Statusbar"), filename));
            ProgressDialog progress = new ProgressDialog(this, Translate._("MainWindow.LoadGamefile.Progress.Title"));

            try
            {
                await Task.Run(() => {
                    DateTime start_time = DateTime.Now;

                    Log.Info("Loading file '{0}'", filename);
                    progress.CounterFormat = Translate._("MainWindow.LoadGamefile.Progress.CounterFormat");
                    progress.Interval      = 1024 * 1024;             //1024 * 128;
                    CurrFile.Load(progress.Events);
                    //throw new UnknownPropertyException("Hard failure :D", "WTFProperty", 0x10001L);
                    Log.Info("Finished loading");
                    Log.Info("... loaded a total of {0} elements", CurrFile.TotalElements);

                    Log.Info("Creating trees ...");
                    //progress.CounterFormat = Translate._("MainWindow.LoadGamefile.Progress.CounterFormat.2");
                    progress.Interval = 1000;
                    //TreeView.CreateTree(progress.Events);
                    TreeView.CreateTrees(progress.Events);
                    Log.Info("... finished creating trees");

                    DateTime end_time = DateTime.Now;
                    TimeSpan ofs      = end_time - start_time;
                    Log.Info("Loading took {0}", ofs);
                });
            }
            catch (UnknownPropertyException exc)
            {
                CurrFile = null;

                IncidentReportDialog.Show(filename, exc);
            }
            catch (Reader.ReadException exc)
            {
                CurrFile = null;

                IncidentReportDialog.Show(filename, exc);
            }
            finally
            {
                progress = null;
                _SetStatusbar();
                _BlockUI(false);

                _UpdateUIState();
            }
        }
Beispiel #10
0
 public static void Run(Savegame.Savegame savegame, string filename, ExportAction.Writer.Destinations destination_type,
                        List <ExportAction.FilterDefinition> filters, bool deep_traversal, bool recursive_export)
 {
     ExportAction.Impl.Run(savegame, filename, destination_type, filters, deep_traversal, recursive_export);
 }
Beispiel #11
0
            public static void Run(Savegame.Savegame savegame, string filename, ExportAction.Writer.Destinations destination_type,
                                   List <FilterDefinition> filters, bool deep_traversal, bool recursive_export)
            {
                Writer.IWriter writer = Writer.CreateWriter(destination_type, filename, recursive_export);
                if (writer == null)
                {
                    string msg = string.Format(Translate._("Unable to create writer for file\n\n{0}"), filename);
                    MessageBox.Show(msg, Translate._("MainWindow.Title"), MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    return;
                }
                try
                {
                    writer.Open();
                }
                catch (Exception exc)
                {
                    string msg = string.Format(Translate._("Unable to create writer for file\n\n{0}"), filename) + "\n\n" + exc.ToLongString();
                    MessageBox.Show(msg, Translate._("MainWindow.Title"), MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    return;
                }

                var defs = new F.Definitions(filters.Cast <F.Definition>());

                F.CreatorCallback creator = (def) => FilterImpl.CreateFilter(def as FilterDefinition);
                F.FilterChain     chain   = F.CreateChain(defs, creator);
                if (chain == null)
                {
                    string msg = "Internal error!\n\nUnable to create filter chain.";
                    MessageBox.Show(msg, Translate._("MainWindow.Title"), MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    return;
                }

                HierarchyRunner.Runner action;
                if (chain.Count == 0)
                {
                    action = (prop) => {
                        // Empty "Export all" filter was passed
                        writer.Write(prop);
                    };
                    // Also remove deep flag
                    deep_traversal = false;
                }
                else
                {
                    action = (prop) => {
                        // Test property against filter(s) given
                        F.IResult result = chain.Test(prop);
                        // If successful, pass to writer
                        if (result.Success)
                        {
                            writer.Write(prop);
                        }
                    }
                };

                try
                {
                    HierarchyRunner runner = new HierarchyRunner(savegame, deep_traversal);
                    runner.Run(Translate._("Action.Export.Progress.Title"), action);

                    string msg = string.Format(Translate._("Action.Export.Done"), filename);
                    MessageBox.Show(msg, Translate._("MainWindow.Title"));                    //, MessageBoxButton.OK, MessageBoxImage.Information);
                }
                catch
                {
                    string msg = "Internal error!\n\nFailure within hierarchy runner.";
                    MessageBox.Show(msg, Translate._("MainWindow.Title"), MessageBoxButton.OK, MessageBoxImage.Exclamation);
                }
                finally
                {
                    writer.Close();
                }
            }
        }
Beispiel #12
0
 public ExportChildClasses(Savegame.Savegame savegame)
 {
     _savegame = savegame;
     _runner   = new HierarchyRunner(savegame, false);
     _classes  = new Dictionary <string, List <string> >();
 }
        public CompareSavegames(Savegame.Savegame savegame)
        {
            _left_save = savegame;

            //_InitComparators();
        }