Skip to content

Commit

Permalink
Rewrote a lot and fixed neovim support
Browse files Browse the repository at this point in the history
  • Loading branch information
johan-bjareholt committed Jun 10, 2018
1 parent 01c2f02 commit 624c7c3
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 72 deletions.
91 changes: 30 additions & 61 deletions plugin/activitywatch.vim
Original file line number Diff line number Diff line change
Expand Up @@ -7,99 +7,72 @@ let g:loaded_activitywatch = 1
let s:cpo_save = &cpo
set cpo&vim

let s:vimwatcher_open = 0
let s:adapter_cmd = ['python3', '-u', expand("<sfile>:p:h") . '/vimwatcher.py']

function! s:Poke()
call s:SendData()
endfunc
let s:adapter_cmd = ['python3', expand("<sfile>:p:h") . '/vimwatcher.py']

function! s:StartVimWatcher()
if !exists("s:vimwatcher_job") || !s:CheckStatus()
if has('nvim')
let s:vimwatcher_job = jobstart(s:adapter_cmd,
\ {"on_stdout": "AWNeovimRecv",
\ "on_stderr": "AWNeovimEcho",
\ "on_exit": "AWNeovimExit"
\})
\ {"on_stdout": "AWNeovimEcho",
\ "on_stderr": "AWNeovimEcho",
\ "on_exit": "AWNeovimExit"
\ })
else
let s:vimwatcher_job = job_start(s:adapter_cmd,
\ {"out_cb": "AWRecv",
\ "err_io": "buffer",
\ "err_name": "activtywatch_log",
\ "in_mode": "json"
\})
\ {"out_cb": "AWEcho",
\ "err_cb": "AWEcho",
\ "in_mode": "raw"
\ })
endif

let s:vimwatcher_open = 1
endif
endfunc

function! AWNeovimExit(job_id, data, event)
call s:CloseWatcher()
endfunc

function! AWNeovimRecv(job_id, data, event)
call s:HandleMsg(a:data)
endfunc

function! AWNeovimEcho(job_id, data, event)
echo a:data
endfunc

function! AWRecv(channel, msg)
call s:HandleMsg(a:msg)
endfunc

function! s:HandleMsg(msg)
let l:json_msg = json_decode(a:msg)
echo json_msg
endfunc

function! AWEcho(channel, msg)
echo a:msg
endfunc

function! AWNeovimExit(job_id, data, event)
let s:vimwatcher_job = 0
endfunc

function! s:CheckStatus()
if s:vimwatcher_open
if has('nvim')
if has('nvim')
if s:vimwatcher_job
return 1
elseif ch_status(s:vimwatcher_job) == "open"
return 1
else
call s:CloseWatcher()
echo "Watcher has stopped unexpectedly"
endif
elseif ch_status(s:vimwatcher_job) == "open"
return 1
endif
return 0
endfunc

function! s:StopVimWatcher()
call s:Send("stop")
call s:CloseWatcher()
endfunc

function! s:CloseWatcher()
let s:vimwatcher_open = 0
if has('nvim')
call s:Send({'action': 'stop'})
call jobwait([s:vimwatcher_job], 5)
let s:vimwatcher_job = 0
else
call job_stop(s:vimwatcher_job)
endif
endfunc

function! s:Send(msg)
if s:CheckStatus()
if has('nvim')
let l:json_msg = json_encode(a:msg)
call jobsend(s:vimwatcher_job, l:json_msg)
call jobsend(s:vimwatcher_job, l:json_msg . "\n")
else
call ch_sendexpr(s:vimwatcher_job, a:msg)
let l:json_msg = json_encode(a:msg)
call ch_sendraw(s:vimwatcher_job, l:json_msg . "\n")
endif
else
echo "Watcher not running"
endif
endfunc

function! s:SendData()
call s:Send({'timestamp': localtime(),
\ 'fname': expand('%:p')
\})
function! s:Poke()
call s:Send({'action': 'update', 'data': {'filename': expand('%:p')}})
endfunc

call s:StartVimWatcher()
Expand All @@ -110,11 +83,7 @@ augroup ActivityWatch
augroup END

command! AWStart call s:StartVimWatcher()
if has('nvim')
command! AWStatus echom s:CheckStatus()
else
command! AWStatus echom ch_status(s:vimwatcher_job)
endif
command! AWStatus echom s:CheckStatus()
command! AWStop call s:StopVimWatcher()

let &cpo = s:cpo_save
Expand Down
25 changes: 14 additions & 11 deletions plugin/vimwatcher.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import logging
import json
import sys
from datetime import datetime
from datetime import datetime, timezone

from aw_core import dirs
from aw_core.models import Event
from aw_client.client import ActivityWatchClient

logging.basicConfig(level=logging.INFO)

name = "aw-watcher-vim"
logger = logging.getLogger(name)
Expand All @@ -32,26 +33,28 @@ def send(h, content):


def main():
logging.basicConfig(level=logging.INFO)
config_dir = dirs.get_config_dir(name)

config = load_config()
pulsetime = config[name].getfloat("pulsetime")

aw = ActivityWatchClient(name, testing=False)
bucketname = "{}_{}".format(aw.client_name, aw.client_hostname)
aw.create_bucket(bucketname, 'app.editor.current-activity', queued=True)
aw.create_bucket(bucketname, 'app.editor.activity', queued=True)
aw.connect()

i = 1
for chunk in sys.stdin:
i, data = json.loads(chunk)
if data == "stop":
break
elif data:
timestamp = datetime.utcfromtimestamp(data.pop("timestamp"))
event = Event(timestamp=timestamp, data=data)
msg = json.loads(chunk)
if "action" not in msg:
logger.error("No action in msg: {}".format(msg))
if msg["action"] == "stop":
aw.disconnect()
return
elif msg["action"] == "update":
timestamp = datetime.now(timezone.utc)
event = Event(timestamp=timestamp, data=msg["data"])
aw.heartbeat(bucketname, event, pulsetime=pulsetime, queued=True)

else:
logger.error("Invalid action: {}".format(msg["action"]))

main()

0 comments on commit 624c7c3

Please sign in to comment.