- // ==UserScript==
- // @author jvlflame
- // @name JAVLibrary - Highlight Owned Movies
- // @version 0.0.4
-
- // @include https://*javlibrary.com/*/
- // @include *://*/movie/*
- // @include *://*/cn*
- // @include *://*/tw*
- // @include *://*/ja*
- // @include *://*/en*
-
- // @description Highlight owned movies on JAVLibrary
-
- // @namespace https://greasyfork.org/users/63118
- // ==/UserScript==
-
- let styles = `
- .owned {
- background: cornflowerblue;
- color: black;
- }
- `;
- let styleSheet = document.createElement("style");
- styleSheet.type = "text/css";
- styleSheet.innerText = styles;
- document.head.appendChild(styleSheet);
-
- var buttonDiv = document.createElement("div");
- buttonDiv.innerHTML =
- '<button id="refresh-owned-btn" type="button">' +
- "Refresh Owned Movies</button>";
- buttonDiv.setAttribute("class", "refreshowned category");
- document.querySelector(".menul1").appendChild(buttonDiv);
-
- //--- Activate the newly added button.
- document
- .getElementById("refresh-owned-btn")
- .addEventListener("click", ButtonClickAction, false);
-
- function ButtonClickAction(zEvent) {
- // Write owned movie list to localstorage so we don't have to
- // fetch the list on every page
- aggregateMovieList();
- }
-
- function sleep(ms) {
- return new Promise((resolve) => setTimeout(resolve, ms));
- }
-
- function updateDOM() {
- //const moviesOnCurrentPage = [];
- const moviesOnCurrentPage = document.querySelectorAll(".video");
-
- // We can parse the list more easily as an array
- if (localStorage.getItem("ownedMovies")) {
- const ownedMovies = localStorage.getItem("ownedMovies").split(",");
- try {
- for (let i = 0; i < moviesOnCurrentPage.length; i++) {
- if (
- ownedMovies.includes(
- moviesOnCurrentPage[i].children[0].attributes[0].value.split(
- "?v="
- )[1]
- )
- ) {
- moviesOnCurrentPage[i].children[0].children[0].classList.add("owned");
- }
- }
- } catch (err) {
- console.log(err);
- }
- }
- }
-
- const movieList = [];
-
- function setMoviesToLocalStorage(ownedMovies) {
- const ownedMovieList = ownedMovies.join(",");
- ownedMovies.forEach((movie) => {
- movieList.push(movie);
- });
- localStorage.setItem("ownedMovies", ownedMovieList);
- }
-
- function getOwnedMovieCount() {
- const movieCount = fetch(
- `https://www.javlibrary.com/en/userowned.php?list&mode=&u=${getCookie(
- "userid"
- )}&page=0`,
- {
- headers: {
- accept:
- "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
- "accept-language": "en-US,en;q=0.9",
- "cache-control": "no-cache",
- pragma: "no-cache",
- "sec-fetch-dest": "empty",
- "sec-fetch-mode": "cors",
- "sec-fetch-site": "same-origin",
- "sec-gpc": "1",
- "upgrade-insecure-requests": "1",
- },
- referrer: `https://www.javlibrary.com/en/userowned.php?list&mode=&u=${getCookie(
- "userid"
- )}`,
- referrerPolicy: "strict-origin-when-cross-origin",
- body: null,
- method: "GET",
- mode: "cors",
- credentials: "include",
- }
- )
- .then((res) => res.text())
- .then((html) => {
- // Initialize the DOM parser
- var parser = new DOMParser();
-
- // Parse the text
- var doc = parser.parseFromString(html, "text/html");
-
- return doc.querySelector(".boxtitle").innerHTML.split(": ")[1];
- });
-
- return movieCount;
- }
-
- function getOwnedMoviesByPage(pageNum) {
- const data = fetch(
- `https://www.javlibrary.com/en/userowned.php?list&mode=&u=${getCookie(
- "userid"
- )}&page=${pageNum}`,
- {
- headers: {
- accept:
- "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
- "accept-language": "en-US,en;q=0.9",
- "cache-control": "no-cache",
- pragma: "no-cache",
- "sec-fetch-dest": "document",
- "sec-fetch-mode": "navigate",
- "sec-fetch-site": "same-origin",
- "sec-fetch-user": "?1",
- "sec-gpc": "1",
- "upgrade-insecure-requests": "1",
- cookie: `${document.cookie}`,
- },
- referrer: `https://www.javlibrary.com/en/userowned.php?list&mode=&u=${getCookie(
- "userid"
- )}`,
- referrerPolicy: "strict-origin-when-cross-origin",
- body: null,
- method: "GET",
- mode: "cors",
- }
- )
- .then((res) => res.text())
- .then((html) => {
- // Initialize the DOM parser
- var parser = new DOMParser();
-
- // Parse the text
- var doc = parser.parseFromString(html, "text/html");
-
- const vidsOnPage = doc.querySelectorAll(".video");
- const ownedMovies = [];
- for (let i = 0; i < vidsOnPage.length; i++) {
- const movieId = ownedMovies.push(
- vidsOnPage[i].children[1].attributes[0].value.split("?v=")[1]
- );
- }
- return ownedMovies;
- });
-
- return data;
- }
-
- function getOwnedMovies() {
- // fetch owned movies from the javlibrary owned movies list
- fetch("https://www.javlibrary.com/en/mv_owned_print.php", {
- headers: {
- accept: "*/*",
- "accept-language": "en-US,en;q=0.9",
- "cache-control": "no-cache",
- pragma: "no-cache",
- "sec-fetch-dest": "empty",
- "sec-fetch-mode": "cors",
- "sec-fetch-site": "same-origin",
- "sec-gpc": "1",
- },
- referrer: "https://www.javlibrary.com/en/myaccount.php",
- referrerPolicy: "strict-origin-when-cross-origin",
- body: null,
- method: "GET",
- mode: "cors",
- credentials: "include",
- })
- .then((res) => {
- // return the raw text
- return res.text();
- })
- .then((html) => {
- // Initialize the DOM parser
- var parser = new DOMParser();
-
- // Parse the text
- var doc = parser.parseFromString(html, "text/html");
-
- const ownedMovies = [];
- const titles = doc.querySelectorAll(".title");
- titles.forEach((title) => {
- if (title.innerHTML !== "Title") {
- ownedMovies.push(title.innerHTML.split(" ")[0].replace("\n", ""));
- }
- });
- return ownedMovies;
- })
- .then((movies) => {
- setMoviesToLocalStorage(movies);
- })
- .catch((err) =>
- window.alert(`Failed to fetch and/or set owned movie list ${err}`)
- );
- }
-
- async function aggregateMovieList() {
- console.time("Get owned movies");
- const movieList = [];
- const movieCount = await getOwnedMovieCount();
- const pageCount = await Math.ceil(movieCount / 20);
-
- for (let i = 0; i <= pageCount; i++) {
- document.getElementById(
- "refresh-owned-btn"
- ).innerHTML = `Please wait ${i} / ${pageCount} (Do not close this page)`;
- const movies = await getOwnedMoviesByPage(i);
- for (let j = 0; j < movies.length; j++) {
- if (movies[j] !== "") {
- movieList.push(movies[j]);
- }
- }
- await sleep(100);
- }
-
- setMoviesToLocalStorage(movieList);
- document.getElementById("refresh-owned-btn").innerHTML = "Completed!";
- console.timeEnd("Get owned movies");
- }
-
- updateDOM();