Commit Graph

1154 Commits (30ac32da55669d0cc4054a95a9410ac6a23a6984)

Author SHA1 Message Date
Tyler Goodlet a10d20c041 Add ib config section support 2021-07-27 07:09:01 -04:00
Conrad Steenberg afafe56ec0 Remove List typing 2021-07-21 18:30:50 -07:00
Conrad Steenberg c830183073 More fixes, some reversions 2021-07-21 18:26:24 -07:00
Conrad Steenberg 3912b22b41 Fix a few QtGui -> QtWidget issues 2021-07-21 18:26:24 -07:00
Conrad Steenberg 9d8d8fd1a2 Fix PyQt5 error 2021-07-21 10:53:40 -07:00
Tyler Goodlet 83ad071cb4 Load provider search engines in tasks instead of exit stack 2021-07-11 11:13:35 -04:00
Tyler Goodlet 90588018a6 Label doc tweak 2021-07-11 11:13:35 -04:00
Tyler Goodlet 26c333ff22 Only close event send side (facepalm) 2021-07-08 10:55:47 -04:00
Tyler Goodlet 48053588da Don't cancel handler nursery, let errors bubble 2021-07-08 10:55:47 -04:00
Tyler Goodlet 830ef90721 Enable contents labels on q for "query" 2021-07-08 10:55:47 -04:00
Tyler Goodlet 8b966cd7e4 Port all to use new cursor and ohlc refs 2021-07-08 10:55:47 -04:00
Tyler Goodlet b6eeed1ae0 Move contents labels management to cursor mod
Add a new type/api to manage "contents labels" (labels that sit in
a view and display info about viewed data) since it's mostly used by
the linked charts cursor. Make `LinkedSplits.cursor` the new and only
instance var for the cursor such that charts can look it up from that
common class. Drop the `ChartPlotWidget._ohlc` array, just add
a `'ohlc'` entry to `._arrays`.
2021-07-08 10:55:47 -04:00
Tyler Goodlet d3d5d4ad06 Drop global order lines map
Orders in order mode should be chart oriented since there's a mode per
chart. If you want all orders just ask the ems or query all the charts
in a loop.

This fixes cancel-all-orders such that when 'cc' is tapped only the
orders on the *current* chart are cancelled, lel.
2021-07-08 10:55:47 -04:00
Tyler Goodlet 91209b7d6e Use group status for symbol loading 2021-07-08 10:55:47 -04:00
Tyler Goodlet 37180a4e4e Fix old msg clearing var name 2021-07-08 10:55:47 -04:00
Tyler Goodlet eeeeb29f71 Add order cancellation and submission statuses
Generalize the methods for cancelling groups of orders (all or those
under cursor) and add new group status support such that statuses for
each cancel or order submission is displayed in the status bar. In the
"cancel-all-orders" case, use the new group status stuff.
2021-07-08 10:55:47 -04:00
Tyler Goodlet 572f984d06 Add an all order lines getter method 2021-07-08 10:55:47 -04:00
Tyler Goodlet 0133f0b589 Add "group statuses" support to status bar
Allows for submitting a top level "group status" associated with
a "group key" which eventually resolves once all sub-statuses associated
with that group key (and thus top level status) complete and are also
removed. Also add support for a "final message" for each status such
that once the status clear callback is called a final msg is placed on
the status bar that is then removed when the next status is set.

It's all a questionable bunch of closures/callbacks but it worx.
2021-07-08 10:55:47 -04:00
Tyler Goodlet 53074b552a Add fast tap key sequence support and order-mode-type statuses 2021-07-08 10:55:47 -04:00
Tyler Goodlet 3650db3321 Make alerts solid line only 2021-07-08 10:55:47 -04:00
Tyler Goodlet 0ded790330 Didn't end up needing a task stack 2021-07-08 10:55:47 -04:00
Tyler Goodlet ca23825aff Start input handling **after** order mode is up 2021-07-08 10:55:47 -04:00
Tyler Goodlet c971997f1a Don't access unset cursor 2021-07-08 10:55:47 -04:00
Tyler Goodlet aabbc12b82 Beautifully simplify kb handling code with set ops 2021-07-08 10:55:47 -04:00
Tyler Goodlet 983a517a8c Drop old commented behaviour; see parent class if needed 2021-07-08 10:55:47 -04:00
Tyler Goodlet 03c95ca908 Factor press and release handling into same qtloop 2021-07-08 10:55:47 -04:00
Tyler Goodlet 569b2efb51 Move region selection to editors mod 2021-07-08 10:55:47 -04:00
Tyler Goodlet 4a37cf768f Move line and arrow editors to new mod 2021-07-08 10:55:47 -04:00
Tyler Goodlet 93af8c936c Port cursor and axes to new widget names 2021-07-08 10:55:47 -04:00
Tyler Goodlet 75804a441c Convert view box to async input handling
Instead of callbacks for key presses/releases convert our `ChartView`'s
kb input handling to async code using our event relaying-over-mem-chan
system. This is a first step toward a more async driven modal control
UX. Changed a bunch of "chart" component naming as part of this as well,
namely: `ChartSpace` -> `GodWidget` and `LinkedSplitCharts` ->
`LinkedSplits`. Engage the view boxe's async handler code as part of new
symbol data loading in `display_symbol_data()`. More re-orging to come!
2021-07-08 10:55:47 -04:00
Tyler Goodlet 85621af8af Extend Qt event relaying
Add an `open_handler()` ctx manager for wholesale handling event sets
with a passed in async func. Better document and implement the event
filtering core including adding support for key "auto repeat" filtering;
it turns out the events delivered when `trio` does its guest-most tick
are not the same (Qt has somehow consumed them or something) so we have
to do certain things (like getting the `.type()`, `.isAutoRepeat()`,
etc.) before shipping over the mem chan. The alt might be to copy the
event objects first but haven't tried it yet. For now just offer
auto-repeat filtering through a flag.
2021-07-08 10:55:47 -04:00
Tyler Goodlet 91907bf5ef Drop old dialogues pop flag, the client does it on teardown 2021-07-08 10:17:31 -04:00
Tyler Goodlet f4a998655b Feed detach must explicitly unsub throttled streams
If a client attaches to a quotes data feed and requests a throttle rate,
be sure to unsub that side-band memchan + task when it detaches and
especially so on any transport connection error.

Also, use an explicit `tractor.Context.cancel()` on the client feed
block exit since we removed the implicit cancel option from the
`tractor` api.
2021-07-07 07:51:09 -04:00
Tyler Goodlet 9f897ba75c Support multiple client trade flows over one `brokerd~
There is no reason to have more then `brokerd` trades dialogue stream
open per `emsd`. Here we minimize to managing that lone stream and
multiplexing msgs from each client such that multiple clients can be
connected to the ems, conducting trading without requiring multiple
ems-client connections to the backend broker and without the broker
being aware there are even multiple flows going on.

This patch also sets up for being able to have ems clients which
register to receive and track trade flows from other piker clients thus
enabling so called "multi-player" trading where orders for both paper
and live trades can be shared between multiple participants in the form
of a pre-broker, local clearing service and trade signals dark book.
2021-07-07 07:51:09 -04:00
Tyler Goodlet 8b6fb83257 Pop subscriber streams on connection errors 2021-07-07 07:51:09 -04:00
Tyler Goodlet 003fa6254f Don't forget to pop the brokerd dialogue on teardown.. 2021-07-07 07:51:09 -04:00
Tyler Goodlet 8f05254c80 Better live order handling logic 2021-07-07 07:51:09 -04:00
Tyler Goodlet a7e106be96 Avoid multiple `brokerd` trades dialogue flows
This solves a bunch of issues to do with `brokerd` order status msgs
getting relayed for each order to **every** correspondingly connected
EMS client. Previously we weren't keeping track of which emsd orders
were associated with which clients so you had backend msgs getting
broadcast to all clients which not only resulted in duplicate (and
sometimes erroneous, due to state tracking) actions taking place in the
UI's order mode, but it's also just duplicate traffic (usually to the
same actor) over multiple logical streams. Instead, only keep up **one**
(cached) stream with the `trades_dialogue()` endpoint such that **all**
emsd orders route over that single connection to the particular
`brokerd` actor.
2021-07-07 07:51:09 -04:00
Tyler Goodlet 9c24bb6480 Make json resp log debug level 2021-07-07 07:07:01 -04:00
Tyler Goodlet 7b6e34aaf4 Better formalize `pikerd` service semantics
An async exit stack around the new `@tractor.context` is problematic
since a pushed context can't bubble errors unless the exit stack has
been closed. But in that case why do you need the exit stack if you're
going to push it and wait it right away; it seems more correct to use
a nursery and spawn a task in `pikerd` that waits on the both the
target context completion first (thus being able to bubble up any errors
from the remote, and top level service task) and the sub-actor portal.
(Sub)service Daemons are spawned with `.start_actor()` and thus will
block forever until cancelled so, add a way to cancel them explicitly
which we'll need eventually for restarts and dynamic feed management.

The big lesson here is that async exit stacks are not conducive to
spawning and monitoring service tasks, and especially so if
a `@tractor.context` is used since if the `.open_context()` call isn't
exited (only possible by the stack being closed), then there will be no
way for `trio` to cancel the task that pushed that context (since it
can't run a checkpoint while yielded inside the stack) without also
cancelling all other contexts pushed on that stack. Presuming one
`pikerd` task is used to do the original pushing (which it was) then
any error would have to kill all service daemon tasks which obviously
won't work.

I see this mostly as the painz of tinkering out an SC service manager
with `tractor` / `trio` for the first time, so try to go easy on the
process ;P
2021-07-06 16:41:41 -04:00
Tyler Goodlet cc9a720af7 Don't use a context stack for contexts 2021-07-06 16:41:10 -04:00
Tyler Goodlet df2f6487ff Apply `brokerd` quote rate throttling when requested in `open_feed()` 2021-06-14 21:55:51 -04:00
Tyler Goodlet ccf81520cb First attempt data feed side quote throttling
Adding binance's "hft" ws feeds has resulted in a lot of context
switching in our Qt charts, so much so it's chewin CPU and definitely
worth it to throttle to the detected display rate as per discussion in
issue #192.

This is a first very very naive attempt at throttling L1 tick feeds on
the `brokerd` end (producer side) using a constant and uniform delivery
rate by way of a `trio` task + mem chan.  The new func is
`data._sampling.uniform_rate_send()`. Basically if a client request
a feed and provides a throttle rate we just spawn a task and queue up
ticks until approximately the next display rate's worth period of time
has passed before forwarding. It's definitely nothing fancy but does
provide fodder and a start point for an up and coming queueing eng to
start digging into both #107 and #109 ;)
2021-06-14 21:43:19 -04:00
Tyler Goodlet 57a35a3c6c Port feed bus endpoint to a `@tractor.context` 2021-06-14 10:55:01 -04:00
Tyler Goodlet 3455ebc60c Cast back to tuples after msgspec strips them... 2021-06-14 00:03:05 -04:00
Tyler Goodlet 588b5c317c Drop unseralizable "sec tag" for now 2021-06-14 00:02:23 -04:00
Tyler Goodlet f320f95288 Drop old hi-dpi font inches sizes 2021-06-13 23:59:02 -04:00
Tyler Goodlet d269edc0b3 Re-org main window singleton into a new module
Avoids some cyclical and confusing import time stuff that we needed to get
DPI aware fonts configured from the active display. Move the main window
singleton into its own module and add a `main_window()` getter for it.
Make `current_screen()` a ``MainWindow` method to avoid so many module
variables.
2021-06-13 23:47:52 -04:00
Tyler Goodlet 84f61c9a92 Avoid clearing cached results; detect repeats later 2021-06-10 13:23:28 -04:00
Tyler Goodlet 0dcadec11a Add multi-status updates throughout chart init 2021-06-10 13:23:28 -04:00
Tyler Goodlet 90b0673052 Add multi-status support to window 2021-06-10 13:23:28 -04:00
Tyler Goodlet ce67022e2e Only add font size scaled down when dpi scaling > 2 2021-06-10 13:23:28 -04:00
Tyler Goodlet 9d31f8ca6a Add default "small" dpi aware font 2021-06-10 13:23:28 -04:00
Tyler Goodlet f68295653d Load cache search before other providers 2021-06-10 13:23:28 -04:00
Tyler Goodlet 112b3f0f07 Drop hidpi font size hacking from contents labels 2021-06-10 13:23:28 -04:00
Tyler Goodlet e924cbeb43 Min debounce period for faster cached completions 2021-06-10 13:23:28 -04:00
Tyler Goodlet 62c456f8eb Downscale fonts on scaled-down hidpi displays 2021-06-10 13:23:28 -04:00
Tyler Goodlet 193f4f945c Flip to using scaled hi DPI detected by Qt 2021-06-10 13:23:28 -04:00
Tyler Goodlet bb1c549d94 Add some initial status updates during startup 2021-06-10 13:23:28 -04:00
Tyler Goodlet df50700aa5 Style a basic status bar and add a mode label to it 2021-06-10 13:23:28 -04:00
Tyler Goodlet a9cdb94ff3 Port styling to latest `qtdarkstyle` version 2021-06-10 13:23:28 -04:00
Tyler Goodlet 74b63b9868 Add mode label to right side 2021-06-10 13:23:28 -04:00
Tyler Goodlet cc60ad46fc Skip chart updates if parent widget is hidden to save cpus 2021-06-10 13:23:28 -04:00
Tyler Goodlet 7da7dee02b Add mode name to viewbox 2021-06-10 13:23:28 -04:00
Tyler Goodlet 78e04e66a5 Add mode names to search, repair LIFO ordering on select 2021-06-10 13:23:28 -04:00
Tyler Goodlet 0564bbd9c3 Use focus switch signal to update status bar 2021-06-10 13:23:28 -04:00
Tyler Goodlet 754a5cce4f WIP toying with a simple status bar 2021-06-10 13:23:28 -04:00
Tyler Goodlet 8d02778158 Don't bail on unknown order ids 2021-06-10 12:02:57 -04:00
Tyler Goodlet 95f466b93d Fix to msg attr access 2021-06-10 12:02:26 -04:00
goodboy 689bc0cde0
Merge pull request #190 from pikers/ems_to_bidir_streaming
Ems to bidir streaming
2021-06-10 08:45:44 -04:00
Tyler Goodlet a9cc3210d8 Grr pydantic being a weirdo 2021-06-10 08:37:21 -04:00
Tyler Goodlet a9cbacd8aa Move details assignements to static declaration 2021-06-10 08:24:51 -04:00
Tyler Goodlet b06cb5bb5a Comments clean and improvments 2021-06-10 08:24:10 -04:00
Tyler Goodlet a1f605bd52 Clear out old commented code 2021-06-09 13:21:56 -04:00
Tyler Goodlet 8e8a005128 Fix attr accesses on msg type 2021-06-09 12:22:02 -04:00
Konstantine Tsafatinos 90e5a10a66 modify error string to format: <name>.<provider> 2021-06-09 12:02:05 -04:00
Tyler Goodlet 4cae470f3a Pass "arbiter" socket correctly 2021-06-08 15:57:01 -04:00
Tyler Goodlet 47e7baa0c9 Ensure paperboi is shield killed on teardown 2021-06-08 15:56:34 -04:00
Tyler Goodlet db92683ede Port ib orders to new msgs and bidir streaming api 2021-06-08 14:33:41 -04:00
Tyler Goodlet 6e58f31fd8 Port EMS to typed messaging + bidir streaming
This moves the entire clearing system to use typed messages using
`pydantic.BaseModel` such that the streamed request-response order
submission protocols can be explicitly viewed in terms of message
schema, flow, and sequencing. Using the explicit message formats we can
now dig into simplifying and normalizing across broker provider apis to
get the best uniformity and simplicity.

The order submission sequence is now fully async: an order request is
expected to be explicitly acked with a new message and if cancellation
is requested by the client before the ack arrives, the cancel message is
stashed and then later sent immediately on receipt of the order
submission's ack from the backend broker. Backend brokers are now
controlled using a 2-way request-response streaming dialogue which is
fully api agnostic of the clearing system's core processing; This
leverages the new bi-directional streaming apis from `tractor`.  The
clearing core (emsd) was also simplified by moving the paper engine to
it's own sub-actor and making it api-symmetric with expected `brokerd`
endpoints.

A couple of the ems status messages were changed/added:
'dark_executed' -> 'dark_triggered'
added 'alert_triggered'

More cleaning of old code to come!
2021-06-08 14:33:30 -04:00
Tyler Goodlet 0dabc6ad26 Port paper engine to new msgs and run in sub-actor
This makes the paper engine look IPC-wise exactly like any
broker-provider backend module and uses the new ``trades_dialogue()``
2-way streaming endpoint for commanding order requests.

This serves as a first step toward truly distributed forward testing
since the paper engine can now be run out-of tree from `pikerd` if
needed thus demonstrating how real-time clearing signals can be shared
between fully distinct services.
2021-06-08 14:32:03 -04:00
Tyler Goodlet 23094d8624 Spec out brokerd 2-way trade dialogue messages 2021-06-08 14:31:43 -04:00
Tyler Goodlet 02459cd964 Use new top level portal import 2021-06-08 14:31:14 -04:00
Tyler Goodlet 0bcad35c70 Set ack time on pydantic model 2021-06-08 14:31:04 -04:00
Tyler Goodlet f9238f3a8a Validate client message updates 2021-06-08 14:30:47 -04:00
Konstantine Tsafatinos 099bf260f5 fix unknown kraken symbol raised error 2021-06-01 18:01:45 -04:00
Tyler Goodlet f4c9e20f0d Avoid `numpy` type usage on the wire 2021-06-01 10:48:23 -04:00
Tyler Goodlet edf3af9777 Drop waits to half-seconds 2021-06-01 10:48:23 -04:00
Tyler Goodlet 9931accc52 Port clearing systems to new tractor context api
This avoids somewhat convoluted "hackery" making 2 one-way streams
between the order client and the EMS and instead uses the new
bi-directional streaming and context API from `tractor`. Add a router
type to the EMS that gets setup by the initial service tree and which
we'll eventually use to work toward multi-provider executions and
order-trigger monitoring. Move to py3.9 style where possible throughout.
2021-06-01 10:48:23 -04:00
Tyler Goodlet 7fb2c95ef1 Factor daemon spawning logic, use it to spawn emsd 2021-06-01 10:48:23 -04:00
Tyler Goodlet 9792b9aa7d Drop search pause config; use default 2021-05-28 14:11:02 -04:00
Tyler Goodlet 51a8308105 Lower connection timeout duration 2021-05-28 14:11:02 -04:00
Tyler Goodlet b689adaeb0 Throttle L1 label updates at a lower rate 2021-05-28 14:11:02 -04:00
Tyler Goodlet ff856a6ee3 Woops, make unsub pairs a list 2021-05-28 14:11:02 -04:00
Tyler Goodlet 19711bf024 Reconnect slow binance conns instead of error 2021-05-28 14:11:02 -04:00
Tyler Goodlet 1a7b06c147 Limit l1 graphics updates to half the refresh rate 2021-05-28 14:11:02 -04:00
Tyler Goodlet d0e3f5a51c Port binance and kraken to "reliable" ws API 2021-05-28 14:11:02 -04:00
Tyler Goodlet 89dc3dde61 Move no bs websocket api into its own data module 2021-05-28 14:11:02 -04:00
Tyler Goodlet ee71f445fb Clear entries on no results returned per task 2021-05-28 14:08:24 -04:00
Tyler Goodlet a31b83c5ca Don't ever send plain whitespace a search pattern 2021-05-28 13:44:30 -04:00
Tyler Goodlet ea3d96e7ed Accept arbitrary QEvent subscriptions via a set 2021-05-28 13:30:26 -04:00
Tyler Goodlet 7fa9f3f542 Add `Client.search_symbols()` to all backends, use it in `piker search` 2021-05-28 12:29:58 -04:00
Tyler Goodlet c56c7b8540 Increase min debounce period, stop searching on user nav selection 2021-05-28 10:16:00 -04:00
Tyler Goodlet 50aff72f8e Don't require map (yet) in backend modules 2021-05-27 13:05:23 -04:00
Tyler Goodlet ec6ea32dda Don't pass through linked charts x-axis handle 2021-05-27 13:05:23 -04:00
Tyler Goodlet e88e5b8ce2 Decrease binance search debounce period 2021-05-27 13:05:23 -04:00
Tyler Goodlet 3e39e9620c Add a no data available error 2021-05-27 13:05:23 -04:00
Tyler Goodlet 7dfc7f7fa2 Factor chart selection into widget, cleanups, add resource links 2021-05-27 13:05:23 -04:00
Tyler Goodlet ab3adcee9e Get basic switch-on-click mouse support working 2021-05-27 13:05:23 -04:00
Tyler Goodlet 607e1a8299 Add per-provider-async searching with status updates 2021-05-27 13:05:23 -04:00
Tyler Goodlet 89beb92866 Add api for per-section filling/clearing
Makes it so we can move toward separate provider results fills in an
async way, on demand.

Also,
- add depth 1 iteration helper method
- add section finder helper method
- fix last selection loading to be mostly consistent
2021-05-27 13:05:23 -04:00
Tyler Goodlet c478ddaed0 Disable cursor blink globally 2021-05-27 13:05:23 -04:00
Tyler Goodlet 924960a359 Add label to search bar 2021-05-27 13:05:23 -04:00
Tyler Goodlet 46d88965d3 Get LIFO sort on cache syms working properly 2021-05-27 13:05:23 -04:00
Tyler Goodlet 44f4fdf043 Type annot the internal symbol cache 2021-05-27 13:05:23 -04:00
Tyler Goodlet 59475cfd81 Store lowercase symbols within piker data internals 2021-05-27 13:05:23 -04:00
Tyler Goodlet af9dcf9230 Use an ordered dict to get LIFO cache sorting on sym selection 2021-05-27 13:05:23 -04:00
Tyler Goodlet 9bfc230dde Speedup: load provider searches async at startup 2021-05-27 13:05:23 -04:00
Tyler Goodlet c9cf72d554 Add remote context allocation api to service daemon
This allows for more deterministically managing long running sub-daemon
services under `pikerd` using the new context api from `tractor`.
The contexts are allocated in an async exit stack and torn down at root
daemon termination. Spawn brokerds using this method by changing the
persistence entry point to be a `@tractor.context`.
2021-05-27 13:05:23 -04:00
Tyler Goodlet 27d704b32e To avoid feed breakage, just give up on history after too many throttles for now 2021-05-27 13:05:23 -04:00
Tyler Goodlet 82cdb176e1 Make ctrl-l highlight current text in edit 2021-05-27 13:05:23 -04:00
Tyler Goodlet 0cd3cb3328 Drop old todo 2021-05-27 13:05:23 -04:00
Tyler Goodlet 212882a5a5 Don't try to show xhair if no active plot 2021-05-27 13:05:23 -04:00
Tyler Goodlet 307afb1935 Clean some key handling 2021-05-27 13:05:23 -04:00
Tyler Goodlet 67498c60af More UX features
- load previous search state on open
- show cached on empty search bar
- allow ctrl-u/d to navigate provider "sections"
2021-05-27 13:05:23 -04:00
Tyler Goodlet 8129fcc648 Ignore key auto-repeats 2021-05-27 13:05:23 -04:00
Tyler Goodlet a4627c2b04 Send blank packet on no match to avoid blocking search stream 2021-05-27 13:05:23 -04:00
Tyler Goodlet 07d8bf1453 Add a `.select_first()` view method + more cleaning 2021-05-27 13:05:23 -04:00
Tyler Goodlet d5e83e61d4 Reorder, drop some cruft 2021-05-27 13:05:23 -04:00
Tyler Goodlet 9d2c8a9526 Factor selection details into completer view methods 2021-05-27 13:05:23 -04:00
Tyler Goodlet 43d73b4a7c Info log the current provider search 2021-05-27 13:05:23 -04:00
Tyler Goodlet ddc2c8975a Ignore whitespace patterns in ib search 2021-05-27 13:05:23 -04:00
Tyler Goodlet 64c1d9a965 Support ctrl-space to open search pane 2021-05-27 13:05:23 -04:00
Tyler Goodlet d8a200aadc Increase completion-tree width, support ctrl-space toggle 2021-05-27 13:05:23 -04:00
Tyler Goodlet 2471ce446e Require `<symbol>.<provider>` format to cli 2021-05-27 13:05:23 -04:00
Tyler Goodlet c9311dd7d0 Few more derivs symbols 2021-05-27 13:05:23 -04:00
Tyler Goodlet 6f3b799960 Skip ib exchanges we haven't tested yet 2021-05-27 13:05:23 -04:00
Tyler Goodlet 42fda2a9e6 Drop old code 2021-05-27 13:05:23 -04:00
Tyler Goodlet e77a51f16e Support multi-provider cache symbol switching 2021-05-27 13:05:23 -04:00
Tyler Goodlet 1bd0ee8746 Support loading multi-brokerds search at startup 2021-05-27 13:05:23 -04:00
Tyler Goodlet fd8dc4f1a3 Make -b a multi-option for backends 2021-05-27 13:05:23 -04:00
Tyler Goodlet 59377da0ad Load pause configs from backends on feed opens 2021-05-27 13:05:23 -04:00
Tyler Goodlet bbd5883e52 Add search pause configs to backends 2021-05-27 13:05:23 -04:00
Tyler Goodlet b2ff09f193 Support min and max keyboard pauses
Some providers do well with a "longer" debounce period (like ib) since
searching them too frequently causes latency and stalls.  By supporting
both a min and max debounce period on keyboard input we can only send
patterns to the slower engines when that period is triggered via
`trio.move_on_after()` and continue to relay to faster engines when the
measured period permits. Allow search routines to register their "min
period" such that they can choose to ignore patterns that arrive before
their heuristically known ideal wait.
2021-05-27 13:05:23 -04:00
Tyler Goodlet 63363d750c Port chart to multi-search api 2021-05-27 13:05:23 -04:00
Tyler Goodlet cb102f692c Top level widget `.focus()` 2021-05-27 13:05:23 -04:00
Tyler Goodlet c9c686c98d Register context-stream with multi-search for each feed 2021-05-27 13:05:23 -04:00
Tyler Goodlet 0163a582a5 Move search machinery to ui module, add fast cached chart selection 2021-05-27 13:05:23 -04:00
Tyler Goodlet 82ece83d33 Drop commented cruft 2021-05-27 13:05:23 -04:00
Tyler Goodlet b39fd5e1fc Use per-provider indented tree layout for results 2021-05-27 13:05:23 -04:00