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(); }
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")); }
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); }
public bool LinesFilter(BamlString line) { return(line.Category != LocalizationCategory.None); }