latestBGonStripChat

Enable users to seamlessly access and appreciate the latest backgrounds on SC.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         latestBGonStripChat
// @namespace    http://carllx.com/
// @version      0.1.5.2
// @description  Enable users to seamlessly access and appreciate the latest backgrounds on SC.
// @author       carllx
// @match        https://stripchat.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=stripchat.com
// @grant        none
// ==/UserScript==

(function () {
  "use strict";
  // function replaceTimestamp(url) {
  //   const timestampRegex = /\d+(?=\/)/;
  //   const newTimestamp = Math.floor(Date.now() / 1000) - 19;
  //   return url.replace(timestampRegex, newTimestamp);
  // }

  function updateSrcInHTML() {
    const users = [];
    // console.error(`users.length:`);
    const aWrapperElements = document.querySelectorAll(".model-list-item-link");
    const viewportWidth = window.innerWidth;
    const viewportHeight = window.innerHeight;
    aWrapperElements.forEach((wrapElement) => {
      const rect = wrapElement.getBoundingClientRect();

      const isInView =
        rect.width > 0 &&
        rect.height > 0 &&
        rect.top >= 0 &&
        rect.bottom <= viewportHeight &&
        rect.left >= 0 &&
        rect.right <= viewportWidth;
      if (isInView) {
        const imgElement = wrapElement.querySelector(
          ".image-background"
        );
        const src = imgElement.getAttribute("src");

        const usernamePath = wrapElement.getAttribute("href"); //'/MiaBakker'

        // XXXXXXXXXXXX
        users.push({ n: usernamePath, el: imgElement });
        // XXXXXXXXXXXX
      }
    });
    // XXXXXXXXXXXX
    console.log(`users.length:${users.length}`);
    getUserofCam(users);
    // XXXXXXXXXXXX
  }
  function executeFunctionEverySec(fn , sec) {
    const intervalId = setInterval(fn, sec);
    const eventListener = () => {
      clearInterval(intervalId);
      document.removeEventListener("stop", eventListener);
      // Additional code to handle the 'stop' event if needed
    };
    document.addEventListener("stop", eventListener);
  }
  //   return fetch(`https://stripchat.com/api/front/v2/models/username${n}/cam`)

  function getUserofCam(users) {
    //  users : [ {n:, el:},]

    const fetchUserData = async (user) => {
      const { n, el } = user;
      const resolvedEl = await Promise.resolve(el);
      return fetch(`https://stripchat.com/api/front/v2/models/username/${n}/cam`)
        .then((res) => {
          if (res.ok) {
            return res.json();
          }
          throw new Error("Something went wrong");
        })
        .then((ob) => {
          const snapshotTimestamp = ob.user.user.snapshotTimestamp;
          //   https://img.strpst.com/thumbs/1695366450/104138876_webp
          const orgSrc = resolvedEl.getAttribute("src");
          const timestampRegex = /\d+(?=\/)/;
          // debugger
          const newSrc = orgSrc.replace(timestampRegex, snapshotTimestamp);
          resolvedEl.setAttribute("src", newSrc);

          resolvedEl.onerror = function () {
            this.onerror = null;
            this.src = orgSrc;
            this.classList.remove('image-background__image--is-hidden')
            console.log(this)
          };
          return true;
        });
    };

    Promise.all(users.map(fetchUserData)).then((results) => {
      console.log("ok"); // log name property of first user
    });
  }

  executeFunctionEverySec(updateSrcInHTML , 3000);

})();