2828from seahub .views .file import can_preview_file , can_edit_file
2929from seahub .constants import PERMISSION_READ_WRITE
3030from seahub .utils .repo import parse_repo_perm , is_repo_admin , is_repo_owner
31- from seahub .utils .file_types import MARKDOWN , TEXT , SEADOC , MARKDOWN_SUPPORT_CONVERT_TYPES , SDOC_SUPPORT_CONVERT_TYPES
31+ from seahub .utils .file_types import MARKDOWN , TEXT , SEADOC , \
32+ MARKDOWN_SUPPORT_CONVERT_TYPES , SDOC_SUPPORT_CONVERT_TYPES , \
33+ DOCX_SUPPORT_CONVERT_TYPES
3234from seahub .tags .models import FileUUIDMap
3335from seahub .seadoc .models import SeadocHistoryName , SeadocDraft , SeadocCommentReply
3436from seahub .base .models import FileComment
@@ -553,12 +555,13 @@ def post(self, request, repo_id, format=None):
553555 dst_type = request .data .get ('dst_type' )
554556
555557 extension = Path (path ).suffix
556- if extension not in ['.md' , '.sdoc' ]:
558+ if extension not in ['.md' , '.sdoc' , '.docx' ]:
557559 error_msg = 'path invalid.'
558560 return api_error (status .HTTP_400_BAD_REQUEST , error_msg )
559561
560562 if (extension == '.md' and dst_type not in MARKDOWN_SUPPORT_CONVERT_TYPES ) or \
561- (extension == '.sdoc' and dst_type not in SDOC_SUPPORT_CONVERT_TYPES ):
563+ (extension == '.sdoc' and dst_type not in SDOC_SUPPORT_CONVERT_TYPES ) or \
564+ (extension == '.docx' and dst_type not in DOCX_SUPPORT_CONVERT_TYPES ):
562565 error_msg = 'dst_type invalid.'
563566 return api_error (status .HTTP_400_BAD_REQUEST , error_msg )
564567
@@ -596,6 +599,9 @@ def post(self, request, repo_id, format=None):
596599 if extension == '.md' :
597600 src_type = 'markdown'
598601 new_filename = filename [:- 2 ] + 'sdoc'
602+ if extension == '.docx' :
603+ src_type = 'docx'
604+ new_filename = filename [:- 4 ] + 'sdoc'
599605 elif extension == '.sdoc' :
600606 src_type = 'sdoc'
601607 if dst_type == 'markdown' :
@@ -606,14 +612,24 @@ def post(self, request, repo_id, format=None):
606612 new_filename = check_filename_or_rename (repo_id , parent_dir , new_filename )
607613 new_file_path = posixpath .join (parent_dir , new_filename )
608614
609- download_token = seafile_api .get_fileserver_access_token (repo_id , file_id , 'download' , username )
615+ download_token = seafile_api .get_fileserver_access_token (repo_id ,
616+ file_id ,
617+ 'download' ,
618+ username )
610619
611620 obj_id = json .dumps ({'parent_dir' : parent_dir })
612- upload_token = seafile_api .get_fileserver_access_token (repo_id , obj_id , 'upload-link' , username ,
621+ upload_token = seafile_api .get_fileserver_access_token (repo_id ,
622+ obj_id ,
623+ 'upload-link' ,
624+ username ,
613625 use_onetime = True )
614- doc_uuid = get_seadoc_file_uuid (repo , path )
626+ if extension == '.sdoc' :
627+ doc_uuid = get_seadoc_file_uuid (repo , path )
628+ else :
629+ doc_uuid = get_seadoc_file_uuid (repo , new_file_path )
615630
616631 if dst_type != 'docx' :
632+ # md, docx file convert to sdoc
617633 try :
618634 resp = convert_file (path , username , doc_uuid ,
619635 download_token , upload_token ,
@@ -629,7 +645,7 @@ def post(self, request, repo_id, format=None):
629645 return api_error (status .HTTP_500_INTERNAL_SERVER_ERROR ,
630646 'Internal Server Error' )
631647 else :
632-
648+ # sdoc file convert to docx
633649 try :
634650 resp = sdoc_convert_to_docx (path , username , doc_uuid ,
635651 download_token , upload_token ,
0 commit comments