80 lines
2.2 KiB
TypeScript
80 lines
2.2 KiB
TypeScript
import { createIndexedDBHelper, type IndexedDBHelper } from './helpers/indexedDBHelper'
|
|
|
|
const DB_NAME = 'nostr_paywall_settings'
|
|
const DB_VERSION = 3
|
|
const STORE_NAME = 'reading_mode_preferences'
|
|
|
|
export interface ReadingModeSettings {
|
|
maxWidth: 'narrow' | 'medium' | 'wide' | 'full'
|
|
fontSize: 'small' | 'medium' | 'large' | 'xlarge'
|
|
lineHeight: 'tight' | 'normal' | 'relaxed'
|
|
}
|
|
|
|
export interface ReadingModePreferencesItem {
|
|
key: 'settings'
|
|
value: ReadingModeSettings
|
|
timestamp: number
|
|
}
|
|
|
|
const SETTINGS_KEY = 'settings'
|
|
|
|
class ReadingModePreferencesService {
|
|
private readonly dbHelper: IndexedDBHelper
|
|
|
|
constructor() {
|
|
this.dbHelper = createIndexedDBHelper({
|
|
dbName: DB_NAME,
|
|
version: DB_VERSION,
|
|
storeName: STORE_NAME,
|
|
keyPath: 'key',
|
|
indexes: [{ name: 'timestamp', keyPath: 'timestamp', unique: false }],
|
|
})
|
|
}
|
|
|
|
async getSettings(): Promise<ReadingModeSettings | null> {
|
|
try {
|
|
const result = await this.dbHelper.get<ReadingModePreferencesItem>(SETTINGS_KEY)
|
|
return result?.value ?? null
|
|
} catch (error) {
|
|
console.error('Error loading reading mode preferences:', error)
|
|
return null
|
|
}
|
|
}
|
|
|
|
async saveSettings(settings: ReadingModeSettings): Promise<void> {
|
|
try {
|
|
await this.dbHelper.put({
|
|
key: SETTINGS_KEY,
|
|
value: settings,
|
|
timestamp: Date.now(),
|
|
})
|
|
} catch (error) {
|
|
console.error('Error saving reading mode preferences:', error)
|
|
throw error
|
|
}
|
|
}
|
|
|
|
async clearSettings(): Promise<void> {
|
|
try {
|
|
await this.dbHelper.delete(SETTINGS_KEY)
|
|
} catch (error) {
|
|
console.error('Error clearing reading mode preferences:', error)
|
|
throw error
|
|
}
|
|
}
|
|
}
|
|
|
|
const readingModePreferencesService = new ReadingModePreferencesService()
|
|
|
|
export async function getReadingModeSettings(): Promise<ReadingModeSettings | null> {
|
|
return readingModePreferencesService.getSettings()
|
|
}
|
|
|
|
export async function saveReadingModeSettings(settings: ReadingModeSettings): Promise<void> {
|
|
return readingModePreferencesService.saveSettings(settings)
|
|
}
|
|
|
|
export async function clearReadingModeSettings(): Promise<void> {
|
|
return readingModePreferencesService.clearSettings()
|
|
}
|