Esempio n. 1
0
 public static Admin.DictEntryRes processCommand(Admin.DictEntryCmd cmd) {
   Func<Langs, Langs, IEnumerable<ByHand>> getHands = (crsL, natL) => {
     var fn = Machines.rootPath + string.Format(@"RwDicts\Sources\LingeaOld\design\byHand_{0}_{1}.xml", crsL, natL);
     IEnumerable<string> fns = File.Exists(fn) ? XExtension.Create(fn) : Directory.EnumerateFiles(Machines.rootPath + @"RwDicts\Sources\LingeaOld\design", string.Format("byHand_{0}_{1}*.xml", crsL, natL));
     return fns.SelectMany(f => XmlUtils.FileToObject<List<ByHand>>(f));
   };
   var hands = getHands(cmd.crsLang, cmd.natLang).ToDictionary(bh => bh.id(), bh => bh);
   var handFn = Machines.rootPath + string.Format(@"RwDicts\Sources\LingeaOld\design\byHand_{0}_{1}.xml", cmd.crsLang, cmd.natLang);
   ByHand edited;
   if (entries == null) entries = LingeaDictionary.getOldLingeaEntries();
   if (dictEntries == null) dictEntries = XmlUtils.FileToObject<LingeaDictionary.DictEntry[]>(Machines.rootPath + @"RwDicts\Sources\LingeaOld\design\entriesInfo.xml");
   switch (cmd.type) {
     case Admin.DictEntryCmdType.loadDict:
       Func<LingeaDictionary.DictEntry, Langs> getHand = de => hands.TryGetValue(de.id(), out edited) ? edited.okCrs : Langs.no;
       var res = dictEntries.
         //Where(de => cmd.crsLang == de.crsLang && cmd.natLang == de.natLang).
         Where(de => de.okCrs == Langs.no && cmd.crsLang == de.crsLang && cmd.natLang == de.natLang).
         Select(de => new DictEntryCmd {
           entryId = de.entryId,
           soundMaster = de.soundMaster,
           html = entries[de.crsLang][de.natLang].entryIdToEntry[de.entryId].ToString(),
           okCrs = getHand(de),
         }).ToArray();
       //return new Admin.DictEntryRes { entries = res2.Length > 1000 ? res2.Where(de => de.okCrsMaybe == Langs.no).Take(1000).ToArray() : res2 };
       return new Admin.DictEntryRes { entries = res };
     case Admin.DictEntryCmdType.saveEntry:
       if (!hands.TryGetValue(cmd.id(), out edited)) { edited = new ByHand { entryId = cmd.entryId /*, crsLang = cmd.crsLang, natLang = cmd.natLang, okCrsReason = cmd.okCrsReason*/ }; hands.Add(edited.id(), edited); }
       edited.okCrs = cmd.okCrs;
       XmlUtils.ObjectToFile(handFn, hands.Values.ToList());
       return new Admin.DictEntryRes();
     case DictEntryCmdType.statistics:
       var files0 = dictEntries.Where(de => de.okCrs == Langs.no);
       var files1 = files0.GroupBy(de => new { de.crsLang, de.natLang }).Where(g => g.Count() > 0).Select(g => new { g.Key, count = g.Count() });
       var files2 = files1.
         Select(g => new {
           g.Key,
           count = g.count
         });
       var files3 = files2.Select(fc => new DictEntryCmd {
         allCount = fc.count,
         todoCount = fc.count - getHands(fc.Key.crsLang, fc.Key.natLang).Where(d => d.okCrs != Langs.no).Count(),
         crsLang = fc.Key.crsLang,
         natLang = fc.Key.natLang,
       }).
       ToArray();
       return new Admin.DictEntryRes {
         entries = files3
       };
     default:
       throw new NotImplementedException();
   }
 }