And the new (very simpleminded) leoserver command is:
def send_outline(self, param):
filename = param.get('path', '')
result = ''
if filename and os.path.exists(filename):
with open(filename, encoding='utf-8') as f:
result = f.read()
data = {"outline": result}
return self._make_response(data)
On Saturday, March 12, 2022 at 11:59:50 PM UTC-5 [email protected] wrote:
> And here is the entire client main loop using commander methods instead of
> c.k.simulateCommand():
>
> async def client_main_loop(timeout):
> uri = f"ws://{wsHost}:{wsPort}"
>
> async with websockets.connect(uri) as websocket: # pylint:
> disable=no-member
> # Await the startup package.
> json_s = g.toUnicode(await websocket.recv())
>
> request_package = {
> "id": 4,
> "action": '!send_outline', # New command for leoserver
> "param": {'path': r'c:\temp\leo\zettel_cmds.leo'}
> }
>
> n = 0
> request = json.dumps(request_package, separators=(',', ':'))
> await websocket.send(request)
>
> while n < 6:
> n += 1
> json_s = g.toUnicode(await websocket.recv())
> d = json.loads(json_s)
> id = d.get('id', '??')
> if id != 4: # the id we are interested in
>
> continue
> if 'outline' in d:
> file = d['outline']
> print('outline length:', len(file))
> c1 = c.new()
> c1.pasteOutlineRetainingClones(None, file)
> break
> On Saturday, March 12, 2022 at 3:36:21 PM UTC-5 [email protected] wrote:
>
>> I've actually got this working (as a rough proof-of-principle). I added
>> a new command to leoserver: send_outline(self, param). My tiny client
>> sends a file path to leoserver, which reads the file and sends the
>> resulting string back to the client, which copies it to the clipboard. The
>> client then simulates the "new" command and then the
>> "paste-retaining-clones" command to that new outline.
>>
>> The only thing is that the outline gets pasted in as a sibling of the
>> empty node that gets put there when the new outline is created. There must
>> be some simple way to insert at the top of the outline, but I don't know
>> what that is yet. Anyway, in practice we'd probably like to use commander
>> methods instead of simulating commands. But it's almost usable this way,
>> modulo error handling and getting the remote file path into the client
>> script.
>>
>> def send_outline(self, param):
>> filename = param.get('path', '')
>> result = ''
>> if filename and os.path.exists(filename):
>> with open(filename) as f:
>> result = f.read()
>> data = {"outline": result}
>> return self._make_response(data)
>>
>> In the client main loop:
>> # ...
>> while n < 6:
>> n += 1
>> json_s = g.toUnicode(await websocket.recv())
>> d = json.loads(json_s)
>> id = d.get('id', '??')
>> if id != 4: # the id of my request
>> continue
>> if 'outline' in d:
>> file = d['outline']
>> print('outline length:', len(file))
>> g.app.gui.replaceClipboardWith(file)
>> c.k.simulateCommand('new')
>> c1 = g.app.commanders()[-1]
>> c1.k.simulateCommand('paste-retaining-clones')
>> return
>> return
>>
>> In practice I suppose we wouldn't want to return from the client this way
>> because we wouldn't want to shut down the remote leoserver instance.
>>
>> On Saturday, March 12, 2022 at 8:31:35 AM UTC-5 [email protected] wrote:
>>
>>> On Saturday, March 12, 2022 at 8:23:14 AM UTC-5 [email protected] wrote:
>>>
>>>> It seems to me that almost everything we need already exists except for
>>>> the actual acquire-from-the-leoserver. part.
>>>>
>>>
>>> For instance, once Leo has the bytes from the other computer, loading
>>> them is essentially the existing CreateOutline + PasteAsClone
>>> operations. Sending the changed outline back is essentially copyNode, then
>>> SendBytes (the only new part).
>>>
>>
--
You received this message because you are subscribed to the Google Groups
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/leo-editor/d2e228af-0d18-41bc-bf20-37284d860ae2n%40googlegroups.com.