mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-26 15:26:19 +00:00
remove ocr settings (#7975)
* remove ocr settings * update --------- Co-authored-by: 孙永强 <11704063+s-yongqiang@user.noreply.gitee.com>
This commit is contained in:
@@ -16,7 +16,7 @@ const SIDE_PANEL_EXPANDED_WIDTH = 300;
|
||||
const ImageDialog = ({ repoID, repoInfo, enableRotate: oldEnableRotate = true, imageItems, imageIndex, closeImagePopup, moveToPrevImage, moveToNextImage, onDeleteImage, onRotateImage, isCustomPermission }) => {
|
||||
const [expanded, setExpanded] = useState(false);
|
||||
|
||||
const { enableOCR, enableMetadata, canModify, onOCRByImageDialog } = useMetadataAIOperations();
|
||||
const { enableMetadata, canModify, onOCRByImageDialog } = useMetadataAIOperations();
|
||||
|
||||
const downloadImage = useCallback((url) => {
|
||||
location.href = url;
|
||||
@@ -51,7 +51,7 @@ const ImageDialog = ({ repoID, repoInfo, enableRotate: oldEnableRotate = true, i
|
||||
|
||||
const isSystemFolder = SYSTEM_FOLDERS.find(folderPath => mainImg.parentDir.startsWith(folderPath));
|
||||
let onOCR = null;
|
||||
if (enableOCR && enableMetadata && canModify && !isSystemFolder) {
|
||||
if (enableMetadata && canModify && !isSystemFolder) {
|
||||
onOCR = () => onOCRByImageDialog({ parentDir: mainImg.parentDir, fileName: mainImg.name }, document.activeElement);
|
||||
}
|
||||
|
||||
|
@@ -9,7 +9,6 @@ import {
|
||||
MetadataStatusManagementDialog as LibExtendedPropertiesSettingPanel,
|
||||
MetadataFaceRecognitionDialog as LibFaceRecognitionSettingPanel,
|
||||
MetadataTagsStatusDialog as LibMetadataTagsStatusSettingPanel,
|
||||
MetadataOCRStatusManagementDialog as LibMetadataOCRStatusSettingPanel,
|
||||
useMetadata
|
||||
} from '../../metadata';
|
||||
import SeahubModalHeader from '@/components/common/seahub-modal-header';
|
||||
@@ -40,7 +39,7 @@ const LibSettingsDialog = ({ repoID, currentRepoInfo, toggleDialog, tab, showMig
|
||||
const { encrypted, is_admin } = currentRepoInfo;
|
||||
const { enableMetadataManagement } = window.app.pageOptions;
|
||||
const { updateEnableFaceRecognition } = useMetadata();
|
||||
const { enableMetadata, updateEnableMetadata, enableTags, tagsLang, updateEnableTags, enableOCR, updateEnableOCR, enableFaceRecognition, globalHiddenColumns, modifyGlobalHiddenColumns } = useMetadataStatus();
|
||||
const { enableMetadata, updateEnableMetadata, enableTags, tagsLang, updateEnableTags, enableFaceRecognition, globalHiddenColumns, modifyGlobalHiddenColumns } = useMetadataStatus();
|
||||
const enableHistorySetting = is_admin; // repo owner, admin of the department which the repo belongs to, and ...
|
||||
const enableAutoDelSetting = is_admin && enableRepoAutoDel;
|
||||
const enableExtendedPropertiesSetting = !encrypted && is_admin && enableMetadataManagement;
|
||||
@@ -162,22 +161,6 @@ const LibSettingsDialog = ({ repoID, currentRepoInfo, toggleDialog, tab, showMig
|
||||
{gettext('Tags')}
|
||||
</NavLink>
|
||||
</NavItem>
|
||||
{enableSeafileAI &&
|
||||
<NavItem
|
||||
role="tab"
|
||||
aria-selected={activeTab === TAB.OCR_SETTING}
|
||||
aria-controls="ocr-setting-panel"
|
||||
>
|
||||
<NavLink
|
||||
className={activeTab === TAB.OCR_SETTING ? 'active' : ''}
|
||||
onClick={toggleTab.bind(this, TAB.OCR_SETTING)}
|
||||
tabIndex="0"
|
||||
onKeyDown={onTabKeyDown}
|
||||
>
|
||||
{gettext('OCR')}
|
||||
</NavLink>
|
||||
</NavItem>
|
||||
}
|
||||
</>
|
||||
}
|
||||
</Nav>
|
||||
@@ -238,18 +221,6 @@ const LibSettingsDialog = ({ repoID, currentRepoInfo, toggleDialog, tab, showMig
|
||||
/>
|
||||
</TabPane>
|
||||
)}
|
||||
{(enableExtendedPropertiesSetting && activeTab === TAB.OCR_SETTING) && (
|
||||
<TabPane tabId={TAB.OCR_SETTING} role="tabpanel" id="ocr-setting-panel">
|
||||
<LibMetadataOCRStatusSettingPanel
|
||||
repoID={repoID}
|
||||
value={enableOCR}
|
||||
lang={tagsLang}
|
||||
submit={updateEnableOCR}
|
||||
toggleDialog={toggleDialog}
|
||||
enableMetadata={enableMetadata}
|
||||
/>
|
||||
</TabPane>
|
||||
)}
|
||||
</TabContent>
|
||||
</Fragment>
|
||||
</ModalBody>
|
||||
|
@@ -10,14 +10,12 @@ import { checkIsDir } from '../../metadata/utils/row';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import { getFileNameFromRecord } from '../../metadata/utils/cell';
|
||||
import { getColumnByKey } from '../../metadata/utils/column';
|
||||
import { useMetadataStatus } from '../../hooks';
|
||||
import { openInNewTab, openParentFolder } from '../../metadata/utils/file';
|
||||
|
||||
const TableFilesToolbar = ({ repoID }) => {
|
||||
const [selectedRecordIds, setSelectedRecordIds] = useState([]);
|
||||
const metadataRef = useRef([]);
|
||||
const menuRef = useRef(null);
|
||||
const { enableOCR } = useMetadataStatus();
|
||||
|
||||
const canModify = window.sfMetadataContext && window.sfMetadataContext.canModify();
|
||||
const eventBus = window.sfMetadataContext && window.sfMetadataContext.eventBus;
|
||||
@@ -95,7 +93,7 @@ const TableFilesToolbar = ({ repoID }) => {
|
||||
aiOptions.push(GENERATE_DESCRIPTION);
|
||||
}
|
||||
|
||||
if (enableOCR && (isImage || isPDF)) {
|
||||
if (isImage || isPDF) {
|
||||
aiOptions.push(OCR);
|
||||
}
|
||||
|
||||
@@ -105,7 +103,7 @@ const TableFilesToolbar = ({ repoID }) => {
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}, [selectedRecordIds, records, enableOCR]);
|
||||
}, [selectedRecordIds, records]);
|
||||
|
||||
const onMenuItemClick = useCallback((operation) => {
|
||||
const records = selectedRecordIds.map(id => RowUtils.getRecordById(id, metadataRef.current)).filter(Boolean);
|
||||
|
@@ -3,8 +3,7 @@ const TAB = {
|
||||
AUTO_DEL_SETTING: 'auto_delete_setting',
|
||||
EXTENDED_PROPERTIES_SETTING: 'extended_properties_setting',
|
||||
FACE_RECOGNITION_SETTING: 'face_recognition_setting',
|
||||
TAGS_SETTING: 'tags_setting',
|
||||
OCR_SETTING: 'ocr_setting',
|
||||
TAGS_SETTING: 'tags_setting'
|
||||
};
|
||||
|
||||
export { TAB };
|
||||
|
@@ -22,7 +22,6 @@ export const MetadataStatusProvider = ({ repoID, repoInfo, currentPath, hideMeta
|
||||
const [enableMetadata, setEnableMetadata] = useState(false);
|
||||
const [enableTags, setEnableTags] = useState(false);
|
||||
const [tagsLang, setTagsLang] = useState('en');
|
||||
const [enableOCR, setEnableOCR] = useState(false);
|
||||
const [detailsSettings, setDetailsSettings] = useState({});
|
||||
const [isBeingBuilt, setIsBeingBuilt] = useState(false);
|
||||
const [enableFaceRecognition, setEnableFaceRecognition] = useState(false);
|
||||
@@ -44,7 +43,6 @@ export const MetadataStatusProvider = ({ repoID, repoInfo, currentPath, hideMeta
|
||||
setLoading(true);
|
||||
setEnableMetadata(false);
|
||||
setEnableTags(false);
|
||||
setEnableOCR(false);
|
||||
setEnableFaceRecognition(false);
|
||||
setDetailsSettings({});
|
||||
setIsBeingBuilt(false);
|
||||
@@ -59,7 +57,6 @@ export const MetadataStatusProvider = ({ repoID, repoInfo, currentPath, hideMeta
|
||||
tags_enabled: enableTags,
|
||||
tags_lang: tagsLang,
|
||||
details_settings: detailsSettings,
|
||||
ocr_enabled: enableOCR,
|
||||
face_recognition_enabled: enableFaceRecognition,
|
||||
global_hidden_columns: globalHiddenColumns,
|
||||
} = res.data;
|
||||
@@ -69,7 +66,6 @@ export const MetadataStatusProvider = ({ repoID, repoInfo, currentPath, hideMeta
|
||||
setEnableTags(enableTags);
|
||||
setTagsLang(tagsLang || 'en');
|
||||
setDetailsSettings(JSON.parse(detailsSettings));
|
||||
setEnableOCR(enableSeafileAI && enableOCR);
|
||||
setEnableFaceRecognition(enableSeafileAI && enableFaceRecognition);
|
||||
setEnableMetadata(enableMetadata);
|
||||
const parsedGlobalHiddenColumns = typeof globalHiddenColumns === 'string'
|
||||
@@ -96,7 +92,6 @@ export const MetadataStatusProvider = ({ repoID, repoInfo, currentPath, hideMeta
|
||||
if (!newValue) {
|
||||
cancelMetadataURL(true);
|
||||
setEnableTags(false);
|
||||
setEnableOCR(false);
|
||||
setEnableFaceRecognition(false);
|
||||
}
|
||||
setDetailsSettings({});
|
||||
@@ -115,10 +110,6 @@ export const MetadataStatusProvider = ({ repoID, repoInfo, currentPath, hideMeta
|
||||
setTagsLang(lang);
|
||||
}, [enableTags, tagsLang, cancelMetadataURL]);
|
||||
|
||||
const updateEnableOCR = useCallback((newValue) => {
|
||||
if (newValue === enableOCR) return;
|
||||
setEnableOCR(newValue);
|
||||
}, [enableOCR]);
|
||||
|
||||
const updateEnableFaceRecognition = useCallback((newValue) => {
|
||||
if (newValue === enableFaceRecognition) return;
|
||||
@@ -169,8 +160,6 @@ export const MetadataStatusProvider = ({ repoID, repoInfo, currentPath, hideMeta
|
||||
updateEnableTags,
|
||||
detailsSettings,
|
||||
modifyDetailsSettings,
|
||||
enableOCR,
|
||||
updateEnableOCR,
|
||||
enableFaceRecognition,
|
||||
updateEnableFaceRecognition,
|
||||
globalHiddenColumns,
|
||||
|
@@ -393,16 +393,6 @@ class MetadataManagerAPI {
|
||||
};
|
||||
|
||||
// ocr
|
||||
openOCR = (repoID) => {
|
||||
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/ocr/';
|
||||
return this.req.put(url);
|
||||
};
|
||||
|
||||
closeOCR = (repoID) => {
|
||||
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/ocr/';
|
||||
return this.req.delete(url);
|
||||
};
|
||||
|
||||
ocr = (repoID, filePath) => {
|
||||
const url = this.server + '/api/v2.1/ai/ocr/';
|
||||
const params = {
|
||||
|
@@ -1,102 +0,0 @@
|
||||
import React, { useCallback, useState } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import classnames from 'classnames';
|
||||
import { ModalBody, ModalFooter, Button } from 'reactstrap';
|
||||
import Switch from '../../../../components/switch';
|
||||
import toaster from '../../../../components/toast';
|
||||
import TurnOffConfirmDialog from '../turn-off-confirm-dialog';
|
||||
import metadataAPI from '../../../api';
|
||||
import { Utils } from '../../../../utils/utils';
|
||||
import { gettext } from '../../../../utils/constants';
|
||||
|
||||
const MetadataOCRStatusManagementDialog = ({ value: oldValue, repoID, toggleDialog: toggle, submit, enableMetadata }) => {
|
||||
const [value, setValue] = useState(oldValue);
|
||||
const [submitting, setSubmitting] = useState(false);
|
||||
const [showTurnOffConfirmDialog, setShowTurnOffConfirmDialog] = useState(false);
|
||||
|
||||
const onToggle = useCallback(() => {
|
||||
if (submitting) return;
|
||||
toggle && toggle();
|
||||
}, [submitting, toggle]);
|
||||
|
||||
const onSubmit = useCallback(() => {
|
||||
if (!value) {
|
||||
setShowTurnOffConfirmDialog(true);
|
||||
return;
|
||||
}
|
||||
setSubmitting(true);
|
||||
metadataAPI.openOCR(repoID).then(res => {
|
||||
submit(true);
|
||||
toggle();
|
||||
}).catch(error => {
|
||||
const errorMsg = Utils.getErrorMsg(error);
|
||||
toaster.danger(errorMsg);
|
||||
setSubmitting(false);
|
||||
});
|
||||
}, [repoID, value, submit, toggle]);
|
||||
|
||||
const turnOffConfirmToggle = useCallback(() => {
|
||||
setShowTurnOffConfirmDialog(!showTurnOffConfirmDialog);
|
||||
}, [showTurnOffConfirmDialog]);
|
||||
|
||||
const turnOffConfirmSubmit = useCallback(() => {
|
||||
setShowTurnOffConfirmDialog(false);
|
||||
setSubmitting(true);
|
||||
metadataAPI.closeOCR(repoID).then(res => {
|
||||
submit(false);
|
||||
toggle();
|
||||
}).catch(error => {
|
||||
const errorMsg = Utils.getErrorMsg(error);
|
||||
toaster.danger(errorMsg);
|
||||
setSubmitting(false);
|
||||
});
|
||||
}, [repoID, submit, toggle]);
|
||||
|
||||
const onValueChange = useCallback(() => {
|
||||
const nextValue = !value;
|
||||
setValue(nextValue);
|
||||
}, [value]);
|
||||
|
||||
return (
|
||||
<>
|
||||
{!showTurnOffConfirmDialog && (
|
||||
<>
|
||||
<ModalBody className="metadata-status-management-dialog">
|
||||
{!enableMetadata && <p className="oepn-metadata-tip">{gettext('Please turn on extended properties setting first')}</p>}
|
||||
<Switch
|
||||
checked={value}
|
||||
disabled={submitting || !enableMetadata}
|
||||
size="large"
|
||||
textPosition="right"
|
||||
className={classnames('change-metadata-status-management w-100', { 'disabled': submitting })}
|
||||
onChange={onValueChange}
|
||||
placeholder={gettext('Enable OCR')}
|
||||
/>
|
||||
<p className="tip m-0">
|
||||
{gettext('After enable OCR, you can extract text from images or scanned PDFs.')}
|
||||
</p>
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
<Button color="secondary" onClick={onToggle}>{gettext('Cancel')}</Button>
|
||||
<Button color="primary" disabled={oldValue === value || submitting || !enableMetadata} onClick={onSubmit}>{gettext('Submit')}</Button>
|
||||
</ModalFooter>
|
||||
</>
|
||||
)}
|
||||
{showTurnOffConfirmDialog && (
|
||||
<TurnOffConfirmDialog title={gettext('Turn off OCR')} toggle={turnOffConfirmToggle} submit={turnOffConfirmSubmit}>
|
||||
<p>{gettext('Do you really want to turn off OCR? Existing OCR results will be deleted.')}</p>
|
||||
</TurnOffConfirmDialog>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
MetadataOCRStatusManagementDialog.propTypes = {
|
||||
value: PropTypes.bool,
|
||||
repoID: PropTypes.string.isRequired,
|
||||
toggleDialog: PropTypes.func.isRequired,
|
||||
submit: PropTypes.func.isRequired,
|
||||
enableMetadata: PropTypes.bool.isRequired,
|
||||
};
|
||||
|
||||
export default MetadataOCRStatusManagementDialog;
|
@@ -22,7 +22,7 @@ const AIIcon = () => {
|
||||
|
||||
const [isMenuShow, setMenuShow] = useState(false);
|
||||
|
||||
const { enableMetadata, enableTags, enableOCR } = useMetadataStatus();
|
||||
const { enableMetadata, enableTags } = useMetadataStatus();
|
||||
const { canModifyRecord, columns, record, onChange, onLocalRecordChange, updateFileTags, updateDescription } = useMetadataDetails();
|
||||
const { generateDescription, extractFileDetails, onOCR, generateFileTags } = useMetadataAIOperations();
|
||||
|
||||
@@ -44,7 +44,7 @@ const AIIcon = () => {
|
||||
});
|
||||
}
|
||||
|
||||
if (enableOCR && (isImage || isPdf)) {
|
||||
if (isImage || isPdf) {
|
||||
list.push({ value: OPERATION.OCR, label: gettext('Extract text'), record });
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ const AIIcon = () => {
|
||||
}
|
||||
|
||||
return list;
|
||||
}, [enableOCR, enableTags, canModifyRecord, columns, record]);
|
||||
}, [enableTags, canModifyRecord, columns, record]);
|
||||
|
||||
const onToggle = useCallback((event) => {
|
||||
event && event.preventDefault();
|
||||
|
@@ -13,7 +13,6 @@ const MetadataAIOperationsContext = React.createContext(null);
|
||||
export const MetadataAIOperationsProvider = ({
|
||||
repoID,
|
||||
enableMetadata = false,
|
||||
enableOCR = false,
|
||||
enableTags = false,
|
||||
tagsLang,
|
||||
repoInfo,
|
||||
@@ -140,7 +139,6 @@ export const MetadataAIOperationsProvider = ({
|
||||
return (
|
||||
<MetadataAIOperationsContext.Provider value={{
|
||||
enableMetadata,
|
||||
enableOCR,
|
||||
enableTags,
|
||||
tagsLang,
|
||||
canModify,
|
||||
|
@@ -7,7 +7,7 @@ import { useMetadataStatus } from '../../hooks';
|
||||
const MetadataMiddlewareContext = React.createContext(null);
|
||||
|
||||
export const MetadataMiddlewareProvider = ({ repoID, currentPath, repoInfo, selectTagsView, tagsChangedCallback, children }) => {
|
||||
const { enableMetadata, enableOCR, enableTags, tagsLang } = useMetadataStatus();
|
||||
const { enableMetadata, enableTags, tagsLang } = useMetadataStatus();
|
||||
|
||||
return (
|
||||
<MetadataMiddlewareContext.Provider value={{}}>
|
||||
@@ -16,7 +16,6 @@ export const MetadataMiddlewareProvider = ({ repoID, currentPath, repoInfo, sele
|
||||
<MetadataAIOperationsProvider
|
||||
repoID={repoID}
|
||||
enableMetadata={enableMetadata}
|
||||
enableOCR={enableOCR}
|
||||
enableTags={enableTags}
|
||||
tagsLang={tagsLang}
|
||||
repoInfo={repoInfo}
|
||||
|
@@ -4,7 +4,6 @@ export { default as SeafileMetadata } from './views';
|
||||
export { default as MetadataStatusManagementDialog } from './components/dialog/metadata-status-manage-dialog';
|
||||
export { default as MetadataFaceRecognitionDialog } from './components/dialog/metadata-face-recognition-dialog';
|
||||
export { default as MetadataTagsStatusDialog } from './components/dialog/metadata-tags-status-dialog';
|
||||
export { default as MetadataOCRStatusManagementDialog } from './components/dialog/metadata-ocr-status-management-dialog';
|
||||
export { default as MetadataDetails } from './components/metadata-details';
|
||||
export { default as MetadataTreeView } from './metadata-tree-view';
|
||||
export { default as metadataAPI } from './api';
|
||||
|
@@ -1,6 +1,5 @@
|
||||
import React, { useState, useRef, useCallback, useMemo } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { useMetadataStatus } from '@/hooks';
|
||||
import { gettext, enableSeafileAI } from '@/utils/constants';
|
||||
import { Utils } from '@/utils/utils';
|
||||
import DeleteFolderDialog from '@/components/dialog/delete-folder-dialog';
|
||||
@@ -41,7 +40,6 @@ const ContextMenu = ({
|
||||
const [deletedFolderPath, setDeletedFolderPath] = useState('');
|
||||
|
||||
const { metadata } = useMetadataView();
|
||||
const { enableOCR } = useMetadataStatus();
|
||||
|
||||
const repoID = window.sfMetadataStore.repoId;
|
||||
|
||||
@@ -220,7 +218,7 @@ const ContextMenu = ({
|
||||
aiOptions.push({ value: OPERATION.FILE_TAGS, label: gettext('Generate file tags'), record: record });
|
||||
}
|
||||
|
||||
if (enableSeafileAI && enableOCR && (isImage || isPdf)) {
|
||||
if (enableSeafileAI && (isImage || isPdf)) {
|
||||
aiOptions.push({ value: OPERATION.OCR, label: gettext('Extract text'), record });
|
||||
}
|
||||
|
||||
@@ -231,7 +229,7 @@ const ContextMenu = ({
|
||||
}
|
||||
|
||||
return list;
|
||||
}, [isGroupView, selectedPosition, recordMetrics, selectedRange, metadata, recordGetterByIndex, checkIsDescribableFile, enableOCR, getAbleDeleteRecords]);
|
||||
}, [isGroupView, selectedPosition, recordMetrics, selectedRange, metadata, recordGetterByIndex, checkIsDescribableFile, getAbleDeleteRecords]);
|
||||
|
||||
const handleOptionClick = useCallback((option, event) => {
|
||||
switch (option.value) {
|
||||
|
@@ -762,7 +762,7 @@ class SharedDirView extends React.Component {
|
||||
const isRepoInfoBarShown = isDesktop && path == '/' && usedRepoTags.length != 0;
|
||||
|
||||
return (
|
||||
<MetadataAIOperationsProvider repoID={repoID} enableMetadata={false} enableOCR={false} repoInfo={{ permission: 'r' }} >
|
||||
<MetadataAIOperationsProvider repoID={repoID} enableMetadata={false} repoInfo={{ permission: 'r' }} >
|
||||
<div id="shared-dir-view" className="h-100 d-flex flex-column">
|
||||
<div className="top-header d-flex justify-content-between flex-shrink-0">
|
||||
<a href={siteRoot}>
|
||||
|
@@ -55,7 +55,6 @@ class MetadataManage(APIView):
|
||||
is_tags_enabled = False
|
||||
tags_lang = ''
|
||||
details_settings = '{}'
|
||||
is_ocr_enabled = False
|
||||
face_recognition_enabled = False
|
||||
global_hidden_columns = []
|
||||
|
||||
@@ -70,8 +69,6 @@ class MetadataManage(APIView):
|
||||
if record.tags_enabled:
|
||||
is_tags_enabled = True
|
||||
tags_lang = record.tags_lang
|
||||
if record.ocr_enabled:
|
||||
is_ocr_enabled = True
|
||||
if record.face_recognition_enabled:
|
||||
face_recognition_enabled = True
|
||||
if not global_hidden_columns:
|
||||
@@ -84,7 +81,6 @@ class MetadataManage(APIView):
|
||||
return Response({
|
||||
'enabled': is_enabled,
|
||||
'tags_enabled': is_tags_enabled,
|
||||
'ocr_enabled': is_ocr_enabled,
|
||||
'face_recognition_enabled': face_recognition_enabled,
|
||||
'tags_lang': tags_lang,
|
||||
'details_settings': details_settings,
|
||||
@@ -173,7 +169,6 @@ class MetadataManage(APIView):
|
||||
record.face_recognition_enabled = False
|
||||
record.tags_enabled = False
|
||||
record.details_settings = '{}'
|
||||
record.ocr_enabled = False
|
||||
record.save()
|
||||
RepoMetadataViews.objects.filter(repo_id=repo_id).delete()
|
||||
except Exception as e:
|
||||
@@ -256,66 +251,6 @@ class MetadataGlobalHiddenColumnsView(APIView):
|
||||
return Response({'success': True})
|
||||
|
||||
|
||||
class MetadataOCRManageView(APIView):
|
||||
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||
permission_classes = (IsAuthenticated, )
|
||||
throttle_classes = (UserRateThrottle, )
|
||||
|
||||
def put(self, request, repo_id):
|
||||
|
||||
# resource check
|
||||
repo = seafile_api.get_repo(repo_id)
|
||||
if not repo:
|
||||
error_msg = f'Library {repo_id} not found.'
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
if not is_repo_admin(request.user.username, repo_id):
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
metadata = RepoMetadata.objects.filter(repo_id=repo_id).first()
|
||||
if not metadata or not metadata.enabled:
|
||||
error_msg = f'The metadata module is not enabled for repo {repo_id}.'
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
try:
|
||||
metadata.ocr_enabled = True
|
||||
metadata.save()
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, 'Internal Server Error')
|
||||
|
||||
return Response({'success': True})
|
||||
|
||||
def delete(self, request, repo_id):
|
||||
# resource check
|
||||
repo = seafile_api.get_repo(repo_id)
|
||||
if not repo:
|
||||
error_msg = f'Library {repo_id} not found.'
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
# permission check
|
||||
if not is_repo_admin(request.user.username, repo_id):
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
# check dose the repo have opened metadata manage
|
||||
record = RepoMetadata.objects.filter(repo_id=repo_id).first()
|
||||
if not record or not record.enabled or not record.ocr_enabled:
|
||||
error_msg = f'The repo {repo_id} has disabled the OCR.'
|
||||
return api_error(status.HTTP_409_CONFLICT, error_msg)
|
||||
|
||||
try:
|
||||
record.ocr_enabled = False
|
||||
record.save()
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error'
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
|
||||
return Response({'success': True})
|
||||
|
||||
|
||||
class MetadataRecords(APIView):
|
||||
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||
permission_classes = (IsAuthenticated, )
|
||||
|
@@ -3,7 +3,7 @@ from .apis import MetadataRecognizeFaces, MetadataRecords, MetadataManage, Metad
|
||||
MetadataFolders, MetadataViews, MetadataViewsMoveView, MetadataViewsDetailView, MetadataViewsDuplicateView, FacesRecords, \
|
||||
FaceRecognitionManage, FacesRecord, MetadataExtractFileDetails, PeoplePhotos, MetadataTagsStatusManage, MetadataTags, \
|
||||
MetadataTagsLinks, MetadataFileTags, MetadataTagFiles, MetadataMergeTags, MetadataTagsFiles, MetadataDetailsSettingsView, \
|
||||
MetadataOCRManageView, PeopleCoverPhoto, MetadataMigrateTags, MetadataExportTags, MetadataImportTags, MetadataGlobalHiddenColumnsView
|
||||
PeopleCoverPhoto, MetadataMigrateTags, MetadataExportTags, MetadataImportTags, MetadataGlobalHiddenColumnsView
|
||||
|
||||
urlpatterns = [
|
||||
re_path(r'^$', MetadataManage.as_view(), name='api-v2.1-metadata'),
|
||||
@@ -35,9 +35,6 @@ urlpatterns = [
|
||||
# global hidden columns
|
||||
re_path(r'^global-hidden-columns/$', MetadataGlobalHiddenColumnsView.as_view(), name='api-v2.1-metadata-global-hidden-columns'),
|
||||
|
||||
# ocr
|
||||
re_path(r'^ocr/', MetadataOCRManageView.as_view(), name='api-v2.1-metadata-ocr'),
|
||||
|
||||
# tags api
|
||||
re_path(r'^tags-status/$', MetadataTagsStatusManage.as_view(), name='api-v2.1-metadata-tags-status'),
|
||||
re_path(r'^tags/$', MetadataTags.as_view(), name='api-v2.1-metadata-tags'),
|
||||
|
@@ -896,49 +896,3 @@ class MetadataMergeTagsTest(BaseTestCase):
|
||||
self.assertIn(self.target_tag_id, tag_ids)
|
||||
self.assertNotIn(self.merge_tag_id, tag_ids)
|
||||
|
||||
|
||||
class MetadataOCRManageViewTest(BaseTestCase):
|
||||
def setUp(self):
|
||||
self.login_as(self.user)
|
||||
self.repo = seafile_api.get_repo(self.create_repo(
|
||||
name='test-repo',
|
||||
desc='',
|
||||
username=self.user.username,
|
||||
passwd=None
|
||||
))
|
||||
self.repo_id = self.repo.id
|
||||
|
||||
url = reverse('api-v2.1-metadata', args=[self.repo_id])
|
||||
self.client.put(url)
|
||||
|
||||
def test_enable_ocr(self):
|
||||
url = reverse('api-v2.1-metadata-ocr', args=[self.repo_id])
|
||||
resp = self.client.put(url)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
json_resp = json.loads(resp.content)
|
||||
self.assertTrue(json_resp['success'])
|
||||
|
||||
metadata = RepoMetadata.objects.filter(repo_id=self.repo_id).first()
|
||||
self.assertTrue(metadata.ocr_enabled)
|
||||
|
||||
def test_disable_ocr(self):
|
||||
url = reverse('api-v2.1-metadata-ocr', args=[self.repo_id])
|
||||
self.client.put(url)
|
||||
|
||||
resp = self.client.delete(url)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
json_resp = json.loads(resp.content)
|
||||
self.assertTrue(json_resp['success'])
|
||||
|
||||
metadata = RepoMetadata.objects.filter(repo_id=self.repo_id).first()
|
||||
self.assertFalse(metadata.ocr_enabled)
|
||||
|
||||
def test_enable_ocr_without_metadata(self):
|
||||
metadata = RepoMetadata.objects.filter(repo_id=self.repo_id).first()
|
||||
metadata.enabled = False
|
||||
metadata.save()
|
||||
|
||||
url = reverse('api-v2.1-metadata-ocr', args=[self.repo_id])
|
||||
resp = self.client.put(url)
|
||||
self.assertEqual(404, resp.status_code)
|
||||
|
||||
|
Reference in New Issue
Block a user