/*
         * BackupWork
         */
        public void BackupWork(CI asRef)
        {
            SaveFilesHandlers sfh = new SaveFilesHandlers();

            // SaveMode is:  OVERWRITE    APPEND   ABORT
            SaveMode s = SaveMode.OVERWRITE;

            saveFileCnt = FileSaveCnt(KSPUtil.ApplicationRootPath + "saves/" + HighLogic.SaveFolder) + 1;
            string saveFileName = CI.AddInfo(CI.configuration.savePrefix, saveFileCnt, asRef.isSceneReady(), asRef.isSpecialScene(), asRef.isPreCrash());

            string str = GamePersistence.SaveGame(saveFileName, HighLogic.SaveFolder, s);

            Log.Info("String: " + str);

            sfh.deleteOldestSaveFile(KSPUtil.ApplicationRootPath + "saves/" + HighLogic.SaveFolder, CI.configuration.numToRotate, saveFileCnt, saveFileName);

            Log.Info("backup thread terminated");
        }
Пример #2
0
        public void LateUpdate()
        {
            string pngName;

            if (doSave || (AS.configuration.autoSave && ((Time.realtimeSinceStartup - lastBackup) > AS.configuration.minBetweenSaves * 60)))
            {
                lastBackup = Time.realtimeSinceStartup;
                SaveFilesHandlers sfh = new SaveFilesHandlers();
                sfh.startBackup(this);
                doSave = false;
            }
            if (doSnapshots)
            {
                Log.Info("In LateUpdate, doSnapshots");
                if (screenshotTaken && configuration.noGUIOnScreenshot == true && System.IO.File.Exists(screenshotFile) && wasUIVisible)
                {
                    GameEvents.onShowUI.Fire();
                }
                // If there is a png file waiting to be converted, then don't do another screenshot
                if (pngToConvert != "")
                {
                    //Log.Info ("pngToConvert: " + pngToConvert);
                    if (System.IO.File.Exists(pngToConvert))
                    {
                        Log.Info("Converting screenshot to JPG. New name: " + jpgName);
                        ConvertToJPG(pngToConvert, jpgName, configuration.JPGQuality);
                        System.IO.FileInfo file = new System.IO.FileInfo(pngToConvert);
                        if (!configuration.keepOrginalPNG)
                        {
                            Log.Info("AutomatedScreenshots: Delete PNG file");
                            file.Delete();
                        }
                        pngToConvert = "";
                    }
                }
                else
                {
                    if (AS.configuration.precrashSnapshots)
                    {
                        if (FlightGlobals.ActiveVessel != null)
                        {
                            Vessel vessel = FlightGlobals.ActiveVessel;

                            if ((-vessel.verticalSpeed > AS.configuration.hsMinVerticalSpeed) &&
                                ((FlightGlobals.ship_altitude / -vessel.verticalSpeed < AS.configuration.secondsUntilImpact) ||
                                 (FlightGlobals.ship_altitude < AS.configuration.hsAltitudeLimit)
                                ))
                            {
                                if (Time.realtimeSinceStartup - lastPrecrashUpdate > configuration.hsScreenshotInterval)
                                {
                                    this.precrash      = true;
                                    lastPrecrashUpdate = Time.realtimeSinceStartup;

                                    Log.Info("vessel.verticalSpeed: " + vessel.verticalSpeed.ToString());
                                    Log.Info("FlightGlobals.ship_altitude: " + FlightGlobals.ship_altitude.ToString());
                                    Log.Info("FlightGlobals.ship_altitude  / -vessel.verticalSpeed: " + (FlightGlobals.ship_altitude / -vessel.verticalSpeed).ToString());
                                }
                            }
                        }
                    }

                    if (this.specialScene || this.precrash || dualScreenshots == 1 ||
                        (                     /*AS.configuration.screenshotAtIntervals && */
                            ((this.newScene && this.sceneReady && Time.realtimeSinceStartup - lastSceneUpdate > 1) ||
                             ((Time.realtimeSinceStartup - lastUpdate) > configuration.screenshotInterval)
                            )
                        ))
                    {
                        Log.Info("Taking screenshot");
                        newScene          = false;
                        this.specialScene = false;

                        lastUpdate = Time.realtimeSinceStartup;
                        //check if directory doesn't exist
                        if (!System.IO.Directory.Exists(FileOperations.ScreenshotFolder()))
                        {
                            //if it doesn't, try to create it
                            try {
                                System.IO.Directory.CreateDirectory(FileOperations.ScreenshotFolder());
                            } catch (Exception e) {
                                Log.Error("Exception trying to create directory: " + e);
                                return;
                            }
                        }
                        do
                        {
                            cnt++;
                            string s = AddInfo(configuration.filename, cnt, sceneReady, specialScene, precrash);

                            pngName = configuration.screenshotPath + s + ".png";
                            jpgName = configuration.screenshotPath + s + ".jpg";
                        } while (System.IO.File.Exists(pngName) || System.IO.File.Exists(jpgName));

                        this.precrash = false;

                        //
                        // I make the assumption that if the player wants the gui during the screenshot, then
                        // it will be left visible.
                        //
                        wasUIVisible = uiVisiblity.isVisible() | configuration.guiOnScreenshot;
                        //Log.Info ("Update: Screenshotfolder:" + pngName);
                        if (configuration.noGUIOnScreenshot == true)
                        {
                            GameEvents.onHideUI.Fire();
                        }
                        if (configuration.noGUIOnScreenshot && configuration.guiOnScreenshot)
                        {
                            if (dualScreenshots == 0)
                            {
                                dualScreenshots = 1;
                            }
                            else if (dualScreenshots == 1)
                            {
                                dualScreenshots = 0;
                                GameEvents.onShowUI.Fire();
                            }
                        }
                        screenshotTaken = true;
                        screenshotFile  = pngName;
                        //
                        // If Historian is available, then tell it to activate
                        //
                        Version.set_m_Active();
                        Application.CaptureScreenshot(pngName);

                        if (configuration.convertToJPG)
                        {
                            pngToConvert = pngName;
                        }
                    }
                }
            }
        }