diff --git a/BackupManager/BackupManager.csproj b/BackupManager/BackupManager.csproj index 300b3dc..3c0adc5 100644 --- a/BackupManager/BackupManager.csproj +++ b/BackupManager/BackupManager.csproj @@ -2,7 +2,7 @@ Exe - net5.0 + net6.0 diff --git a/BackupManager/Config.cs b/BackupManager/Config.cs index dfd2506..3724bc0 100644 --- a/BackupManager/Config.cs +++ b/BackupManager/Config.cs @@ -1,7 +1,5 @@ -namespace BackupManager -{ - public class Config - { +namespace BackupManager { + public class Config { public string FileSystemPathV2 { get; set; } public string MySqlDumpPathWindows { get; set; } = @"C:\Program Files\MariaDB 10.3\bin\mysqldump.exe"; diff --git a/BackupManager/Program.cs b/BackupManager/Program.cs index 459a977..bcc20f7 100644 --- a/BackupManager/Program.cs +++ b/BackupManager/Program.cs @@ -15,7 +15,7 @@ using System.Xml.Serialization; namespace BackupManager { public static class Program { - public readonly static Stopwatch sw = new Stopwatch(); + public readonly static Stopwatch sw = new(); private const string CONFIG_NAME = @"FlashiiBackupManager.v1.xml"; @@ -39,17 +39,17 @@ namespace BackupManager { ? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), @"Backups") : Config.FileSystemPathV2; - public static bool Headless; + private static bool Headless; public static string WindowsToUnixPath(this string path) { return IsWindows ? path.Replace('\\', '/') : path; } public static Stream ToXml(this object obj, bool pretty = false) { - MemoryStream ms = new MemoryStream(); - XmlSerializer xs = new XmlSerializer(obj.GetType()); + MemoryStream ms = new(); + XmlSerializer xs = new(obj.GetType()); - using (XmlWriter xw = XmlWriter.Create(ms, new XmlWriterSettings { Indent = pretty })) + using(XmlWriter xw = XmlWriter.Create(ms, new XmlWriterSettings { Indent = pretty })) xs.Serialize(xw, obj); ms.Seek(0, SeekOrigin.Begin); @@ -57,24 +57,24 @@ namespace BackupManager { } public static T FromXml(Stream xml) { - if (xml.CanSeek) + if(xml.CanSeek) xml.Seek(0, SeekOrigin.Begin); - XmlSerializer xs = new XmlSerializer(typeof(T)); + XmlSerializer xs = new(typeof(T)); return (T)xs.Deserialize(xml); } public static void SaveConfig() { Log(@"Saving configuration..."); - using (FileStream fs = new FileStream(ConfigPath, FileMode.Create, FileAccess.Write)) - using (Stream cs = Config.ToXml(true)) - cs.CopyTo(fs); + using FileStream fs = new(ConfigPath, FileMode.Create, FileAccess.Write); + using Stream cs = Config.ToXml(true); + cs.CopyTo(fs); } public static void LoadConfig() { Log(@"Loading configuration..."); - using (FileStream fs = File.OpenRead(ConfigPath)) - Config = FromXml(fs); + using FileStream fs = File.OpenRead(ConfigPath); + Config = FromXml(fs); } public static void Main(string[] args) { @@ -83,7 +83,7 @@ namespace BackupManager { Log(@"Flashii Backup Manager"); sw.Start(); - if (!File.Exists(ConfigPath)) { + if(!File.Exists(ConfigPath)) { Config = new Config(); SaveConfig(); Error(@"No configuration file exists, created a blank one. Be sure to fill it out properly."); @@ -91,12 +91,12 @@ namespace BackupManager { LoadConfig(); - if (!Directory.Exists(BackupStore)) + if(!Directory.Exists(BackupStore)) Directory.CreateDirectory(BackupStore); Log(@"Fetching database list..."); - MySqlConnectionStringBuilder connStr = new MySqlConnectionStringBuilder { + MySqlConnectionStringBuilder connStr = new() { Server = Config.MySqlHost, UserID = Config.MySqlUser, Password = Config.MySqlPass, @@ -104,16 +104,16 @@ namespace BackupManager { SslMode = MySqlSslMode.None, }; - List databases = new List(); + List databases = new(); string[] exclude = Config.MySqlExcludeDatabases.Split(' '); - using (MySqlConnection conn = new MySqlConnection(connStr.ToString())) { + using(MySqlConnection conn = new(connStr.ToString())) { conn.Open(); using(MySqlCommand comm = new(@"SET NAMES 'utf8mb4';", conn)) comm.ExecuteNonQuery(); - using(MySqlCommand comm = new MySqlCommand(@"SHOW DATABASES;", conn)) + using(MySqlCommand comm = new(@"SHOW DATABASES;", conn)) using(MySqlDataReader read = comm.ExecuteReader()) { while(read.Read()) { string database = read.GetString(0); @@ -130,37 +130,37 @@ namespace BackupManager { string archivePath = Path.GetTempFileName(); - using (FileStream fs = File.OpenWrite(archivePath)) - using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Create)) { + using(FileStream fs = File.OpenWrite(archivePath)) + using(ZipArchive archive = new(fs, ZipArchiveMode.Create)) { Log(@"Database backup..."); string sqldefaults = Path.GetTempFileName(); - using (FileStream sqlConfFs = File.Open(sqldefaults, FileMode.Open, FileAccess.ReadWrite)) - using (StreamWriter sw = new StreamWriter(sqlConfFs)) { + using(FileStream sqlConfFs = File.Open(sqldefaults, FileMode.Open, FileAccess.ReadWrite)) + using(StreamWriter sw = new(sqlConfFs)) { sw.WriteLine(@"[client]"); sw.WriteLine($@"user={Config.MySqlUser}"); sw.WriteLine($@"password={Config.MySqlPass}"); sw.WriteLine(@"default-character-set=utf8mb4"); } - foreach (string database in databases) + foreach(string database in databases) CreateDbDump(archive, sqldefaults, database); Log($@"MariaDB dump done."); File.Delete(sqldefaults); - if (!string.IsNullOrWhiteSpace(Config.MisuzuPath) + if(!string.IsNullOrWhiteSpace(Config.MisuzuPath) && Directory.Exists(Config.MisuzuPath)) { Log(@"Filesystem backup..."); string mszConfig = Path.Combine(Config.MisuzuPath, @"config/config.ini"); - if (!File.Exists(mszConfig)) + if(!File.Exists(mszConfig)) Error(@"Could not find Misuzu config."); string mszStore = Path.Combine(Config.MisuzuPath, @"store"); - if (!Directory.Exists(mszStore)) + if(!Directory.Exists(mszStore)) Error(@"Could not find Misuzu storage directory."); CreateMisuzuDataBackup(archive, mszConfig, mszStore); @@ -181,8 +181,8 @@ namespace BackupManager { } public static void Log(object line, bool forceSatori = false) { - if (!Headless) { - if (sw?.IsRunning == true) { + if(!Headless) { + if(sw?.IsRunning == true) { ConsoleColor fg = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Yellow; Console.Write(sw.ElapsedMilliseconds.ToString().PadRight(10)); @@ -192,12 +192,12 @@ namespace BackupManager { Console.WriteLine(line); } - if (forceSatori || (!Headless && !(Config?.SatoriErrorsOnly ?? true))) + if(forceSatori || (!Headless && !(Config?.SatoriErrorsOnly ?? true))) SatoriBroadcast(line.ToString()); } public static void Error(object line, int exit = 0x00DEAD00) { - if (!Headless) { + if(!Headless) { Console.ForegroundColor = ConsoleColor.Red; Log(line); Console.ResetColor(); @@ -219,7 +219,7 @@ namespace BackupManager { string[] storeFiles = Directory.GetFiles(storePath, @"*", SearchOption.AllDirectories); - foreach (string file in storeFiles) + foreach(string file in storeFiles) archive.CreateEntryFromFile( file, @"misuzu/store/" + file.Replace(storePath, string.Empty).WindowsToUnixPath().Trim('/'), @@ -232,7 +232,7 @@ namespace BackupManager { string sqldump = Path.GetTempFileName(); - StringBuilder mysqldumpArgs = new StringBuilder(); + StringBuilder mysqldumpArgs = new(); mysqldumpArgs.AppendFormat(@"--defaults-file={0} ", defaults); mysqldumpArgs.Append(@"--single-transaction "); mysqldumpArgs.Append(@"--tz-utc --triggers "); @@ -262,7 +262,7 @@ namespace BackupManager { } public static void SatoriBroadcast(string text, bool error = false) { - if (string.IsNullOrEmpty(text) + if(string.IsNullOrEmpty(text) || Config == null || string.IsNullOrWhiteSpace(Config.SatoriHost) || string.IsNullOrWhiteSpace(Config.SatoriSecret) @@ -282,7 +282,7 @@ namespace BackupManager { } } - if (ip == null) + if(ip == null) return; EndPoint endPoint = new IPEndPoint(ip, Config.SatoriPort); diff --git a/do-backup.sh b/do-backup.sh index 4af1438..a8c048d 100755 --- a/do-backup.sh +++ b/do-backup.sh @@ -1,5 +1,2 @@ -cwd="$(pwd)" export DOTNET_CLI_TELEMETRY_OPTOUT=1 -cd "$(dirname "$0")" dotnet run --project BackupManager -c Release -f net6.0 -- -cron -cd "$cwd"