Skip to content

Commit

Permalink
修复向左向右播放
Browse files Browse the repository at this point in the history
添加节目单功能,按菜单键即可呼出
  • Loading branch information
Zcodeoooo committed Jan 13, 2024
1 parent e17bcae commit 3be2e3d
Show file tree
Hide file tree
Showing 17 changed files with 857 additions and 368 deletions.
10 changes: 7 additions & 3 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ plugins {
android {
namespace 'com.eanyatonic.cctvViewer'
compileSdk 33

sourceSets {
main {
assets.srcDirs = ['src/main/assets', 'src\\main\\assets']
}
}
defaultConfig {
applicationId "com.eanyatonic.cctvViewer"
minSdk 21
Expand All @@ -31,8 +35,8 @@ android {
dependencies {

implementation 'androidx.leanback:leanback:1.0.0'
implementation 'com.github.bumptech.glide:glide:4.11.0'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.github.bumptech.glide:glide:4.16.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
api 'com.tencent.tbs:tbssdk:44286'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
}
6 changes: 5 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingLeanbackLauncher">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.software.leanback"
android:required="false" />

<application
android:hardwareAccelerated ="true"
Expand Down
93 changes: 93 additions & 0 deletions app/src/main/assets/js/backwardScript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
function simulate(element, eventName) {
var options = extend(defaultOptions, arguments[2] || {});
var oEvent, eventType = null;

for (var name in eventMatchers) {
if (eventMatchers[name].test(eventName)) {
eventType = name;
break;
}
}

if (!eventType) throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported');

if (document.createEvent) {
oEvent = document.createEvent(eventType);
if (eventType == 'HTMLEvents') {
oEvent.initEvent(eventName, options.bubbles, options.cancelable);
} else {
oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element);
}
element.dispatchEvent(oEvent);
} else {
options.clientX = options.pointerX;
options.clientY = options.pointerY;
var evt = document.createEventObject();
oEvent = extend(evt, options);
element.fireEvent('on' + eventName, oEvent);
}
return element;
}

function extend(destination, source) {
for (var property in source) destination[property] = source[property];
return destination;
}

var eventMatchers = {
'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
'MouseEvents': /^(?:click|dblclick|mouse(?:down|up|over|move|out))$/
}
var defaultOptions = {
pointerX: 0,
pointerY: 0,
button: 0,
ctrlKey: false,
altKey: false,
shiftKey: false,
metaKey: false,
bubbles: true,
cancelable: true
}

function triggerMouseEvent (node, eventType) {
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent (eventType, true, true);
node.dispatchEvent (clickEvent);
};

function mouseDragStart(node) {
console.log("Starting drag...");
console.log(node.offsetTop);
console.log(node.offsetLeft);
triggerMouseEvent(node, "mousedown")
}

function mouseDragEnd(node){
console.log("Ending drag...");
const rect = node.getBoundingClientRect();
document.querySelector("#epg_right_shift_player").click()
simulate(node, "mousemove" , {pointerX: rect.x-3 , pointerY: node.offsetTop})
simulate(node, "mouseup" , {pointerX: rect.x-3, pointerY: node.offsetTop})
}
function sleep1(time) {
time*=1000
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, time);
});
}

async function playback(){
if(document.querySelector("#play_or_pause_play_player").style.display==="none"){
document.querySelector("#play_or_plause_player").click()
}
await sleep1(3)
const targetElement = document.querySelector("#timeshift_pointer_player")
mouseDragStart(targetElement);
mouseDragEnd(targetElement);
};

playback()
console.log('执行了回退');
37 changes: 37 additions & 0 deletions app/src/main/assets/js/cctvOpen.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// 定义休眠函数
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

// 页面加载完成后执行 JavaScript 脚本
let interval = setInterval(async function executeScript() {
console.log('页面加载完成!');

// 休眠 1000 毫秒(1秒)
await sleep(1000);

// 休眠 50 毫秒
await sleep(50);

console.log('点击分辨率按钮');
var elem = document.querySelector('#resolution_item_720_player');
elem.click();

// 休眠 50 毫秒
await sleep(50);

console.log('设置音量并点击音量按钮');
var btn = document.querySelector('#player_sound_btn_player');
btn.setAttribute('volume', 100);
btn.click();
btn.click();
btn.click();

// 休眠 50 毫秒
await sleep(50);

console.log('点击全屏按钮');
var fullscreenBtn = document.querySelector('#player_pagefullscreen_yes_player');
fullscreenBtn.click();
clearInterval(interval);
}, 3000);
93 changes: 93 additions & 0 deletions app/src/main/assets/js/forwardScript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
function simulate(element, eventName) {
var options = extend(defaultOptions, arguments[2] || {});
var oEvent, eventType = null;

for (var name in eventMatchers) {
if (eventMatchers[name].test(eventName)) {
eventType = name;
break;
}
}

if (!eventType) throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported');

if (document.createEvent) {
oEvent = document.createEvent(eventType);
if (eventType == 'HTMLEvents') {
oEvent.initEvent(eventName, options.bubbles, options.cancelable);
} else {
oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element);
}
element.dispatchEvent(oEvent);
} else {
options.clientX = options.pointerX;
options.clientY = options.pointerY;
var evt = document.createEventObject();
oEvent = extend(evt, options);
element.fireEvent('on' + eventName, oEvent);
}
return element;
}

function extend(destination, source) {
for (var property in source) destination[property] = source[property];
return destination;
}

var eventMatchers = {
'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
'MouseEvents': /^(?:click|dblclick|mouse(?:down|up|over|move|out))$/
}
var defaultOptions = {
pointerX: 0,
pointerY: 0,
button: 0,
ctrlKey: false,
altKey: false,
shiftKey: false,
metaKey: false,
bubbles: true,
cancelable: true
}

function triggerMouseEvent (node, eventType) {
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent (eventType, true, true);
node.dispatchEvent (clickEvent);
};

function mouseDragStart(node) {
console.log("Starting drag...");
console.log(node.offsetTop);
console.log(node.offsetLeft);
triggerMouseEvent(node, "mousedown")
}

function mouseDragEnd(node){
console.log("Ending drag...");
const rect = node.getBoundingClientRect();
document.querySelector("#epg_right_shift_player").click()
simulate(node, "mousemove" , {pointerX: rect.x+20 , pointerY: node.offsetTop})
simulate(node, "mouseup" , {pointerX: rect.x+20, pointerY: node.offsetTop})
}
function sleep1(time) {
time*=1000
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, time);
});
}

async function playback(){
if(document.querySelector("#play_or_pause_play_player").style.display==="none"){
document.querySelector("#play_or_plause_player").click()
}
await sleep1(3)
const targetElement = document.querySelector("#timeshift_pointer_player")
mouseDragStart(targetElement);
mouseDragEnd(targetElement);
};

playback()
console.log('执行了前进');
39 changes: 39 additions & 0 deletions app/src/main/assets/js/getEpgScript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
// 定义休眠函数
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

// 页面加载完成后执行 JavaScript 脚本
let interval = setInterval(async function executeScript() {
console.log('页面加载完成!');

// 休眠 1000 毫秒(1秒)
await sleep(1000);

// 休眠 50 毫秒
await sleep(50);

console.log('点击分辨率按钮');
var elem = document.querySelector('#resolution_item_720_player');
elem.click();

// 休眠 50 毫秒
await sleep(50);

console.log('设置音量并点击音量按钮');
var btn = document.querySelector('#player_sound_btn_player');
btn.setAttribute('volume', 100);
btn.click();
btn.click();
btn.click();

// 休眠 50 毫秒
await sleep(50);

console.log('点击全屏按钮');
var fullscreenBtn = document.querySelector('#player_pagefullscreen_yes_player');
fullscreenBtn.click();
clearInterval(interval);
}, 3000);
}
13 changes: 0 additions & 13 deletions app/src/main/java/com/eanyatonic/cctvViewer/Channel.java

This file was deleted.

Loading

0 comments on commit 3be2e3d

Please sign in to comment.