import { seafileAPI } from '../../utils/seafile-api'; import { Utils } from '../../utils/utils'; const { repoID, repoName, filePath, fileName } = window.app.pageOptions; const { serviceUrl } = window.app.config; const userInfo = window.app.userInfo; const userName = userInfo.username; let dirPath = Utils.getDirName(filePath); function getImageFileNameWithTimestamp() { var d = Date.now(); return 'image-' + d.toString() + '.png'; } class EditorApi { constructor() { this.repoID = repoID; this.filePath = filePath; this.serviceUrl = serviceUrl; this.name = userInfo.name; this.contact_email = userInfo.contact_email; this.fileName = fileName; this.userName = userName; } saveContent(content) { return ( seafileAPI.getUpdateLink(repoID, dirPath).then((res) => { const uploadLink = res.data; return seafileAPI.updateFile(uploadLink, filePath, fileName, content); }) ); } unstarItem() { return ( seafileAPI.unstarItem(this.repoID, this.filePath) ); } starItem() { return ( seafileAPI.starItem(this.repoID, this.filePath) ); } getParentDictionaryUrl() { let parentPath = this.filePath.substring(0, this.filePath.lastIndexOf('/')); let libName = encodeURIComponent(repoName); let path = Utils.encodePath(parentPath); return this.serviceUrl + '/library/' + this.repoID + '/' + libName + path; } _getImageURL(fileName) { const url = this.serviceUrl + '/lib/' + repoID + '/file/images/auto-upload/' + fileName + '?raw=1'; return url; } uploadLocalImage = (imageFile) => { return ( seafileAPI.getFileServerUploadLink(repoID, '/').then((res) => { const uploadLink = res.data + '?ret-json=1'; const name = getImageFileNameWithTimestamp(); const newFile = new File([imageFile], name, { type: imageFile.type }); const formData = new FormData(); formData.append('parent_dir', '/'); formData.append('relative_path', 'images/auto-upload'); formData.append('file', newFile); return seafileAPI.uploadImage(uploadLink, formData); }).then ((res) => { return this._getImageURL(res.data[0].name); }) ); }; getFileURL(fileNode) { var url; if (fileNode.type === 'file') { if (fileNode.isImage()) { url = serviceUrl + '/lib/' + repoID + '/file' + Utils.encodePath(fileNode.path()) + '?raw=1'; } else { url = serviceUrl + '/lib/' + repoID + '/file' + Utils.encodePath(fileNode.path()); } } else { url = serviceUrl + '/library/' + repoID + '/' + encodeURIComponent(repoName) + Utils.encodePath(fileNode.path()); } return url; } isInternalFileLink(url) { var re = new RegExp(this.serviceUrl + '/lib/[0-9a-f-]{36}/file.*'); return re.test(url); } isInternalDirLink(url) { // eslint-disable-next-line var re = new RegExp(serviceUrl + '/library/' + '[0-9a-f-]{36}.*'); return re.test(url); } getFiles() { const rootPath = '/'; return seafileAPI.listDir(repoID, rootPath, { recursive: true }).then((response) => { var files = response.data.dirent_list.map((item) => { return { name: item.name, type: item.type === 'dir' ? 'dir' : 'file', parent_path: item.parent_dir }; }); return files; }); } getFileHistory() { return seafileAPI.getFileHistory(repoID, filePath); } getFileInfo() { return seafileAPI.getFileInfo(repoID, filePath); } getRepoInfo(newRepoID) { return seafileAPI.getRepoInfo(newRepoID); } getInternalLink() { return seafileAPI.getInternalLink(repoID, filePath); } createShareLink(repoID, filePath, userPassword, userValidDays, permissions) { return seafileAPI.createShareLink(repoID, filePath, userPassword, userValidDays, permissions); } deleteShareLink(token) { return seafileAPI.deleteShareLink(token); } getFileContent(url) { return seafileAPI.getFileContent(url); } listFileHistoryRecords(page, perPage) { return seafileAPI.listFileHistoryRecords(repoID, filePath, page, perPage); } getFileHistoryVersion(commitID, filePath) { return seafileAPI.getFileRevision(repoID, commitID, filePath); } getUserAvatar(size) { return seafileAPI.getUserAvatar(userName, size); } fileMetaData() { return seafileAPI.fileMetaData(repoID, filePath); } listFileTags = () => { return seafileAPI.listFileTags(repoID, filePath); }; listRepoTags = () => { return seafileAPI.listRepoTags(repoID); }; markdownLint(slateValue) { return seafileAPI.markdownLint(slateValue); } listFileParticipant() { return seafileAPI.listFileParticipants(repoID, filePath); } addFileParticipants(emails) { return seafileAPI.addFileParticipants(repoID, filePath, emails); } listRepoRelatedUsers() { return seafileAPI.listRepoRelatedUsers(repoID); } } const editorApi = new EditorApi(); export default editorApi;