Commit graph

228 commits

Author SHA1 Message Date
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
Bruno Windels
447b0aa03c allow adding fragments to comparer, instead of reloading from db.
This is a suboptimal implementation now,
but is the API we want to end up with. Readers and Writers
in persistence add fragments to the comparer when they become
aware of, create, or link up fragments.
2019-06-01 16:42:57 +02:00
Bruno Windels
fa4efe0132 rename Gap/SyncPersistence to Writer, in line with TimelineReader 2019-06-01 15:40:21 +02:00
Bruno Windels
784588440c WIP for fragment support 2019-05-19 20:49:46 +02:00
Bruno Windels
3324fd3afd split up persistFragmentFill method into smaller ones 2019-05-12 20:44:20 +02:00
Bruno Windels
10457611f9 whitespace 2019-05-12 20:26:46 +02:00
Bruno Windels
e3328f0fef add fragments store name 2019-05-12 20:26:32 +02:00
Bruno Windels
da5e8794ab lint 2019-05-12 20:26:20 +02:00
Bruno Windels
75100c1c60 adjust Timeline to changes, gap persister 2019-05-12 20:26:03 +02:00
Bruno Windels
a6b17cf25a first draft of persistFragmentFill 2019-05-12 20:25:41 +02:00
Bruno Windels
89bc0e1696 split up RoomPersister to SyncPersister
also rename stores to timelineEvents and timelineFragments
2019-05-12 20:24:06 +02:00
Bruno Windels
bf835ac01d create Entry classes and return fragment boundaries as entries as well
they can then be used for gap tiles.
2019-05-11 18:19:53 +02:00
Bruno Windels
2b510b24d9 adjust persister to fragments (untested) 2019-05-11 15:41:46 +02:00
Bruno Windels
152397a292 first impl of idb fragment store 2019-05-11 15:41:09 +02:00
Bruno Windels
41f2224454 get live fragment in persister 2019-05-11 13:21:58 +02:00
Bruno Windels
783f39c378 add fragmentId to methods that need it in timeline store 2019-05-11 13:21:21 +02:00
Bruno Windels
53cdabb459 store method to find events to connect with when filling gaps
as fragments can be unaware of their chronological relationship,
we need to check whether the events received from /messages or /context
already exists, so we can later hook up the fragments.
2019-05-11 13:10:31 +02:00
Bruno Windels
d6ae313bbd make compare rely less on fragment index
also indenting
2019-05-11 09:51:27 +02:00
Bruno Windels
99c8816bf9 better naming
FragmentIndex -> FragmentIdIndex (index of fragment ids,
   not an index number in a fragment collection)
EventKey -> EventIndex (implies being ordered)
FragmentKey -> FragmentId
  (implies not being ordered, hence FragmentIdIndex)
2019-05-01 15:36:32 +02:00
Bruno Windels
d90411a6dd adjust SortKey to have fragmentKey instead of gapKey
with FragmentIndex to compare fragment keys
2019-05-01 14:47:39 +02:00
Bruno Windels
06d2d2e198 draft of idb store for fragments 2019-04-18 20:19:43 +02:00
Bruno Windels
749bdadf74 disable failing tests for now and include fragment index so it's tests are found 2019-04-18 20:19:09 +02:00
Bruno Windels
6ba37e90a3 work on memory store 2019-04-04 09:27:31 +02:00
Bruno Windels
3f2f656db7 work on gap filling + tests (doesn't work yet) 2019-03-29 23:01:27 +01:00
Bruno Windels
aaff9eea6c update store api with requirements for gap filling 2019-03-29 23:01:22 +01:00
Bruno Windels
7d91b2dde3 first go at a timeline memory store
first to use in unit tests for persister
later also to use in production when idb is not available
2019-03-29 23:00:22 +01:00
Bruno Windels
b1e382d7c9 thinko with direction 2019-03-21 21:36:02 +01:00
Bruno Windels
8f7e5a799c work on filling gaps + test (draft only) 2019-03-21 21:35:33 +01:00