* Move push notifications settings * fix typo `setf` -> `set`
This commit is contained in:
		
							parent
							
								
									3a52c90de1
								
							
						
					
					
						commit
						cdae7e4c8b
					
				
					 3 changed files with 54 additions and 27 deletions
				
			
		|  | @ -1,5 +1,5 @@ | |||
| import axios from 'axios'; | ||||
| import { setSettingsToLocalStorage } from '../web_push_subscription'; | ||||
| import { pushNotificationsSetting } from '../settings'; | ||||
| 
 | ||||
| export const SET_BROWSER_SUPPORT = 'PUSH_NOTIFICATIONS_SET_BROWSER_SUPPORT'; | ||||
| export const SET_SUBSCRIPTION = 'PUSH_NOTIFICATIONS_SET_SUBSCRIPTION'; | ||||
|  | @ -50,7 +50,7 @@ export function saveSettings() { | |||
|     }).then(() => { | ||||
|       const me = getState().getIn(['meta', 'me']); | ||||
|       if (me) { | ||||
|         setSettingsToLocalStorage(me, data); | ||||
|         pushNotificationsSetting.set(me, data); | ||||
|       } | ||||
|     }); | ||||
|   }; | ||||
|  |  | |||
							
								
								
									
										46
									
								
								app/javascript/mastodon/settings.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								app/javascript/mastodon/settings.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,46 @@ | |||
| export default class Settings { | ||||
| 
 | ||||
|   constructor(keyBase = null) { | ||||
|     this.keyBase = keyBase; | ||||
|   } | ||||
| 
 | ||||
|   generateKey(id) { | ||||
|     return this.keyBase ? [this.keyBase, `id${id}`].join('.') : id; | ||||
|   } | ||||
| 
 | ||||
|   set(id, data) { | ||||
|     const key = this.generateKey(id); | ||||
|     try { | ||||
|       const encodedData = JSON.stringify(data); | ||||
|       localStorage.setItem(key, encodedData); | ||||
|       return data; | ||||
|     } catch (e) { | ||||
|       return null; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   get(id) { | ||||
|     const key = this.generateKey(id); | ||||
|     try { | ||||
|       const rawData = localStorage.getItem(key); | ||||
|       return JSON.parse(rawData); | ||||
|     } catch (e) { | ||||
|       return null; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   remove(id) { | ||||
|     const data = this.get(id); | ||||
|     if (data) { | ||||
|       const key = this.generateKey(id); | ||||
|       try { | ||||
|         localStorage.removeItem(key); | ||||
|       } catch (e) { | ||||
|       } | ||||
|     } | ||||
|     return data; | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| export const pushNotificationsSetting = new Settings('mastodon_push_notification_data'); | ||||
|  | @ -1,6 +1,7 @@ | |||
| import axios from 'axios'; | ||||
| import { store } from './containers/mastodon'; | ||||
| import { setBrowserSupport, setSubscription, clearSubscription } from './actions/push_notifications'; | ||||
| import { pushNotificationsSetting } from './settings'; | ||||
| 
 | ||||
| // Taken from https://www.npmjs.com/package/web-push
 | ||||
| const urlBase64ToUint8Array = (base64String) => { | ||||
|  | @ -40,7 +41,7 @@ const sendSubscriptionToBackend = (subscription) => { | |||
| 
 | ||||
|   const me = store.getState().getIn(['meta', 'me']); | ||||
|   if (me) { | ||||
|     const data = getSettingsFromLocalStorage(me); | ||||
|     const data = pushNotificationsSetting.get(me); | ||||
|     if (data) { | ||||
|       params.data = data; | ||||
|     } | ||||
|  | @ -52,16 +53,14 @@ const sendSubscriptionToBackend = (subscription) => { | |||
| // Last one checks for payload support: https://web-push-book.gauntface.com/chapter-06/01-non-standards-browsers/#no-payload
 | ||||
| const supportsPushNotifications = ('serviceWorker' in navigator && 'PushManager' in window && 'getKey' in PushSubscription.prototype); | ||||
| 
 | ||||
| const SUBSCRIPTION_DATA_STORAGE_KEY = 'mastodon_push_notification_data'; | ||||
| 
 | ||||
| export function register () { | ||||
|   store.dispatch(setBrowserSupport(supportsPushNotifications)); | ||||
|   const me = store.getState().getIn(['meta', 'me']); | ||||
| 
 | ||||
|   if (me && !getSettingsFromLocalStorage(me)) { | ||||
|   if (me && !pushNotificationsSetting.get(me)) { | ||||
|     const alerts = store.getState().getIn(['push_notifications', 'alerts']); | ||||
|     if (alerts) { | ||||
|       setSettingsToLocalStorage(me, { alerts: alerts }); | ||||
|       pushNotificationsSetting.set(me, { alerts: alerts }); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|  | @ -99,7 +98,7 @@ export function register () { | |||
|         if (!(subscription instanceof PushSubscription)) { | ||||
|           store.dispatch(setSubscription(subscription)); | ||||
|           if (me) { | ||||
|             setSettingsToLocalStorage(me, { alerts: subscription.alerts }); | ||||
|             pushNotificationsSetting.set(me, { alerts: subscription.alerts }); | ||||
|           } | ||||
|         } | ||||
|       }) | ||||
|  | @ -113,7 +112,7 @@ export function register () { | |||
|         // Clear alerts and hide UI settings
 | ||||
|         store.dispatch(clearSubscription()); | ||||
|         if (me) { | ||||
|           removeSettingsFromLocalStorage(me); | ||||
|           pushNotificationsSetting.remove(me); | ||||
|         } | ||||
| 
 | ||||
|         try { | ||||
|  | @ -128,21 +127,3 @@ export function register () { | |||
|     console.warn('Your browser does not support Web Push Notifications.'); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| export function setSettingsToLocalStorage(id, data) { | ||||
|   try { | ||||
|     localStorage.setItem(`${SUBSCRIPTION_DATA_STORAGE_KEY}_${id}`, JSON.stringify(data)); | ||||
|   } catch (e) {} | ||||
| } | ||||
| 
 | ||||
| export function getSettingsFromLocalStorage(id) { | ||||
|   try { | ||||
|     return JSON.parse(localStorage.getItem(`${SUBSCRIPTION_DATA_STORAGE_KEY}_${id}`)); | ||||
|   } catch (e) {} | ||||
| 
 | ||||
|   return null; | ||||
| } | ||||
| 
 | ||||
| export function removeSettingsFromLocalStorage(id) { | ||||
|   localStorage.removeItem(`${SUBSCRIPTION_DATA_STORAGE_KEY}_${id}`); | ||||
| } | ||||
|  |  | |||
		Reference in a new issue