Sorghum leiocladum, SH3BP1 & Pedicularia granulata.
This commit is contained in:
parent
fc7de212b3
commit
a884fd4dc9
3 changed files with 123 additions and 22 deletions
|
@ -80,13 +80,16 @@
|
||||||
(defvar etherpad--local-pad-revision ""
|
(defvar etherpad--local-pad-revision ""
|
||||||
"Buffer local pad details.")
|
"Buffer local pad details.")
|
||||||
|
|
||||||
;; minor mode
|
|
||||||
(define-minor-mode etherpad-mode
|
(define-minor-mode etherpad-mode
|
||||||
"Minor mode to sync changes with etherpad." nil " etherpad" nil
|
"Minor mode to sync changes with etherpad."
|
||||||
|
:lighter " etherpad"
|
||||||
|
:keymap (make-sparse-keymap)
|
||||||
(if etherpad-mode
|
(if etherpad-mode
|
||||||
(ethersync--add-change-hooks)
|
(ethersync--add-change-hooks)
|
||||||
(ethersync--remove-change-hooks)))
|
(ethersync--remove-change-hooks)))
|
||||||
|
|
||||||
|
|
||||||
;; API functions
|
;; API functions
|
||||||
|
|
||||||
(defun etherpad-openapi ()
|
(defun etherpad-openapi ()
|
||||||
|
|
60
ethersync.el
60
ethersync.el
|
@ -37,7 +37,7 @@
|
||||||
;; details -> https://etherpad.org/doc/v1.8.5/#index_http_api
|
;; details -> https://etherpad.org/doc/v1.8.5/#index_http_api
|
||||||
|
|
||||||
;; current issues 2020-12-15 00:52:32
|
;; current issues 2020-12-15 00:52:32
|
||||||
;; - on ws per buffer. buffer local. shared.
|
;; - one ws per buffer. buffer local. shared.
|
||||||
;; - incorrect newline counts when sending changesets
|
;; - incorrect newline counts when sending changesets
|
||||||
;; - problems w. deleting text and/or changing buffer size & change-hooks
|
;; - problems w. deleting text and/or changing buffer size & change-hooks
|
||||||
;; - see "Additional Constraints" of easysync
|
;; - see "Additional Constraints" of easysync
|
||||||
|
@ -70,28 +70,50 @@
|
||||||
(defvar-local ep--hearbeat-timer nil)
|
(defvar-local ep--hearbeat-timer nil)
|
||||||
(defvar-local ep--current-socket nil)
|
(defvar-local ep--current-socket nil)
|
||||||
|
|
||||||
;; enable/disable keep alive message to the server
|
|
||||||
(defun ethersync-heartbeat-start ()
|
|
||||||
"Maintain connection to server with periodic pings."
|
|
||||||
(message "heartbeat started: %s" (current-buffer))
|
|
||||||
(setq ep--hearbeat-timer
|
|
||||||
(run-with-timer 5 15 #'wss-send "2")))
|
|
||||||
|
|
||||||
(defun ethersync-heartbeat-stop ()
|
|
||||||
"Stop sending keep-alive messages."
|
|
||||||
(cancel-timer ep--hearbeat-timer))
|
|
||||||
|
|
||||||
;; buffering
|
;; buffering
|
||||||
(defvar *etherpad-buffer* (generate-new-buffer "*etherpad*"))
|
(defvar *etherpad-buffer* (generate-new-buffer "*etherpad*"))
|
||||||
|
|
||||||
|
;; keep-alive message & heartbeat timers
|
||||||
|
|
||||||
|
(defun ethersync-heartbeat-send ()
|
||||||
|
"Send a keep-alive message."
|
||||||
|
;; only send if there is a current socket
|
||||||
|
;; and delete an active timer when there isn't a socket open
|
||||||
|
(message "heartbeat? %s" (ethersync-current-socket))
|
||||||
|
(when (ethersync-current-socket)
|
||||||
|
(wss-send "2")
|
||||||
|
(message "heartbeat sent: %s" *etherpad-buffer*))
|
||||||
|
(when (not (ethersync-current-socket))
|
||||||
|
(ethersync-heartbeat-stop)
|
||||||
|
(message "heartbeat stopped: %s" ep--hearbeat-timer)))
|
||||||
|
|
||||||
|
(defun ethersync-heartbeat-start ()
|
||||||
|
"Maintain connection to server with periodic pings."
|
||||||
|
(message "heartbeat started: %s" *etherpad-buffer*)
|
||||||
|
(setq ep--hearbeat-timer
|
||||||
|
(run-with-timer 5 15 #'ethersync-heartbeat-send))
|
||||||
|
(ethersync-current-socket))
|
||||||
|
|
||||||
|
(defun ethersync-heartbeat-stop ()
|
||||||
|
"Stop sending keep-alive messages."
|
||||||
|
(when ep--hearbeat-timer
|
||||||
|
(cancel-timer ep--hearbeat-timer))
|
||||||
|
(setq ep--hearbeat-timer nil)
|
||||||
|
(message "heartbeat stopped: %s" *etherpad-buffer*))
|
||||||
|
|
||||||
|
|
||||||
|
;; sockets
|
||||||
|
|
||||||
(defun ethersync-current-socket (&optional socket)
|
(defun ethersync-current-socket (&optional socket)
|
||||||
"Return currently active socket or set SOCKET as current."
|
"Return currently active socket or set SOCKET as current."
|
||||||
(message "socket in buffer: %s" (current-buffer))
|
(when socket
|
||||||
(if socket
|
(setq ep--current-socket socket))
|
||||||
(setq ep--current-socket socket)
|
(message "current socket: %s in buffer: %s" ep--current-socket *etherpad-buffer*))
|
||||||
ep--current-socket))
|
|
||||||
|
|
||||||
;; setters
|
;; setters
|
||||||
|
|
||||||
(defun ethersync--set-local-rev (n)
|
(defun ethersync--set-local-rev (n)
|
||||||
"Set the local revision."
|
"Set the local revision."
|
||||||
(message "current rev: %s" ep--local-rev)
|
(message "current rev: %s" ep--local-rev)
|
||||||
|
@ -382,9 +404,11 @@ Numeric offsets are calculated from the beginning of the buffer."
|
||||||
|
|
||||||
(defun ethersync-wss-send (msg)
|
(defun ethersync-wss-send (msg)
|
||||||
"Send MSG to a websocket."
|
"Send MSG to a websocket."
|
||||||
(when (stringp msg)
|
(if (websocket-openp (ethersync-current-socket))
|
||||||
(websocket-send-text
|
(when (stringp msg)
|
||||||
(ethersync-current-socket) msg)))
|
(websocket-send-text
|
||||||
|
(ethersync-current-socket) msg))
|
||||||
|
(message "websocket is closed. not sending: %s" msg)))
|
||||||
|
|
||||||
|
|
||||||
;; parsing & dispatch of incoming frames
|
;; parsing & dispatch of incoming frames
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
possibly relevant parts of the etherpad code
|
possibly relevant parts of the etherpad code
|
||||||
- https://github.com/ether/etherpad-lite/blob/develop/src/node/handler/PadMessageHandler.js
|
- https://github.com/ether/etherpad-lite/blob/develop/src/node/handler/PadMessageHandler.js
|
||||||
- https://github.com/payload/ethersync/blob/master/src/ethersync.coffee
|
- https://github.com/payload/ethersync/blob/master/src/ethersync.coffee
|
||||||
- code for a [[https://github.com/JohnMcLear/etherpad-cli-client/blob/master/lib/index.js][cli-client]] and the [[https://github.com/ether/etherpad-lite/tree/develop/src/static/js][javasctipt client]]
|
- code for a [[https://github.com/JohnMcLear/etherpad-cli-client/blob/master/lib/index.js][cli-client]] and the [[https://github.com/ether/etherpad-lite/tree/develop/src/static/js][javascript client]]
|
||||||
|
|
||||||
* websockets & socket.io
|
* websockets & socket.io
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ browser client sends url with pad name to server (e.g. https://etherpad.wikimed
|
||||||
client -> ep_server: wss://example.org//socket.io/?EIO=3&transport=websocket
|
client -> ep_server: wss://example.org//socket.io/?EIO=3&transport=websocket
|
||||||
ep_server --> client: 0 sid, upgrades, etc
|
ep_server --> client: 0 sid, upgrades, etc
|
||||||
client -> ep_server: 2 CLIENT_READY padId, token, etc
|
client -> ep_server: 2 CLIENT_READY padId, token, etc
|
||||||
ep_server --> client: 42 CLIENT_VARS pad text, lots of junk about server, colours, authors, etc
|
ep_server --> client: 42 CLIENT_VARS pad text, lots of detail about server, colours, authors, etc
|
||||||
ep_server --> client: 42 USER_NEWINFO (if other active clients)
|
ep_server --> client: 42 USER_NEWINFO (if other active clients)
|
||||||
|
|
||||||
== local edits ==
|
== local edits ==
|
||||||
|
@ -466,3 +466,77 @@ example/reduced
|
||||||
< 40
|
< 40
|
||||||
>
|
>
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
#+BEGIN_SRC js
|
||||||
|
[
|
||||||
|
"message",
|
||||||
|
{
|
||||||
|
"type": "COLLABROOM",
|
||||||
|
"data": {
|
||||||
|
"type": "NEW_CHANGES",
|
||||||
|
"newRev": 969,
|
||||||
|
"changeset": "Z:2r>2*0=1=5*1|1+1*1*2*3*4*5+1|1=1*6=1|1=4*7=1|1=4*8=1|1=a*9=1|1=5*0=1|1=f*0=1|1=q*5=1|1=4*6=1|1=4*7=1|1=4*8=1$\n*",
|
||||||
|
"apool": {
|
||||||
|
"numToAttrib": {
|
||||||
|
"0": [
|
||||||
|
"start",
|
||||||
|
"1"
|
||||||
|
],
|
||||||
|
"1": [
|
||||||
|
"author",
|
||||||
|
"a.TA0tvO487Oh304Up"
|
||||||
|
],
|
||||||
|
"2": [
|
||||||
|
"insertorder",
|
||||||
|
"first"
|
||||||
|
],
|
||||||
|
"3": [
|
||||||
|
"list",
|
||||||
|
"number1"
|
||||||
|
],
|
||||||
|
"4": [
|
||||||
|
"lmkr",
|
||||||
|
"1"
|
||||||
|
],
|
||||||
|
"5": [
|
||||||
|
"start",
|
||||||
|
"2"
|
||||||
|
],
|
||||||
|
"6": [
|
||||||
|
"start",
|
||||||
|
"3"
|
||||||
|
],
|
||||||
|
"7": [
|
||||||
|
"start",
|
||||||
|
"4"
|
||||||
|
],
|
||||||
|
"8": [
|
||||||
|
"start",
|
||||||
|
"5"
|
||||||
|
],
|
||||||
|
"9": [
|
||||||
|
"start",
|
||||||
|
"6"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"attribToNum": {
|
||||||
|
"start,1": 0,
|
||||||
|
"author,a.TA0tvO487Oh304Up": 1,
|
||||||
|
"insertorder,first": 2,
|
||||||
|
"list,number1": 3,
|
||||||
|
"lmkr,1": 4,
|
||||||
|
"start,2": 5,
|
||||||
|
"start,3": 6,
|
||||||
|
"start,4": 7,
|
||||||
|
"start,5": 8,
|
||||||
|
"start,6": 9
|
||||||
|
},
|
||||||
|
"nextNum": 10
|
||||||
|
},
|
||||||
|
"author": "a.TA0tvO487Oh304Up",
|
||||||
|
"currentTime": 1638017098574,
|
||||||
|
"timeDelta": 8923
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
#+END_SRC
|
||||||
|
|
Loading…
Reference in a new issue