Open alloant opened 1 year ago
Still SYNO.Office.Node works better for Synology Office. I propose this solution:
def copy(self, source: str, dist: str) -> dict:
"""
copy file or dir
:param source : id:23333333333 or "'team-folders/folder2/'"
:param dist: "'team-folders/folder2/temp.odoc'"
"""
distpath, distname = os.path.split(dist)
ext = os.path.splitext(distname)[1]
if ext in ['.odoc','osheet','oslides']:
copy_office(source,dist)
else:
copy_drive(source,dist)
def copy_office(self, source: str, dist: str) -> dict:
"""
copy file or dir
:param source : id:23333333333 or "'team-folders/folder2/'"
:param dist: "'team-folders/folder2/temp.odoc'"
"""
if source.isdigit():
source = f"id:{source}"
else:
source = f"/{source}" if not source.startswith('/') else source
endpoint = 'entry.cgi'
distpath, distname = os.path.split(dist)
api_name = "SYNO.Office.Node"
params = {'api': api_name, 'version': 2, 'method': 'copy',
'to_parent_folder': distpath, 'dry_run': 'true', 'name': distname,
'title': distname[:distname.index('.')],
'files': f'["{source}"]'}
return self.session.http_put(endpoint, params=params)
def copy_drive(self, source: str, dist: str) -> dict:
"""
copy file or dir
:param source : id:23333333333 or "'team-folders/folder2/'"
:param dist: "'team-folders/folder2/temp.odoc'"
"""
if source.isdigit():
source = f"id:{source}"
else:
source = f"/{source}" if not source.startswith('/') else source
api_name = "SYNO.SynologyDrive.Files"
endpoint = 'entry.cgi'
distpath, distname = os.path.split(dist)
params = {'api': api_name, 'version': 2, 'method': 'copy',
'to_parent_folder': distpath, 'to_parent_name': distname,
'conflict_action': 'autorename',
'files': f'["{source}"]'}
return self.session.http_put(endpoint, params=params)
Still SYNO.Office.Node works better for Synology Office. I propose this solution:
def copy(self, source: str, dist: str) -> dict: """ copy file or dir :param source : id:23333333333 or "'team-folders/folder2/'" :param dist: "'team-folders/folder2/temp.odoc'" """ distpath, distname = os.path.split(dist) ext = os.path.splitext(distname)[1] if ext in ['.odoc','osheet','oslides']: copy_office(source,dist) else: copy_drive(source,dist) def copy_office(self, source: str, dist: str) -> dict: """ copy file or dir :param source : id:23333333333 or "'team-folders/folder2/'" :param dist: "'team-folders/folder2/temp.odoc'" """ if source.isdigit(): source = f"id:{source}" else: source = f"/{source}" if not source.startswith('/') else source endpoint = 'entry.cgi' distpath, distname = os.path.split(dist) api_name = "SYNO.Office.Node" params = {'api': api_name, 'version': 2, 'method': 'copy', 'to_parent_folder': distpath, 'dry_run': 'true', 'name': distname, 'title': distname[:distname.index('.')], 'files': f'["{source}"]'} return self.session.http_put(endpoint, params=params) def copy_drive(self, source: str, dist: str) -> dict: """ copy file or dir :param source : id:23333333333 or "'team-folders/folder2/'" :param dist: "'team-folders/folder2/temp.odoc'" """ if source.isdigit(): source = f"id:{source}" else: source = f"/{source}" if not source.startswith('/') else source api_name = "SYNO.SynologyDrive.Files" endpoint = 'entry.cgi' distpath, distname = os.path.split(dist) params = {'api': api_name, 'version': 2, 'method': 'copy', 'to_parent_folder': distpath, 'to_parent_name': distname, 'conflict_action': 'autorename', 'files': f'["{source}"]'} return self.session.http_put(endpoint, params=params)
Let me see.
Still SYNO.Office.Node works better for Synology Office. I propose this solution:
def copy(self, source: str, dist: str) -> dict: """ copy file or dir :param source : id:23333333333 or "'team-folders/folder2/'" :param dist: "'team-folders/folder2/temp.odoc'" """ distpath, distname = os.path.split(dist) ext = os.path.splitext(distname)[1] if ext in ['.odoc','osheet','oslides']: copy_office(source,dist) else: copy_drive(source,dist) def copy_office(self, source: str, dist: str) -> dict: """ copy file or dir :param source : id:23333333333 or "'team-folders/folder2/'" :param dist: "'team-folders/folder2/temp.odoc'" """ if source.isdigit(): source = f"id:{source}" else: source = f"/{source}" if not source.startswith('/') else source endpoint = 'entry.cgi' distpath, distname = os.path.split(dist) api_name = "SYNO.Office.Node" params = {'api': api_name, 'version': 2, 'method': 'copy', 'to_parent_folder': distpath, 'dry_run': 'true', 'name': distname, 'title': distname[:distname.index('.')], 'files': f'["{source}"]'} return self.session.http_put(endpoint, params=params) def copy_drive(self, source: str, dist: str) -> dict: """ copy file or dir :param source : id:23333333333 or "'team-folders/folder2/'" :param dist: "'team-folders/folder2/temp.odoc'" """ if source.isdigit(): source = f"id:{source}" else: source = f"/{source}" if not source.startswith('/') else source api_name = "SYNO.SynologyDrive.Files" endpoint = 'entry.cgi' distpath, distname = os.path.split(dist) params = {'api': api_name, 'version': 2, 'method': 'copy', 'to_parent_folder': distpath, 'to_parent_name': distname, 'conflict_action': 'autorename', 'files': f'["{source}"]'} return self.session.http_put(endpoint, params=params)
Let me see.
请问这段代码能解决问题吗?
Copy works well for synology office files like:
synd.copy("/mydrive/test.odoc","/mydrive/tests/test.odoc")
Always gives error for other files:
synd.copy("/mydrive/test.pdf","/mydrive/tests/test.pdf")
Using SYNO.SynologyDrive.Files in the code solve the issue for me, I don't know if this could be included/replace in files.py:
`def copy(self, source: str, dist: str) -> dict: """
`