1
1
import { defineStore , storeToRefs } from 'pinia' ;
2
2
3
- import { computed , reactive , ref } from 'vue' ;
3
+ import { computed , reactive , ref , watch } from 'vue' ;
4
4
5
5
import type { UserSetting } from '~/models/trakt-service.model' ;
6
6
7
+ import { TraktService } from '~/services/trakt.service' ;
7
8
import { storage } from '~/utils/browser/browser-storage.utils' ;
8
9
9
10
type UserSettings = Record < string , UserSetting > ;
@@ -16,20 +17,36 @@ export const useUserSettingsStore = defineStore('settings.user', () => {
16
17
17
18
const userSetting = computed ( ( ) => userSettings [ user . value ] ) ;
18
19
20
+ /**
21
+ * Save the current user settings to chrome storage
22
+ * @param _settings
23
+ * @param account
24
+ */
19
25
const syncSetUser = ( _settings : UserSetting = userSetting . value , account : string = _settings ?. user ?. username ?? user . value ) => {
20
26
const _lastUser = storage . sync . set ( `settings.last-user` , account ) ;
21
27
const _setting = storage . sync . set ( `settings.user.${ encodeURIComponent ( account ) } ` , _settings ) ;
22
28
console . info ( 'user-store' , 'Saving user' , account , JSON . parse ( JSON . stringify ( _settings ) ) ) ;
23
29
return Promise . all ( [ _lastUser , _setting ] ) ;
24
30
} ;
25
31
32
+ /**
33
+ * Clear the last user from chrome storage
34
+ */
26
35
const syncClearLastUser = ( ) => storage . sync . remove ( `settings.last-user` ) ;
27
36
37
+ /**
38
+ * Clear a specific user from chrome storage
39
+ * @param account
40
+ */
28
41
const syncClearUser = ( account ?: string ) => {
29
42
console . info ( 'user-store' , 'Clearing user' , account ) ;
30
43
return storage . sync . remove ( `settings.user${ account ? `.${ encodeURIComponent ( account ) } ` : '' } ` ) ;
31
44
} ;
32
45
46
+ /**
47
+ * Restore a specific user from chrome storage
48
+ * @param account
49
+ */
33
50
const syncRestoreUser = async ( account : string = user . value ) => {
34
51
if ( account === defaultUser ) account = await storage . sync . get < string > ( `settings.last-user` ) ;
35
52
if ( ! account ) account = Object . keys ( userSettings ) . find ( _account => _account !== defaultUser ) ?? defaultUser ;
@@ -41,6 +58,11 @@ export const useUserSettingsStore = defineStore('settings.user', () => {
41
58
return _setting ;
42
59
} ;
43
60
61
+ /**
62
+ * Change the current user settings for a specific account
63
+ * @param _settings
64
+ * @param account
65
+ */
44
66
const setUserSetting = async ( _settings : UserSetting = { } , account : string = _settings ?. user ?. username ?? user . value ) => {
45
67
if ( Object . keys ( _settings ) . length < 1 ) {
46
68
delete userSettings [ account ] ;
@@ -55,6 +77,9 @@ export const useUserSettingsStore = defineStore('settings.user', () => {
55
77
return syncSetUser ( userSettings [ account ] , account ) ;
56
78
} ;
57
79
80
+ /**
81
+ * Restore all users from chrome storage
82
+ */
58
83
const syncRestoreAllUsers = async ( ) => {
59
84
const restored = await storage . sync . getAll < UserSettings > ( 'settings.user.' ) ;
60
85
@@ -68,6 +93,10 @@ export const useUserSettingsStore = defineStore('settings.user', () => {
68
93
} ) ;
69
94
} ;
70
95
96
+ /**
97
+ * Change the current user
98
+ * @param account
99
+ */
71
100
const setCurrentUser = ( account ?: string ) => {
72
101
console . info ( 'user-store' , 'Setting current user' , JSON . parse ( JSON . stringify ( userSettings ) ) ) ;
73
102
@@ -78,6 +107,12 @@ export const useUserSettingsStore = defineStore('settings.user', () => {
78
107
return setUserSetting ( userSettings [ account ] , account ) ;
79
108
} ;
80
109
110
+ // Propagate user change to http service
111
+ watch ( user , _user => {
112
+ console . info ( 'user changed' , _user ) ;
113
+ TraktService . changeUser ( _user ) ;
114
+ } ) ;
115
+
81
116
return { user, userSettings, userSetting, setUserSetting, syncSetUser, syncRestoreUser, syncRestoreAllUsers, setCurrentUser } ;
82
117
} ) ;
83
118
0 commit comments