Skip to content

Commit e404994

Browse files
committed
backend and image occlusion proto for request
1 parent 08d78b5 commit e404994

File tree

5 files changed

+71
-0
lines changed

5 files changed

+71
-0
lines changed

proto/anki/backend.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ enum ServiceIndex {
3131
SERVICE_INDEX_LINKS = 15;
3232
SERVICE_INDEX_IMPORT_EXPORT = 16;
3333
SERVICE_INDEX_ANKIDROID = 17;
34+
SERVICE_INDEX_IMAGE_OCCLUSION = 18;
3435
}
3536

3637
message BackendInit {

proto/anki/image_occlusion.proto

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Copyright: Ankitects Pty Ltd and contributors
2+
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
3+
4+
syntax = "proto3";
5+
6+
option java_multiple_files = true;
7+
8+
package anki.image_occlusion;
9+
10+
import "anki/cards.proto";
11+
import "anki/collection.proto";
12+
import "anki/notes.proto";
13+
import "anki/generic.proto";
14+
15+
service ImageOcclusionService {
16+
rpc GetImageClozeMetadata(ImageClozeMetadataRequest) returns (ImageClozeMetadata);
17+
rpc AddImageOcclusionNotes(AddImageOcclusionNotesRequest) returns (ResultAddNotes);
18+
}
19+
20+
message ImageClozeMetadataRequest {
21+
string path = 1;
22+
}
23+
24+
message ImageClozeMetadata {
25+
bytes data = 1;
26+
string name = 2;
27+
int64 deck_id = 3;
28+
29+
message MappedNotetype {
30+
int64 id = 4;
31+
// Source column indices for note fields. One-based. 0 means n/a.
32+
repeated uint32 field_columns = 5;
33+
}
34+
35+
oneof notetype {
36+
// One notetype for all rows with given column mapping.
37+
MappedNotetype global_notetype = 6;
38+
// Row-specific notetypes with automatic mapping by index.
39+
// One-based. 0 means n/a.
40+
uint32 notetype_column = 7;
41+
}
42+
}
43+
44+
message AddImageOcclusionNotesRequest {
45+
string image_path = 1;
46+
bytes notes_data = 2;
47+
}
48+
49+
message ResultAddNotes {
50+
bool is_added = 1;
51+
}

pylib/anki/collection.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
config_pb2,
1212
generic_pb2,
1313
import_export_pb2,
14+
image_occlusion_pb2,
1415
links_pb2,
1516
search_pb2,
1617
stats_pb2,
@@ -38,6 +39,8 @@
3839
CsvMetadata = import_export_pb2.CsvMetadata
3940
DupeResolution = CsvMetadata.DupeResolution
4041
Delimiter = import_export_pb2.CsvMetadata.Delimiter
42+
ImageClozeMetadata = image_occlusion_pb2.ImageClozeMetadata
43+
AddImageOcclusionNotesRequest = image_occlusion_pb2.AddImageOcclusionNotesRequest
4144

4245
import copy
4346
import os
@@ -454,6 +457,15 @@ def import_json_file(self, path: str) -> ImportLogWithChanges:
454457
def import_json_string(self, json: str) -> ImportLogWithChanges:
455458
return self._backend.import_json_string(json)
456459

460+
# Image Occlusion
461+
def get_image_cloze_metadata(self, path: str | None) -> ImageClozeMetadata:
462+
request = image_occlusion_pb2.ImageClozeMetadataRequest(path=path)
463+
return self._backend.get_image_cloze_metadata(request)
464+
465+
def add_image_occlusion_notes(self, image_path: str | None, notes_data: bytes | None) -> bool:
466+
request = image_occlusion_pb2.AddImageOcclusionNotesRequest(image_path=image_path, notes_data=notes_data)
467+
return self._backend.add_image_occlusion_notes(request)
468+
457469
# Object helpers
458470
##########################################################################
459471

pylib/tools/genbackend.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import anki.decks_pb2
2121
import anki.i18n_pb2
2222
import anki.import_export_pb2
23+
import anki.image_occlusion_pb2
2324
import anki.links_pb2
2425
import anki.media_pb2
2526
import anki.notes_pb2
@@ -187,6 +188,7 @@ def render_service(
187188
MEDIA=anki.media_pb2,
188189
LINKS=anki.links_pb2,
189190
IMPORT_EXPORT=anki.import_export_pb2,
191+
IMAGE_OCCLUSION=anki.image_occlusion_pb2,
190192
)
191193

192194
for service in anki.backend_pb2.ServiceIndex.DESCRIPTOR.values:
@@ -238,6 +240,7 @@ def render_service(
238240
import anki.tags_pb2
239241
import anki.media_pb2
240242
import anki.import_export_pb2
243+
import anki.image_occlusion_pb2
241244
242245
class RustBackendGenerated:
243246
def _run_command(self, service: int, method: int, input: Any) -> bytes:

ts/lib/proto.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import DeckConfig = anki.deckconfig;
1515
import Decks = anki.decks;
1616
import Generic = anki.generic;
1717
import I18n = anki.i18n;
18+
import ImageOcclusion = anki.image_occlusion;
1819
import ImportExport = anki.import_export;
1920
import Notes = anki.notes;
2021
import Notetypes = anki.notetypes;
@@ -81,3 +82,6 @@ export const stats = Stats.StatsService.create(serviceCallback as RPCImpl);
8182

8283
export { Tags };
8384
export const tags = Tags.TagsService.create(serviceCallback as RPCImpl);
85+
86+
export { ImageOcclusion };
87+
export const imageOcclusion = ImageOcclusion.ImageOcclusionService.create(serviceCallback as RPCImpl);

0 commit comments

Comments
 (0)