Esempio n. 1
0
        public async Task ImportTranslationStrings(IProgress <int> progress, CancellationToken cancelToken,
                                                   string assemblyFile, string neutralCulture, string cultureCode, List <BamlString> lines)
        {
            __DB.BeginTransaction();
            try
            {
                int line_no = 0, max = lines.Count;
                var enumerator = lines.GetEnumerator();

                bool finished = !enumerator.MoveNext();

                while (!finished)
                {
                    await Task.Run(() =>
                    {
                        for (int t = 0; t < 100; t++)
                        {
                            BamlString line = enumerator.Current;

                            string bamlFile = line.BamlFile.ToLower();
                            bamlFile        = bamlFile.Replace(cultureCode.ToLower(), neutralCulture.ToLower());
                            int?sid         = __DB.StringId(assemblyFile, bamlFile, line.ResourceKey);
                            if (sid != null)
                            {
                                if (!string.IsNullOrEmpty(line.Content))
                                {
                                    StringRow strRow = __DB.StringForId((int)sid);
                                    if (strRow != null)
                                    {
                                        __DB.SetTranslation((int)sid, strRow.Revision, cultureCode, null, line.Content);
                                    }
                                }
                            }

                            line_no += 1;

                            finished = !enumerator.MoveNext();

                            if (finished)
                            {
                                break;
                            }
                        }
                    });

                    progress.Report(line_no * 100 / max);
                }
            }
            catch
            {
                __DB.Rollback();
                throw;
            }

            __DB.Commit();
        }
Esempio n. 2
0
        internal int NewStringId(string dllFile, BamlString line)
        {
            __DB.ExecuteQuery("insert into string_ids " +
                              "(filename, baml, uid, category, readability, localizability, description) " +
                              "values (@filename, @baml, @uid, @category, @readability, @localizability, @description)",
                              new Dictionary <string, object>()
            {
                { "@filename", dllFile.ToLower() },
                { "@baml", line.BamlFile },
                { "@uid", line.ResourceKey },
                { "@category", (int)line.Category },
                { "@readability", line.Readability },
                { "@localizability", line.Modifiable },
                { "@description", line.Comments }
            });

            return(__DB.LastInsertedId("string_ids"));
        }
Esempio n. 3
0
        public async Task <ImportResult> ImportStrings(IProgress <int> progress, CancellationToken cancellationToken, string dllFile, List <BamlString> lines)
        {
            List <int> newStrings     = new List <int>();
            List <int> sidsList       = new List <int>();
            List <int> stringsUpadted = new List <int>();
            List <int> sidsToDelete   = new List <int>();

            __DB.BeginTransaction();
            try
            {
                int line_no = 0, max = lines.Count;
                var enumerator = lines.GetEnumerator();

                bool finished = !enumerator.MoveNext();
                while (!finished)
                {
                    await Task.Run(() =>
                    {
                        for (int i = 0; i < 100; i++)
                        {
                            BamlString line = enumerator.Current;

                            int?sid = __DB.StringId(dllFile, line.BamlFile, line.ResourceKey);

                            if (!string.IsNullOrEmpty(line.Content))
                            {
                                if (sid == null)
                                {
                                    sid = __DB.NewStringId(dllFile, line);
                                    newStrings.Add((int)sid);
                                }

                                StringRow strRow = __DB.StringForId((int)sid);

                                if (strRow == null)
                                {
                                    __DB.StringAddRevision((int)sid, 1, line.Content);
                                }
                                else if (strRow.Content != line.Content)
                                {
                                    __DB.StringAddRevision((int)sid, strRow.Revision + 1, line.Content);
                                    stringsUpadted.Add((int)sid);
                                }
                                sidsList.Add((int)sid);
                            }
                            else
                            {
                                if (sid != null)
                                {
                                    StringRow strRow = __DB.StringForId((int)sid);
                                    // Если строка стала пустой - пометить ее как удаленную.
                                    if (strRow != null)
                                    {
                                        __DB.Delete((int)sid);
                                    }
                                }
                            }

                            line_no += 1;
                            if (!enumerator.MoveNext())
                            {
                                finished = true;
                                break;
                            }
                        }
                    });

                    progress.Report(line_no * 100 / max);
                }

                await Task.Run(() =>
                {
                    sidsToDelete = FindDeletedStrings(dllFile, sidsList);
                    foreach (var sid in sidsToDelete)
                    {
                        __DB.Delete(sid);
                    }

                    __DB.Commit();
                });
            }
            catch
            {
                __DB.Rollback();
                throw;
            }

            ImportResult result = new ImportResult(dllFile);

            result.SidsList       = sidsList;
            result.NewStrings     = newStrings;
            result.StringsUpdated = stringsUpadted;
            result.DeletedStrings = sidsToDelete;

            return(result);
        }
Esempio n. 4
0
 public bool LinesFilter(BamlString line)
 {
     return(line.Category != LocalizationCategory.None);
 }