story-research-zapwall/lib/readingModePreferences.ts
2026-01-15 11:31:09 +01:00

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()
}