musescore-downloader/src/scoreinfo.ts

63 lines
1.9 KiB
TypeScript
Raw Normal View History

2020-10-01 15:55:38 +00:00
/* eslint-disable @typescript-eslint/no-unsafe-return */
2020-05-18 22:44:45 +00:00
const IPNS_KEY = 'QmSdXtvzC8v8iTTZuj5cVmiugnzbR1QATYRcGix4bBsioP'
2020-11-14 22:44:25 +00:00
const RADIX = 20
2020-10-23 14:11:52 +00:00
export const scoreinfo = {
2020-05-18 22:44:45 +00:00
get id (this: typeof scoreinfo): number {
const el = document.querySelector("meta[property='al:ios:url']") as HTMLMetaElement
const m = el.content.match(/(\d+)$/) as RegExpMatchArray
return +m[1]
2020-05-18 22:44:45 +00:00
},
get title (this: typeof scoreinfo): string {
const el = document.querySelector("meta[property='og:title']") as HTMLMetaElement
return el.content
2020-05-18 22:44:45 +00:00
},
get pageCount (this: typeof scoreinfo): number {
return document.querySelectorAll('.gXB83').length
2020-05-18 22:44:45 +00:00
},
get baseUrl (this: typeof scoreinfo): string {
const el = document.querySelector("meta[property='og:image']") as HTMLMetaElement
const thumbnailUrl = el.content
2020-10-23 15:00:39 +00:00
2020-10-01 15:55:38 +00:00
const { origin, pathname } = new URL(thumbnailUrl)
2020-10-18 07:29:37 +00:00
// remove the last part
2020-10-01 15:55:38 +00:00
return origin + pathname.split('/').slice(0, -1).join('/') + '/'
2020-05-18 22:44:45 +00:00
},
get sheetImgType (): 'svg' | 'png' {
try {
const imgE = document.querySelector('img[src*=score_]') as HTMLImageElement
const { pathname } = new URL(imgE.src)
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const imgtype = pathname.match(/\.(\w+)$/)![1]
return imgtype as 'svg' | 'png'
} catch (_) {
// return null
return 'svg'
}
},
2020-11-24 07:06:46 +00:00
get idLastDigit (this: typeof scoreinfo): number {
return (+this.id) % RADIX
},
get fileName (this: typeof scoreinfo): string {
return this.title.replace(/[\s<>:{}"/\\|?*~.\0\cA-\cZ]+/g, '_')
},
get msczIpfsRef (this: typeof scoreinfo): string {
return `/ipns/${IPNS_KEY}/${this.idLastDigit}/${this.id}.mscz`
},
get msczCidUrl (this: typeof scoreinfo): string {
return `https://ipfs.infura.io:5001/api/v0/block/stat?arg=${this.msczIpfsRef}`
},
2020-05-18 22:44:45 +00:00
}
export default scoreinfo