Remove _diff marker: use self-describing jay_diff protocol
Server (network.py): send every record in diff mode starting from
prev={}, including the first — fixes history drop on new client connect.
Collect (collect.py): remove payload["_diff"] = True from live broadcast.
GUI client (gui_client.py): always call jay_merge_full in diff mode;
drop the _diff key check that gated reconstruction.
CLI client (client.py): fix `args.diff or True` guard that made --diff
irrelevant.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -57,11 +57,7 @@ def main() -> None:
|
|||||||
try:
|
try:
|
||||||
data = json.loads(line)
|
data = json.loads(line)
|
||||||
if args.diff:
|
if args.diff:
|
||||||
if data.get("_diff"):
|
state = jay_merge_full(state, data)
|
||||||
diff = {k: v for k, v in data.items() if k != "_diff"}
|
|
||||||
state = jay_merge_full(state, diff)
|
|
||||||
else:
|
|
||||||
state = data
|
|
||||||
display = state
|
display = state
|
||||||
else:
|
else:
|
||||||
display = data
|
display = data
|
||||||
|
|||||||
@@ -131,7 +131,6 @@ def run(args: argparse.Namespace) -> None:
|
|||||||
save_store(out, store, args.max_records)
|
save_store(out, store, args.max_records)
|
||||||
if args.diff and last_broadcast:
|
if args.diff and last_broadcast:
|
||||||
payload = jay_diff_full(last_broadcast, snapshot, combine_upd_add=True)
|
payload = jay_diff_full(last_broadcast, snapshot, combine_upd_add=True)
|
||||||
payload["_diff"] = True
|
|
||||||
else:
|
else:
|
||||||
payload = snapshot
|
payload = snapshot
|
||||||
network.broadcast(payload, push_clients, push_lock)
|
network.broadcast(payload, push_clients, push_lock)
|
||||||
|
|||||||
+1
-5
@@ -159,11 +159,7 @@ class TcpReader(QObject):
|
|||||||
try:
|
try:
|
||||||
data = json.loads(line)
|
data = json.loads(line)
|
||||||
if self._diff_mode:
|
if self._diff_mode:
|
||||||
if data.get("_diff"):
|
self._state = jay_merge_full(self._state, data)
|
||||||
diff = {k: v for k, v in data.items() if k != "_diff"}
|
|
||||||
self._state = jay_merge_full(self._state, diff)
|
|
||||||
else:
|
|
||||||
self._state = data
|
|
||||||
self.message.emit(copy.deepcopy(self._state))
|
self.message.emit(copy.deepcopy(self._state))
|
||||||
else:
|
else:
|
||||||
self.message.emit(data)
|
self.message.emit(data)
|
||||||
|
|||||||
+4
-8
@@ -31,16 +31,12 @@ def _accept_loop(
|
|||||||
records = in_mem
|
records = in_mem
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if store_ref.get("diff_mode") and len(records) > 1:
|
if store_ref.get("diff_mode"):
|
||||||
lines = [json.dumps(records[0], default=str) + "\n"]
|
prev: dict = {}
|
||||||
prev = records[0]
|
for record in records:
|
||||||
for record in records[1:]:
|
|
||||||
diff = jay_diff_full(prev, record, combine_upd_add=True)
|
diff = jay_diff_full(prev, record, combine_upd_add=True)
|
||||||
diff["_diff"] = True
|
|
||||||
lines.append(json.dumps(diff, default=str) + "\n")
|
|
||||||
prev = record
|
prev = record
|
||||||
for line in lines:
|
conn.sendall((json.dumps(diff, default=str) + "\n").encode())
|
||||||
conn.sendall(line.encode())
|
|
||||||
else:
|
else:
|
||||||
for record in records:
|
for record in records:
|
||||||
conn.sendall((json.dumps(record, default=str) + "\n").encode())
|
conn.sendall((json.dumps(record, default=str) + "\n").encode())
|
||||||
|
|||||||
Reference in New Issue
Block a user