From f5e9d4141f3502f665b6934bd03d037047b151c5 Mon Sep 17 00:00:00 2001 From: gameloader <ggwqqo@163.com> Date: Mon, 12 Feb 2024 04:33:09 +0000 Subject: [PATCH] Update file cfjxjc.js --- cfjxjc.js | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 cfjxjc.js diff --git a/cfjxjc.js b/cfjxjc.js new file mode 100644 index 0000000..15057a4 --- /dev/null +++ b/cfjxjc.js @@ -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(); +})();