|
300 | 300 | </div> |
301 | 301 | <div class=menu style='display:none;left:0px;top:35px'> |
302 | 302 | <div id=https-server class=menu-opt>install https-server</div> |
303 | | - <div id=save-snapshot class=menu-opt>save snapshot</div> |
304 | | - <div id=load-snapshot class=menu-opt>load snapshot</div> |
305 | 303 | <div id=save-zip class=menu-opt>save zip</div> |
306 | 304 | <div id=load-zip class=menu-opt>load zip</div> |
307 | 305 | <div id=save-tar class=menu-opt>save tar</div> |
|
673 | 671 | }//https-server |
674 | 672 |
|
675 | 673 |
|
676 | | - menu_callback.more['save-snapshot'] = async function(){ |
677 | | - console.log('save-snapshot'); |
678 | | - if(!tabs.cur.view){ |
679 | | - log.red('no active terminal'); |
680 | | - return; |
681 | | - } |
682 | | - |
683 | | - var cwd = tabs.cur.view.terminal.shell.cwd; |
684 | | - var cwd_abs = tabs.cur.view.terminal.shell.cwd_abs; |
685 | | - console.log(cwd_abs); |
686 | | - if(cwd===null){ |
687 | | - term.writeln.red('can only save snapshot relative to workdir'); |
688 | | - return; |
689 | | - } |
690 | | - |
691 | | - var term = tabs.cur.view.terminal.term; |
692 | | - |
693 | | - term.writeln(''); |
694 | | - term.writeln.green('saving snapshot ...'); |
695 | | - |
696 | | - var snap = snapshot(cwd); |
697 | | - var blob = to_blob(snap); |
698 | | - |
699 | | - |
700 | | - function to_blob(snap){ |
701 | | - |
702 | | - var obj = {}; |
703 | | - |
704 | | - for(var [file,data] of Object.entries(snap)){ |
705 | | - |
706 | | - obj[file] = Array.from(data); |
707 | | - |
708 | | - }//for |
709 | | - |
710 | | - var json = JSON.stringify(obj); |
711 | | - var blob = new Blob([json],{type:'application/json'}); |
712 | | - return blob; |
713 | | - |
714 | | - }//to_blob |
715 | | - |
716 | | - |
717 | | - |
718 | | - |
719 | | - |
720 | | -/* |
721 | | -
|
722 | | -
|
723 | | - var err; |
724 | | - try{ |
725 | | - |
726 | | - var data = await webcontainer.export(cwd_abs.slice(0,-1),{format:'json'}); |
727 | | - var str = JSON.stringify(data); |
728 | | - |
729 | | - }//try |
730 | | - catch(err2){ |
731 | | - |
732 | | - err = err2; |
733 | | - |
734 | | - }//catch |
735 | | - if(err){ |
736 | | - term.writeln.red(err.message); |
737 | | - await prompt(); |
738 | | - return; |
739 | | - } |
740 | | - console.log(str); |
741 | | - var blob = new Blob([str]); |
742 | | - |
743 | | - |
744 | | - |
745 | | -*/ |
746 | | - |
747 | | - |
748 | | - var file = {name:'snapshot.json',icon:snap_icon}; |
749 | | - |
750 | | - complete.load(file,blob); |
751 | | - |
752 | | - term.writeln.green('ok.'); |
753 | | - await term.prompt(); |
754 | | - |
755 | | - }//take-snapsht |
756 | | - |
757 | | - |
758 | | - menu_callback.more['load-snapshot'] = async function(){ |
759 | | - console.log('load-snapshot'); |
760 | | - if(!tabs.cur.view){ |
761 | | - log.red('no active terminal'); |
762 | | - return; |
763 | | - } |
764 | | - |
765 | | - var cwd = tabs.cur.view.terminal.shell.cwd; |
766 | | - |
767 | | - if(cwd===null){ |
768 | | - term.writeln.red('can only load snapshot relative to workdir'); |
769 | | - return; |
770 | | - } |
771 | | - |
772 | | - if(!cur.blob){ |
773 | | - term.writeln.red('no blob available'); |
774 | | - return; |
775 | | - } |
776 | | - |
777 | | - var term = tabs.cur.view.terminal.term; |
778 | | - |
779 | | - term.writeln(''); |
780 | | - term.writeln.green('loading snapshot ...'); |
781 | | - |
782 | | - var blob = cur.blob; |
783 | | - console.log(blob); |
784 | | - |
785 | | - var snap = to_snapshot(blob); |
786 | | - |
787 | | - for(var [file,data] of Object.entries(snap)){ |
788 | | - |
789 | | - var dir = file.split('/').slice(0,-1).join('/') || '/'; |
790 | | - |
791 | | - await webcontainer.fs.mkdir(dir,{recursive:true}); |
792 | | - await webcontainer.fs.writeFile(file,data); |
793 | | - |
794 | | - }//for |
795 | | - |
796 | | - |
797 | | - async function to_snapshot(blob) { |
798 | | - |
799 | | - var text = await blob.text(); |
800 | | - var obj = JSON.parse(text); |
801 | | - var snap = {}; |
802 | | - |
803 | | - for(var [file,arr] of Object.entries(obj)){ |
804 | | - |
805 | | - snap[file] = new Uint8Array(arr); |
806 | | - |
807 | | - }//for |
808 | | - |
809 | | - return snap; |
810 | | - |
811 | | - }//to_snapshot |
812 | | - |
813 | | - |
814 | | - |
815 | | - |
816 | | - |
817 | | -/* |
818 | | -
|
819 | | - var txt = await blob.text(); |
820 | | - console.log(txt); |
821 | | - var data = JSON.parse(txt); |
822 | | - var mountPoint = cwd.slice(0,-1); |
823 | | - console.log('mountPoint',mountPoint); |
824 | | - |
825 | | - var err; |
826 | | - try{ |
827 | | - |
828 | | - var result = await webcontainer.mount(data,{mountPoint}); |
829 | | - console.log(result); |
830 | | - |
831 | | - }//try |
832 | | - catch(err2){ |
833 | | - |
834 | | - err = err2; |
835 | | - |
836 | | - }//catch |
837 | | - if(err){ |
838 | | - term.writeln.red(err.message); |
839 | | - await prompt(); |
840 | | - return; |
841 | | - } |
842 | | - |
843 | | -*/ |
844 | | - |
845 | | - |
846 | | - |
847 | | - |
848 | | - |
849 | | - |
850 | | - term.writeln.green('ok.'); |
851 | | - await term.prompt(); |
852 | | - |
853 | | - }//restore-snapshot |
854 | | - |
855 | | - |
856 | | - |
857 | 674 | // Compress-Archive -Path .\* -DestinationPath ".\$(Split-Path -Leaf $PWD).zip" |
858 | 675 | // Expand-Archive -Path .\archive.zip -DestinationPath . -Force |
859 | 676 |
|
|
862 | 679 |
|
863 | 680 | // 7z a -tzip "$(Split-Path -Leaf $PWD).zip" .\* |
864 | 681 | // 7z x archive.zip -y |
865 | | - |
866 | 682 | menu_callback.more['save-zip'] = async function(){ |
867 | 683 |
|
868 | 684 | console.log('save-zip'); |
|
0 commit comments