121 lines
4.7 KiB
JavaScript
121 lines
4.7 KiB
JavaScript
console.log("Preload script starting...");
|
|
try {
|
|
const { contextBridge } = require('electron');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
console.log("Node modules loaded successfully.");
|
|
|
|
// Location to store the token (adjust the location as needed)
|
|
const tokenFile = path.join(__dirname, 'accessToken.json');
|
|
console.log("Token file path:", tokenFile);
|
|
|
|
function loadToken() {
|
|
try {
|
|
const data = fs.readFileSync(tokenFile, 'utf8');
|
|
const parsed = JSON.parse(data);
|
|
console.log("Token loaded:", parsed.token);
|
|
return parsed.token;
|
|
} catch (error) {
|
|
console.warn("loadToken error:", error.message);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function saveToken(token) {
|
|
try {
|
|
fs.writeFileSync(tokenFile, JSON.stringify({ token }), 'utf8');
|
|
console.log("Token saved:", token);
|
|
} catch (error) {
|
|
console.error("saveToken error:", error.message);
|
|
}
|
|
}
|
|
|
|
let accessToken = loadToken();
|
|
|
|
// Updated fetchWithAuth: if JSON returns "Invalid or expired token" then
|
|
// dispatch a custom event that the renderer will catch.
|
|
function fetchWithAuth(url, options = {}) {
|
|
options.headers = options.headers || {};
|
|
if (accessToken) {
|
|
options.headers['Authorization'] = `Bearer ${accessToken}`;
|
|
}
|
|
return fetch(url, options)
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.detail && data.detail === "Invalid or expired token") {
|
|
console.error("API reports expired token.");
|
|
accessToken = null;
|
|
// Dispatch custom event on the window so that the renderer can show the login overlay.
|
|
window.dispatchEvent(new CustomEvent("tokenExpired", { detail: data.detail }));
|
|
}
|
|
return data;
|
|
});
|
|
}
|
|
|
|
// Now update getStreamUrl and getEpisodeStreamUrl to use fetchWithAuth.
|
|
contextBridge.exposeInMainWorld('api', {
|
|
// Movies API calls
|
|
getMovies: () => fetchWithAuth('http://bbrunson.com:8495/movies'),
|
|
getMovieDetails: (id) => fetchWithAuth(`http://bbrunson.com:8495/movies/${id}`),
|
|
getStream: (id) => `http://bbrunson.com:8495/stream/${id}`,
|
|
// TV Shows API calls
|
|
getShows: () => fetchWithAuth('http://bbrunson.com:8495/shows'),
|
|
getShowDetails: (showId) => fetchWithAuth(`http://bbrunson.com:8495/shows/${showId}`),
|
|
getShowSeasons: (showId) => fetchWithAuth(`http://bbrunson.com:8495/shows/${showId}/seasons`),
|
|
getSeasonEpisodes: (showId, season) =>
|
|
fetchWithAuth(`http://bbrunson.com:8495/shows/${showId}/seasons/${season}/episodes`),
|
|
getEpisodeStream: (episodeId) => `http://bbrunson.com:8495/stream_episode/${episodeId}`,
|
|
getSubtitles: (id) => `http://bbrunson.com:8495/subtitles/${id}`,
|
|
|
|
// New: In Progress API call
|
|
getInProgress: () => fetchWithAuth('http://bbrunson.com:8495/in_progress'),
|
|
|
|
// New: Get Episode Details API call
|
|
getEpisodeDetails: (id) => fetchWithAuth(`http://bbrunson.com:8495/episodes/${id}`),
|
|
|
|
// New: Use the /episodes/{episode_id}/show endpoint to fetch TV show details for an episode
|
|
getShowByEpisode: (episodeId) => fetchWithAuth(`http://bbrunson.com:8495/episodes/${episodeId}/show`),
|
|
|
|
// Authentication functions
|
|
login: (username, password) => {
|
|
return fetch('http://bbrunson.com:8495/login', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ username, password })
|
|
})
|
|
.then(r => r.json())
|
|
.then(data => {
|
|
if (data.access_token) {
|
|
accessToken = data.access_token;
|
|
saveToken(accessToken);
|
|
}
|
|
return data;
|
|
});
|
|
},
|
|
register: (username, password) => {
|
|
return fetch('http://bbrunson.com:8495/register', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ username, password })
|
|
})
|
|
.then(r => r.json());
|
|
},
|
|
getToken: () => accessToken,
|
|
scanForNewFiles: () => fetchWithAuth('http://bbrunson.com:8495/scan', { method: 'POST' }),
|
|
getSessionDetails: (sessionId) => fetchWithAuth(`http://bbrunson.com:8495/sessions/${sessionId}`),
|
|
|
|
// new progress APIs
|
|
saveProgress: (mediaType, mediaId, lastPosition) =>
|
|
fetchWithAuth(`http://bbrunson.com:8495/save_progress/${mediaType}/${mediaId}`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ last_position: lastPosition })
|
|
}),
|
|
getProgress: (mediaType, mediaId) =>
|
|
fetchWithAuth(`http://bbrunson.com:8495/get_progress/${mediaType}/${mediaId}`)
|
|
});
|
|
|
|
console.log("Preload script finished register API.");
|
|
} catch (error) {
|
|
console.error('Error in preload.js:', error);
|
|
} |