diff --git a/src/modules/userModule.js b/src/modules/userModule.js new file mode 100644 index 0000000..71e8d7e --- /dev/null +++ b/src/modules/userModule.js @@ -0,0 +1,104 @@ +import { getSettings } from '@/api' + +function setLocalStorageByKey(key, value) { + if (value instanceof Object || value instanceof Array) { + value = JSON.stringify(value) + } + const buff = Buffer.from(value) + const encodedValue = buff.toString('base64') + localStorage.setItem(key, encodedValue) +} + +function getLocalStorageByKey(key) { + const encodedValue = localStorage.getItem(key) + if (encodedValue == null) { + return undefined + } + const buff = new Buffer(encodedValue, 'base64') + const value = buff.toString('utf-8') + + try { + return JSON.parse(value) + } catch { + return value + } +} + +const ifMissingSettingsAndTokenExistsFetchSettings = + () => getLocalStorageByKey('token') ? getSettings() : null + +export default { + namespaced: true, + state: { + admin: false, + settings: undefined, + username: undefined, + plex_userid: undefined + }, + getters: { + admin: (state) => { + return state.admin + }, + settings: (state, foo, bar) => { + console.log('is this called?') + const settings = state.settings || getLocalStorageByKey('settings') + if (settings instanceof Object) { + return settings + } + + ifMissingSettingsAndTokenExistsFetchSettings() + return undefined + }, + username: (state) => { + const settings = state.settings || getLocalStorageByKey('settings') + + if (settings instanceof Object && settings.hasOwnProperty('user_name')) { + return settings.user_name + } + + ifMissingSettingsAndTokenExistsFetchSettings() + return undefined + }, + plex_userid: (state) => { + const settings = state.settings || getLocalStorageByKey('settings') + console.log('plex_userid from store', settings) + + if (settings instanceof Object && settings.hasOwnProperty('plex_userid')) { + return settings.plex_userid + } + + ifMissingSettingsAndTokenExistsFetchSettings() + return undefined + } + }, + mutations: { + SET_ADMIN: (state, isAdmin) => { + state.admin = isAdmin + }, + SET_USERNAME: (state, username) => { + state.username = username + console.log('username') + setLocalStorageByKey('username', username) + }, + SET_SETTINGS: (state, settings) => { + state.settings = settings + console.log('settings') + setLocalStorageByKey('settings', settings) + } + }, + actions: { + setAdmin: ({commit}, isAdmin) => { + if (!(isAdmin instanceof Object)) { + throw "Parameter is not a boolean value." + } + commit('SET_ADMIN', isAdmin) + }, + setSettings: ({commit}, settings) => { + console.log('settings input', settings) + if (!(settings instanceof Object)) { + throw "Parameter is not a object." + } + commit('SET_SETTINGS', settings) + } + } +} \ No newline at end of file diff --git a/src/store.js b/src/store.js index 32e0e3d..aaba307 100644 --- a/src/store.js +++ b/src/store.js @@ -1,17 +1,19 @@ import Vue from 'vue' import Vuex from 'vuex' -import torrentModule from './modules/torrentModule' import darkmodeModule from './modules/darkmodeModule' import documentTitle from './modules/documentTitle' +import torrentModule from './modules/torrentModule' +import userModule from './modules/userModule' Vue.use(Vuex) const store = new Vuex.Store({ modules: { - torrentModule, darkmodeModule, - documentTitle + documentTitle, + torrentModule, + userModule } })