예제 #1
0
        //public string GenerateIdiom()
        //{
        //    Dictionary<string, string> dic = new Dictionary<string, string>
        //    {
        //        { "5beghawgsagsaga7eb855e3e94", "66hhh" },
        //        { "5bebec2a2hgbhghhhhhhhh855e3e94", "6gggggh" }
        //    };
        //    Definition def = new Definition { Text = "hahaha", Addition = "666", IsBold = false, Source = "hhh", Links = dic };
        //    Definition def2 = new Definition { Text = "haa", Addition = "345sgsdgsdgc6", IsBold = false, Source = "hhh", Links = dic };
        //    List<Definition> defs = new List<Definition>
        //    {
        //        def,
        //        def2
        //    };
        //    _idioms.InsertOne(new Idiom { Name = "TEST", Definitions = defs, LastEditor = "fssssss", UpdateTimeUT = 666666, Index = 'C' });
        //    return "Done!";
        //}

        //public string GenerateLaunchInf()
        //{
        //    Dictionary<string, string> i = new Dictionary<string, string> {                { "aaaaaaaa", "6ggggh" },
        //        { "5bshedfhdfh4", "6gadfadah" }};
        //    _launchInf.InsertOne(new LaunchInf { Text = "23333", DailyIdiom = null, /*DailyIdiomName = "6666",*/  ThemeColor = null, LogoUrl = null, DisableAds = false, /*FloatEasterEggs = i, */DateUT = DateTimeOffset.MinValue.ToUnixTimeSeconds() });
        //    return "Done!";
        //}
        #endregion
        //这里生成每日成语。
        public void GenLI()
        {
            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();
            //默认的每日成语。
            Idiom     deftIdiom = _launchInf.Find(x => x.DateUT == DateTimeOffset.MinValue.ToUnixTimeSeconds()).FirstOrDefault().DailyIdiom;
            LaunchInf inf       = _launchInf.Find(x => x.DateUT == dateL).FirstOrDefault();
            //从数据库里随机抽取一条成语。
            Idiom idi = _idioms.Aggregate().AppendStage <Idiom>("{$sample:{size:1}}").FirstOrDefault();

            //当idi不为null才运行。
            if (idi != null)
            {
                if (inf == null)
                {
                    //这种情况说明当天的inf还没有生成。
                    if (deftIdiom == null)
                    {
                        //若默认成语为空,则生成每日成语。
                        LaunchInf ins = new LaunchInf {
                            Version = null, ArgsDic = null, Text = null, ThemeColor = null, LogoUrl = null, DisableAds = false, DailyIdiom = idi, IdiomsCount = 0, DateUT = dateL
                        };
                        _launchInf.InsertOne(ins);
                    }
                    else
                    {
                        //不为空则将默认成语写入当天的启动信息,方便以后查询记录。
                        LaunchInf ins = new LaunchInf {
                            Version = null, ArgsDic = null, Text = null, ThemeColor = null, LogoUrl = null, DisableAds = false, DailyIdiom = deftIdiom, IdiomsCount = 0, DateUT = dateL
                        };
                        _launchInf.InsertOne(ins);
                    }
                }
                else
                {
                    //这种情况说明当天的inf已经提前编辑好了,根据需要补全。
                    if (inf.DailyIdiom == null)
                    {
                        if (deftIdiom == null)
                        {
                            //若默认成语为空,则生成每日成语。
                            UpdateDefinition <LaunchInf> upd = Builders <LaunchInf> .Update.Set("DailyIdiom", idi);

                            _launchInf.UpdateOne(x => x.DateUT == dateL, upd);
                        }
                        else
                        {
                            //不为空则将默认成语写入当天的启动信息,方便以后查询记录。
                            UpdateDefinition <LaunchInf> upd = Builders <LaunchInf> .Update.Set("DailyIdiom", deftIdiom);

                            _launchInf.UpdateOne(x => x.DateUT == dateL, upd);
                        }
                    }
                }
            }
        }
예제 #2
0
 public LaunchInf MergeLI(LaunchInf current, LaunchInf deft, bool proed)
 {
     if (current == null)
     {
         current = new LaunchInf {
             Version = null, ArgsDic = null, Text = null, ThemeColor = null, LogoUrl = null, DisableAds = false, DailyIdiom = null, IdiomsCount = 0, DateUT = 0
         };
     }
     //将当前启动信息与默认启动信息合并并返回。
     current.Version = version.ToString();
     current.ArgsDic = deft.ArgsDic;
     if (current.IdiomsCount == 0 && deft.IdiomsCount == 0)
     {
         current.IdiomsCount = _idioms.CountDocuments(new BsonDocument());
     }
     else if (current.IdiomsCount == 0)
     {
         current.IdiomsCount = deft.IdiomsCount;
     }
     if (current.Text == null)
     {
         current.Text = deft.Text;
     }
     if (current.ThemeColor == null)
     {
         current.ThemeColor = deft.ThemeColor;
     }
     if (current.LogoUrl == null)
     {
         current.LogoUrl = deft.LogoUrl;
     }
     if (current.DisableAds == false)
     {
         current.DisableAds = deft.DisableAds;
     }
     if (current.DailyIdiom == null)
     {
         current.DailyIdiom = deft.DailyIdiom;
     }
     if (Config.ProtectionEnabled && proed)
     {
         Idiom             raw      = current.DailyIdiom;
         List <Definition> defs     = raw.Definitions;
         List <Definition> modified = new List <Definition>();
         foreach (Definition def in defs)
         {
             def.Source = "网络";
             modified.Add(def);
         }
         raw.Definitions    = modified;
         current.DailyIdiom = raw;
     }
     return(current);
 }
예제 #3
0
        public LaunchInf GetLaunchInf(long date, string openId)
        {
            bool      proed   = false;
            LaunchInf deft    = _launchInf.Find(x => x.DateUT == DateTimeOffset.MinValue.ToUnixTimeSeconds()).FirstOrDefault();
            LaunchInf current = _launchInf.Find(x => x.DateUT == date).FirstOrDefault();

            if (_editors.Find(x => x.OpenId == openId).FirstOrDefault() == null)
            {
                proed = true;
            }
            return(MergeLI(current, deft, proed));
        }
예제 #4
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("无法进行更新操作!");
        }