@@ -15,11 +15,11 @@ type ConfigValues = {
1515 voice : string ;
1616 skipBlank : boolean ;
1717 epubTheme : boolean ;
18- textExtractionMargin : number ;
1918 headerMargin : number ;
2019 footerMargin : number ;
2120 leftMargin : number ;
2221 rightMargin : number ;
22+ ttsModel : string ;
2323} ;
2424
2525/** Interface defining the configuration context shape and functionality */
@@ -31,11 +31,11 @@ interface ConfigContextType {
3131 voice : string ;
3232 skipBlank : boolean ;
3333 epubTheme : boolean ;
34- textExtractionMargin : number ;
3534 headerMargin : number ;
3635 footerMargin : number ;
3736 leftMargin : number ;
3837 rightMargin : number ;
38+ ttsModel : string ;
3939 updateConfig : ( newConfig : Partial < { apiKey : string ; baseUrl : string ; viewType : ViewType } > ) => Promise < void > ;
4040 updateConfigKey : < K extends keyof ConfigValues > ( key : K , value : ConfigValues [ K ] ) => Promise < void > ;
4141 isLoading : boolean ;
@@ -59,11 +59,11 @@ export function ConfigProvider({ children }: { children: ReactNode }) {
5959 const [ voice , setVoice ] = useState < string > ( 'af_sarah' ) ;
6060 const [ skipBlank , setSkipBlank ] = useState < boolean > ( true ) ;
6161 const [ epubTheme , setEpubTheme ] = useState < boolean > ( false ) ;
62- const [ textExtractionMargin , setTextExtractionMargin ] = useState < number > ( 0.07 ) ;
6362 const [ headerMargin , setHeaderMargin ] = useState < number > ( 0.07 ) ;
6463 const [ footerMargin , setFooterMargin ] = useState < number > ( 0.07 ) ;
6564 const [ leftMargin , setLeftMargin ] = useState < number > ( 0.07 ) ;
6665 const [ rightMargin , setRightMargin ] = useState < number > ( 0.07 ) ;
66+ const [ ttsModel , setTTSModel ] = useState < string > ( 'tts-1' ) ;
6767
6868 const [ isLoading , setIsLoading ] = useState ( true ) ;
6969 const [ isDBReady , setIsDBReady ] = useState ( false ) ;
@@ -83,11 +83,11 @@ export function ConfigProvider({ children }: { children: ReactNode }) {
8383 const cachedVoice = await getItem ( 'voice' ) ;
8484 const cachedSkipBlank = await getItem ( 'skipBlank' ) ;
8585 const cachedEpubTheme = await getItem ( 'epubTheme' ) ;
86- const cachedMargin = await getItem ( 'textExtractionMargin' ) ;
8786 const cachedHeaderMargin = await getItem ( 'headerMargin' ) ;
8887 const cachedFooterMargin = await getItem ( 'footerMargin' ) ;
8988 const cachedLeftMargin = await getItem ( 'leftMargin' ) ;
9089 const cachedRightMargin = await getItem ( 'rightMargin' ) ;
90+ const cachedTTSModel = await getItem ( 'ttsModel' ) ;
9191
9292 // Only set API key and base URL if they were explicitly saved by the user
9393 if ( cachedApiKey ) {
@@ -105,11 +105,11 @@ export function ConfigProvider({ children }: { children: ReactNode }) {
105105 setVoice ( cachedVoice || 'af_sarah' ) ;
106106 setSkipBlank ( cachedSkipBlank === 'false' ? false : true ) ;
107107 setEpubTheme ( cachedEpubTheme === 'true' ) ;
108- setTextExtractionMargin ( parseFloat ( cachedMargin || '0.07' ) ) ;
109108 setHeaderMargin ( parseFloat ( cachedHeaderMargin || '0.07' ) ) ;
110109 setFooterMargin ( parseFloat ( cachedFooterMargin || '0.07' ) ) ;
111110 setLeftMargin ( parseFloat ( cachedLeftMargin || '0.07' ) ) ;
112111 setRightMargin ( parseFloat ( cachedRightMargin || '0.07' ) ) ;
112+ setTTSModel ( cachedTTSModel || 'tts-1' ) ;
113113
114114 // Only save non-sensitive settings by default
115115 if ( ! cachedViewType ) {
@@ -121,13 +121,13 @@ export function ConfigProvider({ children }: { children: ReactNode }) {
121121 if ( cachedEpubTheme === null ) {
122122 await setItem ( 'epubTheme' , 'false' ) ;
123123 }
124- if ( cachedMargin === null ) {
125- await setItem ( 'textExtractionMargin' , '0.07' ) ;
126- }
127124 if ( cachedHeaderMargin === null ) await setItem ( 'headerMargin' , '0.07' ) ;
128125 if ( cachedFooterMargin === null ) await setItem ( 'footerMargin' , '0.07' ) ;
129126 if ( cachedLeftMargin === null ) await setItem ( 'leftMargin' , '0.0' ) ;
130127 if ( cachedRightMargin === null ) await setItem ( 'rightMargin' , '0.0' ) ;
128+ if ( cachedTTSModel === null ) {
129+ await setItem ( 'ttsModel' , 'tts-1' ) ;
130+ }
131131
132132 } catch ( error ) {
133133 console . error ( 'Error initializing:' , error ) ;
@@ -145,6 +145,7 @@ export function ConfigProvider({ children }: { children: ReactNode }) {
145145 */
146146 const updateConfig = async ( newConfig : Partial < { apiKey : string ; baseUrl : string } > ) => {
147147 try {
148+ setIsLoading ( true ) ;
148149 if ( newConfig . apiKey !== undefined || newConfig . apiKey !== '' ) {
149150 // Only save API key to IndexedDB if it's different from env default
150151 await setItem ( 'apiKey' , newConfig . apiKey ! ) ;
@@ -169,6 +170,8 @@ export function ConfigProvider({ children }: { children: ReactNode }) {
169170 } catch ( error ) {
170171 console . error ( 'Error updating config:' , error ) ;
171172 throw error ;
173+ } finally {
174+ setIsLoading ( false ) ;
172175 }
173176 } ;
174177
@@ -179,6 +182,7 @@ export function ConfigProvider({ children }: { children: ReactNode }) {
179182 */
180183 const updateConfigKey = async < K extends keyof ConfigValues > ( key : K , value : ConfigValues [ K ] ) => {
181184 try {
185+ setIsLoading ( true ) ;
182186 await setItem ( key , value . toString ( ) ) ;
183187 switch ( key ) {
184188 case 'apiKey' :
@@ -202,9 +206,6 @@ export function ConfigProvider({ children }: { children: ReactNode }) {
202206 case 'epubTheme' :
203207 setEpubTheme ( value as boolean ) ;
204208 break ;
205- case 'textExtractionMargin' :
206- setTextExtractionMargin ( value as number ) ;
207- break ;
208209 case 'headerMargin' :
209210 setHeaderMargin ( value as number ) ;
210211 break ;
@@ -217,10 +218,15 @@ export function ConfigProvider({ children }: { children: ReactNode }) {
217218 case 'rightMargin' :
218219 setRightMargin ( value as number ) ;
219220 break ;
221+ case 'ttsModel' :
222+ setTTSModel ( value as string ) ;
223+ break ;
220224 }
221225 } catch ( error ) {
222226 console . error ( `Error updating config key ${ key } :` , error ) ;
223227 throw error ;
228+ } finally {
229+ setIsLoading ( false ) ;
224230 }
225231 } ;
226232
@@ -233,11 +239,11 @@ export function ConfigProvider({ children }: { children: ReactNode }) {
233239 voice,
234240 skipBlank,
235241 epubTheme,
236- textExtractionMargin,
237242 headerMargin,
238243 footerMargin,
239244 leftMargin,
240245 rightMargin,
246+ ttsModel,
241247 updateConfig,
242248 updateConfigKey,
243249 isLoading,
0 commit comments