Exemple #1
0
        internal StringRow StringForId(int sid)
        {
            DataTable stringIdDataRows =
                __DB.SelectAll("SELECT * from string_ids inner join original_strings on string_ids.id = original_strings.string_id where string_ids.id=@sid and original_strings.revision = string_ids.max_revision", new Dictionary <string, object>()
            {
                { "@sid", sid }
            });

            if (stringIdDataRows == null)
            {
                return(null);
            }

            if (stringIdDataRows.Rows.Count == 0)
            {
                return(null);
            }

            DataRow   stringIdDataRow = stringIdDataRows.Rows[0];
            StringRow row             = StringRowFromTableRow(stringIdDataRow);

            row.Content = (string)stringIdDataRow["string"];

            return(row);
        }
Exemple #2
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();
        }
Exemple #3
0
        private StringRow StringRowFromTableRow(DataRow tableRow)
        {
            StringRow stringRow = new StringRow();

            stringRow.Sid            = Int32.Parse(tableRow["id"].ToString());
            stringRow.DllFile        = (string)tableRow["filename"];
            stringRow.BamlFile       = (string)tableRow["baml"];
            stringRow.ResourceKey    = (string)tableRow["uid"];
            stringRow.Category       = (string)tableRow["category"];
            stringRow.Readability    = (string)tableRow["readability"];
            stringRow.Localizability = (string)tableRow["localizability"];
            stringRow.Comments       = (string)tableRow["description"];
            stringRow.Revision       = (int)UnboxNumeric(tableRow["max_revision"]);

            return(stringRow);
        }
Exemple #4
0
        internal List <StringTranslation> GetTranslationsForCulture(string cultureCode, bool includeTranslated,
                                                                    string assemblyFileName = "")
        {
            DataTable originalString;

            if (assemblyFileName == "")
            {
                originalString = GetTranslationsDataTableForCulture(cultureCode);
            }
            else
            {
                originalString = __DB.SelectAll(@"SELECT string_ids.id, string_ids.filename, 
                                                         string_ids.baml, string_ids.max_revision, 
                                                         string_ids.uid, string_ids.category, 
                                                         string_ids.readability, string_ids.localizability,
                                                         string_ids.description,
                                                         original_strings.string, 
                                                                (SELECT translation FROM translated_strings WHERE string_id=string_ids.id 
                                                                                                              AND revision=string_ids.max_revision 
                                                                                                              AND culture_code=@cultureCode) as translation
                                                          FROM string_ids, original_strings 
                                                          WHERE string_ids.id = original_strings.string_id 
                                                            AND string_ids.filename = @assemblyFileName
                                                            AND original_strings.is_deleted = 0 
                                                            AND original_strings.revision = string_ids.max_revision 
                                                            AND string <> ''",
                                                new Dictionary <string, object>()
                {
                    { "@cultureCode", cultureCode },
                    { "@assemblyFileName", assemblyFileName.ToLower() }
                });
            }


            List <StringTranslation> result = new List <StringTranslation>();

            foreach (DataRow row in originalString.Rows)
            {
                StringRow stringRow = new StringRow();
                stringRow.Sid            = (int)UnboxNumeric(row["id"]);
                stringRow.DllFile        = (string)row["filename"];
                stringRow.BamlFile       = (string)row["baml"];
                stringRow.ResourceKey    = (string)row["uid"];
                stringRow.Localizability = (string)row["localizability"];
                stringRow.Readability    = (string)row["readability"];
                stringRow.Category       = (string)row["category"];
                stringRow.Comments       = (string)row["description"];
                stringRow.Content        = (string)row["string"];
                stringRow.MaxRevision    = (int)UnboxNumeric(row["max_revision"]);

                string translation = null;
                if (!(row["translation"] is DBNull))
                {
                    translation = (string)row["translation"];
                }

                StringTranslation translationRow = new StringTranslation(stringRow, translation);

                if (!String.IsNullOrEmpty(translation) && includeTranslated)
                {
                    result.Add(translationRow);
                }

                if (String.IsNullOrEmpty(translation))
                {
                    result.Add(translationRow);
                }
            }

            return(result);
        }
Exemple #5
0
 public StringTranslation(StringRow stringRow, string translation)
 {
     __Row         = stringRow;
     __Translation = translation;
 }
Exemple #6
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);
        }