public override bool Rollback()
        {
            if (string.IsNullOrEmpty(_destinationFile))
            {
                return(true);
            }
            if (!File.Exists(_backupFile))
            {
                return(false);
            }

            // Copy the backup copy back to its original position
            if (File.Exists(_destinationFile))
            {
                if (FileSystem.AreFileContentsEqual(_backupFile, _destinationFile))
                {
                    return(true);
                }
                File.Delete(_destinationFile);
            }
            File.Copy(_backupFile, _destinationFile, true);

            return(true);
        }
Exemple #2
0
        private List <GameField> GetDisplayDiffFields(Game oldGame, ComparableMetadatGameData newGame)
        {
            var diffFields = new List <GameField>();

            void checkListChanged <T>(List <T> oldData, List <T> newData, GameField field) where T : DatabaseObject
            {
                if (!oldData.HasItems() && newData.HasItems())
                {
                    diffFields.Add(field);
                    return;
                }

                if (newData.HasItems() && oldData.HasItems() && !oldData.Select(a => a.Id).IsListEqual(newData.Select(b => b.Id)))
                {
                    diffFields.Add(field);
                }
            }

            //void checkItemChanged<T>(T source, string other, GameField field) where T : DatabaseObject
            //{
            //    if (!other.IsNullOrEmpty())
            //    {
            //        if (source != null && !string.Equals(source.Name, other, StringComparison.OrdinalIgnoreCase))
            //        {
            //            diffFields.Add(field);
            //        }
            //    }
            //}

            if (!newGame.Name.IsNullOrEmpty())
            {
                if (!oldGame.Name.IsNullOrEmpty() && !string.Equals(oldGame.Name, newGame.Name, StringComparison.OrdinalIgnoreCase))
                {
                    diffFields.Add(GameField.Name);
                }
            }

            if (!newGame.Description.IsNullOrEmpty())
            {
                if (!oldGame.Description.IsNullOrEmpty() && !string.Equals(oldGame.Description, newGame.Description, StringComparison.Ordinal))
                {
                    diffFields.Add(GameField.Description);
                }
            }

            checkListChanged(oldGame.AgeRatings, newGame.AgeRatings, GameField.AgeRatings);
            checkListChanged(oldGame.Regions, newGame.Regions, GameField.Regions);
            checkListChanged(oldGame.Series, newGame.Series, GameField.Series);
            checkListChanged(oldGame.Platforms, newGame.Platforms, GameField.Platforms);
            checkListChanged(oldGame.Developers, newGame.Developers, GameField.Developers);
            checkListChanged(oldGame.Publishers, newGame.Publishers, GameField.Publishers);
            checkListChanged(oldGame.Genres, newGame.Genres, GameField.Genres);
            checkListChanged(oldGame.Tags, newGame.Tags, GameField.Tags);
            checkListChanged(oldGame.Features, newGame.Features, GameField.Features);

            if (newGame.ReleaseDate != null)
            {
                if (oldGame.ReleaseDate != null && oldGame.ReleaseDate != newGame.ReleaseDate)
                {
                    diffFields.Add(GameField.ReleaseDate);
                }
            }

            if (newGame.Links.HasItems())
            {
                if (oldGame.Links.HasItems() && !oldGame.Links.IsListEqualExact(newGame.Links))
                {
                    diffFields.Add(GameField.Links);
                }
            }

            if (newGame.CriticScore != null)
            {
                if (oldGame.CriticScore != null && oldGame.CriticScore != newGame.CriticScore)
                {
                    diffFields.Add(GameField.CriticScore);
                }
            }

            if (newGame.CommunityScore != null)
            {
                if (oldGame.CommunityScore != null && oldGame.CommunityScore != newGame.CommunityScore)
                {
                    diffFields.Add(GameField.CommunityScore);
                }
            }

            if (newGame.Icon != null && !oldGame.Icon.IsNullOrEmpty())
            {
                var newIcon = ProcessMetadataFile(newGame.Icon, tempIconFileName);
                if (newIcon != null)
                {
                    var currentPath = ImageSourceManager.GetImagePath(EditingGame.Icon);
                    if (currentPath.IsNullOrEmpty() ||
                        !File.Exists(currentPath) ||
                        !FileSystem.AreFileContentsEqual(newIcon, currentPath))
                    {
                        newGame.Icon = new MetadataFile(newIcon);
                        diffFields.Add(GameField.Icon);
                    }
                    else
                    {
                        newGame.Icon = null;
                    }
                }
                else
                {
                    newGame.Icon = null;
                }
            }

            if (newGame.CoverImage != null && !oldGame.CoverImage.IsNullOrEmpty())
            {
                var newCover = ProcessMetadataFile(newGame.CoverImage, tempCoverFileName);
                if (newCover != null)
                {
                    var currentPath = ImageSourceManager.GetImagePath(EditingGame.CoverImage);
                    if (currentPath.IsNullOrEmpty() ||
                        !File.Exists(currentPath) ||
                        !FileSystem.AreFileContentsEqual(newCover, currentPath))
                    {
                        newGame.CoverImage = new MetadataFile(newCover);
                        diffFields.Add(GameField.CoverImage);
                    }
                    else
                    {
                        newGame.CoverImage = null;
                    }
                }
                else
                {
                    newGame.CoverImage = null;
                }
            }

            if (newGame.BackgroundImage != null && !oldGame.BackgroundImage.IsNullOrEmpty())
            {
                var newBack = ProcessMetadataFile(newGame.BackgroundImage, tempBackgroundFileName);
                if (newBack != null)
                {
                    var currentPath = ImageSourceManager.GetImagePath(EditingGame.BackgroundImage);
                    if (currentPath.IsNullOrEmpty() ||
                        !File.Exists(currentPath) ||
                        !FileSystem.AreFileContentsEqual(newBack, currentPath))
                    {
                        newGame.BackgroundImage = new MetadataFile(newBack);
                        diffFields.Add(GameField.BackgroundImage);
                    }
                    else
                    {
                        newGame.BackgroundImage = null;
                    }
                }
                else
                {
                    newGame.BackgroundImage = null;
                }
            }

            return(diffFields);
        }
        private List <GameField> GetDisplayDiffFields(Game testGame, GameMetadata metadata)
        {
            var diffFields = new List <GameField>();
            var newInfo    = metadata.GameInfo;

            void checkListChanged <T>(List <T> source, List <string> other, GameField field) where T : DatabaseObject
            {
                if (other.HasNonEmptyItems())
                {
                    if (source.HasItems() && !source.Select(a => a.Name).IsListEqual(other, new GameFieldComparer()))
                    {
                        diffFields.Add(field);
                    }
                }
            }

            void checkItemChanged <T>(T source, string other, GameField field) where T : DatabaseObject
            {
                if (!other.IsNullOrEmpty())
                {
                    if (source != null && !string.Equals(source.Name, other, StringComparison.OrdinalIgnoreCase))
                    {
                        diffFields.Add(field);
                    }
                }
            }

            if (!newInfo.Name.IsNullOrEmpty())
            {
                if (!testGame.Name.IsNullOrEmpty() && !string.Equals(testGame.Name, newInfo.Name, StringComparison.OrdinalIgnoreCase))
                {
                    diffFields.Add(GameField.Name);
                }
            }

            if (!newInfo.Description.IsNullOrEmpty())
            {
                if (!testGame.Description.IsNullOrEmpty() && !string.Equals(testGame.Description, newInfo.Description, StringComparison.Ordinal))
                {
                    diffFields.Add(GameField.Description);
                }
            }

            checkItemChanged(testGame.AgeRating, newInfo.AgeRating, GameField.AgeRating);
            checkItemChanged(testGame.Region, newInfo.Region, GameField.Region);
            checkItemChanged(testGame.Series, newInfo.Series, GameField.Series);
            checkItemChanged(testGame.Platform, newInfo.Platform, GameField.Platform);

            checkListChanged(testGame.Developers, newInfo.Developers, GameField.Developers);
            checkListChanged(testGame.Publishers, newInfo.Publishers, GameField.Publishers);
            checkListChanged(testGame.Genres, newInfo.Genres, GameField.Genres);
            checkListChanged(testGame.Tags, newInfo.Tags, GameField.Tags);
            checkListChanged(testGame.Features, newInfo.Features, GameField.Features);

            if (newInfo.ReleaseDate != null)
            {
                if (testGame.ReleaseDate != null && testGame.ReleaseDate != newInfo.ReleaseDate)
                {
                    diffFields.Add(GameField.ReleaseDate);
                }
            }

            if (newInfo.Links.HasItems())
            {
                if (testGame.Links.HasItems() && !testGame.Links.IsListEqualExact(newInfo.Links))
                {
                    diffFields.Add(GameField.Links);
                }
            }

            if (newInfo.CriticScore != null)
            {
                if (testGame.CriticScore != null && testGame.CriticScore != newInfo.CriticScore)
                {
                    diffFields.Add(GameField.CriticScore);
                }
            }

            if (newInfo.CommunityScore != null)
            {
                if (testGame.CommunityScore != null && testGame.CommunityScore != newInfo.CommunityScore)
                {
                    diffFields.Add(GameField.CommunityScore);
                }
            }

            if (metadata.Icon != null && !testGame.Icon.IsNullOrEmpty())
            {
                var newIcon = ProcessMetadataFile(metadata.Icon, tempIconFileName);
                if (newIcon != null)
                {
                    var currentPath = ImageSourceManager.GetImagePath(EditingGame.Icon);
                    if (currentPath.IsNullOrEmpty() ||
                        !File.Exists(currentPath) ||
                        !FileSystem.AreFileContentsEqual(newIcon, currentPath))
                    {
                        metadata.Icon = new MetadataFile(newIcon);
                        diffFields.Add(GameField.Icon);
                    }
                    else
                    {
                        metadata.Icon = null;
                    }
                }
                else
                {
                    metadata.Icon = null;
                }
            }

            if (metadata.CoverImage != null && !testGame.CoverImage.IsNullOrEmpty())
            {
                var newCover = ProcessMetadataFile(metadata.CoverImage, tempCoverFileName);
                if (newCover != null)
                {
                    var currentPath = ImageSourceManager.GetImagePath(EditingGame.CoverImage);
                    if (currentPath.IsNullOrEmpty() ||
                        !File.Exists(currentPath) ||
                        !FileSystem.AreFileContentsEqual(newCover, currentPath))
                    {
                        metadata.CoverImage = new MetadataFile(newCover);
                        diffFields.Add(GameField.CoverImage);
                    }
                    else
                    {
                        metadata.CoverImage = null;
                    }
                }
                else
                {
                    metadata.CoverImage = null;
                }
            }

            if (metadata.BackgroundImage != null && !testGame.BackgroundImage.IsNullOrEmpty())
            {
                var newBack = ProcessMetadataFile(metadata.BackgroundImage, tempBackgroundFileName);
                if (newBack != null)
                {
                    var currentPath = ImageSourceManager.GetImagePath(EditingGame.BackgroundImage);
                    if (currentPath.IsNullOrEmpty() ||
                        !File.Exists(currentPath) ||
                        !FileSystem.AreFileContentsEqual(newBack, currentPath))
                    {
                        metadata.BackgroundImage = new MetadataFile(newBack);
                        diffFields.Add(GameField.BackgroundImage);
                    }
                    else
                    {
                        metadata.BackgroundImage = null;
                    }
                }
                else
                {
                    metadata.BackgroundImage = null;
                }
            }

            return(diffFields);
        }