mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 13:00:05 +08:00
185 lines
5.1 KiB
VimL
185 lines
5.1 KiB
VimL
" =============================================================================
|
|
" Filename: autoload/calendar/task/local.vim
|
|
" Author: itchyny
|
|
" License: MIT License
|
|
" Last Change: 2020/11/19 07:41:02.
|
|
" =============================================================================
|
|
|
|
let s:save_cpo = &cpo
|
|
set cpo&vim
|
|
|
|
function! calendar#task#local#new() abort
|
|
return deepcopy(s:self)
|
|
endfunction
|
|
|
|
let s:cache = calendar#cache#new('local')
|
|
|
|
let s:task_cache = s:cache.new('task')
|
|
|
|
let s:self = {}
|
|
|
|
function! s:self.get_taskList() dict abort
|
|
if has_key(self, 'localtasklist')
|
|
return self.localtasklist
|
|
else
|
|
let taskList = s:cache.get('taskList')
|
|
if type(taskList) == type({}) && has_key(taskList, 'items') && type(taskList.items) == type([])
|
|
let self.localtasklist = taskList
|
|
else
|
|
let self.localtasklist = { 'items': [{'id': calendar#util#id(), 'title': get(calendar#message#get('task'), 'title', 'Task')}] }
|
|
call s:cache.save('taskList', self.localtasklist)
|
|
endif
|
|
endif
|
|
return self.localtasklist
|
|
endfunction
|
|
|
|
function! s:self.get_task() dict abort
|
|
let taskList = self.get_taskList()
|
|
let task = []
|
|
if has_key(taskList, 'items') && type(taskList.items) == type([])
|
|
for item in taskList.items
|
|
call add(task, item)
|
|
let task[-1].items = []
|
|
unlet! cnt
|
|
let cnt = s:task_cache.new(item.id).get('information')
|
|
if type(cnt) == type({}) && cnt != {}
|
|
let i = 0
|
|
while type(cnt) == type({})
|
|
unlet! cnt
|
|
let cnt = s:task_cache.new(item.id).get(i)
|
|
if type(cnt) == type({}) && cnt != {} && has_key(cnt, 'items') && type(cnt.items) == type([])
|
|
call extend(task[-1].items, cnt.items)
|
|
endif
|
|
let i += 1
|
|
endwhile
|
|
endif
|
|
endfor
|
|
endif
|
|
let self.localtask = task
|
|
return task
|
|
endfunction
|
|
|
|
function! s:self.insert(listid, previous, parent, title, ...) dict abort
|
|
let k = self.get_tasklist_index(a:listid)
|
|
if k >= 0
|
|
let j = self.get_index(k, a:previous) + 1
|
|
call insert(self.localtask[k].items, { 'title': a:title, 'id': calendar#util#id() }, j)
|
|
call self.save()
|
|
endif
|
|
endfunction
|
|
|
|
function! s:self.move(listid, taskid, previous, parent) dict abort
|
|
let k = self.get_tasklist_index(a:listid)
|
|
if k >= 0
|
|
let j = self.get_index(k, a:taskid)
|
|
let pj = a:previous ==# '' ? 0 : self.get_index(k, a:previous)
|
|
if j >= 0 && pj >= 0
|
|
let task = deepcopy(self.localtask[k].items[j])
|
|
call remove(self.localtask[k].items, j)
|
|
let pj = a:previous ==# '' ? -1 : self.get_index(k, a:previous)
|
|
call insert(self.localtask[k].items, task, pj + 1)
|
|
call self.save()
|
|
endif
|
|
endif
|
|
endfunction
|
|
|
|
function! s:self.update(listid, taskid, title, ...) dict abort
|
|
let k = self.get_tasklist_index(a:listid)
|
|
if k >= 0
|
|
let j = self.get_index(k, a:taskid)
|
|
if j >= 0
|
|
call extend(self.localtask[k].items[j], { 'title': a:title })
|
|
call self.save()
|
|
endif
|
|
endif
|
|
endfunction
|
|
|
|
function! s:self.complete(listid, taskid) dict abort
|
|
let k = self.get_tasklist_index(a:listid)
|
|
if k >= 0
|
|
let j = self.get_index(k, a:taskid)
|
|
if j >= 0
|
|
call extend(self.localtask[0].items[j], { 'status': 'completed' })
|
|
call self.save()
|
|
endif
|
|
endif
|
|
endfunction
|
|
|
|
function! s:self.uncomplete(listid, taskid) dict abort
|
|
let k = self.get_tasklist_index(a:listid)
|
|
if k >= 0
|
|
let j = self.get_index(k, a:taskid)
|
|
if j >= 0
|
|
if has_key(self.localtask[0].items[j], 'status')
|
|
call remove(self.localtask[0].items[j], 'status')
|
|
endif
|
|
call self.save()
|
|
endif
|
|
endif
|
|
endfunction
|
|
|
|
function! s:self.clear_completed(listid) dict abort
|
|
if has_key(self, 'localtask')
|
|
for task in self.localtask
|
|
call filter(task.items, 'get(v:val, "status", "") !=# "completed"')
|
|
endfor
|
|
call self.save()
|
|
endif
|
|
endfunction
|
|
|
|
function! s:self.delete(listid, taskid) dict abort
|
|
let k = self.get_tasklist_index(a:listid)
|
|
if k >= 0
|
|
let j = self.get_index(k, a:taskid)
|
|
if j >= 0
|
|
call remove(self.localtask[0].items, j)
|
|
call self.save()
|
|
endif
|
|
endif
|
|
endfunction
|
|
|
|
function! s:self.save() dict abort
|
|
if has_key(self, 'localtask')
|
|
for task in self.localtask
|
|
call s:task_cache.new(task.id).save(0, task)
|
|
call s:task_cache.new(task.id).save('information', { 'id': task.id, 'title': task.title })
|
|
endfor
|
|
endif
|
|
endfunction
|
|
|
|
function! s:self.get_tasklist_index(id) dict abort
|
|
if has_key(self, 'localtask')
|
|
let j = -1
|
|
for i in range(len(self.localtask))
|
|
if self.localtask[i].id ==# a:id
|
|
let j = i
|
|
break
|
|
endif
|
|
endfor
|
|
if j < 0 && len(self.localtask)
|
|
return 0
|
|
endif
|
|
return j
|
|
endif
|
|
return -1
|
|
endfunction
|
|
|
|
function! s:self.get_index(listindex, id) dict abort
|
|
if has_key(self, 'localtask')
|
|
if 0 <= a:listindex && a:listindex < len(self.localtask)
|
|
let j = -1
|
|
for i in range(len(self.localtask[a:listindex].items))
|
|
if self.localtask[0].items[i].id ==# a:id
|
|
let j = i
|
|
break
|
|
endif
|
|
endfor
|
|
return j
|
|
endif
|
|
endif
|
|
return -1
|
|
endfunction
|
|
|
|
let &cpo = s:save_cpo
|
|
unlet s:save_cpo
|