public static MenuLayout Load(string filePath) { MenuLayout menuLayout = null; #if MEASURE_LOAD_PERFORMANCE var stopwatch = System.Diagnostics.Stopwatch.StartNew(); try { #endif // MEASURE_LOAD_PERFORMANCE var path = string.Intern(filePath); lock (path) { using (var fileStream = FileUtilities.OpenFileStream(filePath)) { var overrides = GetAttributeOverrides(); var serializer = new System.Xml.Serialization.XmlSerializer(typeof(MenuLayout), overrides, new System.Type[] { typeof(FileNode), typeof(MenuLayout), typeof(Folder), typeof(Program) }, null, null); menuLayout = serializer.Deserialize(fileStream) as MenuLayout; menuLayout.LoadComplete(false); return(menuLayout); } } #if MEASURE_LOAD_PERFORMANCE } finally { stopwatch.Stop(); DebugMessage("Load " + filePath + " took " + stopwatch.Elapsed.ToString()); if (menuLayout != null) { menuLayout.Logger.Log("Load: " + filePath + " took " + stopwatch.Elapsed.ToString()); } } #endif // MEASURE_LOAD_PERFORMANCE }
private static void BackupFileSystem(AsyncTaskData taskData) { var data = (ExecuteDeviceCommandAsyncTaskData)taskData; var succeeded = false; try { var configuration = SingleInstanceApplication.Instance.GetConfiguration <Configuration>(); var romsConfiguration = SingleInstanceApplication.Instance.GetConfiguration <INTV.Shared.Model.RomListConfiguration>(); var roms = SingleInstanceApplication.Instance.Roms; var device = data.Device; data.UpdateTaskProgress(0, Resources.Strings.DeviceMultistageCommand_BackupFileSystem_Syncing); var deviceFileSystemFlags = GetDirtyFlags.Instance.Execute <LfsDirtyFlags>(device.Port, data); // Always re-fetch the file system. When we're done, tell the UI to refresh. var fileSystem = DownloadFileSystemTables.Instance.Execute <FileSystem>(device.Port, data); fileSystem.Status = deviceFileSystemFlags; data.Result = new FileSystemSyncErrors(deviceFileSystemFlags); // Retrieve the forks. var backupDirectory = data.Data as string; var forksToBackup = fileSystem.Forks.Where(f => f != null); if (forksToBackup.Any() && !data.AcceptCancelIfRequested()) { var forkFileNames = new List <string>(); foreach (var fork in forksToBackup) { bool dontCare; var backupDir = backupDirectory; // we don't want to modify backupDirectory var fileName = GetPathForFork(data, fork, fileSystem, roms, romsConfiguration, ref backupDir, out dontCare); fileName = System.IO.Path.GetFileName(fileName); forkFileNames.Add(fileName); } succeeded = device.RetrieveForkData(data, forksToBackup, backupDirectory, forkFileNames); } else { succeeded = data.CancelRequsted; } if (succeeded && !data.AcceptCancelIfRequested()) { data.UpdateTaskProgress(0, Resources.Strings.DeviceMultistageCommand_BackupFileSystem_CreatingMenuLayout); var menuBackupPath = System.IO.Path.Combine(backupDirectory, configuration.DefaultMenuLayoutFileName); var menuLayout = new MenuLayout(fileSystem, device.UniqueId); menuLayout.LoadComplete(false); menuLayout.Save(menuBackupPath, true); } else if (data.CancelRequsted && succeeded) { succeeded = true; } } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); succeeded = false; if (!string.IsNullOrWhiteSpace(data.FailureMessage)) { var builder = new System.Text.StringBuilder(Resources.Strings.DeviceMultistageCommand_BackupFileSystem_Failed); builder.AppendLine().AppendLine(data.FailureMessage); data.FailureMessage = builder.ToString(); } else { data.FailureMessage = Resources.Strings.DeviceMultistageCommand_BackupFileSystem_Failed; } throw; } finally { data.Succeeded = succeeded; } }