示例#1
0
 protected void SetContinueAlert(string tdid, Func <bool> isTrigger)
 {
     if (isTrigger == null)
     {
         return;
     }
     if (isTrigger.Invoke())
     {
         if (!ContinueData.ContainsTDID(tdid))
         {
             Add(tdid);
         }
     }
     else
     {
         Remove(tdid);
     }
 }
                static IObservable <AppBinary?> UpdateAppData(ContinueData <PushVersionCommand> m)
                {
                    var(commit, fileName) = ((string, ITempFile))m.Result.Outcome !;
                    return(Observable.Using(() => fileName,
                                            file =>
                                            (
                                                from info in Observable.Return((Commit: commit, File: file, Data: m))
                                                let oldApp = info.Data.AppData ?? AppData.Empty
                                                             let newVersion = oldApp.Last + 1
                                                                              let newId = $"{oldApp.Id}-{newVersion}.zip"
                                                                                          let newBinary = new AppFileInfo(newId, oldApp.Last + 1, DateTime.UtcNow, false, info.Commit)
                                                                                                          let newData = oldApp with
                    {
                        Last = newVersion,
                        LastUpdate = DateTime.UtcNow,
                        Versions = info.Data.AppData !.Versions.Add(newBinary)
                    }
                                                select(info.Data.State, NewData: newData, NewBinary: newBinary, info.File,
                                                       ToDelete: newData.Versions.OrderByDescending(i => i.CreationTime).Skip(5)
                                                       .Where(i => !i.Deleted).ToArray())
                                            )
                                            .Select(i =>
                    {
                        using var stream = i.State.Files.GetFile(i.NewBinary.Id).Create();
                        using var fileStream = i.File.Stream;

                        fileStream.Seek(0, SeekOrigin.Begin);
                        fileStream.CopyTo(stream);

                        var newData = i.ToDelete
                                      .Aggregate(i.NewData,
                                                 (current, appFileInfo) => current !with
                        {
                            Versions = current.Versions
                                       .Replace(appFileInfo, appFileInfo with
                            {
                                Deleted = true
                            })
                        });

                        i.State.Apps.Update(newData !);
                        i.State.ToDelete.Add(i.ToDelete.Select(e => new ToDeleteRevision(e.Id)));
                        return (Data: newData, i.NewBinary, i.State);
                    })
示例#3
0
 public void Remove(TData alert)
 {
     if (alert == null)
     {
         return;
     }
     alert.OnBeRemoved();
     Data.Remove(alert);
     if (alert.Type == AlertType.Interaction)
     {
         InteractionData.Remove(alert);
         Callback_OnInteractionChange?.Invoke(alert);
     }
     else if (alert.Type == AlertType.Disposable)
     {
         DisposableData.Remove(alert);
         Callback_DisposableChange?.Invoke(alert);
     }
     else if (alert.Type == AlertType.Continue)
     {
         ContinueData.Remove(alert);
         Callback_ContinueChange?.Invoke(alert);
     }
     //移除Article
     foreach (var item in alert.SelfArticle)
     {
         ArticleMgr.RemoveArticle(item);
     }
     foreach (var item in alert.TargetArticle)
     {
         ArticleMgr.RemoveArticle(item);
     }
     if (BaseGlobal.IsUnReadData)
     {
         Callback_OnRemoved?.Invoke(alert);
     }
 }
示例#4
0
        private TData Add(string tdid, BaseUnit cast = null, Callback <TData> action = null, bool isAutoTrigger = false)
        {
            if (!TDLuaMgr.Contains(tdid))
            {
                if (CommonAlert == tdid)
                {
                    CLog.Error("没有:{0},请手动添加CommonAlert", tdid);
                }
                else
                {
                    CLog.Error("没有:{0},请手动添加Alert", tdid);
                }
                return(null);
            }

            TData sourceAlert = TDLuaMgr.Get <TData>(tdid);

            sourceAlert.Cast     = cast ? cast : LocalPlayer;
            sourceAlert.AlertMgr = this;

            //判断通知是否可以被合并
            var finalAlert = CanMerge(sourceAlert);

            if (finalAlert != null)
            {
                finalAlert.OnMerge();
                Callback_OnMerge?.Invoke(finalAlert);
            }
            else
            {
                finalAlert    = sourceAlert.Copy <TData>();
                finalAlert.ID = IDUtil.Gen();
                finalAlert.OnBeAdded(SelfBaseUnit);
                Data.Add(finalAlert);
                if (finalAlert.Type == AlertType.Interaction)
                {
                    //推送最近一次的谈判信息
                    if (ArticleMgr.IsStarNegotiation)
                    {
                        ArticleMgr.PushNagotiationToAlert(finalAlert);
                    }
                    InteractionData.Add(finalAlert);
                    Callback_OnInteractionChange?.Invoke(finalAlert);
                }
                else if (finalAlert.Type == AlertType.Disposable)
                {
                    DisposableData.Add(finalAlert);
                    Callback_DisposableChange?.Invoke(finalAlert);
                }
                else if (finalAlert.Type == AlertType.Continue)
                {
                    ContinueData.Add(finalAlert);
                    Callback_ContinueChange?.Invoke(finalAlert);
                }
                action?.Invoke(finalAlert);
                if (BaseGlobal.IsUnReadData)
                {
                    Callback_OnAdded?.Invoke(finalAlert);
                }
            }
            if (finalAlert.IsAutoTrigger || isAutoTrigger)
            {
                finalAlert.DoLeftClickTrigger();
            }
            return(finalAlert);
        }