Skip to content

Add KHInsider #3

@perguto

Description

@perguto

KHInsider could be added. I already wrote a tampermonkey script that does essentially that:

// ==UserScript==
// @name         khinsider volume, autoplay, preload
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        *.khinsider.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=khinsider.com
// @grant        none
// @noframes
// ==/UserScript==

let audio = document.querySelector('audio')
if(!audio){
	return
}

let album_title =document.querySelectorAll('#pageContent > h2')[0].innerText

let cover_url = document.querySelector('.albumImage > a').href

let info_text = document.querySelectorAll('#pageContent > p')[1].innerText
let infos = info_text.split('\n')
function read_info(key){
	let result = infos.find(s => s.startsWith(key))?.slice(key.length)??'-'
	return result
}

let publisher = read_info('Published by: ')
let developer = read_info('Developed by: ')
let artist = developer + '/' + publisher

let metadata = new MediaMetadata({
	artist: artist, 
	album: album_title,
	artwork: [{ src: cover_url }],
});
navigator.mediaSession.metadata = metadata
let default_timestep = 5

navigator.mediaSession.setActionHandler('seekforward',seek_forward)
function seek_forward(e){
	let timestep = e.seekOffset ?? default_timestep
	audio.currentTime += timestep
}

navigator.mediaSession.setActionHandler('seekbackward',seek_backward)
function seek_backward(e){
	let timestep = e.seekOffset ?? default_timestep
	audio.currentTime -= timestep
}

let script = eval(document.querySelector('#pageContent > script').innerHTML.slice(4,-1)) // khinsider script comes packed, stripping the unpacker script of surrounding  `eval(` and `)` using eval on the resulting script recovers the uncompressed script
let tracks = JSON.parse(script.substring(script.indexOf('tracks'),script.indexOf(',trackCount')).slice(7,-2)+']') // this script contains the array of track data in its source


function update(){
	let current_song_url = audio.src
	let current_song_url_without_protocol = current_song_url.slice(8)
	let current_track_index = tracks.findIndex(x => x.file == current_song_url_without_protocol)
	let current_track = tracks[current_track_index]
	let current_track_name = current_track.name
	metadata.title = current_track_name
}

update()
audio.addEventListener("loadeddata",update)

You can port that code to your extension if you want.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions