Commit graph

327 commits

Author SHA1 Message Date
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
Bruno Windels
61804073e2 comment how updates should work 2019-03-15 20:29:17 +01:00
Bruno Windels
2cd9c2344e expose timeline loading error in viewmodel 2019-03-09 00:43:43 +01:00
Bruno Windels
8e8e22fe16 work on filling gaps 2019-03-09 00:41:06 +01:00
Bruno Windels
c8749a1a06 rought impl of tiles collection 2019-03-09 00:40:17 +01:00
Bruno Windels
153d54a285 work on tile view models 2019-03-09 00:40:03 +01:00
Bruno Windels
1f5d488105 draft of timeline tiles support 2019-03-08 20:04:56 +01:00
Bruno Windels
6940e14b18 move sortedIndex out of observable as other code will want to use it too 2019-03-08 20:04:28 +01:00
Bruno Windels
95bef00054 some comments 2019-03-08 20:03:47 +01:00
Bruno Windels
ec925d7c49 draft of how to implement filling a timeline gap 2019-03-08 20:03:18 +01:00
Bruno Windels
1757a27475 consistent naming 2019-03-08 20:01:28 +01:00
Bruno Windels
994f1c57d3 store all logout data outside of the session storage
so we could store it in gnome keyring, macOs keychain, ... on non-webclients,
also better separation
2019-03-08 20:00:37 +01:00
Bruno Windels
2dbd0fb9dc move view models over to domain 2019-03-08 19:58:54 +01:00
Bruno Windels
049e70e312 throw NetworkError from HomeServerApi 2019-03-08 12:26:59 +01:00
Bruno Windels
818cf8051c dont show ui before initial sync 2019-02-27 23:38:03 +01:00
Bruno Windels
9e7811299d MappedMap update mechanism needs to be reworked, disable for now 2019-02-27 23:23:20 +01:00
Bruno Windels
f8bd11f07b doesn't need to be async for now 2019-02-27 23:23:09 +01:00
Bruno Windels
8462a0ac6b this behaves weird? need to figure out later 2019-02-27 23:22:47 +01:00
Bruno Windels
80eac6e48d ignore clicking on root 2019-02-27 23:21:16 +01:00
Bruno Windels
7903ae0001 pass event to item clicked handler 2019-02-27 23:21:00 +01:00
Bruno Windels
16d5c3279c correctly map className attribute 2019-02-27 23:20:29 +01:00
Bruno Windels
6b4ed65a57 show timeline when clicking room in roomlist 2019-02-27 22:50:08 +01:00
Bruno Windels
5cafb92fee emit after txn has been committed
to keep txn open for as short as possible,
and avoid any errors caused as part of emit aborting txn
2019-02-27 22:49:52 +01:00
Bruno Windels
c2ecd79f21 pass params to child onUpdate 2019-02-26 23:50:15 +01:00
Bruno Windels
d567e2ac5a fix ListView::onMove code 2019-02-26 23:27:34 +01:00
Bruno Windels
c8d5b4483a public room.id property, needed for session.rooms updater 2019-02-26 23:27:06 +01:00
Bruno Windels
841f280d3c rooms on the screen!! 2019-02-26 22:45:58 +01:00
Bruno Windels
90a7989eda rooms is a proper collection now, so no need for getter on session 2019-02-26 22:09:48 +01:00
Bruno Windels
2e362d1bbd fixes and tests for add, remove, move and update 2019-02-26 22:03:16 +01:00
Bruno Windels
290886a5eb fix and test subscription and initial values for sort 2019-02-26 21:13:43 +01:00
Bruno Windels
21d93a5893 fix and test initialValues for map 2019-02-26 21:13:11 +01:00
Bruno Windels
853316933c adjust import path 2019-02-26 20:49:45 +01:00
Bruno Windels
77eeacb09b convert string children to text nodes 2019-02-26 20:49:32 +01:00
Bruno Windels
618c4ffe20 restructure observable collections and fixes for sort, filter and map 2019-02-26 20:48:57 +01:00
Bruno Windels
db53db7007 adjust to new ObservableMap api 2019-02-24 19:25:06 +01:00
Bruno Windels
4d28448920 add compare method to SortKey and add tests 2019-02-24 19:24:43 +01:00
Bruno Windels
d5b88cbbe6 finish ObservableMap and add tests 2019-02-24 19:24:28 +01:00
Bruno Windels
1441abbf7e work on sorted list from map 2019-02-21 23:08:23 +01:00
Bruno Windels
5bff41c1ee wip on collections and listview 2019-02-20 23:48:16 +01:00
Bruno Windels
952f1abddf wip 2019-02-17 23:58:01 +01:00
Bruno Windels
d87444824d only store sync token when it changes 2019-02-16 02:59:10 +01:00
Bruno Windels
e49c416fae playing around with live collections 2019-02-16 02:57:19 +01:00
Bruno Windels
07fed669f6 debug room lastsortkey not loading in chrome (but does in FF!) 2019-02-16 02:57:19 +01:00
Bruno Windels
be8544aa48 also persist state events in timeline 2019-02-16 02:57:19 +01:00
Bruno Windels
f7789d343a more fields for summary 2019-02-16 02:57:19 +01:00
Bruno Windels
ad9999fd50 idb compares binary keys per byte, so make SortKey big endian 2019-02-16 02:57:19 +01:00
Bruno Windels
03ef98e668 make sure queries don't run into other rooms 2019-02-16 02:57:19 +01:00
Bruno Windels
c60840bae9 fix selectAll 2019-02-16 02:57:19 +01:00
Bruno Windels
ffd3d740c5 state events are under state key 2019-02-16 02:57:19 +01:00
Bruno Windels
c70376e82d make starting a transaction async so we can do more synchronization later on 2019-02-16 02:57:19 +01:00
Bruno Windels
48a47cb639 expose native error for now
as server not reachable seems to be reported as a TypeError
with message "fetch failed" or something in chrome,
let's see if we can find something in common between browsers
to wrap it into something more sensible
2019-02-16 02:57:19 +01:00
Bruno Windels
a544c25d58 more 2019-02-10 22:02:42 +01:00
Bruno Windels
35648d31b9 dont emit error when aborting request when stopping sync 2019-02-10 21:40:11 +01:00
Bruno Windels
bff0161a05 move sync & persistence engine over to own matrix folder 2019-02-10 21:33:18 +01:00
Bruno Windels
b57c5abdd6 its syncing, sort off 2019-02-10 21:25:46 +01:00
Bruno Windels
c05e40188b WIP2 2019-02-07 01:03:47 +00:00
Bruno Windels
abffdf1877 wip on loading rooms in session 2019-02-07 00:51:48 +00:00
Bruno Windels
ec6bd2ca1f camel-case non-matrix keys in idb stores 2019-02-07 00:51:27 +00:00
Bruno Windels
90b016bbcf cleanup main logging 2019-02-07 00:50:47 +00:00
Bruno Windels
3438806781 cleanup hardcoded credentials to avoid inconsistencies 2019-02-07 00:50:23 +00:00
Bruno Windels
6c7474e95e rename Network to HomeServerApi 2019-02-07 00:25:12 +00:00
Bruno Windels
3f776129f5 basic session loading 2019-02-07 00:20:27 +00:00
Bruno Windels
c115164822 no need to catch here, can't handle the error 2019-02-06 23:19:44 +00:00
Bruno Windels
3e763ab5c0 simplify session store api 2019-02-06 23:19:29 +00:00
Bruno Windels
7a15f12525 basic session manager 2019-02-06 23:19:14 +00:00
Bruno Windels
27be261a5d whitespace 2019-02-06 22:06:56 +00:00
Bruno Windels
511e91a699 small changes 2019-02-06 22:06:47 +00:00
Bruno Windels
d6857a1ede fix errors 2019-02-06 22:06:33 +00:00
Bruno Windels
5c7a1f66d6 cleanup directory structure 2019-02-06 22:06:00 +00:00
Bruno Windels
90300dcdaf cleanup idb storage 2019-02-04 23:21:50 +00:00
Bruno Windels
e99ad90539 storage error definition 2019-02-04 22:31:35 +00:00
Bruno Windels
27b98408f1 add runnable html and js file to start making things actually run 2019-02-04 22:31:08 +00:00
Bruno Windels
5703a034ca stored summary is no longer passed in ctor but loaded in load method 2019-02-04 22:30:57 +00:00
Bruno Windels
f58af883b8 remove (circular) dependency on sync in session 2019-02-04 22:29:46 +00:00
Bruno Windels
f0e5757692 merge initial & incremental sync 2019-02-04 22:26:45 +00:00
Bruno Windels
b15136a9e8 fix errors & support login in network 2019-02-04 22:26:24 +00:00
Bruno Windels
b6df30bc27 work on txn, ... 2019-02-03 23:45:29 +00:00
Bruno Windels
12bb3a7147 more work on idb sync transaction, other storage stuff 2019-01-09 11:06:09 +01:00
Bruno Windels
0cf9e84bdd WIP 2018-12-21 14:35:24 +01:00