diff --git a/1.vim b/1.vim index 81aae53c..f0982576 100644 --- a/1.vim +++ b/1.vim @@ -28,10 +28,10 @@ nnoremap \1 :call SN("1") nmap \rn (coc-rename) xmap gx NetrwBrowseXVis nmap gx NetrwBrowseX -snoremap "_c -snoremap c -snoremap c snoremap c +snoremap c +snoremap c +snoremap "_c nnoremap GitGutterPreviewHunk :call gitgutter#utility#warn('Please change your map GitGutterPreviewHunk to (GitGutterPreviewHunk)') nnoremap (GitGutterPreviewHunk) :GitGutterPreviewHunk nnoremap GitGutterUndoHunk :call gitgutter#utility#warn('Please change your map GitGutterUndoHunk to (GitGutterUndoHunk)') @@ -139,6 +139,8 @@ set smarttab set suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc set updatetime=500 set window=24 +set winminheight=0 +set winminwidth=0 let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 let v:this_session=expand(":p") silent only @@ -152,15 +154,17 @@ if &shortmess =~ 'A' else set shortmess=aoO endif -badd +132 src/Model/Global/fileTransferModel.ts -badd +0 src/Model/Utility/utility.ts +badd +1 src/Model/Global/fileTransferModel.ts +badd +1 src/Model/Utility/utility.ts badd +1 src/View/Modals/dataTransferModal.tsx -badd +669 src/View/translations.ts +badd +1 src/View/translations.ts badd +133 src/View/homePage.tsx +badd +0 src/ViewModel/Global/fileTransferViewModel.ts argglobal %argdel set stal=2 tabnew +setlocal\ bufhidden=wipe +tabnew +setlocal\ bufhidden=wipe tabrewind edit src/Model/Global/fileTransferModel.ts let s:save_splitbelow = &splitbelow @@ -182,12 +186,12 @@ set winminheight=0 set winheight=1 set winminwidth=0 set winwidth=1 -exe 'vert 1resize ' . ((&columns * 31 + 73) / 146) -exe 'vert 2resize ' . ((&columns * 111 + 73) / 146) -exe 'vert 3resize ' . ((&columns * 2 + 73) / 146) +exe 'vert 1resize ' . ((&columns * 54 + 127) / 255) +exe 'vert 2resize ' . ((&columns * 196 + 127) / 255) +exe 'vert 3resize ' . ((&columns * 3 + 127) / 255) argglobal enew -file NERD_tree_tab_2 +file NERD_tree_tab_1 balt src/Model/Global/fileTransferModel.ts let s:cpo_save=&cpo set cpo&vim @@ -211,6 +215,14 @@ nnoremap R :call nerdtree#ui_glue#invokeKeyMap("R") nnoremap T :call nerdtree#ui_glue#invokeKeyMap("T") nnoremap U :call nerdtree#ui_glue#invokeKeyMap("U") nnoremap X :call nerdtree#ui_glue#invokeKeyMap("X") +nmap [c (GitGutterPrevHunk) +nmap \hp (GitGutterPreviewHunk) +nmap \hu (GitGutterUndoHunk) +nmap \hs (GitGutterStageHunk) +xmap \hs (GitGutterStageHunk) +nmap ]c (GitGutterNextHunk) +xmap ac (GitGutterTextObjectOuterVisual) +omap ac (GitGutterTextObjectOuterPending) nnoremap cd :call nerdtree#ui_glue#invokeKeyMap("cd") nnoremap e :call nerdtree#ui_glue#invokeKeyMap("e") nnoremap f :call nerdtree#ui_glue#invokeKeyMap("f") @@ -218,6 +230,8 @@ nnoremap go :call nerdtree#ui_glue#invokeKeyMap("go") nnoremap gb :call nerdtree#ui_glue#invokeKeyMap("gb") nnoremap gi :call nerdtree#ui_glue#invokeKeyMap("gi") nnoremap gs :call nerdtree#ui_glue#invokeKeyMap("gs") +xmap ic (GitGutterTextObjectInnerVisual) +omap ic (GitGutterTextObjectInnerPending) nnoremap i :call nerdtree#ui_glue#invokeKeyMap("i") nnoremap m :call nerdtree#ui_glue#invokeKeyMap("m") nnoremap o :call nerdtree#ui_glue#invokeKeyMap("o") @@ -515,7 +529,7 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 130 - ((13 * winheight(0) + 11) / 22) +let s:l = 130 - ((0 * winheight(0) + 23) / 47) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt @@ -672,16 +686,16 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 233 - ((10 * winheight(0) + 11) / 22) +let s:l = 233 - ((0 * winheight(0) + 23) / 47) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt keepjumps 233 normal! 017| wincmd w -exe 'vert 1resize ' . ((&columns * 31 + 73) / 146) -exe 'vert 2resize ' . ((&columns * 111 + 73) / 146) -exe 'vert 3resize ' . ((&columns * 2 + 73) / 146) +exe 'vert 1resize ' . ((&columns * 54 + 127) / 255) +exe 'vert 2resize ' . ((&columns * 196 + 127) / 255) +exe 'vert 3resize ' . ((&columns * 3 + 127) / 255) tabnext edit src/View/translations.ts let s:save_splitbelow = &splitbelow @@ -703,13 +717,12 @@ set winminheight=0 set winheight=1 set winminwidth=0 set winwidth=1 -exe 'vert 1resize ' . ((&columns * 31 + 73) / 146) -exe 'vert 2resize ' . ((&columns * 57 + 73) / 146) -exe 'vert 3resize ' . ((&columns * 56 + 73) / 146) +exe 'vert 1resize ' . ((&columns * 31 + 127) / 255) +exe 'vert 2resize ' . ((&columns * 111 + 127) / 255) +exe 'vert 3resize ' . ((&columns * 111 + 127) / 255) argglobal enew file NERD_tree_tab_3 -balt src/View/translations.ts let s:cpo_save=&cpo set cpo&vim nnoremap :call nerdtree#ui_glue#invokeKeyMap("") @@ -747,9 +760,9 @@ nnoremap go :call nerdtree#ui_glue#invokeKeyMap("go") nnoremap gb :call nerdtree#ui_glue#invokeKeyMap("gb") nnoremap gi :call nerdtree#ui_glue#invokeKeyMap("gi") nnoremap gs :call nerdtree#ui_glue#invokeKeyMap("gs") -nnoremap i :call nerdtree#ui_glue#invokeKeyMap("i") xmap ic (GitGutterTextObjectInnerVisual) omap ic (GitGutterTextObjectInnerPending) +nnoremap i :call nerdtree#ui_glue#invokeKeyMap("i") nnoremap m :call nerdtree#ui_glue#invokeKeyMap("m") nnoremap o :call nerdtree#ui_glue#invokeKeyMap("o") nnoremap p :call nerdtree#ui_glue#invokeKeyMap("p") @@ -1047,18 +1060,22 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 116 - ((11 * winheight(0) + 11) / 22) +let s:l = 123 - ((20 * winheight(0) + 23) / 47) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt -keepjumps 116 -normal! 09| +keepjumps 123 +normal! 0 wincmd w argglobal if bufexists(fnamemodify("src/View/Modals/dataTransferModal.tsx", ":p")) | buffer src/View/Modals/dataTransferModal.tsx | else | edit src/View/Modals/dataTransferModal.tsx | endif balt src/View/homePage.tsx let s:cpo_save=&cpo set cpo&vim +imap :call coc#snippet#jump(0, 0) +imap :call coc#snippet#jump(1, 0) +smap :call coc#snippet#jump(1, 0) +smap  :call coc#snippet#jump(0, 0) nmap [c (GitGutterPrevHunk) nmap \hp (GitGutterPreviewHunk) nmap \hu (GitGutterUndoHunk) @@ -1069,6 +1086,10 @@ xmap ac (GitGutterTextObjectOuterVisual) omap ac (GitGutterTextObjectOuterPending) xmap ic (GitGutterTextObjectInnerVisual) omap ic (GitGutterTextObjectInnerPending) +smap :call coc#snippet#jump(0, 0) +smap :call coc#snippet#jump(1, 0) +imap :call coc#snippet#jump(1, 0) +imap  :call coc#snippet#jump(0, 0) let &cpo=s:cpo_save unlet s:cpo_save setlocal keymap= @@ -1204,17 +1225,387 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 117 - ((0 * winheight(0) + 11) / 22) +let s:l = 31 - ((30 * winheight(0) + 23) / 47) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt -keepjumps 117 -normal! 058| +keepjumps 31 +normal! $ wincmd w -2wincmd w -exe 'vert 1resize ' . ((&columns * 31 + 73) / 146) -exe 'vert 2resize ' . ((&columns * 57 + 73) / 146) -exe 'vert 3resize ' . ((&columns * 56 + 73) / 146) +3wincmd w +exe 'vert 1resize ' . ((&columns * 31 + 127) / 255) +exe 'vert 2resize ' . ((&columns * 111 + 127) / 255) +exe 'vert 3resize ' . ((&columns * 111 + 127) / 255) +tabnext +edit src/ViewModel/Global/fileTransferViewModel.ts +let s:save_splitbelow = &splitbelow +let s:save_splitright = &splitright +set splitbelow splitright +wincmd _ | wincmd | +vsplit +1wincmd h +wincmd w +let &splitbelow = s:save_splitbelow +let &splitright = s:save_splitright +wincmd t +let s:save_winminheight = &winminheight +let s:save_winminwidth = &winminwidth +set winminheight=0 +set winheight=1 +set winminwidth=0 +set winwidth=1 +exe 'vert 1resize ' . ((&columns * 31 + 127) / 255) +exe 'vert 2resize ' . ((&columns * 223 + 127) / 255) +argglobal +enew +file NERD_tree_tab_4 +balt src/ViewModel/Global/fileTransferViewModel.ts +let s:cpo_save=&cpo +set cpo&vim +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap  :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap  :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap ? :call nerdtree#ui_glue#invokeKeyMap("?") +nnoremap A :call nerdtree#ui_glue#invokeKeyMap("A") +nnoremap B :call nerdtree#ui_glue#invokeKeyMap("B") +nnoremap C :call nerdtree#ui_glue#invokeKeyMap("C") +nnoremap CD :call nerdtree#ui_glue#invokeKeyMap("CD") +nnoremap D :call nerdtree#ui_glue#invokeKeyMap("D") +nnoremap FL :call nerdtree#ui_glue#invokeKeyMap("FL") +nnoremap F :call nerdtree#ui_glue#invokeKeyMap("F") +nnoremap I :call nerdtree#ui_glue#invokeKeyMap("I") +nnoremap J :call nerdtree#ui_glue#invokeKeyMap("J") +nnoremap K :call nerdtree#ui_glue#invokeKeyMap("K") +nnoremap O :call nerdtree#ui_glue#invokeKeyMap("O") +nnoremap P :call nerdtree#ui_glue#invokeKeyMap("P") +nnoremap R :call nerdtree#ui_glue#invokeKeyMap("R") +nnoremap T :call nerdtree#ui_glue#invokeKeyMap("T") +nnoremap U :call nerdtree#ui_glue#invokeKeyMap("U") +nnoremap X :call nerdtree#ui_glue#invokeKeyMap("X") +nmap [c (GitGutterPrevHunk) +nmap \hp (GitGutterPreviewHunk) +nmap \hu (GitGutterUndoHunk) +nmap \hs (GitGutterStageHunk) +xmap \hs (GitGutterStageHunk) +nmap ]c (GitGutterNextHunk) +xmap ac (GitGutterTextObjectOuterVisual) +omap ac (GitGutterTextObjectOuterPending) +nnoremap cd :call nerdtree#ui_glue#invokeKeyMap("cd") +nnoremap e :call nerdtree#ui_glue#invokeKeyMap("e") +nnoremap f :call nerdtree#ui_glue#invokeKeyMap("f") +nnoremap go :call nerdtree#ui_glue#invokeKeyMap("go") +nnoremap gb :call nerdtree#ui_glue#invokeKeyMap("gb") +nnoremap gi :call nerdtree#ui_glue#invokeKeyMap("gi") +nnoremap gs :call nerdtree#ui_glue#invokeKeyMap("gs") +nnoremap i :call nerdtree#ui_glue#invokeKeyMap("i") +xmap ic (GitGutterTextObjectInnerVisual) +omap ic (GitGutterTextObjectInnerPending) +nnoremap m :call nerdtree#ui_glue#invokeKeyMap("m") +nnoremap o :call nerdtree#ui_glue#invokeKeyMap("o") +nnoremap p :call nerdtree#ui_glue#invokeKeyMap("p") +nnoremap q :call nerdtree#ui_glue#invokeKeyMap("q") +nnoremap r :call nerdtree#ui_glue#invokeKeyMap("r") +nnoremap s :call nerdtree#ui_glue#invokeKeyMap("s") +nnoremap t :call nerdtree#ui_glue#invokeKeyMap("t") +nnoremap u :call nerdtree#ui_glue#invokeKeyMap("u") +nnoremap x :call nerdtree#ui_glue#invokeKeyMap("x") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap <2-LeftMouse> :call nerdtree#ui_glue#invokeKeyMap("<2-LeftMouse>") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +let &cpo=s:cpo_save +unlet s:cpo_save +setlocal keymap= +setlocal noarabic +setlocal noautoindent +setlocal backupcopy= +setlocal balloonexpr= +setlocal nobinary +setlocal nobreakindent +setlocal breakindentopt= +setlocal bufhidden=hide +setlocal nobuflisted +setlocal buftype=nofile +setlocal nocindent +setlocal cinkeys=0{,0},0),0],:,0#,!^F,o,O,e +setlocal cinoptions= +setlocal cinscopedecls=public,protected,private +setlocal cinwords=if,else,while,do,for,switch +setlocal colorcolumn= +setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- +setlocal commentstring=/*%s*/ +setlocal complete=.,w,b,u,t,i +setlocal concealcursor=nvic +setlocal conceallevel=2 +setlocal completefunc= +setlocal nocopyindent +setlocal cryptmethod= +setlocal nocursorbind +setlocal nocursorcolumn +setlocal cursorline +setlocal cursorlineopt=both +setlocal define= +setlocal dictionary= +setlocal nodiff +setlocal equalprg= +setlocal errorformat= +setlocal noexpandtab +if &filetype != 'nerdtree' +setlocal filetype=nerdtree +endif +setlocal fillchars= +setlocal fixendofline +setlocal foldcolumn=0 +setlocal nofoldenable +setlocal foldexpr=0 +setlocal foldignore=# +setlocal foldlevel=0 +setlocal foldmarker={{{,}}} +setlocal foldmethod=manual +setlocal foldminlines=1 +setlocal foldnestmax=20 +setlocal foldtext=foldtext() +setlocal formatexpr= +setlocal formatoptions=tcq +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* +setlocal formatprg= +setlocal grepprg= +setlocal iminsert=0 +setlocal imsearch=-1 +setlocal include= +setlocal includeexpr= +setlocal indentexpr= +setlocal indentkeys=0{,0},0),0],:,0#,!^F,o,O,e +setlocal noinfercase +setlocal iskeyword=@,48-57,_,192-255 +setlocal keywordprg= +setlocal nolinebreak +setlocal nolisp +setlocal lispoptions= +setlocal lispwords= +setlocal nolist +setlocal listchars= +setlocal makeencoding= +setlocal makeprg= +setlocal matchpairs=(:),{:},[:] +setlocal nomodeline +setlocal nomodifiable +setlocal nrformats=bin,octal,hex +set number +setlocal nonumber +setlocal numberwidth=4 +setlocal omnifunc= +setlocal path= +setlocal nopreserveindent +setlocal nopreviewwindow +setlocal quoteescape=\\ +setlocal readonly +setlocal norelativenumber +setlocal norightleft +setlocal rightleftcmd=search +setlocal noscrollbind +setlocal scrolloff=-1 +setlocal shiftwidth=4 +setlocal noshortname +setlocal showbreak= +setlocal sidescrolloff=-1 +set signcolumn=yes +setlocal signcolumn=yes +setlocal nosmartindent +setlocal nosmoothscroll +setlocal softtabstop=0 +setlocal nospell +setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ +setlocal spellfile= +setlocal spelllang=en +setlocal spelloptions= +setlocal statusline=%{exists('b:NERDTree')?b:NERDTree.root.path.str():''} +setlocal suffixesadd= +setlocal noswapfile +setlocal synmaxcol=3000 +if &syntax != 'nerdtree' +setlocal syntax=nerdtree +endif +setlocal tabstop=8 +setlocal tagcase= +setlocal tagfunc= +setlocal tags= +setlocal termwinkey= +setlocal termwinscroll=10000 +setlocal termwinsize= +setlocal textwidth=0 +setlocal thesaurus= +setlocal thesaurusfunc= +setlocal noundofile +setlocal undolevels=-123456 +setlocal varsofttabstop= +setlocal vartabstop= +setlocal virtualedit= +setlocal wincolor= +setlocal nowinfixheight +setlocal winfixwidth +setlocal nowrap +setlocal wrapmargin=0 +wincmd w +argglobal +balt src/View/translations.ts +let s:cpo_save=&cpo +set cpo&vim +nmap [c (GitGutterPrevHunk) +nmap \hp (GitGutterPreviewHunk) +nmap \hu (GitGutterUndoHunk) +nmap \hs (GitGutterStageHunk) +xmap \hs (GitGutterStageHunk) +nmap ]c (GitGutterNextHunk) +xmap ac (GitGutterTextObjectOuterVisual) +omap ac (GitGutterTextObjectOuterPending) +xmap ic (GitGutterTextObjectInnerVisual) +omap ic (GitGutterTextObjectInnerPending) +let &cpo=s:cpo_save +unlet s:cpo_save +setlocal keymap= +setlocal noarabic +setlocal autoindent +setlocal backupcopy= +setlocal balloonexpr= +setlocal nobinary +setlocal nobreakindent +setlocal breakindentopt= +setlocal bufhidden= +setlocal buflisted +setlocal buftype= +setlocal nocindent +setlocal cinkeys=0{,0},0),0],:,0#,!^F,o,O,e +setlocal cinoptions= +setlocal cinscopedecls=public,protected,private +setlocal cinwords=if,else,while,do,for,switch +setlocal colorcolumn= +setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- +setlocal commentstring=//\ %s +setlocal complete=.,w,b,u,t,i +setlocal concealcursor= +setlocal conceallevel=0 +setlocal completefunc= +setlocal nocopyindent +setlocal cryptmethod= +setlocal nocursorbind +setlocal nocursorcolumn +setlocal nocursorline +setlocal cursorlineopt=both +setlocal define= +setlocal dictionary= +setlocal nodiff +setlocal equalprg= +setlocal errorformat=%+A\ %#%f\ %#(%l\\,%c):\ %m,%C%m +setlocal noexpandtab +if &filetype != 'typescript' +setlocal filetype=typescript +endif +setlocal fillchars= +setlocal fixendofline +setlocal foldcolumn=0 +setlocal foldenable +setlocal foldexpr=0 +setlocal foldignore=# +setlocal foldlevel=0 +setlocal foldmarker={{{,}}} +setlocal foldmethod=manual +setlocal foldminlines=1 +setlocal foldnestmax=20 +setlocal foldtext=foldtext() +setlocal formatexpr= +setlocal formatoptions=croql +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* +setlocal formatprg= +setlocal grepprg= +setlocal iminsert=0 +setlocal imsearch=-1 +setlocal include= +setlocal includeexpr= +setlocal indentexpr=GetTypescriptIndent() +setlocal indentkeys=0{,0},0),0],:,0#,!^F,o,O,e,0],0) +setlocal noinfercase +setlocal iskeyword=@,48-57,_,192-255,$ +setlocal keywordprg= +setlocal nolinebreak +setlocal nolisp +setlocal lispoptions= +setlocal lispwords= +setlocal nolist +setlocal listchars= +setlocal makeencoding= +setlocal makeprg=tsc\ \ $*\ % +setlocal matchpairs=(:),{:},[:] +setlocal nomodeline +setlocal modifiable +setlocal nrformats=bin,octal,hex +set number +setlocal number +setlocal numberwidth=4 +setlocal omnifunc= +setlocal path= +setlocal nopreserveindent +setlocal nopreviewwindow +setlocal quoteescape=\\ +setlocal noreadonly +setlocal norelativenumber +setlocal norightleft +setlocal rightleftcmd=search +setlocal noscrollbind +setlocal scrolloff=-1 +setlocal shiftwidth=4 +setlocal noshortname +setlocal showbreak= +setlocal sidescrolloff=-1 +set signcolumn=yes +setlocal signcolumn=yes +setlocal nosmartindent +setlocal nosmoothscroll +setlocal softtabstop=0 +setlocal nospell +setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ +setlocal spellfile= +setlocal spelllang=en +setlocal spelloptions= +setlocal statusline= +setlocal suffixesadd=.ts,.tsx +setlocal swapfile +setlocal synmaxcol=3000 +if &syntax != 'typescript' +setlocal syntax=typescript +endif +setlocal tabstop=8 +setlocal tagcase= +setlocal tagfunc= +setlocal tags= +setlocal termwinkey= +setlocal termwinscroll=10000 +setlocal termwinsize= +setlocal textwidth=0 +setlocal thesaurus= +setlocal thesaurusfunc= +setlocal noundofile +setlocal undolevels=-123456 +setlocal varsofttabstop= +setlocal vartabstop= +setlocal virtualedit= +setlocal wincolor= +setlocal nowinfixheight +setlocal nowinfixwidth +setlocal wrap +setlocal wrapmargin=0 +silent! normal! zE +let &fdl = &fdl +let s:l = 163 - ((34 * winheight(0) + 23) / 47) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 163 +normal! $ +wincmd w +exe 'vert 1resize ' . ((&columns * 31 + 127) / 255) +exe 'vert 2resize ' . ((&columns * 223 + 127) / 255) tabnext 2 set stal=1 if exists('s:wipebuf') && len(win_findbuf(s:wipebuf)) == 0 diff --git a/dist/index.js b/dist/index.js index 814c6a24..d5d955b1 100644 --- a/dist/index.js +++ b/dist/index.js @@ -368,13 +368,18 @@ }, dataTransferModal: { transferDataHeadline: "Data Transfer", + sendHeadline: "Transfer to other device", + receiveHeadline: "Transfer to This Device", + exportHeadline: "Export Data", + importHeadline: "Import Data", selectionDescription: "Select the data that you want to transfer.", dataEntryDescription: "Enter this data on the other device.", dataEntryInputDescription: "Enter the data displayed on the other device.", notConnectedError: "You are not connected to any server.", /// - fromThisDeviceButton: "Export or send from this device", - toThisDeviceButton: "Receive from other device", + fromThisDeviceButton: "Send to other device", + toThisDeviceButton: "Send to this device", + exportButton: "Export to file", importButton: "Import from file", /// generalHeadline: "General", @@ -588,12 +593,17 @@ }, dataTransferModal: { transferDataHeadline: "Daten\xFCbertragung", + sendHeadline: "An anderes Ger\xE4t senden", + receiveHeadline: "An dieses Ger\xE4t senden", + exportHeadline: "Daten exportieren", + importHeadline: "Daten importieren", selectionDescription: "W\xE4hle die Daten aus, die du \xFCbertragen m\xF6chtest.", dataEntryDescription: "Gib diese Informationen auf dem anderen Ger\xE4t ein.", dataEntryInputDescription: "Gib die auf dem anderen Ger\xE4t angezeigten Informationen ein.", notConnectedError: "Du bist mit keinem Server verbunden.", - fromThisDeviceButton: "Exportieren oder an anderes Ger\xE4t senden", + fromThisDeviceButton: "An anderes Ger\xE4t senden", toThisDeviceButton: "An dieses Ger\xE4t senden", + exportButton: "Als Datei exportieren", importButton: "Aus Datei importieren", generalHeadline: "Allgemein", connectionData: "Verbindungsdaten", @@ -763,7 +773,7 @@ setNameButtonAudioLabel: "establecer nombre", settingsButton: "Ajustes", manageStorageButton: "Gestionar almacenamiento", - transferDataButton: "Enviar o guardar archivos", + transferDataButton: "Enviar o exportar archivos", scrollToChatButton: "Chats", backToOverviewAudioLabel: "volver al resumen", chatsHeadline: "Chats", @@ -791,14 +801,19 @@ connectButtonAudioLabel: "conectar" }, dataTransferModal: { - transferDataHeadline: "Transferencia de Datos", + transferDataHeadline: "Transferencia de datos", + sendHeadline: "Enviar a otro dispositivo", + receiveHeadline: "Enviar a este dispositivo", + exportHeadline: "Exportar archivo", + importHeadline: "Importar archivo", selectionDescription: "Selecciona los datos que quieres transferir.", dataEntryDescription: "Introduce estos datos en el otro dispositivo.", dataEntryInputDescription: "Introduce los datos mostrados en el otro dispositivo.", notConnectedError: "No est\xE1s conectado a ning\xFAn servidor.", - fromThisDeviceButton: "Exportar o enviar a otro dispositivo", + fromThisDeviceButton: "Enviar a otro dispositivo", toThisDeviceButton: "Enviar a este dispositivo", - importButton: "Importar desde archivo", + exportButton: "Exportar archivo", + importButton: "Importar archivo", generalHeadline: "General", connectionData: "Datos de Conexi\xF3n", settingsData: "Datos de Configuraci\xF3n", @@ -1818,6 +1833,9 @@ this.showTransferDataInputModal = () => { this.presentedModal.value = 4 /* TransferDataInput */; }; + this.showImportModal = () => { + this.presentedModal.value = 6 /* ImportModal */; + }; this.prepareReceivingData = () => { if (this.cannotPrepareToReceive.value == true) return; this.presentedModal.value = 5 /* ReceptionDisplay */; @@ -6660,7 +6678,7 @@ coreViewModel2, connectionViewModel2, fileTransferViewModel2 - ), FileSelectionModal(coreViewModel2, fileTransferViewModel2), TransferDataDisplayModal(coreViewModel2, fileTransferViewModel2), TransferDisplayModal(coreViewModel2, fileTransferViewModel2), TransferDataInputModal(coreViewModel2, fileTransferViewModel2), DataReceptionModal(coreViewModel2, fileTransferViewModel2)); + ), FileSelectionModal(coreViewModel2, fileTransferViewModel2), TransferDataDisplayModal(coreViewModel2, fileTransferViewModel2), TransferDisplayModal(coreViewModel2, fileTransferViewModel2), TransferDataInputModal(coreViewModel2, fileTransferViewModel2), DataReceptionModal(coreViewModel2, fileTransferViewModel2), ImportModal(coreViewModel2, fileTransferViewModel2)); } function DirectionSelectionModal(coreViewModel2, connectionViewModel2, fileTransferViewModel2) { const isPresented = createProxyState( @@ -6704,13 +6722,24 @@ /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("b", null, coreViewModel2.translations.dataTransferModal.toThisDeviceButton)), /* @__PURE__ */ createElement("span", { class: "icon" }, "arrow_forward") ), + /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement( "button", { class: "tile", - "on:click": fileTransferViewModel2.showTransferDataInputModal + "on:click": fileTransferViewModel2.showImportModal }, - /* @__PURE__ */ createElement("span", { class: "icon" }, "file_open"), + /* @__PURE__ */ createElement("span", { class: "icon" }, "file_save"), + /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("b", null, coreViewModel2.translations.dataTransferModal.exportButton)), + /* @__PURE__ */ createElement("span", { class: "icon" }, "arrow_forward") + ), + /* @__PURE__ */ createElement( + "button", + { + class: "tile", + "on:click": fileTransferViewModel2.showImportModal + }, + /* @__PURE__ */ createElement("span", { class: "icon" }, "upload_file"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("b", null, coreViewModel2.translations.dataTransferModal.importButton)), /* @__PURE__ */ createElement("span", { class: "icon" }, "arrow_forward") ) @@ -6743,7 +6772,7 @@ [fileTransferViewModel2.presentedModal], () => fileTransferViewModel2.presentedModal.value == 1 /* FileSelection */ ); - return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isPresented }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.dataTransferModal.transferDataHeadline), /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.dataTransferModal.selectionDescription), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("h3", null, coreViewModel2.translations.dataTransferModal.generalHeadline), /* @__PURE__ */ createElement( + return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isPresented }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.dataTransferModal.sendHeadline), /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.dataTransferModal.selectionDescription), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("h3", null, coreViewModel2.translations.dataTransferModal.generalHeadline), /* @__PURE__ */ createElement( "div", { class: "flex-column gap content-margin-bottom", @@ -6784,7 +6813,7 @@ [fileTransferViewModel2.presentedModal], () => fileTransferViewModel2.presentedModal.value == 2 /* TransferDataDisplay */ ); - return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isPresented }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.dataTransferModal.transferDataHeadline), /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.dataTransferModal.dataEntryDescription), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "flex-column gap content-margin-bottom" }, /* @__PURE__ */ createElement("div", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "forum"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.dataTransferModal.transferChannelHeadline), /* @__PURE__ */ createElement( + return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isPresented }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.dataTransferModal.sendHeadline), /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.dataTransferModal.dataEntryDescription), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "flex-column gap content-margin-bottom" }, /* @__PURE__ */ createElement("div", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "forum"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.dataTransferModal.transferChannelHeadline), /* @__PURE__ */ createElement( "b", { "subscribe:innerText": fileTransferViewModel2.transferChannel @@ -6794,7 +6823,14 @@ { "subscribe:innerText": fileTransferViewModel2.transferKey } - ))))), /* @__PURE__ */ createElement("div", { class: "flex-row width-100" }, /* @__PURE__ */ createElement( + )))), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement( + "button", + { + "on:click": null + }, + coreViewModel2.translations.dataTransferModal.exportButton, + /* @__PURE__ */ createElement("span", { class: "icon" }, "download") + )), /* @__PURE__ */ createElement("div", { class: "flex-row width-100" }, /* @__PURE__ */ createElement( "button", { class: "flex", @@ -6854,7 +6890,7 @@ [fileTransferViewModel2.presentedModal], () => fileTransferViewModel2.presentedModal.value == 4 /* TransferDataInput */ ); - return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isPresented }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.dataTransferModal.transferDataHeadline), /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.dataTransferModal.dataEntryInputDescription), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "flex-column gap content-margin-bottom" }, /* @__PURE__ */ createElement("label", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "forum"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.dataTransferModal.transferChannelHeadline), /* @__PURE__ */ createElement( + return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isPresented }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.dataTransferModal.receiveHeadline), /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.dataTransferModal.dataEntryInputDescription), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "flex-column gap content-margin-bottom" }, /* @__PURE__ */ createElement("label", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "forum"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.dataTransferModal.transferChannelHeadline), /* @__PURE__ */ createElement( "input", { "on:enter": fileTransferViewModel2.prepareReceivingData, @@ -6889,7 +6925,29 @@ [fileTransferViewModel2.presentedModal], () => fileTransferViewModel2.presentedModal.value == 5 /* ReceptionDisplay */ ); - return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isPresented }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.dataTransferModal.transferDataHeadline), /* @__PURE__ */ createElement( + return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isPresented }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.dataTransferModal.receiveHeadline), /* @__PURE__ */ createElement( + "p", + { + class: "secondary", + "subscribe:innerText": fileTransferViewModel2.filesReceivedText + } + ), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement( + "div", + { + class: "tile flex-column align-start", + "children:append": [ + fileTransferViewModel2.filePathsReceived, + StringToTextSpan + ] + } + )), /* @__PURE__ */ createElement("button", { "on:click": ViewController.reload }, coreViewModel2.translations.general.reloadAppButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "refresh")))); + } + function ImportModal(coreViewModel2, fileTransferViewModel2) { + const isPresented = createProxyState( + [fileTransferViewModel2.presentedModal], + () => fileTransferViewModel2.presentedModal.value == 6 /* ImportModal */ + ); + return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isPresented }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.dataTransferModal.importHeadline), /* @__PURE__ */ createElement( "p", { class: "secondary", @@ -7203,7 +7261,10 @@ this.handleDecryptedFile(decrypted); }; this.handleBackupFile = async (encryptedBackup, passphrase) => { - const decrypted = await decryptString(encryptedBackup, passphrase); + const decrypted = await decryptString( + encryptedBackup, + passphrase + ); const parsed = parse(decrypted); if (!Array.isArray(parsed)) { console.error("Canceling backup - not an array", decrypted); diff --git a/src/Model/Global/fileTransferModel.ts b/src/Model/Global/fileTransferModel.ts index 96b55909..f1f6ad3a 100644 --- a/src/Model/Global/fileTransferModel.ts +++ b/src/Model/Global/fileTransferModel.ts @@ -82,18 +82,24 @@ export default class FileTransferModel { this.handleDecryptedFile(decrypted); }; - readonly handleBackupFile = async (encryptedBackup: string, passphrase: string): Promise => { - const decrypted: string = await decryptString(encryptedBackup, passphrase); - const parsed = parse(decrypted); - if (!Array.isArray(parsed)) { - console.error("Canceling backup - not an array", decrypted); - return; - } + readonly handleBackupFile = async ( + encryptedBackup: string, + passphrase: string, + ): Promise => { + const decrypted: string = await decryptString( + encryptedBackup, + passphrase, + ); + const parsed = parse(decrypted); + if (!Array.isArray(parsed)) { + console.error("Canceling backup - not an array", decrypted); + return; + } - for (const file of parsed) { - this.handleDecryptedFile(file); - } - } + for (const file of parsed) { + this.handleDecryptedFile(file); + } + }; readonly handleDecryptedFile = (data: string): void => { const parsed: any = parse(data); @@ -130,7 +136,10 @@ export default class FileTransferModel { } }; - readonly generateBackup = async (directoryPaths: IteratorObject, passphrase: string): Promise => { + readonly generateBackup = async ( + directoryPaths: IteratorObject, + passphrase: string, + ): Promise => { const files: string[] = []; for (const directoryPath of directoryPaths) { this.storageModel.recurse(directoryPath, (filePath: string[]) => { @@ -139,8 +148,8 @@ export default class FileTransferModel { files.push(stringifiedFileData); }); } - const rawBackup = stringify(files); - return await encryptString(rawBackup, passphrase); + const rawBackup = stringify(files); + return await encryptString(rawBackup, passphrase); }; readonly prepareFileForSending = (filePath: string[]): string => { diff --git a/src/View/Modals/dataTransferModal.tsx b/src/View/Modals/dataTransferModal.tsx index b397c559..7dc9f3b6 100644 --- a/src/View/Modals/dataTransferModal.tsx +++ b/src/View/Modals/dataTransferModal.tsx @@ -26,6 +26,7 @@ export function DataTransferModalWrapper( {TransferDisplayModal(coreViewModel, fileTransferViewModel)} {TransferDataInputModal(coreViewModel, fileTransferViewModel)} {DataReceptionModal(coreViewModel, fileTransferViewModel)} + {ImportModal(coreViewModel, fileTransferViewModel)} ); } @@ -107,20 +108,35 @@ function DirectionSelectionModal( arrow_forward - + + +
+ + @@ -441,7 +457,7 @@ function TransferDataInputModal(

{ coreViewModel.translations.dataTransferModal - .transferDataHeadline + .receiveHeadline }

@@ -540,7 +556,55 @@ function DataReceptionModal(

{ coreViewModel.translations.dataTransferModal - .transferDataHeadline + .receiveHeadline + } +

+ +

+ +
+ +
+ + + + + ); +} + +function ImportModal( + coreViewModel: CoreViewModel, + fileTransferViewModel: FileTransferViewModel, +) { + const isPresented = React.createProxyState( + [fileTransferViewModel.presentedModal], + () => + fileTransferViewModel.presentedModal.value == + FileTransferModals.ImportModal, + ); + + return ( +