public UserBuilder WithIdiom(Idiom idiom) { _idiom = idiom; return(this); }
/// <summary>Translates to.</summary> /// <param name="idiom">The idiom.</param> public static void TranslateTo(Idiom idiom) { OnChange?.Invoke(idiom, idiom); }
protected override void SetQuestionText(Idiom idiom) { string gappedSentence = this.MakeGapInSentence(idiom.Sentence, idiom.Word); this.QuestionText = $"{gappedSentence} ({idiom.Translation})"; }
protected override void SetAnswerText(Idiom idiom) { this.AnswerText = idiom.Word; }
public static bool Validate(this Idiom idiom) { return(string.IsNullOrEmpty(idiom.Pronunciation) && string.IsNullOrEmpty(idiom.Word) && idiom.Definitions.Any()); }
// 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); }
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; }
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); }
/// <summary> /// /////////////////////////////////////////////////////////////////////////////////////////////////////////// /// </summary> public async Task <Idiom> GetIdiomByname(Idiom idiom) { return(await appDbContext.Idioms.Where(n => n.Text == idiom.Text && n.Id != idiom.Id) .FirstOrDefaultAsync()); }
/// <summary>Translates to.</summary> /// <param name="idiom">The idiom.</param> public static void TranslateTo(Idiom idiom) { Change.Invoke(null, idiom); }