init
This commit is contained in:
65
src/optifine-download-links.zomo.ts
Normal file
65
src/optifine-download-links.zomo.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
// ==UserScript==
|
||||
// @name OptiFine Download Links
|
||||
// @namespace zomo
|
||||
// @match https://optifine.net/*
|
||||
// @grant none
|
||||
// @version 1.0
|
||||
// @author zomo
|
||||
// @description automatically grab optifine links through the ads
|
||||
// ==/UserScript==
|
||||
|
||||
const onhover = false // when to load link, false will load immediately
|
||||
|
||||
async function getDownload(href: string): Promise<string | null> {
|
||||
let resp = await fetch(href)
|
||||
let text = await resp.text()
|
||||
let match = text.match(/<a href=['"](downloadx.*?)['"]/i)
|
||||
if (match) {
|
||||
return match[1]
|
||||
}
|
||||
return null
|
||||
}
|
||||
function attachFetchDownloadLink(a: HTMLLinkElement, depth = 0) {
|
||||
function run() {
|
||||
a.innerText = 'Loading'
|
||||
let url = new URL(a.href)
|
||||
if (url.pathname === '/adloadx') {
|
||||
getDownload(a.href).then(downloadUrl => {
|
||||
if (downloadUrl) {
|
||||
a.href = downloadUrl
|
||||
a.innerText = 'Download'
|
||||
} else {
|
||||
a.innerText = 'Failed'
|
||||
if (onhover) attachFetchDownloadLink(a, ++depth)
|
||||
else
|
||||
setTimeout(
|
||||
() => attachFetchDownloadLink(a, ++depth),
|
||||
1000
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
if (depth > 5) return
|
||||
|
||||
if (onhover) {
|
||||
a.addEventListener('mouseover', run, { once: true })
|
||||
} else {
|
||||
run()
|
||||
}
|
||||
}
|
||||
addEventListener('load', () => {
|
||||
document.querySelectorAll<HTMLLinkElement>('a').forEach(a => {
|
||||
let href = new URL(a.href)
|
||||
if (href.hostname === 'adfoc.us') {
|
||||
let params = href.searchParams
|
||||
if (params.has('url')) {
|
||||
let url = params.get('url')?.replace('http://', 'https://')
|
||||
if (url) {
|
||||
a.href = url
|
||||
attachFetchDownloadLink(a)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user