Compare commits
3 Commits
569138530d
...
b07e02e643
| Author | SHA1 | Date | |
|---|---|---|---|
| b07e02e643 | |||
| f0358f640d | |||
|
|
27e79a3df5 |
@ -272,7 +272,7 @@ class ConnectionManager:
|
||||
for lock_key in lock_keys:
|
||||
self.cell_locks.pop(lock_key, None)
|
||||
|
||||
def is_locked_by_other(
|
||||
def is_cell_available_for_edit(
|
||||
self,
|
||||
con_key: ConnectionKeyEnum,
|
||||
user_id: int,
|
||||
@ -280,10 +280,10 @@ class ConnectionManager:
|
||||
form_key,
|
||||
) -> bool:
|
||||
if not cell_key:
|
||||
return False
|
||||
return True
|
||||
cell_key = frozenset(cell_key.items())
|
||||
lock_owner_id = self.cell_locks.get((con_key, frozenset(form_key.items()), cell_key))
|
||||
return lock_owner_id is not None and lock_owner_id != user_id
|
||||
return lock_owner_id is not None and lock_owner_id == user_id
|
||||
|
||||
def is_row_locked_by_other(
|
||||
self,
|
||||
@ -662,7 +662,7 @@ def resolve_cell_key(event_data: dict) -> dict | None:
|
||||
if not data or "line_id" not in data or "column" not in data:
|
||||
return None
|
||||
return {
|
||||
"line_id": data["line_id"],
|
||||
"line_id": data.get("line_id_code", data["line_id"]),
|
||||
"column": data["column"],
|
||||
}
|
||||
|
||||
@ -750,19 +750,7 @@ async def process_websocket(
|
||||
)
|
||||
continue
|
||||
case "cell_updated":
|
||||
if manager.is_locked_by_other(
|
||||
con_key=con_key,
|
||||
user_id=user_id,
|
||||
cell_key=cell_key,
|
||||
form_key=kwargs_process,
|
||||
):
|
||||
data["error"] = "Ячейка уже редактируется другим пользователем"
|
||||
await manager.send_back(
|
||||
data,
|
||||
websocket,
|
||||
)
|
||||
continue
|
||||
if cell_key and not manager.acquire_cell_lock(
|
||||
if not manager.is_cell_available_for_edit(
|
||||
con_key=con_key,
|
||||
user_id=user_id,
|
||||
cell_key=cell_key,
|
||||
@ -774,6 +762,18 @@ async def process_websocket(
|
||||
websocket,
|
||||
)
|
||||
continue
|
||||
# if cell_key and not manager.acquire_cell_lock(
|
||||
# con_key=con_key,
|
||||
# user_id=user_id,
|
||||
# cell_key=cell_key,
|
||||
# form_key=kwargs_process,
|
||||
# ):
|
||||
# data["error"] = "Ячейка уже редактируется другим пользователем"
|
||||
# await manager.send_back(
|
||||
# data,
|
||||
# websocket,
|
||||
# )
|
||||
# continue
|
||||
case "row_deleted":
|
||||
if manager.is_row_locked_by_other(
|
||||
con_key=con_key,
|
||||
|
||||
@ -249,6 +249,7 @@ export const RealtimeProvider = ({
|
||||
event: "cell_updated",
|
||||
data: {
|
||||
line_id: lineId,
|
||||
line_id_code: row.id,
|
||||
column: colId,
|
||||
value: value,
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user