diff --git a/my-bois/background.js b/my-bois/background.js new file mode 100644 index 0000000..72db52c --- /dev/null +++ b/my-bois/background.js @@ -0,0 +1,38 @@ +function sendRequest(path, method, body, sendResp) { + fetch(`http://127.0.0.1:9999/api${path}`, { + method: method, + headers: method !== "GET" ? { + "Content-Type": "application/json", + } : undefined, + body: body ? JSON.stringify(body) : undefined, + }).then(r => r.json()) + .then(data => sendResp({success: true, data})) + .catch(e => sendResp({success: false, message: e.message})); +} + +chrome.runtime.onMessage.addListener( + function (request, sender, sendResponse) { + if (request.query === "fetchBikes") { + sendRequest("/bike", "GET", null, sendResponse); + } else if (request.query === "fetchPrograms") { + sendRequest("/program", "GET", null, sendResponse); + } else if (request.query === "fetchActiveWorkouts") { + sendRequest("/workout?active=true", "GET", null, sendResponse); + } else if (request.query === "createNewWorkout") { + sendRequest("/workout", "POST", request, sendResponse); + } else if (request.query === "connectWorkout") { + sendRequest(`/workout/${request.id}/connect`, "POST", {}, sendResponse); + } else if (request.query === "stopWorkout") { + sendRequest(`/workout/${request.id}/stop`, "POST", {}, sendResponse); + } else if (request.query === "startWorkout") { + sendRequest(`/workout/${request.id}/start`, "POST", {}, sendResponse); + } else if (request.query === "pauseWorkout") { + sendRequest(`/workout/${request.id}/pause`, "POST", {}, sendResponse); + } else if (request.query === "updateCooldownMins") { + sendRequest(`/workout/${request.id}`, "PUT", request, sendResponse); + } else { + return false; + } + + return true; + }); diff --git a/my-bois/build.sh b/my-bois/build.sh index 9160d94..e692d5f 100755 --- a/my-bois/build.sh +++ b/my-bois/build.sh @@ -3,3 +3,4 @@ npm run build mv build/static/css/main.*.css build/static/css/main.css mv build/static/js/main.*.js build/static/js/main.js mv build/static/js/runtime-main.*.js build/static/js/runtime-main.js +cp ./background.js build/background.js diff --git a/my-bois/public/manifest.json b/my-bois/public/manifest.json index d4f1f63..deb02b9 100644 --- a/my-bois/public/manifest.json +++ b/my-bois/public/manifest.json @@ -2,6 +2,9 @@ "short_name": "YKonsole Helper", "version": "1.0", "manifest_version": 2, + "background": { + "scripts": ["background.js"] + }, "content_scripts": [ { "matches": ["https://www.youtube.com/*"], diff --git a/my-bois/src/components/Bois.jsx b/my-bois/src/components/Bois.jsx index e98cd07..4a42e57 100644 --- a/my-bois/src/components/Bois.jsx +++ b/my-bois/src/components/Bois.jsx @@ -2,7 +2,7 @@ import React, {useContext, useEffect, useState} from 'react'; import "./Bois.css"; import {StatusContext} from "./Contexts"; -import {CalorieScore, CpmScore, LevelScore, RpmScore, Timer} from "./Score"; +import {CalorieScore, CpmScore, LevelScore, PulseScore, RpmScore, Timer} from "./Score"; import calculateDiff from "../helpers/diff"; import useKey from "../hooks/useKey"; import {Milestones} from "./Milestones"; @@ -23,7 +23,7 @@ export const LeftBoi = () => { } const {cooldownMin} = workout; - const {minutes, seconds, calories, level, rpm} = workoutStatus; + const {minutes, seconds, calories, level, rpm, pulse} = workoutStatus; const diff = calculateDiff({program, cooldownMin, minutes, seconds, calories}); const cpm = calories / (minutes + (seconds / 60)); @@ -34,6 +34,7 @@ export const LeftBoi = () => { + ); }; diff --git a/my-bois/src/components/Score.jsx b/my-bois/src/components/Score.jsx index 755d40c..2c5da83 100644 --- a/my-bois/src/components/Score.jsx +++ b/my-bois/src/components/Score.jsx @@ -46,6 +46,8 @@ export const CalorieScore = ({calories, diff, prevDiff}) => ( export const LevelScore = ({level}) => ; +export const PulseScore = ({pulse}) => pulse ? : null; + export const RpmScore = ({rpm}) => ; export const CpmScore = ({cpm}) => ; diff --git a/my-bois/src/helpers/diff.test.js b/my-bois/src/helpers/diff.test.js index a3b9a80..9583d5a 100644 --- a/my-bois/src/helpers/diff.test.js +++ b/my-bois/src/helpers/diff.test.js @@ -99,7 +99,7 @@ describe("calculateDiff", () => { expect(diff).toBe(0); }); - it("should require 50 calories after 2.5 min of GIS", () => { + it("should expect 50 calories after 2.5 min of GIS", () => { const diff = calculateDiff({ program: programGis, cooldownMin: -1, @@ -111,7 +111,7 @@ describe("calculateDiff", () => { expect(diff).toBe(3); }); - it("should require 175 calories after 7.5 min of GIS", () => { + it("should expect 175 calories after 7.5 min of GIS", () => { const diff = calculateDiff({ program: programGis, cooldownMin: -1, @@ -123,7 +123,7 @@ describe("calculateDiff", () => { expect(diff).toBe(0); }); - it("should require 310 calories after 12.5 min of GIS", () => { + it("should expect 310 calories after 12.5 min of GIS", () => { const diff = calculateDiff({ program: programGis, cooldownMin: 11, diff --git a/my-bois/src/hooks/net.js b/my-bois/src/hooks/net.js index 01002fe..d7f655e 100644 --- a/my-bois/src/hooks/net.js +++ b/my-bois/src/hooks/net.js @@ -1,72 +1,54 @@ export async function fetchBikes() { - return await get("/bike"); + return await runBack({query: "fetchBikes"}); } export async function fetchPrograms() { - return await get("/program"); + return await runBack({query: "fetchPrograms"}); } export async function fetchActiveWorkouts() { - return await get("/workout?active=true"); + return await runBack({query: "fetchActiveWorkouts"}); } export async function createNewWorkout(bike, program) { const bikeId = bike.id; const programId = program.id; - return await post("/workout", {bikeId, programId}); + return await runBack({query: "fetchActiveWorkouts", bikeId, programId}); } export async function connectWorkout(workout) { - return await post(`/workout/${workout.id}/connect`); + return await runBack({query: "connectWorkout", ...workout}); } export async function stopWorkout(workout) { - return await post(`/workout/${workout.id}/stop`); + return await runBack({query: "stopWorkout", ...workout}); } export async function startWorkout(workout) { - return await post(`/workout/${workout.id}/start`); + return await runBack({query: "startWorkout", ...workout}); } export async function pauseWorkout(workout) { - return await post(`/workout/${workout.id}/pause`); + return await runBack({query: "pauseWorkout", ...workout}); } export async function updateCooldownMins(workout, cooldownMin) { - return await put(`/workout/${workout.id}`, {cooldownMin}); + return await runBack({query: "pauseWorkout", cooldownMin, ...workout}); } export function openWebsocket(workout) { - return new WebSocket(url(`/workout/${workout.id}/subscribe`, "ws")); + return new WebSocket(`ws://127.0.0.1:9999/api/workout/${workout.id}/subscribe`); } -function get(path) { - return fetch(url(path), { - method: "GET", - }).then(r => r.json()); +async function runBack(query) { + return new Promise((resolve, reject) => { + chrome.runtime.sendMessage(query, result => { + if (result.success) { + resolve(result.data) + } else { + reject(result.message); + } + }); + }); } - -function post(path, data = {}) { - return fetch(url(path), { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(data) - }).then(r => r.json()); -} - -function put(path, data = {}) { - return fetch(url(path), { - method: "PUT", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(data) - }).then(r => r.json()); -} - -function url(path, prefix = "http") { - return `${prefix}://127.0.0.1:9999/api${path}`; -} \ No newline at end of file