Commit Graph

355 Commits

Author SHA1 Message Date
Bruno Windels
6d68ec1bac move fillGap to room 2020-03-21 23:40:40 +01:00
Bruno Windels
f729108226 pass emit update fn through setter so we control when tile can update 2020-03-21 14:28:09 +01:00
Bruno Windels
a3714f49cc group public methods for a tile together 2020-03-21 14:26:56 +01:00
Bruno Windels
4176af56ea add failing test for problem 2020-03-21 14:22:16 +01:00
Bruno Windels
44760a9f82 Revert "add logging related to fragments"
This reverts commit 2f355cabef.
2020-03-21 10:47:35 +01:00
Bruno Windels
c4a5de20c0 update previous fragment in comparer when appending a new line fragment 2020-03-21 10:45:09 +01:00
Bruno Windels
2f355cabef add logging related to fragments
both when rebuilding and when sorting will be used
2020-03-20 20:23:07 +01:00
Bruno Windels
7e8cc7ae00 need to return the response here, not the request wrapper
we were reading back a remote id of undefined because of this,
so when for some reason we never receive the message down from sync,
the pending message keeps sending on every load. The server ignores
the send though, because the transaction id is already used, and it returns
the remote id of the event that was already sent the previous time, but
as we were not storing this remote id, we'd just try again and again.

not receiving it through sync could have happened when we were sending a bunch of events
and then receiving (this is how we encountered this bug, while trying to repro another) the
response, but not yet the sync for the message that got wedged. Then we typed stuff on another client
so we would get a limited response for that room, and boom, we would not get the remote echo of the
event that was already sent (but because of this bug we didn't store the remote id) but no echo received yet (when we remove the pending event),
so it gets wedged!
2020-03-17 00:11:50 +01:00
Bruno Windels
b69efc3425 fix errors when replaying 2020-03-17 00:07:54 +01:00
Bruno Windels
06e43d9ee3 fix all tests 2020-03-14 21:38:37 +01:00
Bruno Windels
56c87b3966 better naming 2020-03-14 20:49:15 +01:00
Bruno Windels
ac4a7f971b only apply sync changes in room summary once txn is committed
- also remove m.room.aliases support as they were wrongly implemented
   and now obsolete
 - don't count invited and joined members according to m.room.member
   events anymore as it was also wrongly implemented
   (only when prev!==new membership, but on initial sync we only get
   last member event, which might have been a nick change
2020-03-14 20:46:49 +01:00
Bruno Windels
fc741272ba only apply sync changes in session once txn is committed 2020-03-14 20:45:36 +01:00
Bruno Windels
224d56698a only set new live key when creating a fragment after the txn succeeds
when doing a limited sync, and a new fragment is created,
this._lastLiveKey is updated immediately. If the transaction
would then fail, the fragmentId in this._lastLiveKey was incremented
but the fragment wasn't written to the store, so if sync is resumed
and would subsequently succeed, fragmentIds would be assigned to events
that don't have a corresponding fragment in the timelineFragment store.

This would throw errors when trying to load the timeline,
breaking the whole app.

This changes SyncWriter to only update this._lastLiveKey in
the emit phase, when the transactions has been committed already.
2020-01-04 20:06:49 +01:00
Bruno Windels
bdc2c3d9ad cleanup: storage is not used in SyncWriter
as the transaction is now always passed as an argument, it never
creates one on its own.
2020-01-04 20:04:57 +01:00
Bruno Windels
29b531ae80 add (commented out) instructions how to use record/replay 2019-12-23 14:29:19 +01:00
Bruno Windels
1d9a5c490a add record/replay network layer 2019-12-23 14:28:42 +01:00
Bruno Windels
aa86748cdd pull fetch code out of homeserverapi 2019-12-23 14:28:27 +01:00
Bruno Windels
35c090dcb4 add proper import/export functionality 2019-12-14 18:29:35 +01:00
Bruno Windels
9c42710f9b add github link to home screens 2019-11-22 09:46:19 +01:00
Bruno Windels
8a55778c32 make sure aliases and heroes aren't empty when picking name 2019-11-22 09:29:18 +01:00
Bruno Windels
325077bcb0 try more domexception fixes 2019-11-21 18:28:18 +01:00
Bruno Windels
5ecf0a6717 fix error path on transaction abort error 2019-11-21 18:23:48 +01:00
Bruno Windels
d073f2825b show json in one line when clearing cache
also make naming consistent
2019-10-24 10:54:20 +02:00
Bruno Windels
d34a0c73b5 show json in list instead of alert so we can copy it 2019-10-13 08:29:23 +02:00
Bruno Windels
6f73d3983f add export/import of session data 2019-10-13 08:16:08 +02:00
Bruno Windels
e2b9e9dfdc add clear cache button for session 2019-10-13 07:48:49 +02:00
Bruno Windels
ad7a150aaa use aliases and heroes to fall back room name to 2019-10-13 07:48:33 +02:00
Bruno Windels
b16f21867c preserve value for storage errors on add and put 2019-10-12 22:19:16 +02:00
Bruno Windels
201b70ee4f fix failing to sync new rooms 2019-10-12 22:18:36 +02:00
Bruno Windels
ac53b9099b only log error in sync loop 2019-10-12 22:18:19 +02:00
Bruno Windels
3ba20dece1 fixup for delete button changes 2019-10-12 22:18:08 +02:00
Bruno Windels
2fa5fa7890 add delete button in session picker 2019-10-12 21:16:48 +02:00
Bruno Windels
d367037332 very basic support for lazy loading 2019-10-12 20:24:09 +02:00
Bruno Windels
076582edc3 css fixes
- don't pronounce avatar initials
 - prevent room header growing wider than screen
 - ensure messages wrap their text
2019-09-28 09:46:09 +02:00
Bruno Windels
e3719b2527 allow http (no sssl) homeservers 2019-09-28 09:44:39 +02:00
Bruno Windels
d8696bea1d add offline availability with service worker and appcache 2019-09-15 14:32:12 +02:00
Bruno Windels
8616d79aad make fetch errors more informative by including method and url 2019-09-15 14:31:50 +02:00
Bruno Windels
2b2b4232e9 moar send logging 2019-09-15 12:25:14 +02:00
Bruno Windels
6f527fd2e0 use openCursor where openKeyCursor is not supported 2019-09-15 12:24:46 +02:00
Bruno Windels
bbf6943455 use .get fallback where .getKey is not supported (Edge 15) 2019-09-15 12:24:27 +02:00
Bruno Windels
8e590fe53b rename and use StorageError to deal with idb DOMerror 2019-09-15 12:23:54 +02:00
Bruno Windels
f7f9129b8b show send errors in UI 2019-09-15 12:23:26 +02:00
Bruno Windels
5a90b4673b fix CORS requests failing 2019-09-15 12:23:08 +02:00
Bruno Windels
ed67689fdf some minimal styling for login and session picker 2019-09-08 10:40:05 +02:00
Bruno Windels
09b9eff7c1 fix remaining errors to make login work 2019-09-08 10:19:16 +02:00
Bruno Windels
a7194e0c7a implement missing views 2019-09-08 10:18:59 +02:00
Bruno Windels
1082233de4 start of session picker view 2019-07-31 00:07:12 +02:00
Bruno Windels
c27172fc4e adjust main to new view 2019-07-31 00:07:04 +02:00
Bruno Windels
49a577991b login and session picker view models, sessions store 2019-07-31 00:06:53 +02:00
Bruno Windels
378eea8ceb
Merge pull request #5 from bwindels/bwindels/sending
Send text messages
2019-07-29 18:28:29 +00:00
Bruno Windels
5b4d984645 height of app should always fill screen (not more or less) 2019-07-29 20:11:15 +02:00
Bruno Windels
de35df10d8 fix test + bug in ConcatList update 2019-07-29 20:03:22 +02:00
Bruno Windels
b723ab4cef add failing test for ConcatList update 2019-07-29 20:03:06 +02:00
Bruno Windels
3b7ab8f1c8 fix MappedList test after passing params as well to updater 2019-07-29 20:02:42 +02:00
Bruno Windels
45cd85ead1 fixup: check for event entry with eventType, event isn't exposed anymore 2019-07-29 19:58:35 +02:00
Bruno Windels
7218595c17 only send message if it's non-empty 2019-07-29 19:54:21 +02:00
Bruno Windels
8665bcb897 concat synced events in timeline with pending events for local echo 2019-07-29 19:53:58 +02:00
Bruno Windels
88a7d64091 fixup: delay not awaited, but not needed for now 2019-07-29 19:53:30 +02:00
Bruno Windels
e23abe209f fixup: leftover from removing access to events 2019-07-29 19:53:07 +02:00
Bruno Windels
bfdff353b0 pass params in map operator update fn 2019-07-29 19:52:28 +02:00
Bruno Windels
7a6e91de84 concat operator for observable lists 2019-07-29 19:18:11 +02:00
Bruno Windels
6f650d19b1 map operator for observable lists 2019-07-29 19:17:55 +02:00
Bruno Windels
0b5c2f9273 better naming 2019-07-29 10:59:49 +02:00
Bruno Windels
b53b60e142 use correct handler and make test succeed 2019-07-29 10:59:07 +02:00
Bruno Windels
0cf7cb36c4 add failing test for unsubscribe using wrong handler 2019-07-29 10:58:27 +02:00
Bruno Windels
9b94c4bb61 don't expose raw event object from entry, pending event doesn't have it
it only has content and *some* of the meta fields,
but we want to threat pendingevententry and evententry as one
and the same in the rest of the application, so don't give access
to entire event object.
2019-07-29 10:27:12 +02:00
Bruno Windels
56cee450d1 return syncing user id from PendingEventEntry.sender
add User class where we later can track display name, avatar, ...
2019-07-29 10:24:34 +02:00
Bruno Windels
b26f7df689 pending events are not certain to be sorted here 2019-07-29 09:54:34 +02:00
Bruno Windels
3ed72df620 put everything together to make it roughly work
no local echo yet, and send errors are being swallowed
2019-07-27 10:51:51 +02:00
Bruno Windels
851100b88a send unsent messages after first sync 2019-07-26 22:40:39 +02:00
Bruno Windels
707988f806 better handle remote echos and hookup in session and room 2019-07-26 22:33:33 +02:00
Bruno Windels
ccb722d766 more WIP 2019-07-26 22:03:57 +02:00
Bruno Windels
f3d1128f28 WIP 2019-07-01 10:00:29 +02:00
Bruno Windels
c5b2d0c8b2 WIP 2019-06-28 00:52:54 +02:00
Bruno Windels
e09d2963df fix timeline scrolling 2019-06-28 00:44:49 +02:00
Bruno Windels
fc873fbfa5 more css fixes, and make back button work for compact layout 2019-06-26 23:14:39 +02:00
Bruno Windels
38a8132397 fix narrow layout 2019-06-26 22:43:59 +02:00
Bruno Windels
cd9f25ea80 convert tabs to spaces where needed 2019-06-26 22:31:36 +02:00
Bruno Windels
90a38078e0 unused import 2019-06-26 22:19:40 +02:00
Bruno Windels
59a303daa0 make user config available from phone on local wlan 2019-06-26 22:19:40 +02:00
Bruno Windels
72c193cce5 page to debug app on mobile phones without remote access to tools 2019-06-26 22:19:40 +02:00
Bruno Windels
b882e0ef8a respect argument count of idb calls
lumia doesn't like undefined arguments if they
are being left out, so call the idb calls with
the exact amount of arguments
2019-06-26 22:02:00 +02:00
Bruno Windels
bbb5e35bcb wrap everything that can throw a idb DOMException in StorageError
as lumia gives very cryptic errors without a stacktrace.
2019-06-26 22:00:50 +02:00
Bruno Windels
0fd52be710 encode idb array keys as sortable strings
that's why numeric parts of the keys have to be encoded
as a fixed length, "big-endian" ordered strings, so
string sorting will also sort the numeric keys correctly.

this also assumes room ids don't contain the "|" character,
we should probably escape the separator at some point.
2019-06-26 21:55:33 +02:00
Bruno Windels
106146660c define storage keys to be 32bit for idb / web platform
as a preparation to serialize the eventIndex and fragmentId
as a 8 character string, part of a concatenated string PK,
as lumia doesn't support array keys.
2019-06-26 21:52:41 +02:00
Bruno Windels
ca4361248f fallback for platforms missing AbortController 2019-06-26 19:49:49 +02:00
Bruno Windels
9cd5257959 load more events when scrolled to top 2019-06-16 17:29:33 +02:00
Bruno Windels
c12300bfa5 make loadList not private when we're going to override it 2019-06-16 17:28:51 +02:00
Bruno Windels
d34a26f0da store new gap entry on update so we can paginate again 2019-06-16 16:47:56 +02:00
Bruno Windels
2131329442 scroll to bottom when loading timeline 2019-06-16 16:39:20 +02:00
Bruno Windels
a1c23f715a always show date for now (but omit year to make it less annoying) 2019-06-16 16:19:26 +02:00
Bruno Windels
d7bc92c391 center placeholder text in both directions 2019-06-16 16:19:00 +02:00
Bruno Windels
b47898e025 show full stack on sync error 2019-06-16 15:49:00 +02:00
Bruno Windels
a09c3e7bed hide sender name if previous message was by same sender 2019-06-16 15:48:54 +02:00
Bruno Windels
4a657b279d apply css from prototype, other small changes, keep scroll at bottom 2019-06-16 15:21:20 +02:00
Bruno Windels
d72a7102b2 only bind className when the obj has at least 1 fn, also support it html 2019-06-16 15:12:54 +02:00
Bruno Windels
590ed56d68 leftover things that got moved during directory org 2019-06-16 10:54:37 +02:00
Bruno Windels
1917a528c7 replace ad hoc buttons and label with SyncStatusBar 2019-06-16 10:54:16 +02:00
Bruno Windels
a4bc2dd2b0 support isOwn on messages 2019-06-16 10:53:23 +02:00
Bruno Windels
a5a333b71a organize view code in directory like viewmodels 2019-06-16 10:53:01 +02:00
Bruno Windels
95e1d55b97 extract argument detection for el and use it in both html and Template 2019-06-15 17:50:54 +02:00
Bruno Windels
03df472c53 show placeholder in middle panel when no room is selected 2019-06-15 17:50:15 +02:00
Bruno Windels
16fed27a8a SwitchView, to alternate between different views 2019-06-15 17:49:45 +02:00
Bruno Windels
db376d3ac6 rename morpheus to brawl 2019-06-14 23:58:39 +02:00
Bruno Windels
ad92356b40 css class same name as prop 2019-06-14 23:46:47 +02:00
Bruno Windels
bec7720c42 cleanup template code 2019-06-14 23:46:31 +02:00
Bruno Windels
468af4755b cleanup html utils 2019-06-14 23:46:18 +02:00
Bruno Windels
5feca5e0f4 gap has its own view now 2019-06-14 23:44:31 +02:00
Bruno Windels
0a6c50b3bb support bindings for className object 2019-06-14 23:08:41 +02:00
Bruno Windels
f9038e2af9 dedicated template view for gaps 2019-06-14 22:55:07 +02:00
Bruno Windels
69be5012e8 templateview exposes viewModel prop 2019-06-14 22:54:51 +02:00
Bruno Windels
eba92399e3 update TemplateView with changes 2019-06-14 22:45:13 +02:00
Bruno Windels
0503b48c98 support conditional subtemplate & optimizations 2019-06-14 22:43:31 +02:00
Bruno Windels
773b4ed941 remove support for refs
not really needed, as render functions work with DOM nodes
that can be easily stored as a side-effect of the render fn
2019-06-14 22:41:50 +02:00
Bruno Windels
553bda2837 support bool values for attribute 2019-06-14 22:40:18 +02:00
Bruno Windels
eb2eb291d3 more work on databinding and templating 2019-06-13 00:41:45 +02:00
Bruno Windels
c7163a0554 wip of template/databinding 2019-06-12 22:01:50 +02:00
Bruno Windels
64f126ba68 support updates originating from tile, and removing tile on update 2019-06-12 21:57:13 +02:00
Bruno Windels
0524f06722 remove logging 2019-06-03 00:31:21 +02:00
Bruno Windels
6bdf44d114 adjust comment 2019-06-03 00:30:37 +02:00
Bruno Windels
45528580ed fix comparator/comparer mismatch 2019-06-03 00:30:16 +02:00
Bruno Windels
3dbf5e727d process in incoming order (reverse-chronological order if backward)
makes code simpler, don't need fix to undo reverse ordering of
nonOverlappingEvents. reverse looking is very likely premature
optimization as well.
2019-06-03 00:18:52 +02:00
Bruno Windels
0407829b26 fix filling gaps with overlapping events
although event order remains wrong, as events are reversed.
step before removing premature optimization, so it's in the git
commit log
2019-06-03 00:11:29 +02:00
Bruno Windels
c9aaa18151 return only eventId from findFirstOrLastOccurringEventId 2019-06-03 00:11:12 +02:00
Bruno Windels
7852f31f7e clear token on pagination when events start overlapping 2019-06-02 19:28:24 +02:00
Bruno Windels
0b637f656a timeline store requests should always be scoped to 1 fragmentId
as fragmentIds should not be sorted, they are a linked list
and that is what determines their order.
2019-06-02 19:27:40 +02:00
Bruno Windels
bb5f139355 fix fragmentId:0 being evaluated as falsy 2019-06-02 19:27:23 +02:00
Bruno Windels
4b5b90e199 fix another direction mismatch 2019-06-02 19:26:45 +02:00
Bruno Windels
c63d94947f fix persisting a gappy sync 2019-06-02 18:28:38 +02:00
Bruno Windels
ef5d2cfa08 chunk is in reverse-chronological order for backward pagination 2019-06-02 18:15:40 +02:00
Bruno Windels
e3b4f898d0 show eventkey in ui for debugging purposes 2019-06-02 18:15:24 +02:00
Bruno Windels
a59014475b also swap logic of setter 2019-06-02 18:15:08 +02:00
Bruno Windels
a269f612b6 space 2019-06-02 15:46:44 +02:00
Bruno Windels
bdad0ad86b fix some gap fill errors 2019-06-02 15:46:24 +02:00
Bruno Windels
d022608a1a it's entry.entryIndex, not eventIndex, but use helper method instead. 2019-06-02 15:24:27 +02:00
Bruno Windels
674007d892 don't fail when insert first or appending a tile 2019-06-02 15:15:14 +02:00
Bruno Windels
1ed3babfec fragment boundary is a gap if backwards(started) & previousToken 2019-06-02 15:01:14 +02:00
Bruno Windels
e339cb7321 more fixes, timeline is showing again 2019-06-02 14:59:30 +02:00
Bruno Windels
a1e527ccbc first round of fixes after running the app again in the browser! 2019-06-02 00:49:47 +02:00
Bruno Windels
210a00d541 first attempt at making UI work again, with tiles and gaps 2019-06-02 00:03:55 +02:00
Bruno Windels
3de86cdf33 obsolete comment 2019-06-01 18:32:32 +02:00
Bruno Windels
b10aa269d2 very quick emote support 2019-06-01 18:32:17 +02:00
Bruno Windels
1b228b0200 export timelineviewmodel from roomviewmodel 2019-06-01 18:29:23 +02:00
Bruno Windels
039bbe038c adjust tiles(collection) to entry changes 2019-06-01 18:29:02 +02:00
Bruno Windels
35d90a8535 ctor takes a bool, not Direction. But use helper fn instead. 2019-06-01 18:20:29 +02:00
Bruno Windels
2a128ed32c use SortedArray in Timeline, adjust loadAtTop to use TimelineReader 2019-06-01 17:39:23 +02:00
Bruno Windels
843c94b750 finished observable SortedArray to something useable
although not as performant as it could be
2019-06-01 17:38:23 +02:00
Bruno Windels
f8fbfbff9a implement reading n events from end of live fragment 2019-06-01 17:04:05 +02:00
Bruno Windels
3137f025c7 remove draft commented code 2019-06-01 16:44:58 +02:00