Update file cfjxjc.js
This commit is contained in:
parent
08e070508b
commit
f5e9d4141f
180
cfjxjc.js
Normal file
180
cfjxjc.js
Normal file
@ -0,0 +1,180 @@
|
||||
// ==UserScript==
|
||||
// @name Auto Progress Learning with UI Notifications
|
||||
// @namespace http://tampermonkey.net/
|
||||
// @version 1.1
|
||||
// @description Automatically progress through courses, update UI, and handle course completion with notifications.
|
||||
// @match https://nmg.chinamde.cn/p_xuexi.html?id=*
|
||||
// @grant none
|
||||
// ==/UserScript==
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
let classhourList = [];
|
||||
let currentCourseIndex = 0;
|
||||
let saveInterval;
|
||||
|
||||
// Function to get cookie by name
|
||||
function getCookie(name) {
|
||||
const value = `; ${document.cookie}`;
|
||||
const parts = value.split(`; ${name}=`);
|
||||
if (parts.length === 2) return parts.pop().split(';').shift();
|
||||
}
|
||||
|
||||
// Extract useropenid from cookies
|
||||
const useropenid = getCookie('useropenid');
|
||||
|
||||
// Extract id from URL
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const courseId = urlParams.get('id');
|
||||
|
||||
// Display progress window
|
||||
const progressDiv = document.createElement('div');
|
||||
progressDiv.style.position = 'fixed';
|
||||
progressDiv.style.left = '20px';
|
||||
progressDiv.style.top = '50%';
|
||||
progressDiv.style.transform = 'translateY(-50%)';
|
||||
progressDiv.style.backgroundColor = 'white';
|
||||
progressDiv.style.border = '1px solid black';
|
||||
progressDiv.style.padding = '10px';
|
||||
progressDiv.style.zIndex = '1000';
|
||||
document.body.appendChild(progressDiv);
|
||||
|
||||
function updateProgressWindow(courseName, progress) {
|
||||
progressDiv.innerHTML = `当前课程: ${courseName}<br>进度: ${progress}`;
|
||||
}
|
||||
|
||||
// Function to play the next video or notify if all videos have been played
|
||||
function playNextVideo(currentDataId) {
|
||||
var nextDataId = parseInt(currentDataId, 10);
|
||||
var nextVideoP = document.querySelector(`p[data-id="${nextDataId}"]`);
|
||||
|
||||
// Check if there is a next video to play
|
||||
if (nextVideoP) {
|
||||
playVideo(nextDataId, 0);
|
||||
addNotification(`Playing video with data-id: ${nextDataId}`);
|
||||
} else {
|
||||
addNotification('学习完成');
|
||||
}
|
||||
}
|
||||
|
||||
// Function to add notifications to the UI
|
||||
function addNotification(message) {
|
||||
// Implement this function based on how you want to show notifications
|
||||
console.log(message); // Placeholder for demonstration
|
||||
}
|
||||
|
||||
// Function to send POST request to getChapterAndCoursehoursById
|
||||
function getChapterAndCoursehoursById() {
|
||||
const formData = new FormData();
|
||||
formData.append('id', courseId);
|
||||
formData.append('checked', '1');
|
||||
formData.append('Authentication', useropenid);
|
||||
formData.append('remoteType', 'pc');
|
||||
|
||||
fetch('https://nmg.api.chinamde.cn/api.php?s=web/course/getChapterAndCoursehoursById', {
|
||||
method: 'POST',
|
||||
body: formData
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
classhourList = data.data.classhourList;
|
||||
if (classhourList && classhourList.length > 0) {
|
||||
saveLearningRecord();
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error:', error);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// Function to handle the next course learning
|
||||
function handleNextCourseLearning() {
|
||||
if (currentCourseIndex < classhourList.length) {
|
||||
const nextCourse = classhourList[currentCourseIndex];
|
||||
|
||||
saveLearningRecord(); // Start POST requests for the next course
|
||||
} else {
|
||||
addNotification('All courses have been completed.');
|
||||
}
|
||||
}
|
||||
|
||||
// Function to send POST request to saveLeaningRecord every 20 seconds
|
||||
function saveLearningRecord() {
|
||||
if (currentCourseIndex >= classhourList.length) {
|
||||
addNotification("All courses in classhourList have been completed.");
|
||||
return;
|
||||
}
|
||||
|
||||
const currentCourse = classhourList[currentCourseIndex];
|
||||
|
||||
// Check if course is already completed based on percent
|
||||
if (parseFloat(currentCourse.percent) >= 100) {
|
||||
console.log(`Course already completed: ${currentCourse.title}`);
|
||||
currentCourseIndex++;
|
||||
handleNextCourseLearning(); // Handle learning for the next course
|
||||
return;
|
||||
}
|
||||
playNextVideo(currentCourse.id); // Play the next video
|
||||
let second = Math.round(parseFloat(currentCourse.percent) / 100 * currentCourse.hourCount);
|
||||
const interval = 20; // Duration to wait between requests (20 seconds)
|
||||
|
||||
|
||||
function sendRequest() {
|
||||
if (second > currentCourse.hourCount) {
|
||||
console.log(`Completed course: ${currentCourse.title}`);
|
||||
currentCourseIndex++;
|
||||
if (currentCourseIndex < classhourList.length) {
|
||||
const nextCourse = classhourList[currentCourseIndex];
|
||||
playNextVideo(nextCourse.id); // Play the next video
|
||||
saveLearningRecord(); // Start POST requests for the next course
|
||||
} else {
|
||||
addNotification('All courses have been completed.');
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append('courseId', courseId);
|
||||
formData.append('hourId', currentCourse.id);
|
||||
formData.append('second', Math.min(second, currentCourse.hourCount));
|
||||
formData.append('duration', currentCourse.hourCount);
|
||||
formData.append('Authentication', useropenid);
|
||||
formData.append('remoteType', 'pc');
|
||||
|
||||
fetch('https://nmg.api.chinamde.cn/api.php?s=web/course/saveLeaningRecord', {
|
||||
method: 'POST',
|
||||
body: formData
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.errorMsg === "请求成功,课件已完结") {
|
||||
console.log(`Course completed: ${currentCourse.title}`);
|
||||
currentCourseIndex++;
|
||||
if (currentCourseIndex < classhourList.length) {
|
||||
const nextCourse = classhourList[currentCourseIndex];
|
||||
playNextVideo(nextCourse.id); // Play the next video
|
||||
saveLearningRecord(); // Start POST requests for the next course
|
||||
} else {
|
||||
addNotification('All courses have been completed.');
|
||||
}
|
||||
} else {
|
||||
console.log(`Saved learning record for course: ${currentCourse.title}, second: ${second}`);
|
||||
updateProgressWindow(currentCourse.title, `${second}/${currentCourse.hourCount}`);
|
||||
second += interval; // Increment by 20 seconds
|
||||
setTimeout(sendRequest, interval * 1000); // Schedule the next request
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error:', error);
|
||||
setTimeout(sendRequest, interval * 1000); // Schedule the next request in case of error
|
||||
});
|
||||
}
|
||||
|
||||
sendRequest(); // Start the first request
|
||||
}
|
||||
|
||||
// Start the process immediately on page load for testing purposes
|
||||
getChapterAndCoursehoursById();
|
||||
})();
|
Loading…
Reference in New Issue
Block a user