Skip to content

Commit

Permalink
feat(core): 新增超星直播回放视频脚本
Browse files Browse the repository at this point in the history
  • Loading branch information
enncy committed May 31, 2022
1 parent 7f7c692 commit 3788a6f
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 7 deletions.
61 changes: 61 additions & 0 deletions packages/core/src/components/cx/LiveSettingPanel.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { defineComponent } from 'vue';
import { useContext, useSettings } from '../../store';

export const LiveSettingPanel = defineComponent({
setup () {
const settings = useSettings().cx.live;
const ctx = useContext();

return () => (
<div class="ocs-setting-panel">
<div class="ocs-setting-items">
<label>视频倍速 </label>
<div>
<input
type="range"
value={settings.playbackRate}
min="1"
max="16"
step="1"
onInput={(e: any) => {
settings.playbackRate = e.target.valueAsNumber;
if (ctx.common.currentMedia) {
ctx.common.currentMedia.playbackRate = e.target.valueAsNumber;
}
}}
></input>
<span style={{ color: settings.playbackRate > 2 ? 'red' : '' }}>{settings.playbackRate}x</span>
</div>

<label>音量调节</label>
<div>
<input
type="range"
min="0"
max="1"
step="0.05"
value={settings.volume}
onInput={(e: any) => {
settings.volume = e.target.valueAsNumber;
if (ctx.common.currentMedia) ctx.common.currentMedia.volume = e.target.valueAsNumber;
}}
/>
<span> {Math.round(settings.volume * 100)}% </span>
</div>

<label>显示回放进度</label>
<div>
<input
class="input-switch"
type="checkbox"
checked={settings.showProgress}
onChange={(e: any) => {
settings.showProgress = e.target.checked;
}}
/>
</div>
</div>
</div>
);
}
});
47 changes: 40 additions & 7 deletions packages/core/src/script/cx/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ import { StudySettingPanel } from '../../components/cx/StudySettingPanel';
import { WorkSettingPanel } from '../../components/cx/WorkSettingPanel';
import { message } from '../../components/utils';
import { defineScript } from '../../core/define.script';
import { sleep } from '../../core/utils';
import { domSearch, sleep, useUnsafeWindow } from '../../core/utils';
import { logger } from '../../logger';
import { initStore, useSettings } from '../../store';
import { initStore, setStore, useSettings } from '../../store';
import { LiveSettingPanel } from '../../components/cx/LiveSettingPanel';

import { rateHack } from './rate.hack';
import { mapRecognize, ocrRecognize } from './recognize';
Expand All @@ -29,12 +30,11 @@ export const CXScript = defineScript({
routes: [
{
name: 'OCS注入脚本',
url: updateURLs.concat('**/mycourse/studentstudy**'),
url: updateURLs.concat(['**/mycourse/studentstudy**']),
priority: 999,
onstart() {
// @ts-ignore
// eslint-disable-next-line no-undef
unsafeWindow.top.OCS = OCS;
useUnsafeWindow().top.OCS = window.OCS;
}
},
{
Expand Down Expand Up @@ -113,8 +113,7 @@ export const CXScript = defineScript({
async onload() {
// 注入OCS
// @ts-ignore
// eslint-disable-next-line no-undef
initStore(unsafeWindow?.top.OCS.getStore());
initStore(useUnsafeWindow()?.top.OCS.getStore());
logger('info', '开始学习');
await sleep(5000);
await study();
Expand Down Expand Up @@ -227,6 +226,29 @@ export const CXScript = defineScript({
img.after(document.createTextNode(img.src));
});
}
},
{
name: '直播回放脚本',
url: '**zhibo.chaoxing.com**',
onload() {
const video = document.querySelector('video');
if (video) {
// eslint-disable-next-line no-undef
GM_addValueChangeListener('store', (_, __, newValue) => {
setStore(newValue);
const settings = useSettings().cx.live;
video.volume = settings.volume;
video.playbackRate = settings.playbackRate;
const { bar } = domSearch({ bar: '.vjs-control-bar' });
if (bar) {
bar.style.opacity = settings.showProgress ? '1' : '0';
}
});
}

console.info = () => { };
console.log = () => { };
}
}
],
panels: [
Expand All @@ -241,6 +263,17 @@ export const CXScript = defineScript({

el: () => createNote('提示您:', '请点击任意的课程进入。')
},
{
name: '直播小助手',
url: '**zhibo.chaoxing.com**',
el: () => createNote('提示您:', '进入直播设置调整倍速及音量'),
children: [
{
name: '直播设置',
el: () => LiveSettingPanel
}
]
},
{
name: '学习助手',
url: '**/mycourse/**pageHeader=1**',
Expand Down
14 changes: 14 additions & 0 deletions packages/core/src/scripts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,15 @@ export interface CXSetting {
},
// 历史遗留字段
video: undefined;
/** 直播回放课 */
live: {
/** 播放速度 */
playbackRate: number
/** 显示视频进度 */
showProgress: boolean
/** 音量 */
volume: number
},
work: CommonWorkSetting
exam: CommonWorkSetting
}
Expand Down Expand Up @@ -172,6 +181,11 @@ export const defaultOCSSetting: ScriptSettings = {
}
},
video: undefined,
live: {
playbackRate: 1,
showProgress: true,
volume: 1
},
work: defaultWorkSetting,
exam: defaultWorkSetting
},
Expand Down

0 comments on commit 3788a6f

Please sign in to comment.