internal static string BackupAddons(List <string> _AddonNames, WowVersionEnum _WowVersion, AddonBackupMode _BackupMode = AddonBackupMode.BackupWTF_And_AddonFiles) { int fileID = System.Threading.Interlocked.Increment(ref g_UniqueFileIDCounter); string backupFileName = StaticValues.LauncherBackupsDirectory + DateTime.Now.ToString("yyyy_MM_dd") + "/BackupAddons_" + DateTime.Now.ToString("HH_mm_ss") + "." + fileID + ".zip"; Utility.AssertFilePath(backupFileName); ZipFile zipFile; if (System.IO.File.Exists(backupFileName) == true) { backupFileName = Utility.ConvertToUniqueFilename(backupFileName, '.'); } if (System.IO.File.Exists(backupFileName) == true) { throw new Exception("Backup file already exists"); } zipFile = ZipFile.Create(backupFileName); zipFile.BeginUpdate(); foreach (var addonName in _AddonNames) { if (_BackupMode.HasFlag(AddonBackupMode.BackupWTF)) { string wtfAccStartPath = Settings.GetWowDirectory(_WowVersion); var savedVariableFiles = WowUtility.GetPerCharacterSavedVariableFilePaths(addonName, _WowVersion); savedVariableFiles.AddRange(WowUtility.GetSavedVariableFilePaths(addonName, _WowVersion)); foreach (string savedVariableFile in savedVariableFiles) { zipFile.Add(savedVariableFile, savedVariableFile.Substring(wtfAccStartPath.Length)); } } if (_BackupMode.HasFlag(AddonBackupMode.BackupAddonFiles)) { if (System.IO.Directory.Exists(Settings.GetWowDirectory(_WowVersion) + "Interface\\AddOns\\" + addonName)) { zipFile.AddDirectoryFilesRecursive(Settings.GetWowDirectory(_WowVersion), Settings.GetWowDirectory(_WowVersion) + "Interface\\AddOns\\" + addonName); } } } zipFile.CommitUpdate(); zipFile.Close(); return(backupFileName); }