|
1 | 1 | import { defineStore } from 'pinia'; |
2 | 2 | import moment, { Moment } from 'moment'; |
3 | 3 | import { getClient } from '~/util/awclient'; |
4 | | -import { Category, defaultCategories } from '~/util/classes'; |
| 4 | +import { Category, defaultCategories, cleanCategory } from '~/util/classes'; |
5 | 5 | import { View, defaultViews } from '~/stores/views'; |
6 | 6 | import { isEqual } from 'lodash'; |
7 | 7 |
|
@@ -109,31 +109,32 @@ export const useSettingsStore = defineStore('settings', { |
109 | 109 | // Fetch from server, fall back to localStorage |
110 | 110 | const server_settings = await client.get_settings(); |
111 | 111 |
|
112 | | - const all_keys = [ |
113 | | - ...Object.keys(localStorage).filter(key => { |
114 | | - // Skip built-in properties like length, setItem, etc. |
115 | | - return Object.prototype.hasOwnProperty.call(localStorage, key); |
116 | | - }), |
117 | | - ...Object.keys(server_settings), |
118 | | - ].filter(key => { |
119 | | - // Skip keys starting with underscore, as they are local to the vuex store. |
120 | | - return !key.startsWith('_'); |
121 | | - }); |
| 112 | + const all_keys = [...Object.keys(localStorage), ...Object.keys(server_settings)].filter( |
| 113 | + key => { |
| 114 | + // Skip keys starting with underscore, as they are local to the vuex store. |
| 115 | + return !key.startsWith('_'); |
| 116 | + } |
| 117 | + ); |
122 | 118 |
|
123 | 119 | const storage = {}; |
124 | 120 | for (const key of all_keys) { |
125 | 121 | // If key is set in server, use that value, otherwise use localStorage |
126 | 122 | const set_in_server = server_settings[key] !== undefined; |
127 | | - const value = set_in_server ? server_settings[key] : localStorage.getItem(key); |
| 123 | + let value = set_in_server ? server_settings[key] : localStorage.getItem(key); |
128 | 124 | //const locstr = set_in_server ? '[server]' : '[localStorage]'; |
129 | 125 | //console.debug(`${locstr} ${key}:`, value); |
130 | 126 |
|
131 | 127 | // Keys ending with 'Data' are JSON-serialized objects in localStorage |
132 | | - if (key.endsWith('Data') && !set_in_server) { |
| 128 | + if ((key.endsWith('Data') || key == 'views' || key == 'classes') && !set_in_server) { |
133 | 129 | try { |
134 | | - storage[key] = JSON.parse(value); |
| 130 | + value = JSON.parse(value); |
| 131 | + // Needed due to https://github.com/ActivityWatch/activitywatch/issues/1067 |
| 132 | + if (key == 'classes') { |
| 133 | + value = value.map(cleanCategory); |
| 134 | + } |
| 135 | + storage[key] = value; |
135 | 136 | } catch (e) { |
136 | | - console.error('failed to parse', key, value); |
| 137 | + console.error('failed to parse', key, value, e); |
137 | 138 | } |
138 | 139 | } else if (value === 'true' || value === 'false') { |
139 | 140 | storage[key] = value === 'true'; |
|
0 commit comments