Esempio n. 1
0
        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
        }
Esempio n. 2
0
        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;
            }
        }