import Subscription from "./Subscription"; import Subscriptions from "./Subscriptions"; import Users from "./Users"; import User from "./User"; class Repository { loadSubscriptions() { console.log(`[Repository] Loading subscriptions from localStorage`); const subscriptions = new Subscriptions(); subscriptions.loaded = true; const serialized = localStorage.getItem('subscriptions'); if (serialized === null) { return subscriptions; } try { JSON.parse(serialized).forEach(s => { const subscription = new Subscription(s.baseUrl, s.topic); subscription.addNotifications(s.notifications); subscription.last = s.last; // Explicitly set, in case old notifications have been deleted subscriptions.add(subscription); }); console.log(`[Repository] Loaded ${subscriptions.size()} subscription(s) from localStorage`); return subscriptions; } catch (e) { console.log(`[Repository] Unable to deserialize subscriptions: ${e.message}`); return subscriptions; } } saveSubscriptions(subscriptions) { if (!subscriptions.loaded) { return; // Avoid saving invalid state, triggered by initial useEffect hook } console.log(`[Repository] Saving ${subscriptions.size()} subscription(s) to localStorage`); const serialized = JSON.stringify(subscriptions.map( (id, subscription) => { return { baseUrl: subscription.baseUrl, topic: subscription.topic, notifications: subscription.getNotifications(), last: subscription.last } })); localStorage.setItem('subscriptions', serialized); } loadUsers() { console.log(`[Repository] Loading users from localStorage`); const users = new Users(); users.loaded = true; const serialized = localStorage.getItem('users'); if (serialized === null) { return users; } try { JSON.parse(serialized).forEach(u => { users.add(new User(u.baseUrl, u.username, u.password)); }); return users; } catch (e) { console.log(`[Repository] Unable to deserialize users: ${e.message}`); return users; } } saveUsers(users) { if (!users.loaded) { return; // Avoid saving invalid state, triggered by initial useEffect hook } console.log(`[Repository] Saving users to localStorage`); const serialized = JSON.stringify(users.map(user => { return { baseUrl: user.baseUrl, username: user.username, password: user.password } })); localStorage.setItem('users', serialized); } loadSelectedSubscriptionId() { console.log(`[Repository] Loading selected subscription ID from localStorage`); const selectedSubscriptionId = localStorage.getItem('selectedSubscriptionId'); return (selectedSubscriptionId) ? selectedSubscriptionId : ""; } saveSelectedSubscriptionId(selectedSubscriptionId) { console.log(`[Repository] Saving selected subscription ${selectedSubscriptionId} to localStorage`); localStorage.setItem('selectedSubscriptionId', selectedSubscriptionId); } setMinPriority(minPriority) { localStorage.setItem('minPriority', minPriority.toString()); } getMinPriority() { const minPriority = localStorage.getItem('minPriority'); return (minPriority) ? Number(minPriority) : 1; } setDeleteAfter(deleteAfter) { localStorage.setItem('deleteAfter', deleteAfter.toString()); } getDeleteAfter() { const deleteAfter = localStorage.getItem('deleteAfter'); return (deleteAfter) ? Number(deleteAfter) : 604800; // Default is one week } } const repository = new Repository(); export default repository;