Commit graph

1541 commits

Author SHA1 Message Date
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 b47898e025 show full stack on sync error 2019-06-16 15:49:00 +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 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 a59014475b also swap logic of setter 2019-06-02 18:15:08 +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 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 3de86cdf33 obsolete comment 2019-06-01 18:32:32 +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 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 8e8e22fe16 work on filling gaps 2019-03-09 00:41:06 +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 049e70e312 throw NetworkError from HomeServerApi 2019-03-08 12:26:59 +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 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 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 853316933c adjust import path 2019-02-26 20:49:45 +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 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 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