您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
需要python。若用mpv播放,可更新服务器观看进度。
当前为
// ==UserScript== // @name embyToLocalPlayer // @name:zh-CN embyToLocalPlayer // @name:en embyToLocalPlayer // @namespace https://github.com/kjtsune/embyToLocalPlayer // @version 1.0.1 // @description 需要python。若用mpv播放,可更新服务器观看进度。 // @description:zh-CN 需要python。若用mpv播放,可更新服务器观看进度。 // @description:en Require python. If you use mpv, will update watch history to emby server. // @author Kjtsune // @match http://192.168.2.22:8096/web/index.html // @icon https://www.google.com/s2/favicons?sz=64&domain=emby.media // @grant unsafeWindow // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @run-at document-start // @license MIT // ==/UserScript== "use strict"; function switchLocalStorage(key, defaultValue = 'true', trueValue = 'true', falseValue = 'false') { if (key in localStorage) { let value = (localStorage.getItem(key) === trueValue) ? falseValue : trueValue; localStorage.setItem(key, value); } else { localStorage.setItem(key, defaultValue) } console.log('switchLocalStorage ', key, ' to ', localStorage.getItem(key)) } function setModeSwitchMenu(storageKey, menuStart = '', menuEnd = '', defaultValue = '关闭', trueValue = '开启', falseValue = '关闭') { let switchNameMap = { 'true': trueValue, 'false': falseValue, null: defaultValue }; let menuId = GM_registerMenuCommand(menuStart + switchNameMap[localStorage.getItem(storageKey)] + menuEnd, clickMenu); function clickMenu() { GM_unregisterMenuCommand(menuId); switchLocalStorage(storageKey) menuId = GM_registerMenuCommand(menuStart + switchNameMap[localStorage.getItem(storageKey)] + menuEnd, clickMenu); } } const originFetch = fetch; unsafeWindow.fetch = (...arg) => { if (arg[0].indexOf('/PlaybackInfo?UserId') > -1 && arg[0].indexOf('IsPlayback=true') > -1 && localStorage.getItem('webPlayerEnable') != 'true') { embyToLocalPlayer(arg[0]); return '' } else if (arg[0].indexOf('/dialog.template.html') != -1) { return } else { return originFetch(...arg); } } async function getItemInfo(itemInfoUrl) { let response = await fetch(itemInfoUrl); if (response.ok) { return await response.json(); } else { throw new Error(response.statusText); } } async function embyToLocalPlayer(playbackUrl) { let data = { playbackData: await getItemInfo(playbackUrl), playbackUrl: playbackUrl, mountDiskEnable: localStorage.getItem('mountDiskEnable'), }; fetch('http://127.0.0.1:58000/embyToLocalPlayer/', { method: 'POST', body: JSON.stringify(data) }) } setModeSwitchMenu('webPlayerEnable', '网页播放模式已经') setModeSwitchMenu('mountDiskEnable', '挂载硬盘模式已经')