-
Notifications
You must be signed in to change notification settings - Fork 0
/
control.proto
235 lines (193 loc) · 4.81 KB
/
control.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
syntax = "proto3";
package hooya;
import "hooya.proto";
service Control {
rpc Version (VersionRequest) returns (VersionReply);
rpc StreamToFilestore (stream FileChunk) returns (StreamToFilestoreReply);
rpc TagCid (TagCidRequest) returns (TagCidReply);
rpc Tags (TagsRequest) returns (TagsReply);
rpc ContentAtCid (ContentAtCidRequest) returns (stream FileChunk);
rpc CidThumbnail (CidThumbnailRequest) returns (stream FileChunk);
rpc CidInfo (CidInfoRequest) returns (CidInfoReply);
rpc ForgetFile (ForgetFileRequest) returns (ForgetFileReply);
rpc RandomLocalFile (RandomLocalFileRequest) returns (RandomLocalFileReply);
rpc Reimport (ReimportRequest) returns (ReimportReply);
rpc AllFiles(AllFilesRequest) returns (AllFilesReply);
rpc Search(SearchRequest) returns (SearchReply);
// Given a search query, autocomplete the final term
rpc SuggestTag(SuggestTagRequest) returns (SuggestTagReply);
rpc AllTags(AllTagsRequest) returns (AllTagsReply);
// deprecated
rpc LocalFilePage (LocalFilePageRequest) returns (LocalFilePageReply);
}
message VersionRequest { }
message VersionReply {
uint64 major_version = 1;
uint64 minor_version = 2;
uint64 patch_version = 3;
string pre_version = 4;
}
message ReimportRequest {
bytes cid = 1;
}
message ReimportReply {
}
message RandomLocalFileRequest {
uint32 count = 1;
}
message RandomLocalFileReply {
repeated File file = 1;
}
message SuggestTagRequest {
// Existing query to filter by
repeated TagQuery tag_query = 1;
// namespace:descriptor to autocomplete
string suggest_string = 2;
int64 max_suggest = 3;
}
message SuggestTagReply {
// Suggested tag given constraints
repeated TagSuggestion tag_suggestion = 1;
// Constraints
repeated TagQuery tag_constraints = 2;
}
message TagSuggestion {
optional string namespace = 1;
string descriptor = 2;
int64 count = 3;
int64 distance = 4;
}
message SearchRequest {
SearchQuery search_query = 1;
string page_token = 2;
uint32 page_size = 3;
ResultsSortOrder sort_order = 4;
bool reverse_order = 5;
}
message SearchQuery {
// This will get more complex if I add search operators like OR
// … these are joined with AND only for now
repeated TagQuery tag_query = 1;
optional I64Query size = 2;
optional string mimetype = 3;
oneof ext_attr {
ImageQuery image_query = 4;
VideoQuery video_query = 5;
}
}
message TagQuery {
optional string namespace = 1;
string descriptor = 2;
bool negated = 3;
}
message ImageQuery {
optional float aspect_ratio = 1;
optional I64Query height = 2;
optional I64Query width = 3;
// colors…
// wavelet…
}
message I64Query {
int64 magnitude = 1;
oneof description {
bool is_max = 2;
bool is_min = 3;
bool is_exact = 4;
}
}
message VideoQuery {
optional float aspect_ratio = 1;
optional I64Query height = 2;
optional I64Query width = 3;
optional I64Query duration = 4;
}
message SearchReply {
string next_page_token = 1;
string final_page_token = 2;
repeated File files = 3;
}
message AllTagsRequest {
string page_token = 1;
uint32 page_size = 2;
TagResultsSortOrder sort_order = 3;
bool reverse_order = 4;
}
message AllTagsReply {
string next_page_token = 1;
string final_page_token = 2;
repeated TagInfo tags = 3;
}
message TagInfo {
string namespace = 1;
string descriptor = 2;
int64 count = 3;
}
message AllFilesRequest {
string page_token = 1;
uint32 page_size = 2;
ResultsSortOrder sort_order = 3;
bool reverse_order = 4;
}
message AllFilesReply {
string next_page_token = 1;
string final_page_token = 2;
repeated File files = 3;
}
enum TagResultsSortOrder {
most_files = 0;
}
enum ResultsSortOrder {
most_recently_indexed = 0;
// most_tags = 1;
// largest_filesize = 2;
}
// deprecated
message LocalFilePageRequest {
uint32 page_size = 1;
string page_token = 2;
bool oldest_first = 3;
}
// deprecated
message LocalFilePageReply {
repeated File file = 1;
string next_page_token = 2;
}
message PageRequest {
uint32 page_size = 1;
string page_token = 2;
}
message FileChunk {
bytes data = 1;
}
message StreamToFilestoreReply {
bytes cid = 1;
}
message TagsRequest {
bytes cid = 1;
}
message TagsReply {
repeated Tag tags = 1;
}
message TagCidRequest {
bytes cid = 1;
repeated Tag tags = 2;
}
message TagCidReply {
}
message ContentAtCidRequest {
bytes cid = 1;
}
message CidThumbnailRequest {
bytes source_cid = 1;
uint32 long_edge = 2;
}
message ForgetFileRequest {
bytes cid = 1;
}
message ForgetFileReply { }
message CidInfoRequest {
bytes cid = 1;
}
message CidInfoReply {
File file = 1;
}