2017-05-27 18:41:10 +00:00
|
|
|
/**
|
|
|
|
* Created by Kylart on 27/05/2017.
|
|
|
|
*/
|
|
|
|
|
2017-10-31 01:07:18 +00:00
|
|
|
const {si, pantsu} = require('nyaapi')
|
2017-05-30 11:24:29 +00:00
|
|
|
const malScraper = require('mal-scraper')
|
2017-09-25 11:55:58 +00:00
|
|
|
const _ = require('lodash')
|
2017-08-04 09:16:05 +00:00
|
|
|
const {removeUnwanted} = require('./utils')
|
2017-05-27 18:41:10 +00:00
|
|
|
|
|
|
|
const sendRes = (object, res) => {
|
2017-07-24 08:45:00 +00:00
|
|
|
res.status(200).send(JSON.stringify(object))
|
2017-05-27 18:41:10 +00:00
|
|
|
}
|
|
|
|
|
2017-09-25 11:55:58 +00:00
|
|
|
const formatMagnets = (data, searchData, choice, res) => {
|
|
|
|
const magnets = []
|
|
|
|
const eps = []
|
2017-10-31 01:46:50 +00:00
|
|
|
const isPantsu = choice === 'pantsu'
|
2017-09-25 11:55:58 +00:00
|
|
|
|
|
|
|
data.forEach((elem) => {
|
2017-10-31 01:07:18 +00:00
|
|
|
elem.name = removeUnwanted(elem.name)
|
|
|
|
const ep = elem.name.split(' ').splice(-2, 1)[0]
|
2017-09-25 11:55:58 +00:00
|
|
|
eps.push(ep)
|
|
|
|
|
|
|
|
if (ep <= searchData.untilEp && ep >= searchData.fromEp) {
|
|
|
|
magnets.push({
|
2017-10-31 01:07:18 +00:00
|
|
|
name: elem.name,
|
|
|
|
link: isPantsu ? elem.magnet : elem.links.magnet
|
2017-09-25 11:55:58 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
sendRes({
|
|
|
|
minEp: _.min(eps),
|
|
|
|
maxEp: _.max(eps),
|
|
|
|
magnets
|
|
|
|
}, res)
|
|
|
|
}
|
|
|
|
|
2017-05-29 11:23:52 +00:00
|
|
|
const download = (req, res) => {
|
|
|
|
req.on('data', (chunk) => {
|
|
|
|
chunk = JSON.parse(chunk)
|
|
|
|
|
|
|
|
const choice = chunk.choice
|
|
|
|
|
2017-05-30 10:26:35 +00:00
|
|
|
console.log('[Nyaa] (Download): Received a download request. Choice is ' + choice)
|
|
|
|
|
2017-05-29 11:23:52 +00:00
|
|
|
const searchData = {
|
|
|
|
quality: chunk.quality,
|
|
|
|
name: chunk.name,
|
|
|
|
fansub: chunk.fansub,
|
|
|
|
fromEp: chunk.fromEp,
|
|
|
|
untilEp: chunk.untilEp
|
|
|
|
}
|
|
|
|
|
2017-05-30 10:26:35 +00:00
|
|
|
console.log(searchData)
|
|
|
|
|
2017-10-31 01:46:50 +00:00
|
|
|
const term = `[${searchData.fansub}] ${searchData.quality} ${searchData.name} ` + (choice === 'si' ? '-unofficial' : '')
|
2017-05-29 11:23:52 +00:00
|
|
|
|
2017-05-27 18:41:10 +00:00
|
|
|
if (choice === 'si') {
|
2017-10-31 01:07:18 +00:00
|
|
|
si.search(term).then((data) => {
|
2017-09-25 11:55:58 +00:00
|
|
|
formatMagnets(data, searchData, choice, res)
|
2017-05-29 11:23:52 +00:00
|
|
|
}).catch(/* istanbul ignore next */(err) => {
|
|
|
|
console.log('[Nyaa]: An error occurred...\n' + err)
|
2017-07-24 08:45:00 +00:00
|
|
|
res.status(204).send()
|
2017-05-29 11:23:52 +00:00
|
|
|
})
|
2017-05-27 18:41:10 +00:00
|
|
|
} else {
|
2017-10-31 01:07:18 +00:00
|
|
|
pantsu.search(term).then((data) => {
|
2017-09-25 11:55:58 +00:00
|
|
|
formatMagnets(data, searchData, choice, res)
|
2017-05-29 11:23:52 +00:00
|
|
|
}).catch(/* istanbul ignore next */(err) => {
|
2017-07-27 09:25:16 +00:00
|
|
|
console.log(err.message)
|
2017-07-24 08:45:00 +00:00
|
|
|
res.status(204).send()
|
2017-05-29 11:23:52 +00:00
|
|
|
})
|
2017-05-27 18:41:10 +00:00
|
|
|
}
|
2017-05-29 11:23:52 +00:00
|
|
|
})
|
2017-05-27 18:41:10 +00:00
|
|
|
}
|
|
|
|
|
2017-10-31 01:07:18 +00:00
|
|
|
const makeSearch = (data, res, isPantsu = false) => {
|
|
|
|
let counter = 0
|
|
|
|
const toReturn = []
|
|
|
|
|
|
|
|
for (let i = 0; i < 18; ++i) {
|
|
|
|
const realName = removeUnwanted(data[i].name)
|
|
|
|
const name = realName.split(' ').slice(1).join(' ')
|
|
|
|
const rawName = name.split(' ').slice(0, -3).join(' ')
|
|
|
|
const researchName = rawName.split(' ').join('').toLowerCase()
|
|
|
|
const ep = name.split(' ').splice(-2, 1)[0]
|
|
|
|
const link = !isPantsu ? data[i].links.magnet : data[i].magnet
|
|
|
|
|
|
|
|
malScraper.getInfoFromName(rawName)
|
|
|
|
.then((item) => {
|
|
|
|
item.rawName = rawName
|
|
|
|
item.researchName = researchName
|
|
|
|
item.magnetLink = link
|
|
|
|
item.ep = ep
|
|
|
|
|
|
|
|
toReturn[i] = item
|
|
|
|
|
|
|
|
++counter
|
|
|
|
if (counter === 18) {
|
|
|
|
console.log('[Nyaa] (Releases): Sending Latest releases.')
|
|
|
|
res.writeHead(200, {'Content-type': 'application/json'})
|
|
|
|
res.write(JSON.stringify(toReturn))
|
|
|
|
res.end()
|
|
|
|
}
|
|
|
|
}).catch(/* istanbul ignore next */(err) => {
|
|
|
|
console.log('[MalScraper] (Releases): An error occurred...\n' + err)
|
|
|
|
res.status(202).send()
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-07-24 08:45:00 +00:00
|
|
|
const getLatest = (query, res) => {
|
2017-05-27 18:41:10 +00:00
|
|
|
const fansub = query.fansub
|
2017-05-29 11:23:52 +00:00
|
|
|
const choice = query.choice
|
|
|
|
const quality = query.quality
|
2017-05-27 18:41:10 +00:00
|
|
|
|
|
|
|
if (choice === 'si') {
|
2017-10-31 01:07:18 +00:00
|
|
|
si.search(`[${fansub}] ${quality} -unofficial`, 18).then((data) => {
|
|
|
|
makeSearch(data, res)
|
2017-05-29 11:23:52 +00:00
|
|
|
}).catch(/* istanbul ignore next */(err) => {
|
2017-10-31 01:07:18 +00:00
|
|
|
console.log('[Nyaa] (Releases): An error occurred...\n', err)
|
2017-07-24 08:45:00 +00:00
|
|
|
res.status(204).send()
|
2017-05-29 11:23:52 +00:00
|
|
|
})
|
2017-10-31 01:46:50 +00:00
|
|
|
} else {
|
2017-10-31 01:07:18 +00:00
|
|
|
pantsu.search(`[${fansub}] ${quality}`, 18).then((data) => {
|
|
|
|
makeSearch(data, res, true)
|
2017-05-29 11:23:52 +00:00
|
|
|
}).catch(/* istanbul ignore next */(err) => {
|
2017-10-31 01:07:18 +00:00
|
|
|
console.log('[Nyaa] (Releases): An error occurred...\n', err)
|
2017-07-24 08:45:00 +00:00
|
|
|
res.status(204).send()
|
2017-05-29 11:23:52 +00:00
|
|
|
})
|
2017-05-27 18:41:10 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
download,
|
|
|
|
getLatest
|
|
|
|
}
|