From be59b9526871964a8432d41ea901ad4719de5953 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 9 Jun 2016 22:14:05 +1000 Subject: [PATCH] Keep all .lvl.prev files in a separate levels/prev directory. --- Levels/Level.cs | 17 ++++++++--------- Levels/LevelInfo.cs | 4 ++++ Server/Server.Tasks.cs | 24 ++++++++++++++++++++++++ Server/Server.cs | 1 + 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/Levels/Level.cs b/Levels/Level.cs index 1502200e2..eab2d36a3 100644 --- a/Levels/Level.cs +++ b/Levels/Level.cs @@ -541,16 +541,17 @@ public void Save(bool Override = false, bool clearPhysics = false) { if (!Directory.Exists("levels")) Directory.CreateDirectory("levels"); if (!Directory.Exists("levels/level properties")) Directory.CreateDirectory("levels/level properties"); - - if (changed || !File.Exists(path) || Override || (physicschanged && clearPhysics)) - { + if (!Directory.Exists("levels/prev")) Directory.CreateDirectory("levels/prev"); + + if (changed || !File.Exists(path) || Override || (physicschanged && clearPhysics)) { if (clearPhysics) ClearPhysics(); if (File.Exists(path)) { - if (File.Exists(path + ".prev")) - File.Delete(path + ".prev"); - File.Copy(path, path + ".prev"); + string prevPath = LevelInfo.PrevPath(name); + if (File.Exists(prevPath)) + File.Delete(prevPath); + File.Copy(path, prevPath, true); File.Delete(path); } LvlFile.Save(this, path + ".backup"); @@ -560,9 +561,7 @@ public void Save(bool Override = false, bool clearPhysics = false) Server.s.Log(string.Format("SAVED: Level \"{0}\". ({1}/{2}/{3})", name, players.Count, PlayerInfo.Online.Count, Server.players)); changed = false; - } - else - { + } else { Server.s.Log("Skipping level save for " + name + "."); } } catch (Exception e) { diff --git a/Levels/LevelInfo.cs b/Levels/LevelInfo.cs index 97514f494..2dd9ecfd0 100644 --- a/Levels/LevelInfo.cs +++ b/Levels/LevelInfo.cs @@ -88,6 +88,10 @@ public static string LevelPath(string name) { return "levels/" + name.ToLower() + ".lvl"; } + public static string PrevPath(string name) { + return "levels/prev/" + name.ToLower() + ".lvl.prev"; + } + public static string BackupPath(string name, string backup) { return Server.backupLocation + "/" + name + "/" + backup + "/" + name + ".lvl"; } diff --git a/Server/Server.Tasks.cs b/Server/Server.Tasks.cs index 85952278f..9a2888c71 100644 --- a/Server/Server.Tasks.cs +++ b/Server/Server.Tasks.cs @@ -112,6 +112,30 @@ static void AutoLoadLineProcessor(string key, string value) { } } } + + void MovePreviousLevelFiles() { + if (!Directory.Exists("levels")) return; + try { + string[] files = Directory.GetFiles("levels", "*.prev"); + if (files.Length == 0) return; + if (!Directory.Exists("levels/prev")) + Directory.CreateDirectory("levels/prev"); + + foreach (string file in files) { + string name = Path.GetFileName(file); + string newFile = "levels/prev/" + name; + + try { + File.Move(file, newFile); + } catch (Exception ex) { + Server.s.Log("Error while trying to move .lvl.prev file"); + Server.ErrorLog(ex); + } + } + } catch (Exception ex) { + Server.ErrorLog(ex); + } + } void SetupSocket() { Log("Creating listening socket on port " + port + "... "); diff --git a/Server/Server.cs b/Server/Server.cs index 903b5b5b9..f9015a8f3 100644 --- a/Server/Server.cs +++ b/Server/Server.cs @@ -479,6 +479,7 @@ public void Start() { Plugin.Load(); ml.Queue(LoadPlayerLists); ml.Queue(LoadAutoloadCommands); + ml.Queue(MovePreviousLevelFiles); ml.Queue(SetupSocket); ml.Queue(InitTimers);