mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 23:40:05 +08:00
148 lines
4.2 KiB
VimL
148 lines
4.2 KiB
VimL
|
function! s:systemlist(cmd) abort
|
||
|
let cmd = ''
|
||
|
let quote = &shellxquote == '"' ? "'" : '"'
|
||
|
if type(a:cmd) == type([]) && !has('nvim')
|
||
|
for argv in a:cmd
|
||
|
if type(argv) == 4
|
||
|
let cmd .= quote . substitute(json_encode(argv), '"', '"""', 'g') . quote . ' '
|
||
|
else
|
||
|
let cmd .= quote . substitute(argv, '"', '"""', 'g') . quote . ' '
|
||
|
endif
|
||
|
endfor
|
||
|
else
|
||
|
let cmd = a:cmd
|
||
|
endif
|
||
|
call github#api#util#log('systemlist cmd : ' . string(cmd))
|
||
|
let result = systemlist(cmd)
|
||
|
if !empty(v:shell_error) && g:githubapi_verbose == 1
|
||
|
echom cmd
|
||
|
echom v:shell_error
|
||
|
echom string(result)
|
||
|
endif
|
||
|
return result
|
||
|
endfunction
|
||
|
|
||
|
function! github#api#util#Get(url,args) abort
|
||
|
let cmd = [g:githubapi_curl_exe, '-s', s:geturl(a:url)]
|
||
|
if len(a:args) > 0
|
||
|
call extend(cmd, a:args)
|
||
|
endif
|
||
|
call github#api#util#log('util#Get cmd : ' . string(cmd))
|
||
|
let result = join(s:systemlist(cmd),"\n")
|
||
|
return empty(result) ? result : json_decode(result)
|
||
|
endfunction
|
||
|
|
||
|
let s:wrapper = {
|
||
|
\ 'result' : '',
|
||
|
\ 'callback' : '',
|
||
|
\ }
|
||
|
|
||
|
function! s:wrapper.on_stdout(id, data, event) abort
|
||
|
let self.result .= join(a:data, "\n")
|
||
|
endfunction
|
||
|
|
||
|
function! s:wrapper.on_exit(id, data, event) abort
|
||
|
if a:data == 0 && a:event ==# 'exit'
|
||
|
if !empty(self.result)
|
||
|
call call(self.callback, [json_decode(self.result)])
|
||
|
endif
|
||
|
endif
|
||
|
endfunction
|
||
|
|
||
|
|
||
|
" async get issue list, the func accept one argv issue_list
|
||
|
function! github#api#util#async_get(url, args, func) abort
|
||
|
let cmd = ['curl', '-s', s:geturl(a:url)]
|
||
|
if len(a:args) > 0
|
||
|
call extend(cmd, a:args)
|
||
|
endif
|
||
|
let opt = deepcopy(s:wrapper)
|
||
|
let opt.callback = a:func
|
||
|
call jobstart(cmd, opt)
|
||
|
endfunction
|
||
|
|
||
|
function! github#api#util#GetLastPage(url) abort
|
||
|
let cmd = ['curl', '-si', s:geturl(a:url)]
|
||
|
call github#api#util#log('util#GetLastPage cmd : ' . string(cmd))
|
||
|
let result = filter(copy(s:systemlist(cmd)), "v:val =~# '^Link'")
|
||
|
let page = 1
|
||
|
if len(result) > 0
|
||
|
let line = result[0]
|
||
|
if !empty(line) && !empty(matchstr(line, 'rel="last"'))
|
||
|
call github#api#util#log(line)
|
||
|
let page = split(matchstr(line,'page=\d\+',0,2),'=')[1]
|
||
|
call github#api#util#log(page)
|
||
|
return page
|
||
|
endif
|
||
|
else
|
||
|
return page
|
||
|
endif
|
||
|
endfunction
|
||
|
|
||
|
function! github#api#util#GetStatus(url,opt) abort
|
||
|
let cmd = ['curl', '-is', s:geturl(a:url)]
|
||
|
if len(a:opt) > 0
|
||
|
call extend(cmd, a:opt)
|
||
|
endif
|
||
|
call github#api#util#log('util#GetStatus cmd : ' . string(cmd))
|
||
|
let result = filter(copy(s:systemlist(cmd)), "v:val =~# '^Status:'")
|
||
|
return matchstr(result[0],'\d\+')
|
||
|
endfunction
|
||
|
|
||
|
""
|
||
|
" @public
|
||
|
" Get current time in a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ
|
||
|
function! github#api#util#Get_current_time() abort
|
||
|
return strftime('%Y-%m-%dT%TZ')
|
||
|
endfunction
|
||
|
|
||
|
let s:log = []
|
||
|
function! github#api#util#log(log) abort
|
||
|
call add(s:log, a:log)
|
||
|
endfunction
|
||
|
|
||
|
""
|
||
|
" @public
|
||
|
" view the log of API
|
||
|
function! github#api#util#GetLog() abort
|
||
|
return join(s:log, "\n")
|
||
|
endfunction
|
||
|
|
||
|
""
|
||
|
" @public
|
||
|
"
|
||
|
" Clean up the log of the API
|
||
|
function! github#api#util#CleanLog() abort
|
||
|
let s:log = []
|
||
|
echon "Github-api.vim's log has beed cleaned up!"
|
||
|
endfunction
|
||
|
|
||
|
function! github#api#util#parserArgs(base,name,var,values,default) abort
|
||
|
if empty(a:default) && index(a:values, a:var) == -1
|
||
|
return a:base
|
||
|
endif
|
||
|
let url = a:base . (stridx(a:base, '?') ==# -1 ? '?' : '&')
|
||
|
if index(a:values, a:var) == -1
|
||
|
let url .= a:name . '=' . a:default
|
||
|
else
|
||
|
let url .= a:name . '=' . a:var
|
||
|
endif
|
||
|
return url
|
||
|
endfunction
|
||
|
|
||
|
function! s:geturl(url) abort
|
||
|
let s:clientid = $CLIENTID
|
||
|
let s:clientsecret = $CLIENTSECRET
|
||
|
if !empty(s:clientid) && !empty(s:clientsecret)
|
||
|
let url = a:url
|
||
|
if stridx(a:url, '?') != -1
|
||
|
let url .= '&client_id=' . s:clientid . '&client_secret=' . s:clientsecret
|
||
|
else
|
||
|
let url .= '?client_id=' . s:clientid . '&client_secret=' . s:clientsecret
|
||
|
endif
|
||
|
return g:githubapi_root_url . url
|
||
|
else
|
||
|
return g:githubapi_root_url . a:url
|
||
|
endif
|
||
|
endfunction
|