Skip to content

Commit

Permalink
Fix for multiple requests on same pdf + errorcodes
Browse files Browse the repository at this point in the history
  • Loading branch information
Aaronfishe committed Jul 26, 2023
1 parent 18b7caf commit 4add1a6
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 17 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
cache
nottest.ts
.old
.env
.env
test.html
11 changes: 6 additions & 5 deletions index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import * as pdf_handler from "./pdf_handler.ts"
import * as pdf_to_jpg from "./pdf_to_jpg.ts"

export async function pdfImageConverter(pdfLocation: string, pageToConvert: string){
const antiOverlapNum = Math.random()
const pdfHash = hash.createHash(pdfLocation)

const value_firstToNum = keyword.firstToNum(pageToConvert)
Expand All @@ -21,22 +22,22 @@ export async function pdfImageConverter(pdfLocation: string, pageToConvert: stri
return value_checkCache
}

await pdf_handler.fetchPDF(pdfLocation, pdfHash)
await pdf_handler.fetchPDF(pdfLocation, antiOverlapNum, pdfHash)

const pdfLength = await pdf_handler.getPDFLength(pdfHash)
const pdfLength = await pdf_handler.getPDFLength(pdfHash, antiOverlapNum)

const value_keywordToPageNum = keyword.keywordToPageNum(pageToConvert, pdfLength)
if (value_keywordToPageNum !== false) {
pageNum = value_keywordToPageNum
}

if (pageNum > 0 && pageNum <= pdfLength){
await pdf_to_jpg.pdfToJPG(String(pageNum), pdfHash, pageToConvert, String(pdfLength))
await pdf_handler.removeTemp(pdfHash)
await pdf_to_jpg.pdfToJPG(String(pageNum), pdfHash, antiOverlapNum, pageToConvert, String(pdfLength))
await pdf_handler.removeTemp(pdfHash, antiOverlapNum)
}

else {
await pdf_handler.removeTemp(pdfHash)
await pdf_handler.removeTemp(pdfHash, antiOverlapNum)
throw new Error("Page outside of valid range")
}

Expand Down
16 changes: 8 additions & 8 deletions pdf_handler.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
export async function fetchPDF(pdfLocation:string, hashName:string) {
export async function fetchPDF(pdfLocation:string, antiOverlapNum:number, hashName:string) {
const buffer = await fetch(pdfLocation).then((response) => response.arrayBuffer())
const uint8arr = new Uint8Array(buffer)
await Deno.writeFile(`${hashName}.pdf`, uint8arr)
await Deno.writeFile(`${hashName+antiOverlapNum}.pdf`, uint8arr)
}

export async function removeTemp(hashName:string) {
await Deno.remove(`${hashName}.pdf`)
export async function removeTemp(hashName:string, antiOverlapNum:number) {
await Deno.remove(`${hashName+antiOverlapNum}.pdf`)
}

export async function getPDFLength(hashName:string, pageInfoOffset = 16) {
export async function getPDFLength(hashName:string, antiOverlapNum:number, pageInfoOffset = 16) {
const getPDFInfo = new Deno.Command("pdfinfo", {
args: [
`${hashName}.pdf`
`${hashName+antiOverlapNum}.pdf`
]
})
const{stdout, stderr} = await getPDFInfo.output()
if (stderr[0] != undefined){
if ((new TextDecoder().decode(stderr)).search("May not be a PDF file")) {
await(removeTemp(hashName))
await(removeTemp(hashName, antiOverlapNum))
throw new Error("Error reading PDF info, PDF file may not be present at this URL")
}
else {
await(removeTemp(hashName))
await(removeTemp(hashName, antiOverlapNum))
throw new Error("Error reading PDF info")
}
}
Expand Down
4 changes: 2 additions & 2 deletions pdf_to_jpg.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
export async function pdfToJPG(pageNum:string, fileName:string, pageToConvert:string, totalPages:string){
export async function pdfToJPG(pageNum:string, fileName:string, antiOverlapNum:number, pageToConvert:string, totalPages:string){
const cacheName = `./cache/${fileName}`
const convertCommand = new Deno.Command("pdftoppm", {
args: [
'-jpeg', `${fileName}.pdf`, '-f', pageNum,'-l', pageNum, cacheName
'-jpeg', `${fileName+antiOverlapNum}.pdf`, '-f', pageNum,'-l', pageNum, cacheName
]
})
await convertCommand.output()
Expand Down
4 changes: 3 additions & 1 deletion server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,13 @@ app.use(async (context, next) => {
try {
await next();
} catch (error) {
context.response.type = "json";
context.response.type = "json"
context.response.status = 500

let message = String(error)

if (error instanceof ZodError) {
context.response.status = 400
const jsonBody = JSON.parse(error.message)
message = jsonBody?.[0]?.message ?? ''

Expand Down

0 comments on commit 4add1a6

Please sign in to comment.