Skip to content

Commit

Permalink
feat: skip OCR (#332)
Browse files Browse the repository at this point in the history
  • Loading branch information
ciur authored Feb 23, 2024
1 parent eded5b5 commit 0e97178
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 13 deletions.
1 change: 1 addition & 0 deletions papermerge/core/routers/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ def create_node(
parent_id=pynode.parent_id,
size=0,
page_count=0,
ocr=pynode.ocr,
file_name=pynode.title
)
if pynode.id:
Expand Down
4 changes: 4 additions & 0 deletions papermerge/core/schemas/documents.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,10 @@ class CreateDocument(BaseModel):
parent_id: UUID | None
lang: str | None = None
file_name: str | None = None
# Will OCR be triggered immediately?
# True: means, yes, trigger OCR after upload
# False: means, skip OCR
ocr: bool = True

model_config = {
"json_schema_extra": {
Expand Down
5 changes: 5 additions & 0 deletions papermerge/core/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,11 @@ def receiver_document_post_upload(
"""
doc_ver = document_version
doc = document_version.document

if not doc.ocr:
logger.info(f"Skipping OCR for doc={doc} as doc.ocr=False")
return

user = doc.user

logger.debug(
Expand Down
2 changes: 1 addition & 1 deletion ui/src/components/commander/commander.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,7 @@ function Commander({
onEditTagsClick={onEditTagsClick}
onCreatedNodesByUpload={onCreatedNodesByUpload}
selected_nodes={selected_nodes}
node_id={node_id} />
target={nodes!.data!.parent} />

<div className="d-flex align-items-center">
<SortDropdown
Expand Down
8 changes: 4 additions & 4 deletions ui/src/components/commander/menu/Menu.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import UploadButton from './UploadButton';
import NewFolder from './NewFolder';

import type { CreatedNodesType, NodeType } from 'types';
import type { CreatedNodesType, FolderType, NodeType } from 'types';
import DeleteNodes from './DeleteNodes';
import RenameNodes from './RenameNode';
import EditTags from './EditTags';
Expand All @@ -14,7 +14,7 @@ type Args = {
onEditTagsClick: () => void;
onCreatedNodesByUpload: (created_nodes: CreatedNodesType) => void;
selected_nodes: Array<string>;
node_id: string; // current node id
target: FolderType; // current node id
}

function Menu({
Expand All @@ -24,10 +24,10 @@ function Menu({
onEditTagsClick,
onCreatedNodesByUpload,
selected_nodes,
node_id
target
}: Args) {

const upload = <UploadButton node_id={node_id} onCreatedNodesByUpload={onCreatedNodesByUpload} />;
const upload = <UploadButton target={target} onCreatedNodesByUpload={onCreatedNodesByUpload} />;
const new_folder = <NewFolder onClick={onNewFolderClick} />;
const delete_nodes = <DeleteNodes onClick={onDeleteNodesClick} />;
const rename_node = <RenameNodes onClick={onRenameClick} />;
Expand Down
13 changes: 8 additions & 5 deletions ui/src/components/commander/menu/UploadButton.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import Button from 'react-bootstrap/Button';
import { uploader } from 'utils/uploader';
import Tooltip from 'react-bootstrap/Tooltip';
import drop_files from '../modals/DropFiles';

import { OverlayTrigger } from 'react-bootstrap';
import { CreatedNodesType } from 'types';
import { CreatedNodesType, FolderType } from 'types';

type Args = {
node_id: string;
target: FolderType;
onCreatedNodesByUpload: (created_nodes: CreatedNodesType) => void;
}

function UploadButton({node_id, onCreatedNodesByUpload}: Args) {
function UploadButton({target, onCreatedNodesByUpload}: Args) {

const onClickProxyUpload = () => {
let element: HTMLInputElement | null = document.querySelector('input[type=file]');
Expand All @@ -30,7 +30,10 @@ function UploadButton({node_id, onCreatedNodesByUpload}: Args) {
return;
}

uploader({files, node_id}).then(
drop_files({
source_files: files,
target: target
}).then(
(created_nodes: CreatedNodesType) => {
onCreatedNodesByUpload(created_nodes);
}
Expand Down
20 changes: 19 additions & 1 deletion ui/src/components/commander/modals/DropFiles.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import { useState } from 'react';
import Form from 'react-bootstrap/Form';

import { MODALS } from 'cconstants';
import GenericModal from 'components/modals/Generic';
import { uploader } from 'utils/uploader';
Expand Down Expand Up @@ -29,10 +32,19 @@ const DropFilesModal = ({
files from some folder - it does not make any sense for the upload dialog to
be open for until all those 200 files get uploaded.
*/
const [skipOCR, setSkipOCR] = useState<boolean>(false);

const onLocalCheck = () => {
let new_checked_value = !skipOCR;

setSkipOCR(new_checked_value);
}

const handleSubmit = async () => {
uploader({
files: source_files,
node_id: target.id
node_id: target.id,
skip_ocr: skipOCR
})
.then(
(drop_files: CreatedNodesType) => onOK(drop_files)
Expand All @@ -56,6 +68,12 @@ const DropFilesModal = ({
Are you sure you want to upload <span className='text-primary'>
{source_titles.join(', ')}
</span> to <span className='text-success'>{target_title}</span>?
<p className='pt-3'>
<Form.Check
onChange={onLocalCheck}
type="checkbox"
label={`Skip OCR`} />
</p>
</GenericModal>
);
}
Expand Down
7 changes: 5 additions & 2 deletions ui/src/utils/uploader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,26 @@ import type { CreatedNodesType, NodeType } from 'types';
type UploaderArgs = {
files: FileList;
node_id: string;
skip_ocr: boolean;
}

type CreateDocumentType = {
title: string;
parent_id: string;
ctype: 'document';
ocr: boolean;
}


async function uploader({files, node_id}: UploaderArgs): Promise<CreatedNodesType> {
async function uploader({files, node_id, skip_ocr}: UploaderArgs): Promise<CreatedNodesType> {
let bulk_create_docs: any = [];

Array.from(files, (file) => {
let data: CreateDocumentType = {
title: file.name,
parent_id: node_id,
ctype: 'document'
ctype: 'document',
ocr: !skip_ocr
}

bulk_create_docs.push(
Expand Down

0 comments on commit 0e97178

Please sign in to comment.