Drop `i3ipc + `xdotool` approach for feed hacks
parent
bff625725e
commit
c3142aec81
|
@ -2556,89 +2556,4 @@ async def data_reset_hack(
|
||||||
await tractor.to_asyncio.run_task(vnc_click_hack)
|
await tractor.to_asyncio.run_task(vnc_click_hack)
|
||||||
|
|
||||||
# we don't really need the ``xdotool`` approach any more B)
|
# we don't really need the ``xdotool`` approach any more B)
|
||||||
return
|
|
||||||
|
|
||||||
# TODO: see if we can find which window is mapped to which process?
|
|
||||||
# for eg. if we can launch a paper account with docker and then find
|
|
||||||
# the pid of it, can we send keycommands to that container somehow?
|
|
||||||
|
|
||||||
# TODO: try out this lib instead, seems to be the most modern
|
|
||||||
# and usess the underlying lib:
|
|
||||||
# https://github.com/rshk/python-libxdo
|
|
||||||
|
|
||||||
# TODO: seems to be a few libs for python but not sure
|
|
||||||
# if they support all the sub commands we need, order of
|
|
||||||
# most recent commit history:
|
|
||||||
# https://github.com/rr-/pyxdotool
|
|
||||||
# https://github.com/ShaneHutter/pyxdotool
|
|
||||||
# https://github.com/cphyc/pyxdotool
|
|
||||||
|
|
||||||
try:
|
|
||||||
import i3ipc
|
|
||||||
except ImportError:
|
|
||||||
return False
|
|
||||||
log.warning('IB data hack no-supported on ur platformz')
|
|
||||||
|
|
||||||
i3 = i3ipc.Connection()
|
|
||||||
t = i3.get_tree()
|
|
||||||
|
|
||||||
orig_win_id = t.find_focused().window
|
|
||||||
|
|
||||||
# for tws
|
|
||||||
win_names: list[str] = [
|
|
||||||
'Interactive Brokers', # tws running in i3
|
|
||||||
'IB Gateway', # gw running in i3
|
|
||||||
# 'IB', # gw running in i3 (newer version?)
|
|
||||||
]
|
|
||||||
|
|
||||||
combos: dict[str, str] = {
|
|
||||||
# only required if we need a connection reset.
|
|
||||||
'connection': ('ctrl+alt+r', 12),
|
|
||||||
|
|
||||||
# data feed reset.
|
|
||||||
'data': ('ctrl+alt+f', 6)
|
|
||||||
}
|
|
||||||
|
|
||||||
for name in win_names:
|
|
||||||
results = t.find_titled(name)
|
|
||||||
print(f'results for {name}: {results}')
|
|
||||||
if results:
|
|
||||||
con = results[0]
|
|
||||||
print(f'Resetting data feed for {name}')
|
|
||||||
win_id = str(con.window)
|
|
||||||
w, h = con.rect.width, con.rect.height
|
|
||||||
|
|
||||||
# TODO: only run the reconnect (2nd) kc on a detected
|
|
||||||
# disconnect?
|
|
||||||
key_combo, timeout = combos[reset_type]
|
|
||||||
# for key_combo, timeout in [
|
|
||||||
# # only required if we need a connection reset.
|
|
||||||
# # ('ctrl+alt+r', 12),
|
|
||||||
# # data feed reset.
|
|
||||||
# ('ctrl+alt+f', 6)
|
|
||||||
# ]:
|
|
||||||
await trio.run_process([
|
|
||||||
'xdotool',
|
|
||||||
'windowactivate', '--sync', win_id,
|
|
||||||
|
|
||||||
# move mouse to bottom left of window (where there should
|
|
||||||
# be nothing to click).
|
|
||||||
'mousemove_relative', '--sync', str(w - 4), str(h - 4),
|
|
||||||
|
|
||||||
# NOTE: we may need to stick a `--retry 3` in here..
|
|
||||||
'click', '--window', win_id,
|
|
||||||
'--repeat', '3', '1',
|
|
||||||
|
|
||||||
# hackzorzes
|
|
||||||
'key', key_combo,
|
|
||||||
# ],
|
|
||||||
# timeout=timeout,
|
|
||||||
])
|
|
||||||
|
|
||||||
# re-activate and focus original window
|
|
||||||
await trio.run_process([
|
|
||||||
'xdotool',
|
|
||||||
'windowactivate', '--sync', str(orig_win_id),
|
|
||||||
'click', '--window', str(orig_win_id), '1',
|
|
||||||
])
|
|
||||||
return True
|
return True
|
||||||
|
|
Loading…
Reference in New Issue