From 9c5bcb13e20184658c8522ac13c0f9bbb6122525 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Wed, 29 Oct 2025 22:36:12 +0800 Subject: [PATCH] feat(plan): show life-time plan name in user profile (#2360) --- .../readest-app/public/locales/ar/translation.json | 3 ++- .../readest-app/public/locales/bn/translation.json | 3 ++- .../readest-app/public/locales/bo/translation.json | 3 ++- .../readest-app/public/locales/de/translation.json | 3 ++- .../readest-app/public/locales/el/translation.json | 3 ++- .../readest-app/public/locales/es/translation.json | 3 ++- .../readest-app/public/locales/fa/translation.json | 3 ++- .../readest-app/public/locales/fr/translation.json | 3 ++- .../readest-app/public/locales/hi/translation.json | 3 ++- .../readest-app/public/locales/id/translation.json | 3 ++- .../readest-app/public/locales/it/translation.json | 3 ++- .../readest-app/public/locales/ja/translation.json | 3 ++- .../readest-app/public/locales/ko/translation.json | 3 ++- .../readest-app/public/locales/nl/translation.json | 3 ++- .../readest-app/public/locales/pl/translation.json | 3 ++- .../readest-app/public/locales/pt/translation.json | 3 ++- .../readest-app/public/locales/ru/translation.json | 3 ++- .../readest-app/public/locales/si/translation.json | 3 ++- .../readest-app/public/locales/sv/translation.json | 3 ++- .../readest-app/public/locales/ta/translation.json | 3 ++- .../readest-app/public/locales/th/translation.json | 3 ++- .../readest-app/public/locales/tr/translation.json | 3 ++- .../readest-app/public/locales/uk/translation.json | 3 ++- .../readest-app/public/locales/vi/translation.json | 3 ++- .../public/locales/zh-CN/translation.json | 3 ++- .../public/locales/zh-TW/translation.json | 3 ++- apps/readest-app/src/app/auth/page.tsx | 4 ++-- .../src/app/library/components/SettingsMenu.tsx | 4 ++-- apps/readest-app/src/app/user/page.tsx | 12 ++++++------ .../settings/color/TTSHighlightStyleEditor.tsx | 2 +- apps/readest-app/src/hooks/useQuotaStats.ts | 9 ++++----- apps/readest-app/src/pages/api/deepl/translate.ts | 10 +++++++--- .../src/services/translators/providers/deepl.ts | 4 ++-- apps/readest-app/src/utils/access.ts | 14 +++++++++++++- 34 files changed, 89 insertions(+), 48 deletions(-) diff --git a/apps/readest-app/public/locales/ar/translation.json b/apps/readest-app/public/locales/ar/translation.json index 5d145079..cd1ce23a 100644 --- a/apps/readest-app/public/locales/ar/translation.json +++ b/apps/readest-app/public/locales/ar/translation.json @@ -659,5 +659,6 @@ "Squiggly": "متعرج", "Outline": "مخطط", "Save Current Color": "حفظ اللون الحالي", - "Quick Colors": "ألوان سريعة" + "Quick Colors": "ألوان سريعة", + "Highlighter": "محدد النص" } diff --git a/apps/readest-app/public/locales/bn/translation.json b/apps/readest-app/public/locales/bn/translation.json index 28cc17dc..69bebc61 100644 --- a/apps/readest-app/public/locales/bn/translation.json +++ b/apps/readest-app/public/locales/bn/translation.json @@ -643,5 +643,6 @@ "Squiggly": "ঢেউখেলানো দাগ", "Outline": "বাহিরের রেখা", "Save Current Color": "বর্তমান রঙ সংরক্ষণ করুন", - "Quick Colors": "দ্রুত রংসমূহ" + "Quick Colors": "দ্রুত রংসমূহ", + "Highlighter": "হাইলাইটার" } diff --git a/apps/readest-app/public/locales/bo/translation.json b/apps/readest-app/public/locales/bo/translation.json index 6fe34f15..863d405a 100644 --- a/apps/readest-app/public/locales/bo/translation.json +++ b/apps/readest-app/public/locales/bo/translation.json @@ -639,5 +639,6 @@ "Squiggly": "འཁྱོག་ཐིག", "Outline": "མཐའ་ཐིག", "Save Current Color": "མིག་སྔའི་ཚོན་གཏན་འཁེལ་བྱེད།", - "Quick Colors": "མྱུར་ཚོན།" + "Quick Colors": "མྱུར་ཚོན།", + "Highlighter": "མདོག་ཚད་ཀྱི་བསྡུར་བ།" } diff --git a/apps/readest-app/public/locales/de/translation.json b/apps/readest-app/public/locales/de/translation.json index 384e5a36..82b07c07 100644 --- a/apps/readest-app/public/locales/de/translation.json +++ b/apps/readest-app/public/locales/de/translation.json @@ -643,5 +643,6 @@ "Squiggly": "Wellig", "Outline": "Umriss", "Save Current Color": "Aktuelle Farbe speichern", - "Quick Colors": "Schnellfarben" + "Quick Colors": "Schnellfarben", + "Highlighter": "Textmarker" } diff --git a/apps/readest-app/public/locales/el/translation.json b/apps/readest-app/public/locales/el/translation.json index deee21e4..80378b42 100644 --- a/apps/readest-app/public/locales/el/translation.json +++ b/apps/readest-app/public/locales/el/translation.json @@ -643,5 +643,6 @@ "Squiggly": "Κυματιστό", "Outline": "Περίγραμμα", "Save Current Color": "Αποθήκευση τρέχουσας χρώματος", - "Quick Colors": "Γρήγορα χρώματα" + "Quick Colors": "Γρήγορα χρώματα", + "Highlighter": "Υπογραμμιστής" } diff --git a/apps/readest-app/public/locales/es/translation.json b/apps/readest-app/public/locales/es/translation.json index e24dbaa4..25145bfa 100644 --- a/apps/readest-app/public/locales/es/translation.json +++ b/apps/readest-app/public/locales/es/translation.json @@ -647,5 +647,6 @@ "Squiggly": "Ondulado", "Outline": "Contorno", "Save Current Color": "Guardar Color Actual", - "Quick Colors": "Colores Rápidos" + "Quick Colors": "Colores Rápidos", + "Highlighter": "Resaltador" } diff --git a/apps/readest-app/public/locales/fa/translation.json b/apps/readest-app/public/locales/fa/translation.json index 60fcdfa4..133b973c 100644 --- a/apps/readest-app/public/locales/fa/translation.json +++ b/apps/readest-app/public/locales/fa/translation.json @@ -643,5 +643,6 @@ "Squiggly": "خط‌موج‌دار", "Outline": "خط‌کشی", "Save Current Color": "ذخیره رنگ فعلی", - "Quick Colors": "رنگ‌های سریع" + "Quick Colors": "رنگ‌های سریع", + "Highlighter": "ماژیک هایلایت" } diff --git a/apps/readest-app/public/locales/fr/translation.json b/apps/readest-app/public/locales/fr/translation.json index acb9536e..fd750ac7 100644 --- a/apps/readest-app/public/locales/fr/translation.json +++ b/apps/readest-app/public/locales/fr/translation.json @@ -647,5 +647,6 @@ "Squiggly": "Ondulé", "Outline": "Contour", "Save Current Color": "Enregistrer la Couleur Actuelle", - "Quick Colors": "Couleurs Rapides" + "Quick Colors": "Couleurs Rapides", + "Highlighter": "Surligneur" } diff --git a/apps/readest-app/public/locales/hi/translation.json b/apps/readest-app/public/locales/hi/translation.json index fae48402..7ff874a7 100644 --- a/apps/readest-app/public/locales/hi/translation.json +++ b/apps/readest-app/public/locales/hi/translation.json @@ -643,5 +643,6 @@ "Squiggly": "स्क्विगली", "Outline": "आउटलाइन", "Save Current Color": "वर्तमान रंग सहेजें", - "Quick Colors": "त्वरित रंग" + "Quick Colors": "त्वरित रंग", + "Highlighter": "हाइलाइटर" } diff --git a/apps/readest-app/public/locales/id/translation.json b/apps/readest-app/public/locales/id/translation.json index b3166224..330ad4af 100644 --- a/apps/readest-app/public/locales/id/translation.json +++ b/apps/readest-app/public/locales/id/translation.json @@ -639,5 +639,6 @@ "Squiggly": "Bergelombang", "Outline": "Garis Besar", "Save Current Color": "Simpan Warna Saat Ini", - "Quick Colors": "Warna Cepat" + "Quick Colors": "Warna Cepat", + "Highlighter": "Penyorot" } diff --git a/apps/readest-app/public/locales/it/translation.json b/apps/readest-app/public/locales/it/translation.json index 487f9431..1b3ac5df 100644 --- a/apps/readest-app/public/locales/it/translation.json +++ b/apps/readest-app/public/locales/it/translation.json @@ -647,5 +647,6 @@ "Squiggly": "Ondulato", "Outline": "Contorno", "Save Current Color": "Salva Colore Corrente", - "Quick Colors": "Colori Veloci" + "Quick Colors": "Colori Veloci", + "Highlighter": "Evidenziatore" } diff --git a/apps/readest-app/public/locales/ja/translation.json b/apps/readest-app/public/locales/ja/translation.json index 51a6acf0..e5f0091e 100644 --- a/apps/readest-app/public/locales/ja/translation.json +++ b/apps/readest-app/public/locales/ja/translation.json @@ -639,5 +639,6 @@ "Squiggly": "波線", "Outline": "アウトライン", "Save Current Color": "現在の色を保存", - "Quick Colors": "クイックカラー" + "Quick Colors": "クイックカラー", + "Highlighter": "蛍光ペン" } diff --git a/apps/readest-app/public/locales/ko/translation.json b/apps/readest-app/public/locales/ko/translation.json index 63357445..b58f0ce2 100644 --- a/apps/readest-app/public/locales/ko/translation.json +++ b/apps/readest-app/public/locales/ko/translation.json @@ -639,5 +639,6 @@ "Squiggly": "물결선", "Outline": "윤곽선", "Save Current Color": "현재 색상 저장", - "Quick Colors": "빠른 색상" + "Quick Colors": "빠른 색상", + "Highlighter": "형광펜" } diff --git a/apps/readest-app/public/locales/nl/translation.json b/apps/readest-app/public/locales/nl/translation.json index c18c87a9..7afe0fda 100644 --- a/apps/readest-app/public/locales/nl/translation.json +++ b/apps/readest-app/public/locales/nl/translation.json @@ -643,5 +643,6 @@ "Squiggly": "Kronkelig", "Outline": "Omtrek", "Save Current Color": "Huidige kleur opslaan", - "Quick Colors": "Snelle kleuren" + "Quick Colors": "Snelle kleuren", + "Highlighter": "Marker" } diff --git a/apps/readest-app/public/locales/pl/translation.json b/apps/readest-app/public/locales/pl/translation.json index 7bfeee5d..9b94f266 100644 --- a/apps/readest-app/public/locales/pl/translation.json +++ b/apps/readest-app/public/locales/pl/translation.json @@ -651,5 +651,6 @@ "Squiggly": "Falista linia", "Outline": "Obrys", "Save Current Color": "Zapisz bieżący kolor", - "Quick Colors": "Szybkie kolory" + "Quick Colors": "Szybkie kolory", + "Highlighter": "Zakreślacz" } diff --git a/apps/readest-app/public/locales/pt/translation.json b/apps/readest-app/public/locales/pt/translation.json index 34d81b7d..4eaa0875 100644 --- a/apps/readest-app/public/locales/pt/translation.json +++ b/apps/readest-app/public/locales/pt/translation.json @@ -647,5 +647,6 @@ "Squiggly": "Ondulado", "Outline": "Contorno", "Save Current Color": "Salvar cor atual", - "Quick Colors": "Cores rápidas" + "Quick Colors": "Cores rápidas", + "Highlighter": "Marcador" } diff --git a/apps/readest-app/public/locales/ru/translation.json b/apps/readest-app/public/locales/ru/translation.json index 6b8e0145..963a05a6 100644 --- a/apps/readest-app/public/locales/ru/translation.json +++ b/apps/readest-app/public/locales/ru/translation.json @@ -651,5 +651,6 @@ "Squiggly": "Волнистая линия", "Outline": "Контур", "Save Current Color": "Сохранить текущий цвет", - "Quick Colors": "Быстрые цвета" + "Quick Colors": "Быстрые цвета", + "Highlighter": "Маркер" } diff --git a/apps/readest-app/public/locales/si/translation.json b/apps/readest-app/public/locales/si/translation.json index 431080d4..6d527b25 100644 --- a/apps/readest-app/public/locales/si/translation.json +++ b/apps/readest-app/public/locales/si/translation.json @@ -643,5 +643,6 @@ "Squiggly": "වැලි රේඛාව", "Outline": "පරිසීමාව", "Save Current Color": "දැන් ඇති වර්ණය සුරකින්න", - "Quick Colors": "ක්ෂණික වර්ණ" + "Quick Colors": "ක්ෂණික වර්ණ", + "Highlighter": "ඉස්මතු කරන්නා" } diff --git a/apps/readest-app/public/locales/sv/translation.json b/apps/readest-app/public/locales/sv/translation.json index 48e82b14..9fb9593b 100644 --- a/apps/readest-app/public/locales/sv/translation.json +++ b/apps/readest-app/public/locales/sv/translation.json @@ -643,5 +643,6 @@ "Squiggly": "Vågig linje", "Outline": "Kontur", "Save Current Color": "Spara aktuell färg", - "Quick Colors": "Snabba färger" + "Quick Colors": "Snabba färger", + "Highlighter": "Markeringspenna" } diff --git a/apps/readest-app/public/locales/ta/translation.json b/apps/readest-app/public/locales/ta/translation.json index f5312836..8a353c15 100644 --- a/apps/readest-app/public/locales/ta/translation.json +++ b/apps/readest-app/public/locales/ta/translation.json @@ -643,5 +643,6 @@ "Squiggly": "சுருள் கோடு", "Outline": "வட்டம்", "Save Current Color": "தற்போதைய நிறத்தை சேமிக்கவும்", - "Quick Colors": "விரைவு நிறங்கள்" + "Quick Colors": "விரைவு நிறங்கள்", + "Highlighter": "ஹைலைட்டர்" } diff --git a/apps/readest-app/public/locales/th/translation.json b/apps/readest-app/public/locales/th/translation.json index cbc4e2cb..874aae51 100644 --- a/apps/readest-app/public/locales/th/translation.json +++ b/apps/readest-app/public/locales/th/translation.json @@ -639,5 +639,6 @@ "Squiggly": "เส้นหยัก", "Outline": "เส้นขอบ", "Save Current Color": "บันทึกสีปัจจุบัน", - "Quick Colors": "สีด่วน" + "Quick Colors": "สีด่วน", + "Highlighter": "ปากกาเน้นข้อความ" } diff --git a/apps/readest-app/public/locales/tr/translation.json b/apps/readest-app/public/locales/tr/translation.json index 36b02b6f..4a149900 100644 --- a/apps/readest-app/public/locales/tr/translation.json +++ b/apps/readest-app/public/locales/tr/translation.json @@ -643,5 +643,6 @@ "Squiggly": "Dalgalı Çizgi", "Outline": "Kontur", "Save Current Color": "Mevcut Rengi Kaydet", - "Quick Colors": "Hızlı Renkler" + "Quick Colors": "Hızlı Renkler", + "Highlighter": "Vurgulayıcı" } diff --git a/apps/readest-app/public/locales/uk/translation.json b/apps/readest-app/public/locales/uk/translation.json index 042818ee..986652c5 100644 --- a/apps/readest-app/public/locales/uk/translation.json +++ b/apps/readest-app/public/locales/uk/translation.json @@ -651,5 +651,6 @@ "Squiggly": "Хвиляста лінія", "Outline": "Контур", "Save Current Color": "Зберегти поточний колір", - "Quick Colors": "Швидкі кольори" + "Quick Colors": "Швидкі кольори", + "Highlighter": "Маркер" } diff --git a/apps/readest-app/public/locales/vi/translation.json b/apps/readest-app/public/locales/vi/translation.json index a7fddf15..5bc9a8b4 100644 --- a/apps/readest-app/public/locales/vi/translation.json +++ b/apps/readest-app/public/locales/vi/translation.json @@ -639,5 +639,6 @@ "Squiggly": "Gạch ngoằn ngoèo", "Outline": "Đường viền", "Save Current Color": "Lưu màu hiện tại", - "Quick Colors": "Màu nhanh" + "Quick Colors": "Màu nhanh", + "Highlighter": "Bút đánh dấu" } diff --git a/apps/readest-app/public/locales/zh-CN/translation.json b/apps/readest-app/public/locales/zh-CN/translation.json index 64d512a7..12659872 100644 --- a/apps/readest-app/public/locales/zh-CN/translation.json +++ b/apps/readest-app/public/locales/zh-CN/translation.json @@ -639,5 +639,6 @@ "Squiggly": "波浪线", "Outline": "轮廓", "Save Current Color": "保存当前颜色", - "Quick Colors": "快速颜色" + "Quick Colors": "快速颜色", + "Highlighter": "荧光笔" } diff --git a/apps/readest-app/public/locales/zh-TW/translation.json b/apps/readest-app/public/locales/zh-TW/translation.json index ebb97eeb..b93d0f61 100644 --- a/apps/readest-app/public/locales/zh-TW/translation.json +++ b/apps/readest-app/public/locales/zh-TW/translation.json @@ -639,5 +639,6 @@ "Squiggly": "波浪線", "Outline": "輪廓", "Save Current Color": "儲存目前顏色", - "Quick Colors": "快速顏色" + "Quick Colors": "快速顏色", + "Highlighter": "螢光筆" } diff --git a/apps/readest-app/src/app/auth/page.tsx b/apps/readest-app/src/app/auth/page.tsx index ddbc8857..2329b8be 100644 --- a/apps/readest-app/src/app/auth/page.tsx +++ b/apps/readest-app/src/app/auth/page.tsx @@ -24,7 +24,7 @@ import { start, cancel, onUrl, onInvalidUrl } from '@fabianlars/tauri-plugin-oau import { openUrl } from '@tauri-apps/plugin-opener'; import { invoke } from '@tauri-apps/api/core'; import { handleAuthCallback } from '@/helpers/auth'; -import { getUserPlan } from '@/utils/access'; +import { getUserProfilePlan } from '@/utils/access'; import { getAppleIdAuth, Scope } from './utils/appleIdAuth'; import { authWithCustomTab, authWithSafari } from './utils/nativeAuth'; import WindowButtons from '@/components/WindowButtons'; @@ -173,7 +173,7 @@ export default function AuthPage() { const type = params.get('type'); if (accessToken) { let next = params.get('next') ?? '/'; - if (getUserPlan(accessToken) === 'free') { + if (getUserProfilePlan(accessToken) === 'free') { next = '/user'; } handleAuthCallback({ accessToken, refreshToken, type, next, login, navigate: router.push }); diff --git a/apps/readest-app/src/app/library/components/SettingsMenu.tsx b/apps/readest-app/src/app/library/components/SettingsMenu.tsx index 3c507d99..1750b26f 100644 --- a/apps/readest-app/src/app/library/components/SettingsMenu.tsx +++ b/apps/readest-app/src/app/library/components/SettingsMenu.tsx @@ -39,7 +39,7 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { const router = useRouter(); const { envConfig, appService } = useEnv(); const { user } = useAuth(); - const { userPlan, quotas } = useQuotaStats(true); + const { userProfilePlan, quotas } = useQuotaStats(true); const { themeMode, setThemeMode } = useThemeStore(); const { settings, setSettingsDialogOpen } = useSettingsStore(); const [isAutoUpload, setIsAutoUpload] = useState(settings.autoUpload); @@ -305,7 +305,7 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { )} - {user && userPlan === 'free' && !appService?.isIOSApp && ( + {user && userProfilePlan === 'free' && ( )} {isWebAppPlatform() && } diff --git a/apps/readest-app/src/app/user/page.tsx b/apps/readest-app/src/app/user/page.tsx index a6ffceb8..0cf85848 100644 --- a/apps/readest-app/src/app/user/page.tsx +++ b/apps/readest-app/src/app/user/page.tsx @@ -67,7 +67,7 @@ const ProfilePage = () => { useTheme({ systemUIVisible: false }); - const { quotas, userPlan = 'free' } = useQuotaStats(); + const { quotas, userProfilePlan = 'free' } = useQuotaStats(); const { handleLogout, handleResetPassword, handleConfirmDelete } = useUserActions(); const { availablePlans } = useAvailablePlans({ @@ -218,8 +218,8 @@ const ProfilePage = () => { const avatarUrl = user?.user_metadata?.['picture'] || user?.user_metadata?.['avatar_url']; const userFullName = user?.user_metadata?.['full_name'] || '-'; const userEmail = user?.email || ''; - const planDetails = - getPlanDetails(userPlan, availablePlans) || getPlanDetails('free', availablePlans); + const userPlanDetails = + getPlanDetails(userProfilePlan, availablePlans) || getPlanDetails('free', availablePlans); return (
{ avatarUrl={avatarUrl} userFullName={userFullName} userEmail={userEmail} - planDetails={planDetails} + planDetails={userPlanDetails} /> @@ -267,14 +267,14 @@ const ProfilePage = () => {
= ({ value={style} onChange={(e) => onStyleChange(e.target.value as TTSHighlightStyle)} options={[ - { value: 'highlight', label: _('Highlight') }, + { value: 'highlight', label: _('Highlighter') }, { value: 'underline', label: _('Underline') }, { value: 'strikethrough', label: _('Strikethrough') }, { value: 'squiggly', label: _('Squiggly') }, diff --git a/apps/readest-app/src/hooks/useQuotaStats.ts b/apps/readest-app/src/hooks/useQuotaStats.ts index 12a44b9c..7bad697f 100644 --- a/apps/readest-app/src/hooks/useQuotaStats.ts +++ b/apps/readest-app/src/hooks/useQuotaStats.ts @@ -1,19 +1,18 @@ import { useEffect, useState } from 'react'; import { useAuth } from '@/context/AuthContext'; import { QuotaType, UserPlan } from '@/types/quota'; -import { getStoragePlanData, getTranslationPlanData, getUserPlan } from '@/utils/access'; +import { getStoragePlanData, getTranslationPlanData, getUserProfilePlan } from '@/utils/access'; import { useTranslation } from './useTranslation'; export const useQuotaStats = (briefName = false) => { const _ = useTranslation(); const { token, user } = useAuth(); const [quotas, setQuotas] = useState([]); - const [userPlan, setUserPlan] = useState(undefined); + const [userProfilePlan, setUserProfilePlan] = useState(undefined); useEffect(() => { if (!user || !token) return; - const userPlan = getUserPlan(token); const storagPlan = getStoragePlanData(token); const inGB = storagPlan.quota > 1e9; const storageQuota: QuotaType = { @@ -35,13 +34,13 @@ export const useQuotaStats = (briefName = false) => { total: Math.round(translationPlan.quota / 1024), unit: 'K', }; - setUserPlan(userPlan); + setUserProfilePlan(getUserProfilePlan(token)); setQuotas([storageQuota, translationQuota]); // eslint-disable-next-line react-hooks/exhaustive-deps }, [token]); return { quotas, - userPlan, + userProfilePlan, }; }; diff --git a/apps/readest-app/src/pages/api/deepl/translate.ts b/apps/readest-app/src/pages/api/deepl/translate.ts index cabcfafe..45a726f7 100644 --- a/apps/readest-app/src/pages/api/deepl/translate.ts +++ b/apps/readest-app/src/pages/api/deepl/translate.ts @@ -2,7 +2,11 @@ import crypto from 'crypto'; import { NextApiRequest, NextApiResponse } from 'next'; import { corsAllMethods, runMiddleware } from '@/utils/cors'; import { getCloudflareContext } from '@opennextjs/cloudflare'; -import { getDailyTranslationPlanData, getUserPlan, validateUserAndToken } from '@/utils/access'; +import { + getDailyTranslationPlanData, + getSubscriptionPlan, + validateUserAndToken, +} from '@/utils/access'; import { ErrorCodes } from '@/services/translators'; import { UsageStatsManager } from '@/utils/usage'; @@ -53,7 +57,7 @@ const updateDailyUsage = async ( if (!userId || !token) return 0; try { - const userPlan = getUserPlan(token); + const userPlan = getSubscriptionPlan(token); const newUsage = await UsageStatsManager.trackUsage( userId, 'translation_chars', @@ -90,7 +94,7 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { let deeplApiUrl = deepFreeApiUrl; let userPlan = 'free'; if (user && token) { - userPlan = getUserPlan(token); + userPlan = getSubscriptionPlan(token); if (userPlan === 'pro') deeplApiUrl = deeplProApiUrl; } const deeplAuthKey = diff --git a/apps/readest-app/src/services/translators/providers/deepl.ts b/apps/readest-app/src/services/translators/providers/deepl.ts index ad3b3938..c3b1cb25 100644 --- a/apps/readest-app/src/services/translators/providers/deepl.ts +++ b/apps/readest-app/src/services/translators/providers/deepl.ts @@ -2,7 +2,7 @@ import { getAPIBaseUrl } from '@/services/environment'; import { stubTranslation as _ } from '@/utils/misc'; import { ErrorCodes, TranslationProvider } from '../types'; import { UserPlan } from '@/types/quota'; -import { getUserPlan } from '@/utils/access'; +import { getSubscriptionPlan } from '@/utils/access'; import { normalizeToShortLang } from '@/utils/lang'; import { DEFAULT_DAILY_TRANSLATION_QUOTA } from '@/services/constants'; import { saveDailyUsage } from '../utils'; @@ -29,7 +29,7 @@ export const deeplProvider: TranslationProvider = { let userPlan: UserPlan = 'free'; if (token) { - userPlan = getUserPlan(token); + userPlan = getSubscriptionPlan(token); headers['Authorization'] = `Bearer ${token}`; } diff --git a/apps/readest-app/src/utils/access.ts b/apps/readest-app/src/utils/access.ts index aa3635b1..2ea325fe 100644 --- a/apps/readest-app/src/utils/access.ts +++ b/apps/readest-app/src/utils/access.ts @@ -12,11 +12,23 @@ interface Token { [key: string]: string | number; } -export const getUserPlan = (token: string): UserPlan => { +export const getSubscriptionPlan = (token: string): UserPlan => { const data = jwtDecode(token) || {}; return data['plan'] || 'free'; }; +export const getUserProfilePlan = (token: string): UserPlan => { + const data = jwtDecode(token) || {}; + let plan = data['plan'] || 'free'; + if (plan === 'free') { + const purchasedQuota = data['storage_purchased_bytes'] || 0; + if (purchasedQuota > 0) { + plan = 'purchase'; + } + } + return plan; +}; + export const STORAGE_QUOTA_GRACE_BYTES = 10 * 1024 * 1024; // 10 MB grace export const getStoragePlanData = (token: string) => {