Esempio n. 1
0
 public void UpdateContent([FromBody] UpdateContentRequest request)
 {
     // TODO content as Stream in the request instead of string
     using (var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(request.Content)))
     {
         var command = new UpdateFileContentCommand(request.FileId, content: memoryStream);
         updateFileContentCommandHandler.Handle(command);
     }
 }
Esempio n. 2
0
        public async Task UpdateSessionContent(UpdateContentRequest item)
        {
            var session = this.GetSession(item.SessionId);

            if (session != null)
            {
                session.UpdateContent(item);
                await Task.Run(() =>
                {
                    IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext <ListenHub>();
                    hubContext.Clients.Group(this.RoomId).UpdateSessionContent(item);
                });
            }
        }
Esempio n. 3
0
        public async Task UpdateSessionContent(UpdateContentRequest item)
        {
            var connectionId = Context.ConnectionId;
            var instance     = BroadcasterManager.GetInstance();

            if (!instance.IsBroadcaster(connectionId))
            {
                return;
            }

            var info        = instance.GetConnectionInfo(connectionId);
            var roomManager = RoomManager.GetInstance();
            var room        = roomManager.GetRoomInfo(info.RoomId);

            if (!room.IsOwnerSession(item.SessionId, connectionId))
            {
                return;
            }

            await room.UpdateSessionContent(item);
        }
Esempio n. 4
0
        public override async Task <Reply> UpdateContent(UpdateContentRequest request, ServerCallContext context)
        {
            var reply = new Reply();
            var user  = await _userService.GetUser(context.GetHttpContext());

            if (user == null)
            {
                reply.Error = Error.NeedLogin;
                return(reply);
            }

            if (!user.HasWritePermission())
            {
                reply.Error = Error.NoPermission;
                return(reply);
            }

            if (!Guid.TryParse(request.Id, out var id))
            {
                reply.Error = Error.InvalidArguments;
                return(reply);
            }

            var item = await _service.All().Where(i => i.Id == id && i.Type != (int)FileType.Folder)
                       .FirstOrDefaultAsync();

            if (item == null)
            {
                reply.Error = Error.NoSuchEntity;
                return(reply);
            }

            var originContent = item.Content;

            item.Content = await _contentService.Add(_resourcesGroup, request.Content);

            var resourceIds = new HashSet <Guid>();

            foreach (var idStr in request.ResourceIds)
            {
                if (Guid.TryParse(idStr, out var resourceId))
                {
                    resourceIds.Add(resourceId);
                }
            }
            var resources = await _service.All().Where(i => i.ParentId == id && i.Type == (int)FileType.Resource).ToArrayAsync();

            var resourceContentToDelete = resources.Where(r => !resourceIds.Contains(r.Id)).ToArray();
            await _service.Update(item);

            if (!string.IsNullOrWhiteSpace(originContent))
            {
                await _contentService.Delete(originContent);
            }
            foreach (var tobedeleted in resourceContentToDelete)
            {
                try
                {
                    await _contentService.Delete(tobedeleted.Content);
                }
                catch (Exception)
                {
                    //ignore
                }
            }

            return(reply);
        }
Esempio n. 5
0
        public async Task UpdateSessionContent(UpdateContentRequest item)
        {
            var connectionId = Context.ConnectionId;
            var instance = BroadcasterManager.GetInstance();
            if (!instance.IsBroadcaster(connectionId))
                return;

            var info = instance.GetConnectionInfo(connectionId);
            var roomManager = RoomManager.GetInstance();
            var room = roomManager.GetRoomInfo(info.RoomId);
            if (!room.IsOwnerSession(item.SessionId, connectionId))
                return;

            await room.UpdateSessionContent(item);
        }
Esempio n. 6
0
        public void UpdateContent(UpdateContentRequest request)
        {
            //var cloned =
            //    (from item in this.Content
            //     select new Line() {IsModified = item.IsModified, Text = item.Text}).ToList();
            //var isUpdated = true;

            var ordered = (from item in request.Data orderby item.Order ascending select item);

            lock (this.Content)
            {
                foreach (var data in ordered)
                {
                    switch (data.Type)
                    {
                    case UpdateType.Delete:
                        if (this.Content.IsInRange(data.Position, data.Length))
                        {
                            this.Content.RemoveRange((int)data.Position, (int)data.Length);
                        }
                        break;

                    case UpdateType.Insert:
                        if (data.Content == null)
                        {
                            continue;
                        }

                        if (this.Content.IsInRange(data.Position))
                        {
                            this.Content.InsertRange((int)data.Position, ParseMultiLineData(data.Content));
                        }
                        break;

                    case UpdateType.Replace:
                        if (data.Content == null)
                        {
                            continue;
                        }

                        if (this.Content.IsInRange(data.Position, data.Length))
                        {
                            // まず削除
                            this.Content.RemoveRange((int)data.Position, (int)data.Length);

                            // 次に挿入
                            this.Content.InsertRange((int)data.Position, ParseMultiLineData(data.Content));
                        }
                        break;

                    case UpdateType.RemoveMarker:
                        foreach (var item in this.Content)
                        {
                            item.IsModified = false;
                        }

                        break;

                    case UpdateType.ResetAll:
                        this.Content.Clear();
                        break;

                    case UpdateType.Append:
                    default:
                        if (data.Content == null)
                        {
                            continue;
                        }

                        this.Content.AddRange(ParseMultiLineData(data.Content));
                        break;
                    }
                }
            }
        }
Esempio n. 7
0
 public async Task UpdateSessionContent(UpdateContentRequest item)
 {
     var session = this.GetSession(item.SessionId);
     if (session != null)
     {
         session.UpdateContent(item);
         await Task.Run(() =>
         {
             IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<ListenHub>();
             hubContext.Clients.Group(this.RoomId).UpdateSessionContent(item);
         });
     }
 }