Commit graph

3531 commits

Author SHA1 Message Date
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
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