[FIX] Make Telodendria play ball with Schildi

The web versions worked fine, but the old Android ones tend to be
strict, which is a great tool for testing.
This commit is contained in:
LDA 2024-11-23 14:20:32 +01:00
parent 276b7fecd7
commit 1d0a7e62f2
4 changed files with 16 additions and 22 deletions

View file

@ -29,7 +29,7 @@
}, },
"States": { "States": {
"fields": { "fields": {
"events": { "type": "[StrippedStateEvent]" } "events": { "type": "array" }
}, },
"type": "struct" "type": "struct"
}, },

View file

@ -60,6 +60,8 @@ ROUTE_IMPL(RouteMessages, path, argp)
int limit = strtol(limitStr, NULL, 10); int limit = strtol(limitStr, NULL, 10);
Array *messages = NULL; Array *messages = NULL;
Array *state = NULL;
size_t i;
Room *room = NULL; Room *room = NULL;
@ -136,7 +138,18 @@ ROUTE_IMPL(RouteMessages, path, argp)
Free(startId); Free(startId);
} }
response = HashMapCreate(); response = HashMapCreate();
state = ArrayCreate();
JsonSet(response, JsonValueArray(messages), 1, "chunk"); JsonSet(response, JsonValueArray(messages), 1, "chunk");
for (i = 0; i < ArraySize(messages); i++)
{
HashMap *e = JsonValueAsObject(ArrayGet(messages, i));
if (HashMapGet(e, "state_key"))
{
ArrayAdd(state, JsonValueDuplicate(ArrayGet(messages, i)));
}
}
JsonSet(response, JsonValueArray(state), 1, "state");
JsonSet(response, JsonValueString(from), 1, "start");
if (end) if (end)
{ {
JsonSet(response, JsonValueString(end), 1, "end"); JsonSet(response, JsonValueString(end), 1, "end");

View file

@ -50,15 +50,6 @@ ClientfyEventSync(HashMap *pdu)
return ret; return ret;
} }
static StrippedStateEvent
StripStateEventSync(HashMap *pdu)
{
StrippedStateEvent ret = { 0 };
char *ignored;
StrippedStateEventFromJson(pdu, &ret, &ignored);
return ret;
}
ROUTE_IMPL(RouteSync, path, argp) ROUTE_IMPL(RouteSync, path, argp)
{ {
@ -245,13 +236,8 @@ ROUTE_IMPL(RouteSync, path, argp)
while (StateIterate(state, &type, &key, (void **) &id)) while (StateIterate(state, &type, &key, (void **) &id))
{ {
HashMap *e = RoomEventFetch(r, id, true); HashMap *e = RoomEventFetch(r, id, true);
StrippedStateEvent rs = StripStateEventSync(e);
StrippedStateEvent *s = Malloc(sizeof(*s));
memcpy(s, &rs, sizeof(*s));
JsonFree(e); ArrayAdd(joined->state.events, JsonValueObject(e));
ArrayAdd(joined->state.events, s);
Free(type); Free(type);
Free(key); Free(key);
} }

View file

@ -1318,13 +1318,11 @@ UserPushAccountData(User *user, char *key)
JsonValueFree(HashMapSet(join, JsonValueFree(HashMapSet(join,
key, JsonValueObject(accountEntry) key, JsonValueObject(accountEntry)
)); ));
Log(LOG_INFO, "user=%s's batch=%s", user->name, entry);
} }
DbUnlock(user->db, syncRef); DbUnlock(user->db, syncRef);
} }
DbListFree(entries); DbListFree(entries);
Log(LOG_INFO, "You have notified the '%s' about key=%s", user->name, key);
UserNotifyUser(user->name); UserNotifyUser(user->name);
} }
void void
@ -1461,8 +1459,6 @@ UserFillSyncDiff(User *user, char *batch)
return; return;
} }
Log(LOG_WARNING, "This is an initial sync.");
joins = UserListJoins(user); joins = UserListJoins(user);
syncRef = DbLock( syncRef = DbLock(
user->db, 4, "users", user->name, "sync", batch user->db, 4, "users", user->name, "sync", batch
@ -1744,8 +1740,7 @@ UserFetchMessages(User *user, int n, char *token, char **next)
bool toFree = true; bool toFree = true;
/* Push event into our message list. /* Push event into our message list, and check if we can use it */
* TODO: Check if the user has the right to see the event/room. */
if (RoomIsEventVisible(room, user, curr)) if (RoomIsEventVisible(room, user, curr))
{ {
ArrayAdd(messages, event); ArrayAdd(messages, event);