Skip to content

Commit 54769b7

Browse files
authored
fix: fixes issue with migrating category settings to the server (#583)
fixes ActivityWatch/activitywatch#1067
1 parent 05c25c9 commit 54769b7

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

src/stores/settings.ts

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { defineStore } from 'pinia';
22
import moment, { Moment } from 'moment';
33
import { getClient } from '~/util/awclient';
4-
import { Category, defaultCategories } from '~/util/classes';
4+
import { Category, defaultCategories, cleanCategory } from '~/util/classes';
55
import { View, defaultViews } from '~/stores/views';
66
import { isEqual } from 'lodash';
77

@@ -109,31 +109,32 @@ export const useSettingsStore = defineStore('settings', {
109109
// Fetch from server, fall back to localStorage
110110
const server_settings = await client.get_settings();
111111

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+
);
122118

123119
const storage = {};
124120
for (const key of all_keys) {
125121
// If key is set in server, use that value, otherwise use localStorage
126122
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);
128124
//const locstr = set_in_server ? '[server]' : '[localStorage]';
129125
//console.debug(`${locstr} ${key}:`, value);
130126

131127
// 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) {
133129
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;
135136
} catch (e) {
136-
console.error('failed to parse', key, value);
137+
console.error('failed to parse', key, value, e);
137138
}
138139
} else if (value === 'true' || value === 'false') {
139140
storage[key] = value === 'true';

0 commit comments

Comments
 (0)