This repository has been archived by the owner on Feb 9, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Streamer.idl
266 lines (233 loc) · 6.19 KB
/
Streamer.idl
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
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
/**
* @defgroup Streamer
* @brief Responsible for parsing a publication, and for fetching resources.
*
* The streamer can be divided into four different parts:
* - In-memory models
* - Parser
* - Fetcher
* - Server
*
* __In-memory Models__
* - As defined in this module's documentation.
*
* __Parser__
*
* - Access packaged or exploded publications
* - Parse EPUB 2.x and 3.x
* - Metadata
* - Spine & Manifest
* - Table of contents (NCX, Navigation Document)
* - Media overlays
* - Encryption resources
*
* __Fetcher__
*
* - Get the content of a publication's resource
* - Deobfuscate & decrypt resources
*
* __Server__
*
* - Output a [Readium Web Publication Manifest](https://github.com/readium/webpub-manifest)
* - Serve the publication's resources
* - Provide a number of APIs to interact with the publication
*/
/**
* @addtogroup Streamer
* @{
*/
interface Publication {
/// The context definition.
string context;
/// The metadata for the publication.
Metadata metadata;
/// List of relational links.
Link[] links;
/// List of resources in reading order for the publication.
Link[] spine;
/// List of resources that are necessary for rendering the publication.
Link[] resources;
/// List of resources that make up the table of contents.
Link[] tableOfContents;
/// List of resources that make up the page list.
Link[] pageList;
/// List of resources in the landmarks collection.
Link[] landmarks;
/// List of audio files.
Link[] listOfAudioFiles;
/// List of illustrations.
Link[] listOfIllustrations;
/// List of tables.
Link[] listOfTables;
/// List of videos.
Link[] listOfVideos;
/// Collection of images from OPDS
Link[] images;
/// Extension point for links that shouldn't show up in the manifest
Link[] otherLinks;
/// Extension point for collections that shouldn't show up in the manifest
PublicationCollection[] otherCollections;
/**
* Get a Link to the cover.
*
* @returns the cover resource link
*/
Link getCover();
/**
* Get a Link to the navigation document.
*
* @returns the navigation document link
*/
Link getNavDoc();
/**
* Get a Link, resource or spine item, with a matching relative path.
*
* @param relativePath: The relative path to match
* @returns a link with its `href` equal to the path if any was found,
* else `null`
*/
Link getResource(string relativePath);
/**
* Get a Link from the spine having the given href.
*
* @param href: The `href` being searched
* @returns the corresponding Link, if any
*/
Link getSpineItem(string href);
/**
* Get the first Link having the given `rel` in the
* publication collections: `links`, `spine`, `resources`.
*
* @param rel: The `rel` being searched
* @returns the corresponding Link, if any
*/
Link getLinkByRel(string rel);
/**
* Get the first Link having the given `href` in the
* publication collections: `links`, `spine`, `resources`.
*
* @param href: The `href` being searched
* @returns the corresponding Link, if any
*/
Link getLinkByHref(string href);
/**
* Get the JSON representation of this publication's WebPub Manifest.
*
* @returns the serialized JSON for the WebPubManifest (canonical)
*/
string getManifestJSON();
};
interface Metadata {
string rdfType;
MultiLanguage title;
string identifier;
Contributor[] author;
Contributor[] translator;
Contributor[] editor;
Contributor[] artist;
Contributor[] illustrator;
Contributor[] letterer;
Contributor[] penciler;
Contributor[] colorist;
Contributor[] inker;
Contributor[] narrator;
Contributor[] contributor;
Contributor[] publisher;
Contributor[] imprint;
string[] language;
Date modified;
Date publicationDate;
string description;
string direction;
Properties rendition;
string source;
string[] epubType;
string rights;
Subject[] subject;
BelongsTo belongsTo;
int duration;
/// TODO: The TS streamer has this
MediaOverlay mediaOverlay;
/// Extension point for other metadata
MetaItem[] otherMetadata;
};
interface Link {
string href;
string type;
string[] rel;
int height;
int width;
string title;
Properties properties;
/// TODO: The TS streamer has this as a number type. Go streamer has it as a string
string duration;
bool templated;
int bitrate;
MediaOverlayNode[] MediaOverlays;
Link[] children;
};
/// Represents a generic metadata element.
struct MetaItem {
string property;
string value;
MetaItem[] children;
};
/// Contributor construct used internally for all contributors
struct Contributor {
MultiLanguage name;
string sortAs;
string identifier;
string role;
};
/// Properties object use to link properties
/// To be used also in Rendition for fxl
struct Properties {
string[] contains;
string layout;
string mediaOverlay;
string orientation;
string overflow;
string page;
string spread;
Encryption encryption;
};
/// Contains metadata from encryption xml
struct Encryption {
string scheme;
string profile;
string algorithm;
string compression;
int originalLength;
};
/// Subject as based on EPUB 3.1 and WePpub
struct Subject {
string name;
string sortAs;
string scheme;
string code;
};
/// List of collections/series that a publication belongs to
struct BelongsTo {
Collection[] series;
Collection[] collection;
};
/// Collection construct used for collection/serie metadata
struct Collection {
string name;
string sortAs;
string identifier;
float position;
};
/// Store the a basic string when we only have one language.
/// Store in a hash by language for multiple string representation
struct MultiLanguage {
string singleString;
Map<string, string> multiString;
};
struct MediaOverlayNode {
string text;
string audio;
string role;
MediaOverlayNode[] children;
};
/** @}*/