示例#1
0
        public bool GetArticleFinishedState(string articleName)
        {
            Debug.Assert(articleName != null);

            bool isArticleFinished = false;

            // Получаем значение finished для статьи
            ExecuteSQLQuery
            (
                $"SELECT {Tables.Articles.finished} " +
                $"FROM {Tables.articles} " +
                $"WHERE {Tables.Articles.name} = {SQLStringLiteral(articleName)} " +
                $"LIMIT 1;",

                (reader) =>
            {
                if (!reader.HasRows)
                {
                    throw new System.Exception($"{articleName} is not found in database");
                }

                reader.Read();

                isArticleFinished = TinyIntAsBool.BoolFromShort(reader.GetInt16(0));
            }
            );

            return(isArticleFinished);
        }
示例#2
0
        // Возвращает текст и флаг завершенности этого текста для статьи с указанным именем
        public FinishedText GetArticleText(string articleName)
        {
            FinishedText res = new FinishedText();

            ExecuteSQLQuery
            (
                $"SELECT {Tables.Articles.text}, {Tables.Articles.finished} " +
                $"FROM {Tables.articles} " +
                $"WHERE {Tables.Articles.name} = {SQLStringLiteral(articleName)} " +
                $"LIMIT 1;",

                (reader) =>
            {
                if (!reader.HasRows)
                {
                    throw new System.Exception($"{articleName} is not found in database");
                }

                reader.Read();

                res.text     = reader.GetString(0);
                res.finished = TinyIntAsBool.BoolFromShort(reader.GetInt16(1));
            }
            );

            return(res);
        }
示例#3
0
        // Возвращает текст и флаг завершенности этого текста для художественного перевода с указанным языком, который принадлежит статье с указанным именем
        // В случае, если для такого языка нет художественного перевода - в поле text возвращаемой структуры будет null
        public FinishedText GetArtisticalTranslaionText(string articleName, string languageCode)
        {
            FinishedText res = new FinishedText();

            int articleId = -1;

            // запрашиваем articleId по articleName
            ExecuteSQLQuery
            (
                $"SELECT {Tables.Articles.id} " +
                $"FROM {Tables.articles} " +
                $"WHERE {Tables.Articles.name} = {SQLStringLiteral(articleName)} " +
                $"LIMIT 1;",

                (reader) =>
            {
                if (!reader.HasRows)
                {
                    throw new System.Exception($"{articleName} is not found in database");
                }

                reader.Read();

                articleId = reader.GetInt32(0);
            }
            );

            ExecuteSQLQuery
            (
                $"SELECT {Tables.ArtisticalTranslations.text}, {Tables.ArtisticalTranslations.finished} " +
                $"FROM {Tables.artisticalTranslations} " +
                $"WHERE {Tables.ArtisticalTranslations.articleId} = {articleId} and {Tables.ArtisticalTranslations.languageCode} = {SQLStringLiteral(languageCode)} " +
                $"LIMIT 1;",

                (reader) =>
            {
                // Если для этого языка еще нет перевода, то выходим. В этом случае будет значение по умолчанию (text = null)
                if (!reader.HasRows)
                {
                    return;
                }

                reader.Read();

                res.text     = reader.GetString(0);
                res.finished = TinyIntAsBool.BoolFromShort(reader.GetInt16(1));
            }
            );

            return(res);
        }
示例#4
0
        // Устанавливает состояние завершенности для статьи. Если устанавливаем состояние false, а до этого было true,
        // То также удалятся все связанные с этой статьей сущности, требующие состояния завершенности (привязанные переводы слов и худ. переводы, тайминги аудио-разметки)
        public void SetArticleFinishedState(string articleName, bool finished)
        {
            // Если состояние не меняется - выходим
            if (finished == GetArticleFinishedState(articleName))
            {
                return;
            }

            // Ставим статье finished = true
            ExecuteSQLQuery($"UPDATE {Tables.articles} SET {Tables.Articles.finished} = {TinyIntAsBool.StrFromBool(finished)} " +
                            $"WHERE {Tables.Articles.name} = {SQLStringLiteral(articleName)};");

            if (!finished)
            {
                // ToDo: случай, когда завершенное состояние меняем на незавершенного - нужно удалить все связи в бд
            }
        }