/// <summary> /// если пришло время сохранить настройки автоматически - сделать это /// </summary> private void CheckAutosave() { if (!terminalIsLoaded) { return; } if (!workspaceIsLoadedOk) { return; } var timeSaved = timeLastAutosave.GetLastHit(); var deltaMils = (DateTime.Now - timeSaved).TotalMilliseconds; if (deltaMils < autosaveIntervalMils) { return; } // если нет изменений if (!SettingsAutosaver.AreSettingsUpdated(timeSaved)) { return; } // выполнить автосохранение var fileName = string.Format(AutosaveFileFormat, timeStarted, DateTime.Now); // почистить старые файлы автосохранения if (PerformAutosave(fileName)) { SettingsAutosaver.CleanupAutosaves(autosaveFolder, maxAutosaveSessions); } // обновить время последнего сохранения timeLastAutosave.Touch(); }
public void PackAndSaveSettingsFiles() { const string zipName = "1111111111_1111111111.zip"; // Временные файлы не генерируются на лету, а копируются File.Copy(Path.Combine(testFileFolderPath, "indicator.xml"), Path.Combine(autosaveFolderPath, "indicator.xml")); File.Copy(Path.Combine(testFileFolderPath, "objects.xml"), Path.Combine(autosaveFolderPath, "objects.xml")); File.Copy(Path.Combine(testFileFolderPath, "settings.xml"), Path.Combine(autosaveFolderPath, "settings.xml")); SettingsAutosaver.PackAndSaveSettingsFiles(autosaveFolderPath, Path.Combine(autosaveFolderPath, zipName), false); var residualFilesXml = Directory.GetFiles(autosaveFolderPath, "*.xml"); Assert.AreEqual(3, residualFilesXml.Length); var residualFilesZip = Directory.GetFiles(autosaveFolderPath, "*.zip"); Assert.AreEqual(1, residualFilesZip.Length); // Удаляем временные файлы SettingsAutosaver.DeleteTempSettingsFileInAutosaveFolder(autosaveFolderPath); // после всей процедуры в папке "autosave" должен появиться на 1 архив больше и не должно остаться xml файлов residualFilesXml = Directory.GetFiles(autosaveFolderPath, "*.xml"); Assert.AreEqual(0, residualFilesXml.Length); residualFilesZip = Directory.GetFiles(autosaveFolderPath, "*.zip"); Assert.AreEqual(1, residualFilesZip.Length); }
public bool PerformAutosave(string fileName) { if (!EnsureAutosavePath(autosaveFolder)) { return(false); } var targetFilePath = autosaveFolder + '\\' + fileName; // сохранить настройки во временную папку SaveCurrentSettings(autosaveFolder, true); // упаковать настройки в файл var result = SettingsAutosaver.PackAndSaveSettingsFiles(autosaveFolder, targetFilePath, false); // удалить временные файлы SettingsAutosaver.DeleteTempSettingsFileInAutosaveFolder(autosaveFolder); return(result); }
public void AreSettingsUpdated() { var timeLastSaved = UserSettings.Instance.lastTimeModified.GetLastHitIfHitted() ?? DateTime.Now.AddDays(-1); var areUpdated = SettingsAutosaver.AreSettingsUpdated(timeLastSaved); Assert.IsFalse(areUpdated, "AreSettingsUpdated - обновления еще не было"); UserSettings.Instance.WindowSize = new Size(10, 10); areUpdated = SettingsAutosaver.AreSettingsUpdated(timeLastSaved); Assert.IsTrue(areUpdated, "AreSettingsUpdated - обновление таки имело место"); timeLastSaved = UserSettings.Instance.lastTimeModified.GetLastHit(); var chart = new CandleChartControl(); chart.ActivateIndiAddEvent(new FiboForkIndicator()); areUpdated = SettingsAutosaver.AreSettingsUpdated(timeLastSaved); Assert.IsTrue(areUpdated, "AreSettingsUpdated - обновление имело место - были обновлены индюки"); }
public void CleanupAutosaves() { var zipFileNames = new[] { "2703165731_2703170058.zip", "2703165731_2703170118.zip", "2703165731_2703170408.zip", "2703165731_2703170434.zip", "2703165731_2703170633.zip" }; foreach (var zipFileName in zipFileNames) { File.Copy(Path.Combine(testFileFolderPath, zipFileName), Path.Combine(autosaveFolderPath, zipFileName)); } SettingsAutosaver.CleanupAutosaves(autosaveFolderPath, 4); var residualFiles = Directory.GetFiles(autosaveFolderPath); Assert.AreEqual(4, residualFiles.Length); foreach (var residualFile in residualFiles) { if (!zipFileNames.Skip(1).Contains(residualFile.Split('\\').Last())) { Assert.Fail("файл с именем {0} не должен был быть удалён", residualFile); } } }