Skip to content

Commit 5753cac

Browse files
fix: allow multi-lingual books to be uploaded to internet archive
1 parent eaf1947 commit 5753cac

File tree

2 files changed

+64
-2
lines changed

2 files changed

+64
-2
lines changed

bull/google-books-queue/consumer.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ GoogleBooksQueue.process((job, done) => {
3737
pageCount,
3838
infoLink,
3939
} = volumeInfo;
40+
var isValidEnglishChar = /^[a-zA-Z0-9!@#$%^&*()_+{}\[\]:;<>,.?~\\/-\s]+$/;
41+
const validEnglishTitle = isValidEnglishChar.test(title)
42+
? title
43+
: "non english characters";
44+
const validEnglishPublisher = isValidEnglishChar.test(publisher)
45+
? publisher
46+
: "non english characters";
4047
const { accessViewStatus } = accessInfo;
4148
const bucketTitle = job.data.IAIdentifier;
4249
const IAuri = `http://s3.us.archive.org/${bucketTitle}/${bucketTitle}.pdf`;
@@ -59,13 +66,13 @@ GoogleBooksQueue.process((job, done) => {
5966
"X-Amz-Auto-Make-Bucket": "1",
6067
"X-Archive-Meta-Collection": "opensource",
6168
"X-Archive-Ignore-Preexisting-Bucket": 1,
62-
"X-archive-meta-title": title.trim(),
69+
"X-archive-meta-title": validEnglishTitle.trim(),
6370
"X-archive-meta-date": publishedDate.trim(),
6471
"X-archive-meta-language": language.trim(),
6572
"X-archive-meta-mediatype": "texts",
6673
"X-archive-meta-licenseurl":
6774
"https://creativecommons.org/publicdomain/mark/1.0/",
68-
"X-archive-meta-publisher": publisher.trim(),
75+
"X-archive-meta-publisher": validEnglishPublisher.trim(),
6976
"X-archive-meta-rights": accessViewStatus.trim(),
7077
"X-archive-meta-Google-id": id,
7178
"X-archive-meta-Identifier": `bub_gb_${id}`,

components/Books.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class Books extends React.Component {
1818
show: true,
1919
loader: false,
2020
isDuplicate: false,
21+
isEnglish: true,
2122
IATitle: "",
2223
IAIdentifier: "",
2324
inputDisabled: false,
@@ -34,6 +35,7 @@ class Books extends React.Component {
3435
option: event.target.value,
3536
bookid: "",
3637
isDuplicate: false,
38+
isEnglish: true,
3739
IATitle: "",
3840
IAIdentifier: "",
3941
inputDisabled: false,
@@ -95,6 +97,7 @@ class Books extends React.Component {
9597
onResetButtonClicked = () => {
9698
this.setState({
9799
isDuplicate: false,
100+
isEnglish: true,
98101
inputDisabled: false,
99102
IATitle: "",
100103
IAIdentifier: "",
@@ -202,9 +205,11 @@ class Books extends React.Component {
202205
this.setState({
203206
loader: true,
204207
isDuplicate: false,
208+
isEnglish: true,
205209
});
206210

207211
let url = "";
212+
var isValidEnglishChar = /^[a-zA-Z0-9!@#$%^&*()_+{}\[\]:;<>,.?~\\/-\s]+$/;
208213
switch (this.state.option) {
209214
case "gb":
210215
url = `${host}/check?bookid=${this.state.bookid}&option=${
@@ -223,6 +228,12 @@ class Books extends React.Component {
223228
IATitle: response.titleInIA,
224229
inputDisabled: true,
225230
});
231+
} else if (!isValidEnglishChar.test(response.IAIdentifier)) {
232+
this.setState({
233+
isEnglish: false,
234+
IATitle: response.IAIdentifier,
235+
inputDisabled: true,
236+
});
226237
} else {
227238
if (response.error) {
228239
Swal("Error!", response.message, "error");
@@ -314,6 +325,12 @@ class Books extends React.Component {
314325
IATitle: response.titleInIA,
315326
inputDisabled: true,
316327
});
328+
} else if (!isValidEnglishChar.test(response.IAIdentifier)) {
329+
this.setState({
330+
isEnglish: false,
331+
IATitle: response.IAIdentifier,
332+
inputDisabled: true,
333+
});
317334
} else {
318335
if (response.error) Swal("Error!", response.message, "error");
319336
else Swal("Voila!", response.message, "success");
@@ -344,6 +361,12 @@ class Books extends React.Component {
344361
IATitle: response.titleInIA,
345362
inputDisabled: true,
346363
});
364+
} else if (!isValidEnglishChar.test(response.IAIdentifier)) {
365+
this.setState({
366+
isEnglish: false,
367+
IATitle: response.IAIdentifier,
368+
inputDisabled: true,
369+
});
347370
} else {
348371
if (response.error) Swal("Error!", response.message, "error");
349372
else Swal("Voila!", response.message, "success");
@@ -411,6 +434,38 @@ class Books extends React.Component {
411434
</div>
412435
</div>
413436
) : null}
437+
{!this.state.isEnglish ? (
438+
<div
439+
class="cdx-message cdx-message--block cdx-message--warning"
440+
aria-live="polite"
441+
style={{ marginTop: "20px", display: "inline-block" }}
442+
>
443+
<span class="cdx-message__icon"></span>
444+
<div class="cdx-message__content">
445+
The file you wish to upload has a non-english identifier -
446+
{this.state.IATitle} which may cause problems when uploading
447+
to internet archive. Please enter a valid English identifier
448+
to proceed.
449+
<div className="cdx-text-input input-group">
450+
<span className="input-group-addon helper" id="bid">
451+
https://archive.org/details/
452+
</span>
453+
<input
454+
className="cdx-text-input__input"
455+
type="text"
456+
id="IAIdentifier"
457+
name="IAIdentifier"
458+
onChange={(event) =>
459+
this.setState({ IAIdentifier: event.target.value })
460+
}
461+
required
462+
placeholder="Enter a valid English Identifier"
463+
/>
464+
</div>
465+
</div>
466+
</div>
467+
) : null}
468+
414469
{session && (
415470
<div>
416471
<div style={{ marginTop: 20, marginRight: 20 }}>

0 commit comments

Comments
 (0)