static Logger() { // Set log level //LogLevel = (Status)Properties.Settings.Default.LogLevel; LogLevel = Status.Info; string logsDir = GetLogsDirectory(); // Create log filename with timestamp LogFilePath = Path.Combine(logsDir, string.Format("tc-{0}.log", DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss"))); // Start log writer GHelper.SafeThreadStart(() => StartLogWriter()); // Application exit event Application.Current.Exit += Application_Exit; // Clean log files older than 6 months GHelper.SafeThreadStart(() => CleanLogs()); }
public static void UpdateProfiles() { // Update Profiles from https://github.com/NotCoffee418/TrinityCreatorProfiles Logger.Log("Updater: Updating Profiles from GitHub."); // Get relevant directories string sysProfilesDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "NotCoffee418", "TrinityCreator", "Profiles"); string usrProfilesDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "TrinityCreator", "Profiles"); string tmpDir = Path.Combine(Path.GetTempPath(), "tc-" + GHelper.RandomString(6)); // Download repository, update any new files try { // Generate user profile directory if it doesn't exist (this function doesn't affect this folder aside from creating it) if (!Directory.Exists(usrProfilesDir)) { Directory.CreateDirectory(usrProfilesDir); } // Generate system profile directory if it doesn't exist if (!Directory.Exists(sysProfilesDir)) { Directory.CreateDirectory(sysProfilesDir); } // Generate tmp directory if it doesn't exist if (!Directory.Exists(tmpDir)) { Directory.CreateDirectory(tmpDir); } // Download latest version of profiles string zipPath = Path.Combine(tmpDir, "latest.zip"); string sourceUrl = "https://github.com/NotCoffee418/TrinityCreatorProfiles/archive/master.zip"; Logger.Log("Updater: Downloading updated profiles from '" + sourceUrl); using (var client = new WebClient()) { client.DownloadFile(sourceUrl, zipPath); } // Extract download & delete zip Logger.Log("Updater: Extracting downloaded profiles and cleaning zip. Path: " + tmpDir); ZipFile.ExtractToDirectory(zipPath, tmpDir); File.Delete(zipPath); // Check each file to see if it's updated (using revision) Logger.Log("Updater: Installing updated profiles..."); bool isOutdatedTcForProfiles = false; foreach (string tmpFilePath in Directory.GetFiles(Path.Combine(tmpDir, "TrinityCreatorProfiles-master"))) { string fileName = Path.GetFileName(tmpFilePath); string profileDestPath = Path.Combine(sysProfilesDir, fileName); Logger.Log("Checking for new version on " + fileName); if (!File.Exists(profileDestPath)) { Logger.Log(fileName + ": is a new profile. Installing..."); File.Copy(tmpFilePath, profileDestPath); } else // profile exists, check if it's a new version { Profile localVer = Profile.LoadFile(profileDestPath, false); // Not error display, versions for older version of app will default to rev 0 Profile remoteVer = Profile.LoadFile(tmpFilePath, true); // display error, if the downloaded version is corrupt, we have an issue if (remoteVer.Revision > localVer.Revision) // New version found, install { Logger.Log($"Updater: {fileName} - New version found."); int runningAppBuild = Assembly.GetExecutingAssembly().GetName().Version.Revision; if (remoteVer.TestedBuild > runningAppBuild) // profile may not support this version of Tcreator { // used to show warning, doesn't update isOutdatedTcForProfiles = true; Logger.Log($"Updater: Profile {fileName} was tested on a newer version of Trinity Creator. Not updating or installing local file.", Logger.Status.Warning, false); } else { Logger.Log($"Updater: Updating {fileName} from revision {localVer.Revision} to {remoteVer.Revision}."); File.Copy(tmpFilePath, profileDestPath, overwrite: true); } } else // Up to date { Logger.Log($"{fileName}: Up to date."); } } } // Show warning profiles are newer than build if (isOutdatedTcForProfiles) { Logger.Log("Profile: Some profiles were not installed or updated as this version of Trinity Creator may not support them." + Environment.NewLine + "Please update Trinity Creator to resolve this issue. (Help > Check for updates)", Logger.Status.Warning, true); } } catch (Exception ex) { Logger.Log("Failed to update profiles from GitHub: " + ex.Message, Logger.Status.Warning, true); } finally { // Delete temp dir if (Directory.Exists(tmpDir)) { Directory.Delete(tmpDir, recursive: true); } } }