mirror of
https://github.com/Anarios/return-youtube-dislike.git
synced 2026-09-12 10:22:10 +02:00
40fda6dd32
* auth works * Works after review. * switched to auth flow * all works well in chrome * all works well in chrome and firefox * translations harmonized * translations harmonized * website translations * Translations harmonized. * Everything kinda works * Almost works * all works * all works * all works #2 * Streamline premium analytics range handling * Restore premium analytics selection flow * Fix analytics zoom interactions * Add per-section expansion controls to premium analytics * Adjust map legend visibility for premium analytics * Add missing country synonyms for premium map * Remove legacy premium badge overlay * Polish premium analytics controls for light theme * Refresh map legend when toggling sections * Improve light-mode styling for range selectors * Fix map mode switching regression * Fix for panel expand * Typo fix * webpack fix * before next steps. * split, zero-buckets * bucket size indicated on UI * all works * first/last toggle * breadcrumbs * release
79 lines
2.5 KiB
JavaScript
79 lines
2.5 KiB
JavaScript
import { initPremiumAnalytics, teardownPremiumAnalytics, updatePremiumSession } from "./premiumAnalytics";
|
|
import {
|
|
initPremiumTeaser,
|
|
setTeaserSuppressed,
|
|
TEASER_SUPPRESSION_REASON_PREMIUM,
|
|
} from "./premiumAnalytics/teaser";
|
|
|
|
let patreonState = {
|
|
authenticated: false,
|
|
user: null,
|
|
sessionToken: null,
|
|
};
|
|
|
|
function initPatreonFeatures() {
|
|
initPremiumTeaser();
|
|
|
|
chrome.storage.sync.get(["patreonAuthenticated", "patreonUser", "patreonSessionToken"], (data) => {
|
|
if (data.patreonAuthenticated && data.patreonUser) {
|
|
patreonState.authenticated = true;
|
|
patreonState.user = data.patreonUser;
|
|
patreonState.sessionToken = data.patreonSessionToken;
|
|
updatePremiumSession({
|
|
token: patreonState.sessionToken,
|
|
active: patreonState.user?.hasActiveMembership,
|
|
membershipTier: patreonState.user?.membershipTier,
|
|
});
|
|
enablePremiumFeatures();
|
|
}
|
|
});
|
|
|
|
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
|
if (request.message === "patreon_status_changed") {
|
|
patreonState.authenticated = request.authenticated;
|
|
patreonState.user = request.user || null;
|
|
|
|
if (request.authenticated) {
|
|
patreonState.sessionToken = request.sessionToken ?? patreonState.sessionToken;
|
|
updatePremiumSession({
|
|
token: patreonState.sessionToken,
|
|
active: patreonState.user?.hasActiveMembership,
|
|
membershipTier: patreonState.user?.membershipTier,
|
|
});
|
|
enablePremiumFeatures();
|
|
} else {
|
|
patreonState.sessionToken = null;
|
|
updatePremiumSession({ token: null, active: false });
|
|
disablePremiumFeatures();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function enablePremiumFeatures() {
|
|
const tier = patreonState.user?.membershipTier;
|
|
const hasActiveMembership = patreonState.user?.hasActiveMembership;
|
|
|
|
if (hasActiveMembership && tier === "premium") {
|
|
setTeaserSuppressed(true, TEASER_SUPPRESSION_REASON_PREMIUM);
|
|
initPremiumAnalytics();
|
|
}
|
|
}
|
|
|
|
function disablePremiumFeatures() {
|
|
const premiumElements = document.querySelectorAll(".ryd-premium-feature");
|
|
premiumElements.forEach((el) => el.remove());
|
|
teardownPremiumAnalytics();
|
|
setTeaserSuppressed(false, TEASER_SUPPRESSION_REASON_PREMIUM);
|
|
}
|
|
|
|
function isPatreonUser() {
|
|
return patreonState.authenticated && patreonState.user?.hasActiveMembership;
|
|
}
|
|
|
|
function getPatreonTier() {
|
|
return patreonState.user?.membershipTier || "none";
|
|
}
|
|
|
|
export { initPatreonFeatures, isPatreonUser, getPatreonTier, patreonState };
|