Skip to content

Commit 82e083a

Browse files
fix: allow multi-lingual books to be uploaded to internet archive
1 parent 96335bc commit 82e083a

File tree

2 files changed

+66
-3
lines changed

2 files changed

+66
-3
lines changed

bull/google-books-queue/consumer.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ 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";
47+
4048
const { accessViewStatus } = accessInfo;
4149
const bucketTitle = job.data.IAIdentifier;
4250
const IAuri = `http://s3.us.archive.org/${bucketTitle}/${bucketTitle}.pdf`;
@@ -59,13 +67,13 @@ GoogleBooksQueue.process((job, done) => {
5967
"X-Amz-Auto-Make-Bucket": "1",
6068
"X-Archive-Meta-Collection": "opensource",
6169
"X-Archive-Ignore-Preexisting-Bucket": 1,
62-
"X-archive-meta-title": title.trim(),
70+
"X-archive-meta-title": validEnglishTitle.trim(),
6371
"X-archive-meta-date": publishedDate.trim(),
6472
"X-archive-meta-language": language.trim(),
6573
"X-archive-meta-mediatype": "texts",
6674
"X-archive-meta-licenseurl":
6775
"https://creativecommons.org/publicdomain/mark/1.0/",
68-
"X-archive-meta-publisher": publisher.trim(),
76+
"X-archive-meta-publisher": validEnglishPublisher.trim(),
6977
"X-archive-meta-rights": accessViewStatus.trim(),
7078
"X-archive-meta-Google-id": id,
7179
"X-archive-meta-Identifier": `bub_gb_${id}`,

components/Books.js

Lines changed: 56 additions & 1 deletion
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");
@@ -242,7 +253,6 @@ class Books extends React.Component {
242253
`<li>Enter the captcha.</li>` +
243254
`<li>Enter the URL below (<i>https://books.googleusercontent.com/books/content?req=xxx</i>)</li>`,
244255
});
245-
246256
if (url && typeof url !== "object") {
247257
this.setState({
248258
loader: true,
@@ -314,6 +324,12 @@ class Books extends React.Component {
314324
IATitle: response.titleInIA,
315325
inputDisabled: true,
316326
});
327+
} else if (!isValidEnglishChar.test(response.IAIdentifier)) {
328+
this.setState({
329+
isEnglish: false,
330+
IATitle: response.IAIdentifier,
331+
inputDisabled: true,
332+
});
317333
} else {
318334
if (response.error) Swal("Error!", response.message, "error");
319335
else Swal("Voila!", response.message, "success");
@@ -344,6 +360,12 @@ class Books extends React.Component {
344360
IATitle: response.titleInIA,
345361
inputDisabled: true,
346362
});
363+
} else if (!isValidEnglishChar.test(response.IAIdentifier)) {
364+
this.setState({
365+
isEnglish: false,
366+
IATitle: response.IAIdentifier,
367+
inputDisabled: true,
368+
});
347369
} else {
348370
if (response.error) Swal("Error!", response.message, "error");
349371
else Swal("Voila!", response.message, "success");
@@ -411,6 +433,39 @@ class Books extends React.Component {
411433
</div>
412434
</div>
413435
) : null}
436+
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)