public UserBuilder WithIdiom(Idiom idiom)
 {
     _idiom = idiom;
     return(this);
 }
Exemple #2
0
 /// <summary>Translates to.</summary>
 /// <param name="idiom">The idiom.</param>
 public static void TranslateTo(Idiom idiom)
 {
     OnChange?.Invoke(idiom, idiom);
 }
Exemple #3
0
        protected override void SetQuestionText(Idiom idiom)
        {
            string gappedSentence = this.MakeGapInSentence(idiom.Sentence, idiom.Word);

            this.QuestionText = $"{gappedSentence} ({idiom.Translation})";
        }
Exemple #4
0
 protected override void SetAnswerText(Idiom idiom)
 {
     this.AnswerText = idiom.Word;
 }
Exemple #5
0
 public static bool Validate(this Idiom idiom)
 {
     return(string.IsNullOrEmpty(idiom.Pronunciation) && string.IsNullOrEmpty(idiom.Word) && idiom.Definitions.Any());
 }
Exemple #6
0
        // Type C: Complete the sentence using a translation

        public QuestionTypeC(Idiom idiom) : base(idiom)
        {
        }
        public async void ShowIdiom(Guid id)
        {
            Idiom idiom = (await idiomsService.GetAllAsync()).First(x => x.IdiomId == id);

            Console.WriteLine(idiom);
        }
 protected override void SetQuestionText(Idiom idiom)
 {
     this.QuestionText = $"{idiom.Sentence} ({idiom.Word})";
 }
        public /*string*/ void UpdateIdiom(string id, string sessionId, UpdateData data)
        {
            Editor editor = _editors.Find(x => x.SessionId == sessionId).FirstOrDefault();
            List <DefinitionUpdate> definitionUpdates = data.DefinitionUpdates;

            if (editor != null && !editor.IsLimited)
            {
                if (!string.IsNullOrEmpty(data.BsonStr))
                {
                    try
                    {
                        BsonDocument doc = BsonDocument.Parse(data.BsonStr /*.Replace("\\n","")*//*.Replace("?", "?")*/);//不应允许有英文问号出现,不然小程序解析Json时会抛异常。
                        Idiom        idi = BsonSerializer.Deserialize <Idiom>(doc);
                        if (Regex.IsMatch(idi.Name, "^[\u4e00-\u9fa5]+(,[\u4e00-\u9fa5]+)?$") /*&& !string.IsNullOrEmpty(idi.Index.ToString())*/)
                        {
                            idi.LastEditor   = editor.Username;
                            idi.UpdateTimeUT = DateTimeOffset.Now.ToUnixTimeSeconds();
                            Idiom tmp = _idioms.Find(x => x.Id == id).FirstOrDefault();
                            if (tmp == null)
                            {
                                //return new StandardReturn(20001);
                                throw new EasyException(20001);
                            }
                            string oldName = tmp.Name;
                            idi.Creator        = tmp.Creator;
                            idi.CreationTimeUT = tmp.CreationTimeUT;
                            _idioms.ReplaceOne(x => x.Id == id, idi);
                            //更新 Links 名称。
                            if (oldName != idi.Name)
                            {
                                List <Idiom> idioms = _idioms.Find(new BsonDocument()).ToList();
                                foreach (var item in idioms)
                                {
                                    BsonDocument doc2 = item.ToBsonDocument();
                                    string       str  = doc2.ToString();
                                    if (str.Contains(oldName) && item.Id != idi.Id)
                                    {
                                        str = str.Replace(oldName, idi.Name);
                                        Idiom idi2 = BsonSerializer.Deserialize <Idiom>(BsonDocument.Parse(str));
                                        _idioms.FindOneAndReplace(x => x.Id == item.Id, idi2);
                                    }
                                }
                            }
                            //更新启动信息中的每日成语。
                            DateTimeOffset dateUT = DateTimeOffset.Now;
                            int            hour   = dateUT.Hour;
                            int            min    = dateUT.Minute;
                            int            sec    = dateUT.Second;
                            long           dateL  = dateUT.AddSeconds(-sec).AddMinutes(-min).AddHours(-hour).ToUnixTimeSeconds();
                            LaunchInfo     deft   = _launchInfo.Find(x => x.DateUT == DateTimeOffset.MinValue.ToUnixTimeSeconds()).FirstOrDefault();
                            LaunchInfo     today  = _launchInfo.Find(x => x.DateUT == dateL).FirstOrDefault();
                            if (deft != null && deft.DailyIdiom != null && deft.DailyIdiom.Id == idi.Id)
                            {
                                LaunchInfo upd = deft;
                                upd.DailyIdiom = idi;
                                _launchInfo.FindOneAndReplace(x => x.Id == upd.Id, upd);
                            }
                            if (today != null && today.DailyIdiom != null && today.DailyIdiom.Id == idi.Id)
                            {
                                LaunchInfo upd = today;
                                upd.DailyIdiom = idi;
                                _launchInfo.FindOneAndReplace(x => x.Id == upd.Id, upd);
                            }
                            //更新编辑者编辑次数。
                            var filter = Builders <Editor> .Filter.Eq("_id", new ObjectId(editor.Id));

                            var update = Builders <Editor> .Update.Inc("EditCount", 1);

                            _editors.UpdateOne(filter, update);
                            //return new StandardReturn(result: "成语已更新!");
                            return /* "成语已更新!"*/;
                        }
                        //return new StandardReturn(20002);
                        throw new EasyException(20002);
                    }
                    catch
                    {
                        throw new EasyException(20002);
                    }
                }
                else if (definitionUpdates != null && definitionUpdates.Count > 0 /*&& !string.IsNullOrEmpty(data.Index.ToString())*/ && data.Name != null && Regex.IsMatch(data.Name, "^[\u4e00-\u9fa5]+(,[\u4e00-\u9fa5]+)?$"))
                {
                    Idiom target = _idioms.Find(x => x.Id == id).FirstOrDefault();
                    if (target == null)
                    {
                        //return new StandardReturn(20001);
                        throw new EasyException(20001);
                    }
                    List <Definition> defs = target.Definitions;
                    for (int i = 0; i < definitionUpdates.Count; i++)
                    {
                        if (!string.IsNullOrEmpty(definitionUpdates[i].Source) && !string.IsNullOrEmpty(definitionUpdates[i].Text) && defs.Count > 0)
                        {
                            if (i < defs.Count)
                            {
                                defs[i].Source = definitionUpdates[i].Source /*.Replace("?", "?")*/;
                                defs[i].Text   = definitionUpdates[i].Text /*.Replace("?", "?")*/;
                                if (!string.IsNullOrEmpty(definitionUpdates[i].Addition))
                                {
                                    defs[i].Addition = definitionUpdates[i].Addition /*.Replace("?", "?")*/;
                                }
                                else
                                {
                                    defs[i].Addition = null;
                                }
                                defs[i].IsBold = definitionUpdates[i].IsBold;
                            }
                            else
                            {
                                string tmp = definitionUpdates[i].Addition;
                                //if (tmp != null && tmp.Replace(" ", "") != "")
                                //tmp = tmp/*.Replace("?", "?")*/;
                                if (string.IsNullOrEmpty(tmp))
                                {
                                    tmp = null;
                                }
                                defs.Add(new Definition {
                                    Source = definitionUpdates[i].Source /*.Replace("?", "?")*/, Text = definitionUpdates[i].Text /*.Replace("?", "?")*/, Examples = null, Addition = tmp, IsBold = definitionUpdates[i].IsBold, Links = null
                                });
                            }
                        }
                        else
                        {
                            //return new StandardReturn(20002);
                            throw new EasyException(20002);
                        }
                    }
                    string tmpPinyin = data.Pinyin;
                    if (string.IsNullOrEmpty(data.Pinyin))
                    {
                        tmpPinyin = null;
                    }
                    string tmpOrigin = data.Origin;
                    if (string.IsNullOrEmpty(data.Origin))
                    {
                        tmpOrigin = null;
                    }
                    UpdateDefinition <Idiom> update = Builders <Idiom> .Update.Set("Definitions", defs)
                                                      .Set("Name", data.Name)
                                                      .Set("Index", data.Index)
                                                      .Set("Pinyin", tmpPinyin)
                                                      .Set("Origin", tmpOrigin)
                                                      .Set("ToBeCorrected", data.ToBeCorrected)
                                                      .Set("LastEditor", editor.Username)
                                                      .Set("UpdateTimeUT", DateTimeOffset.Now.ToUnixTimeSeconds());

                    string oldName = target.Name;
                    _idioms.FindOneAndUpdate(x => x.Id == id, update);
                    //更新 Links 名称。
                    if (oldName != data.Name)
                    {
                        List <Idiom> idioms = _idioms.Find(new BsonDocument()).ToList();
                        foreach (var item in idioms)
                        {
                            BsonDocument doc2 = item.ToBsonDocument();
                            string       str  = doc2.ToString();
                            if (str.Contains(oldName) && item.Id != id)
                            {
                                str = str.Replace(oldName, data.Name);
                                Idiom idi2 = BsonSerializer.Deserialize <Idiom>(BsonDocument.Parse(str));
                                _idioms.FindOneAndReplace(x => x.Id == item.Id, idi2);
                            }
                        }
                    }
                    //更新启动信息中的每日成语。
                    DateTimeOffset dateUT = DateTimeOffset.Now;
                    int            hour   = dateUT.Hour;
                    int            min    = dateUT.Minute;
                    int            sec    = dateUT.Second;
                    long           dateL  = dateUT.AddSeconds(-sec).AddMinutes(-min).AddHours(-hour).ToUnixTimeSeconds();
                    LaunchInfo     deft   = _launchInfo.Find(x => x.DateUT == DateTimeOffset.MinValue.ToUnixTimeSeconds()).FirstOrDefault();
                    LaunchInfo     today  = _launchInfo.Find(x => x.DateUT == dateL).FirstOrDefault();
                    Idiom          idi    = _idioms.Find(x => x.Id == id).FirstOrDefault();
                    if (deft != null && deft.DailyIdiom != null && deft.DailyIdiom.Id == id)
                    {
                        LaunchInfo upd = deft;
                        upd.DailyIdiom = idi;
                        _launchInfo.FindOneAndReplace(x => x.Id == upd.Id, upd);
                    }
                    if (today != null && today.DailyIdiom != null && today.DailyIdiom.Id == idi.Id)
                    {
                        LaunchInfo upd = today;
                        upd.DailyIdiom = idi;
                        _launchInfo.FindOneAndReplace(x => x.Id == upd.Id, upd);
                    }
                    //更新编辑者编辑次数。
                    var filter2 = Builders <Editor> .Filter.Eq("_id", new ObjectId(editor.Id));

                    var update2 = Builders <Editor> .Update.Inc("EditCount", 1);

                    _editors.UpdateOne(filter2, update2);
                    //return new StandardReturn(result: "成语已更新!");
                    return /*"成语已更新!"*/;
                }
                //return new StandardReturn(20002);
                throw new EasyException(20002);
            }
            throw new EasyException(20003);
            //return new StandardReturn(20003);
        }
Exemple #10
0
        public Dictionary <string, string> GetListByStr(string str)
        {
            Dictionary <string, string> dic = new();
            List <Idiom> items;
            bool         queryPrevDailyIdioms    = false;//查询往日成语
            Dictionary <string, List <long> > kv = new();

            //if (str == "我全都要")
            //{
            //    items = _idioms.Find(new BsonDocument()).Sort(Builders<Idiom>.Sort.Ascending("Name")).ToList();
            //}
            if (str == "试试手气")
            {
                items = _idioms.Aggregate().AppendStage <Idiom>("{$sample:{size:5}}").ToList();
            }
            else if (str == "有待订正")
            {
                items = _idioms.Find(x => x.ToBeCorrected == true).ToList();
            }
            else if (str.StartsWith("标签:"))
            {
                items = _idioms.Find(x => x.Tags.Contains(str.Replace("标签:", ""))).ToList();
            }
            else if (str == "往日成语")
            {
                //除去deft
                List <LaunchInfo> info = _launchInfo.Find(Builders <LaunchInfo> .Filter.Ne("DateUT", DateTimeOffset.MinValue.ToUnixTimeSeconds())).Sort(Builders <LaunchInfo> .Sort.Ascending("DateUT")).ToList();
                items = new List <Idiom>();
                queryPrevDailyIdioms = true;
                if (info.Count > 1)
                {
                    foreach (LaunchInfo itemInfo in info)
                    {
                        if (itemInfo.DailyIdiom != null)
                        {
                            if (!kv.ContainsKey(itemInfo.DailyIdiom.Id + "_" + itemInfo.DailyIdiom.Name))
                            {
                                kv.Add(itemInfo.DailyIdiom.Id + "_" + itemInfo.DailyIdiom.Name, new List <long> {
                                    itemInfo.DateUT
                                });
                            }
                            else
                            {
                                kv[itemInfo.DailyIdiom.Id + "_" + itemInfo.DailyIdiom.Name].Add(itemInfo.DateUT);
                            }
                        }
                    }
                }
            }
            else
            {
                items = _idioms.Find(Builders <Idiom> .Filter.Regex("Name", new BsonRegularExpression(str))).Sort(Builders <Idiom> .Sort.Ascending("Name")).ToList();
            }
            if (queryPrevDailyIdioms)
            {
                foreach (var it in kv)
                {
                    StringBuilder sb = new();
                    foreach (long i in it.Value)
                    {
                        DateTimeOffset time = DateTimeOffset.FromUnixTimeSeconds(i);
                        sb.Append(string.Format("{0:D}", time.ToLocalTime()) + "、");
                    }
                    sb.Remove(sb.Length - 1, 1);
                    string[] strArr = it.Key.Split("_");
                    dic.Add(strArr[0], sb + ":" + strArr[1]);
                }
            }
            else
            {
                if (items.Count == 0 && str != "试试手气" && str != "有待订正" && !str.StartsWith("标签:") && str != "往日成语")
                {
                    AutoCollect(str);
                    ProjectionDefinition <Idiom> definition = Builders <Idiom> .Projection.Include(doc => doc.Name);

                    Dictionary <string, int> res = LevenshteinDistance.Extract(str, _idioms.Find(new BsonDocument()).ToList().Select(x => x.Name).ToList(), 5);
                    foreach (var item in res)
                    {
                        Idiom tmp = _idioms.Find(x => x.Name == item.Key).FirstOrDefault();
                        dic.Add(tmp.Id, tmp.Name);
                    }
                }
                foreach (Idiom item in items)
                {
                    dic.Add(item.Id, item.Name);
                }
            }
            if (dic.Count == 0)
            {
                //rtn = new StandardReturn(20001);
                throw new EasyException(20001);
            }
            else
            {
                return(dic);
            }
        }
 protected virtual void SetAnswerText(Idiom idiom)
 {
     // FIXME: idem
 }
 protected virtual void SetQuestionText(Idiom idiom)
 {
     // FIXME: No implementation. Cannot be abstract because type is used for json deserialisation.
 }
 protected override void SetAnswerText(Idiom idiom)
 {
     this.AnswerText = idiom.Translation;
 }
Exemple #14
0
        public string UpdateIdiom(ObjectId id, UpdateData data)
        {
            Editor editor = _editors.Find(x => x.OpenId == data.OpenId).FirstOrDefault();
            List <DefinitionUpdate> updates = data.Updates;

            if (editor != null && !editor.IsLimited)
            {
                if (data.BsonMode)
                {
                    try
                    {
                        BsonDocument doc = BsonDocument.Parse(data.BsonStr.Replace("?", "?"));//不应允许有英文问号出现,不然小程序解析Json时会抛异常。
                        Idiom        idi = BsonSerializer.Deserialize <Idiom>(doc);
                        if (Regex.IsMatch(idi.Name, "^[\u4e00-\u9fa5]+(,[\u4e00-\u9fa5]+)?$"))
                        {
                            idi.LastEditor   = editor.NickName;
                            idi.UpdateTimeUT = DateTimeOffset.Now.ToUnixTimeSeconds();
                            if (_idioms.FindOneAndReplace(x => x.Id == id, idi) == null)
                            {
                                return("无法进行更新操作!");
                            }
                            //更新启动信息中的每日成语。
                            DateTimeOffset dateUT = DateTimeOffset.Now;
                            int            hour   = dateUT.Hour;
                            int            min    = dateUT.Minute;
                            int            sec    = dateUT.Second;
                            long           dateL  = dateUT.AddSeconds(-sec).AddMinutes(-min).AddHours(-hour).ToUnixTimeSeconds();
                            LaunchInf      deft   = _launchInf.Find(x => x.DateUT == DateTimeOffset.MinValue.ToUnixTimeSeconds()).FirstOrDefault();
                            LaunchInf      today  = _launchInf.Find(x => x.DateUT == dateL).FirstOrDefault();
                            if (deft != null && deft.DailyIdiom != null && deft.DailyIdiom.Id == idi.Id)
                            {
                                LaunchInf upd = deft;
                                upd.DailyIdiom = idi;
                                _launchInf.FindOneAndReplace(x => x.Id == upd.Id, upd);
                            }
                            if (today != null && today.DailyIdiom != null && today.DailyIdiom.Id == idi.Id)
                            {
                                LaunchInf upd = today;
                                upd.DailyIdiom = idi;
                                _launchInf.FindOneAndReplace(x => x.Id == upd.Id, upd);
                            }
                            //更新编辑者编辑次数。
                            var filter = Builders <Editor> .Filter.Eq("_id", editor.Id);

                            var update = Builders <Editor> .Update.Inc("EditCount", 1);

                            _editors.UpdateOne(filter, update);
                            return("成语已更新!");
                        }
                    }
                    catch (Exception)
                    {
                        return("无法进行更新操作!");
                    }
                }
                else if (updates != null && updates.Count > 0)
                {
                    try
                    {
                        List <Definition> defs = _idioms.Find(x => x.Id == id).FirstOrDefault().Definitions;
                        for (int i = 0; i < updates.Count; i++)
                        {
                            if (updates[i].Source != null && updates[i].Text != null && updates[i].Source != "" && updates[i].Text != "" && defs.Count > 0)
                            {
                                if (i < defs.Count)
                                {
                                    defs[i].Source = updates[i].Source.Replace("?", "?");
                                    defs[i].Text   = updates[i].Text.Replace("?", "?");
                                }
                                else
                                {
                                    defs.Add(new Definition {
                                        Source = updates[i].Source, Text = updates[i].Text, Examples = null, Addition = null, IsBold = false, Links = null
                                    });
                                }
                            }
                            else
                            {
                                return("无法进行更新操作!");
                            }
                        }
                        var filter = Builders <Idiom> .Filter.Eq("_id", id);

                        var update = Builders <Idiom> .Update.Set("Definitions", defs).Set("LastEditor", editor.NickName).Set("UpdateTimeUT", DateTimeOffset.Now.ToUnixTimeSeconds());

                        _idioms.UpdateOne(filter, update);
                        //更新启动信息中的每日成语。
                        DateTimeOffset dateUT = DateTimeOffset.Now;
                        int            hour   = dateUT.Hour;
                        int            min    = dateUT.Minute;
                        int            sec    = dateUT.Second;
                        long           dateL  = dateUT.AddSeconds(-sec).AddMinutes(-min).AddHours(-hour).ToUnixTimeSeconds();
                        LaunchInf      deft   = _launchInf.Find(x => x.DateUT == DateTimeOffset.MinValue.ToUnixTimeSeconds()).FirstOrDefault();
                        LaunchInf      today  = _launchInf.Find(x => x.DateUT == dateL).FirstOrDefault();
                        Idiom          idi    = _idioms.Find(x => x.Id == id).FirstOrDefault();
                        if (deft != null && deft.DailyIdiom != null && deft.DailyIdiom.Id == id)
                        {
                            LaunchInf upd = deft;
                            upd.DailyIdiom = idi;
                            _launchInf.FindOneAndReplace(x => x.Id == upd.Id, upd);
                        }
                        if (today != null && today.DailyIdiom != null && today.DailyIdiom.Id == idi.Id)
                        {
                            LaunchInf upd = today;
                            upd.DailyIdiom = idi;
                            _launchInf.FindOneAndReplace(x => x.Id == upd.Id, upd);
                        }
                        //更新编辑者编辑次数。
                        var filter2 = Builders <Editor> .Filter.Eq("_id", editor.Id);

                        var update2 = Builders <Editor> .Update.Inc("EditCount", 1);

                        _editors.UpdateOne(filter2, update2);
                        return("释义已更新!");
                    }
                    catch (Exception)
                    {
                        return("无法进行更新操作!");
                    }
                }
            }
            return("无法进行更新操作!");
        }
 public void Add(Idiom newIdiom)
 {
     idiomsService.AddAsync(newIdiom);
     Console.WriteLine("Idiom added: ");
     Console.WriteLine(newIdiom);
 }
Exemple #16
0
/// <summary>
/// ///////////////////////////////////////////////////////////////////////////////////////////////////////////
/// </summary>
        public async Task <Idiom> GetIdiomByname(Idiom idiom)
        {
            return(await appDbContext.Idioms.Where(n => n.Text == idiom.Text && n.Id != idiom.Id)
                   .FirstOrDefaultAsync());
        }
Exemple #17
0
 /// <summary>Translates to.</summary>
 /// <param name="idiom">The idiom.</param>
 public static void TranslateTo(Idiom idiom)
 {
     Change.Invoke(null, idiom);
 }