private void DisplayMerge(CurrencyConvertItem item)
        {
            if (Merges == null)
            {
                Merges = new ObservableCollection <CurrencyConvertItem>();
                Merges.Add(item);
                return;
            }

            var existItems = from i in Merges where i.FromCode == item.FromCode && i.ToCode == item.ToCode select i;

            if (existItems.Count() == 0)
            {
                merges.Add(item);
                return;
            }

            var theItem = existItems.FirstOrDefault();

            Merges.Remove(theItem);

            if (item.Rate != 1m)
            {
                merges.Add(item);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Realiza o merge do primeiro item da lista e retorna o resultado
        /// </summary>
        /// <returns></returns>
        public async Task <Tuple <string, bool> > RealizaMerges()
        {
            foreach (var item in Merges.Where(d => d.Finalizado == false))
            {
                Tuple <string, Exception> retorno = await Task.Run(() =>
                {
                    try
                    {
                        if (item.Conflitos > 0)
                        {
                            if (VerificaConflitos(item) > 0)
                            {
                                return(new Tuple <string, Exception>(item.Mensagem, null));
                            }
                        }
                        else
                        {
                            RealizaMerge(item);
                            if (VerificaConflitos(item) > 0)
                            {
                                return(new Tuple <string, Exception>(item.Mensagem, null));
                            }
                        }
                        item.Finalizado = true;
                        Checkin(item.Mensagem);
                        return(new Tuple <string, Exception>("", null));
                    }
                    catch (Exception ex)
                    {
                        return(new Tuple <string, Exception>("", ex));
                    }
                });

                if (!string.IsNullOrEmpty(retorno.Item1))
                {
                    return(new Tuple <string, bool>(retorno.Item1, true));
                }
                if (retorno.Item2 != null)
                {
                    throw retorno.Item2;
                }
            }
            return(new Tuple <string, bool>("", Merges.Where(d => d.Finalizado == false).Count() > 0));
        }
Esempio n. 3
0
        public bool HasResolvedConflict(ModFile conflict)
        {
            var merge = Merges.FirstOrDefault(mrg => mrg.RelativePath.EqualsIgnoreCase(conflict.RelativePath));

            if (merge == null)
            {
                return(false);
            }

            if (conflict.Mods.Any(mod => !mod.Name.EqualsIgnoreCase(merge.MergedModName) && !merge.ContainsMod(mod.Name)))
            {
                return(false);
            }

            if (merge.Mods.Any(mod => new LoadOrderComparer().Compare(merge.MergedModName, mod.Name) > 0))
            {
                return(false);
            }

            return
                (merge.Mods.All(mod => mod.Hash == Tools.Hasher.ComputeHash(merge.GetModFile(mod.Name))));
        }
Esempio n. 4
0
            public CacheEntry(string absolutePath, string originalAbsolutePath, List <string> mergePaths)
            {
                cacheAbsolutePath   = absolutePath;
                CachePath           = ModTek.GetRelativePath(absolutePath, ModTek.GameDirectory);
                ContainingDirectory = Path.GetDirectoryName(absolutePath);
                OriginalTime        = File.GetLastWriteTimeUtc(originalAbsolutePath);

                if (string.IsNullOrEmpty(ContainingDirectory))
                {
                    HasErrors = true;
                    return;
                }

                foreach (var mergePath in mergePaths)
                {
                    Merges.Add(new PathTimeTuple(ModTek.GetRelativePath(mergePath, ModTek.GameDirectory), File.GetLastWriteTimeUtc(mergePath)));
                }

                Directory.CreateDirectory(ContainingDirectory);

                // do json merge if json
                if (Path.GetExtension(absolutePath)?.ToLowerInvariant() == ".json")
                {
                    // get the parent JSON
                    JObject parentJObj;
                    try
                    {
                        parentJObj = ModTek.ParseGameJSONFile(originalAbsolutePath);
                    }
                    catch (Exception e)
                    {
                        LogException($"\tParent JSON at path {originalAbsolutePath} has errors preventing any merges!", e);
                        HasErrors = true;
                        return;
                    }

                    using (var writer = File.CreateText(absolutePath))
                    {
                        // merge all of the merges
                        foreach (var mergePath in mergePaths)
                        {
                            try
                            {
                                // since all json files are opened and parsed before this point, they won't have errors
                                JSONMerger.MergeIntoTarget(parentJObj, ModTek.ParseGameJSONFile(mergePath));
                            }
                            catch (Exception e)
                            {
                                LogException($"\tMod JSON merge at path {ModTek.GetRelativePath(mergePath, ModTek.GameDirectory)} has errors preventing merge!", e);
                            }
                        }

                        // write the merged onto file to disk
                        var jsonWriter = new JsonTextWriter(writer)
                        {
                            Formatting = Formatting.Indented
                        };
                        parentJObj.WriteTo(jsonWriter);
                        jsonWriter.Close();
                    }

                    return;
                }

                // do file append if not json
                using (var writer = File.CreateText(absolutePath))
                {
                    writer.Write(File.ReadAllText(originalAbsolutePath));

                    foreach (var mergePath in mergePaths)
                    {
                        writer.Write(File.ReadAllText(mergePath));
                    }
                }
            }
Esempio n. 5
0
            public CacheEntry(string cacheAbsolutePath, string originalAbsolutePath, List <string> mergePaths)
            {
                _cacheAbsolutePath  = cacheAbsolutePath;
                CachePath           = ModTek.GetRelativePath(cacheAbsolutePath, ModTek.GameDirectory);
                ContainingDirectory = Path.GetDirectoryName(cacheAbsolutePath);
                OriginalTime        = File.GetLastWriteTimeUtc(originalAbsolutePath);

                if (string.IsNullOrEmpty(ContainingDirectory))
                {
                    HasErrors = true;
                    return;
                }

                // get the parent JSON
                JObject parentJObj;

                try
                {
                    parentJObj = ModTek.ParseGameJSONFile(originalAbsolutePath);
                }
                catch (Exception e)
                {
                    Log($"\tParent JSON at path {originalAbsolutePath} has errors preventing any merges!");
                    Log($"\t\t{e.Message}");
                    HasErrors = true;
                    return;
                }

                foreach (var mergePath in mergePaths)
                {
                    Merges.Add(new PathTimeTuple(ModTek.GetRelativePath(mergePath, ModTek.GameDirectory), File.GetLastWriteTimeUtc(mergePath)));
                }

                Directory.CreateDirectory(ContainingDirectory);

                using (var writer = File.CreateText(cacheAbsolutePath))
                {
                    // merge all of the merges
                    foreach (var mergePath in mergePaths)
                    {
                        JObject mergeJObj;
                        try
                        {
                            mergeJObj = ModTek.ParseGameJSONFile(mergePath);
                        }
                        catch (Exception e)
                        {
                            Log($"\tMod merge JSON at path {originalAbsolutePath} has errors preventing any merges!");
                            Log($"\t\t{e.Message}");
                            continue;
                        }

                        if (AdvancedJSONMerger.IsAdvancedJSONMerge(mergeJObj))
                        {
                            try
                            {
                                AdvancedJSONMerger.ProcessInstructionsJObject(parentJObj, mergeJObj);
                                continue;
                            }
                            catch (Exception e)
                            {
                                Log($"\tMod advanced merge JSON at path {mergePath} has errors preventing advanced json merges!");
                                Log($"\t\t{e.Message}");
                            }
                        }

                        // assume standard merging
                        parentJObj.Merge(mergeJObj, new JsonMergeSettings {
                            MergeArrayHandling = MergeArrayHandling.Replace
                        });
                    }

                    // write the merged onto file to disk
                    var jsonWriter = new JsonTextWriter(writer)
                    {
                        Formatting = Formatting.Indented
                    };
                    parentJObj.WriteTo(jsonWriter);
                    jsonWriter.Close();
                }
            }
Esempio n. 6
0
            public CacheEntry(string path, string originalPath, List <string> mergePaths)
            {
                CachePath           = path;
                ContainingDirectory = Path.GetDirectoryName(path);
                OriginalPath        = originalPath;
                OriginalTime        = File.GetLastWriteTimeUtc(originalPath);

                if (string.IsNullOrEmpty(ContainingDirectory))
                {
                    HasErrors = true;
                    return;
                }

                // get the parent JSON
                JObject parentJObj;

                try
                {
                    parentJObj = ModTek.ParseGameJSON(File.ReadAllText(originalPath));
                }
                catch (Exception e)
                {
                    Log($"\tParent JSON at path {originalPath} has errors preventing any merges!");
                    Log($"\t\t{e.Message}");
                    HasErrors = true;
                    return;
                }

                foreach (var mergePath in mergePaths)
                {
                    Merges.Add(new PathTimeTuple(mergePath, File.GetLastWriteTimeUtc(mergePath)));
                }

                Directory.CreateDirectory(ContainingDirectory);

                using (var writer = File.CreateText(path))
                {
                    // merge all of the merges
                    foreach (var mergePath in mergePaths)
                    {
                        JObject mergeJObj;
                        try
                        {
                            mergeJObj = ModTek.ParseGameJSON(File.ReadAllText(mergePath));
                        }
                        catch (Exception e)
                        {
                            Log($"\tMod merge JSON at path {originalPath} has errors preventing any merges!");
                            Log($"\t\t{e.Message}");
                            continue;
                        }

                        parentJObj.Merge(mergeJObj, new JsonMergeSettings {
                            MergeArrayHandling = MergeArrayHandling.Replace
                        });
                    }

                    // write the merged onto file to disk
                    var jsonWriter = new JsonTextWriter(writer)
                    {
                        Formatting = Formatting.Indented
                    };
                    parentJObj.WriteTo(jsonWriter);
                    jsonWriter.Close();
                }
            }
Esempio n. 7
0
 public Merge GetMergeByRelativePath(string relativePath)
 {
     return(Merges.FirstOrDefault(m => m.RelativePath.EqualsIgnoreCase(relativePath)));
 }