@@ -12,14 +12,27 @@ import (
12
12
"golang.org/x/text/language"
13
13
)
14
14
15
+ func queue (
16
+ tasks ... func () error ,
17
+ ) error {
18
+ for _ , t := range tasks {
19
+ if err := t (); err != nil {
20
+ return err
21
+ }
22
+ }
23
+
24
+ return nil
25
+ }
26
+
27
+ // NewCmdInit executes and initialization of the config
15
28
func NewCmdInit (f cmdutil.Factory ) * cobra.Command {
16
29
cmd := & cobra.Command {
17
30
Use : "init" ,
18
31
Short : "Setups the CLI parameters and behavior" ,
19
32
Long : "Setups the CLI parameters with tokens, default workspace, " +
20
33
"user and behaviors" ,
21
34
Args : cobra .ExactArgs (0 ),
22
- RunE : func (cmd * cobra.Command , args []string ) error {
35
+ RunE : func (_ * cobra.Command , _ []string ) error {
23
36
i := f .UI ()
24
37
config := f .Config ()
25
38
@@ -40,199 +53,202 @@ func NewCmdInit(f cmdutil.Factory) *cobra.Command {
40
53
return err
41
54
}
42
55
43
- ws , err := c .GetWorkspaces (api.GetWorkspaces {})
44
- if err != nil {
45
- return err
46
- }
47
-
48
- dWorkspace := ""
49
- wsString := make ([]string , len (ws ))
50
- for i := range ws {
51
- wsString [i ] = fmt .Sprintf ("%s - %s" , ws [i ].ID , ws [i ].Name )
52
-
53
- if ws [i ].ID == config .GetString (cmdutil .CONF_WORKSPACE ) {
54
- dWorkspace = wsString [i ]
55
- }
56
- }
57
-
58
- w := ""
59
- if w , err = i .AskFromOptions ("Choose default Workspace:" ,
60
- wsString , dWorkspace ); err != nil {
61
- return err
62
- }
63
- config .SetString (cmdutil .CONF_WORKSPACE ,
64
- strings .TrimSpace (w [0 :strings .Index (w , " - " )]))
65
-
66
- users , err := c .WorkspaceUsers (api.WorkspaceUsersParam {
67
- Workspace : config .GetString (cmdutil .CONF_WORKSPACE ),
68
- PaginationParam : api .AllPages (),
69
- })
70
-
71
- if err != nil {
72
- return err
73
- }
74
-
75
- userId := config .GetString (cmdutil .CONF_USER_ID )
76
- dUser := ""
77
- usersString := make ([]string , len (users ))
78
- for i := range users {
79
- usersString [i ] = fmt .Sprintf ("%s - %s" , users [i ].ID , users [i ].Name )
80
-
81
- if users [i ].ID == userId {
82
- dUser = usersString [i ]
83
- }
84
- }
85
-
86
- userID := ""
87
- if userID , err = i .AskFromOptions (
88
- "Choose your user:" , usersString , dUser ); err != nil {
89
- return err
90
- }
91
- config .SetString (cmdutil .CONF_USER_ID ,
92
- strings .TrimSpace (userID [0 :strings .Index (userID , " - " )]))
93
-
94
- if err := updateFlag (i , config , cmdutil .CONF_ALLOW_NAME_FOR_ID ,
95
- "Should try to find projects/clients/users/tasks/tags by their names?" ,
56
+ if err := queue (
57
+ func () error { return setWorkspace (c , config , i ) },
58
+ func () error { return setUser (c , config , i ) },
59
+ updateFlag (
60
+ i , config , cmdutil .CONF_ALLOW_NAME_FOR_ID ,
61
+ "Should try to find projects/clients/users/tasks/tags by their names?" ,
62
+ ),
63
+ func () error {
64
+ if ! config .IsAllowNameForID () {
65
+ return nil
66
+ }
67
+
68
+ return updateFlag (i , config ,
69
+ cmdutil .CONF_SEARCH_PROJECTS_WITH_CLIENT_NAME ,
70
+ `Should search projects looking into their ` +
71
+ `client's name too?` ,
72
+ )()
73
+ },
74
+ updateFlag (i , config , cmdutil .CONF_INTERACTIVE ,
75
+ `Should use "Interactive Mode" by default?` ,
76
+ ),
77
+ updateInt (i , config , cmdutil .CONF_INTERACTIVE_PAGE_SIZE ,
78
+ "How many items should be shown when asking for " +
79
+ "projects, tasks or tags?" ),
80
+ func () error { return setWeekdays (config , i ) },
81
+ updateFlag (i , config , cmdutil .CONF_ALLOW_INCOMPLETE ,
82
+ `Should allow starting time entries with incomplete data?` ,
83
+ ),
84
+ updateFlag (i , config , cmdutil .CONF_SHOW_TASKS ,
85
+ `Should show task on time entries as a separated column?` ,
86
+ ),
87
+ updateFlag (i , config , cmdutil .CONF_SHOW_CLIENT ,
88
+ `Should show client on time entries as a separated column?` ,
89
+ ),
90
+ updateFlag (i , config , cmdutil .CONF_SHOW_TOTAL_DURATION ,
91
+ `Should show a line with the sum of ` +
92
+ `the time entries duration?` ,
93
+ ),
94
+ updateFlag (i , config , cmdutil .CONF_DESCR_AUTOCOMP ,
95
+ `Allow description suggestions using ` +
96
+ `recent time entries' descriptions?` ,
97
+ ),
98
+ func () error {
99
+ if ! config .GetBool (cmdutil .CONF_DESCR_AUTOCOMP ) {
100
+ config .SetInt (cmdutil .CONF_DESCR_AUTOCOMP_DAYS , 0 )
101
+ return nil
102
+ }
103
+ return updateInt (
104
+ i , config , cmdutil .CONF_DESCR_AUTOCOMP_DAYS ,
105
+ `How many days should be used for a time entry to be ` +
106
+ `"recent"?` ,
107
+ )()
108
+ },
109
+ updateFlag (i , config , cmdutil .CONF_ALLOW_ARCHIVED_TAGS ,
110
+ "Should suggest and allow creating time entries " +
111
+ "with archived tags?" ,
112
+ ),
113
+ func () error { return setLanguage (i , config ) },
96
114
); err != nil {
97
115
return err
98
116
}
99
117
100
- if config .IsAllowNameForID () {
101
- if err := updateFlag (i , config ,
102
- cmdutil .CONF_SEARCH_PROJECTS_WITH_CLIENT_NAME ,
103
- `Should search projects looking into their ` +
104
- `client's name too?` ,
105
- ); err != nil {
106
- return err
107
- }
108
- }
118
+ return config .Save ()
119
+ },
120
+ }
109
121
110
- if err := updateFlag (i , config , cmdutil .CONF_INTERACTIVE ,
111
- `Should use "Interactive Mode" by default?` ,
112
- ); err != nil {
113
- return err
114
- }
122
+ return cmd
123
+ }
115
124
116
- if err = updateInt (i , config , cmdutil .CONF_INTERACTIVE_PAGE_SIZE ,
117
- "How many items should be shown when asking for " +
118
- "projects, tasks or tags?" ); err != nil {
119
- return err
120
- }
125
+ func setLanguage (i ui.UI , config cmdutil.Config ) error {
126
+ suggestLanguages := []string {
127
+ language .English .String (),
128
+ language .German .String (),
129
+ language .Afrikaans .String (),
130
+ language .Chinese .String (),
131
+ language .Portuguese .String (),
132
+ }
121
133
122
- workweekDays := config .GetStringSlice (cmdutil .CONF_WORKWEEK_DAYS )
123
- if workweekDays , err = i .AskManyFromOptions (
124
- "Which days of the week do you work?" ,
125
- cmdutil .GetWeekdays (),
126
- workweekDays ,
127
- nil ,
128
- ); err != nil {
129
- return err
130
- }
131
- config .SetStringSlice (cmdutil .CONF_WORKWEEK_DAYS , workweekDays )
134
+ lang , err := i .AskForValidText ("What is your preferred language:" ,
135
+ func (s string ) error {
136
+ _ , err := language .Parse (s )
137
+ return err
138
+ },
139
+ ui .WithHelp ("Accepts any IETF language tag " +
140
+ "https://en.wikipedia.org/wiki/IETF_language_tag" ),
141
+ ui .WithSuggestion (func (toComplete string ) []string {
142
+ return strhlp .Filter (
143
+ strhlp .IsSimilar (toComplete ),
144
+ suggestLanguages ,
145
+ )
146
+ }),
147
+ ui .WithDefault (config .Language ().String ()),
148
+ )
149
+ if err != nil {
150
+ return err
151
+ }
132
152
133
- if err := updateFlag (i , config , cmdutil .CONF_ALLOW_INCOMPLETE ,
134
- `Should allow starting time entries with incomplete data?` ,
135
- ); err != nil {
136
- return err
137
- }
153
+ config .SetLanguage (language .MustParse (lang ))
154
+ return nil
155
+ }
138
156
139
- if err := updateFlag (i , config , cmdutil .CONF_SHOW_TASKS ,
140
- `Should show task on time entries as a separated column?` ,
141
- ); err != nil {
142
- return err
143
- }
157
+ func setWeekdays (config cmdutil.Config , i ui.UI ) (err error ) {
158
+ workweekDays := config .GetStringSlice (cmdutil .CONF_WORKWEEK_DAYS )
159
+ if workweekDays , err = i .AskManyFromOptions (
160
+ "Which days of the week do you work?" ,
161
+ cmdutil .GetWeekdays (),
162
+ workweekDays ,
163
+ nil ,
164
+ ); err != nil {
165
+ return err
166
+ }
167
+ config .SetStringSlice (cmdutil .CONF_WORKWEEK_DAYS , workweekDays )
168
+ return nil
169
+ }
144
170
145
- if err := updateFlag ( i , config , cmdutil .CONF_SHOW_CLIENT ,
146
- `Should show client on time entries as a separated column?` ,
147
- ); err != nil {
148
- return err
149
- }
171
+ func setUser ( c api. Client , config cmdutil.Config , i ui. UI ) error {
172
+ users , err := c . WorkspaceUsers (api. WorkspaceUsersParam {
173
+ Workspace : config . GetString ( cmdutil . CONF_WORKSPACE ),
174
+ PaginationParam : api . AllPages (),
175
+ })
150
176
151
- if err := updateFlag (i , config , cmdutil .CONF_SHOW_TOTAL_DURATION ,
152
- `Should show a line with the sum of ` +
153
- `the time entries duration?` ,
154
- ); err != nil {
155
- return err
156
- }
177
+ if err != nil {
178
+ return err
179
+ }
157
180
158
- if err := updateFlag (i , config , cmdutil .CONF_DESCR_AUTOCOMP ,
159
- `Allow description suggestions using ` +
160
- `recent time entries' descriptions?` ,
161
- ); err != nil {
162
- return err
163
- }
181
+ userID := config .GetString (cmdutil .CONF_USER_ID )
182
+ dUser := ""
183
+ usersString := make ([]string , len (users ))
184
+ for i := range users {
185
+ usersString [i ] = fmt .Sprintf ("%s - %s" , users [i ].ID , users [i ].Name )
164
186
165
- if config .GetBool (cmdutil .CONF_DESCR_AUTOCOMP ) {
166
- if err := updateInt (
167
- i , config , cmdutil .CONF_DESCR_AUTOCOMP_DAYS ,
168
- `How many days should be used for a time entry to be ` +
169
- `"recent"?` ,
170
- ); err != nil {
171
- return err
172
- }
173
- } else {
174
- config .SetInt (cmdutil .CONF_DESCR_AUTOCOMP_DAYS , 0 )
175
- }
187
+ if users [i ].ID == userID {
188
+ dUser = usersString [i ]
189
+ }
190
+ }
176
191
177
- if err := updateFlag (i , config , cmdutil .CONF_ALLOW_ARCHIVED_TAGS ,
178
- "Should suggest and allow creating time entries " +
179
- "with archived tags?" ,
180
- ); err != nil {
181
- return err
182
- }
192
+ if userID , err = i .AskFromOptions (
193
+ "Choose your user:" , usersString , dUser ); err != nil {
194
+ return err
195
+ }
183
196
184
- suggestLanguages := []string {
185
- language .English .String (),
186
- language .German .String (),
187
- language .Afrikaans .String (),
188
- language .Chinese .String (),
189
- language .Portuguese .String (),
190
- }
197
+ config .SetString (cmdutil .CONF_USER_ID ,
198
+ strings .TrimSpace (userID [0 :strings .Index (userID , " - " )]))
199
+ return nil
200
+ }
191
201
192
- lang , err := i .AskForValidText ("What is your preferred language:" ,
193
- func (s string ) error {
194
- _ , err := language .Parse (s )
195
- return err
196
- },
197
- ui .WithHelp ("Accepts any IETF language tag " +
198
- "https://en.wikipedia.org/wiki/IETF_language_tag" ),
199
- ui .WithSuggestion (func (toComplete string ) []string {
200
- return strhlp .Filter (
201
- strhlp .IsSimilar (toComplete ),
202
- suggestLanguages ,
203
- )
204
- }),
205
- ui .WithDefault (config .Language ().String ()),
206
- )
207
- if err != nil {
208
- return err
209
- }
202
+ func setWorkspace (c api.Client , config cmdutil.Config , i ui.UI ) error {
203
+ ws , err := c .GetWorkspaces (api.GetWorkspaces {})
204
+ if err != nil {
205
+ return err
206
+ }
210
207
211
- config .SetLanguage (language .MustParse (lang ))
208
+ dWorkspace := ""
209
+ wsString := make ([]string , len (ws ))
210
+ for i := range ws {
211
+ wsString [i ] = fmt .Sprintf ("%s - %s" , ws [i ].ID , ws [i ].Name )
212
212
213
- return config .Save ()
214
- },
213
+ if ws [i ].ID == config .GetString (cmdutil .CONF_WORKSPACE ) {
214
+ dWorkspace = wsString [i ]
215
+ }
215
216
}
216
217
217
- return cmd
218
+ w := ""
219
+ if w , err = i .AskFromOptions ("Choose default Workspace:" ,
220
+ wsString , dWorkspace ); err != nil {
221
+ return err
222
+ }
223
+ config .SetString (cmdutil .CONF_WORKSPACE ,
224
+ strings .TrimSpace (w [0 :strings .Index (w , " - " )]))
225
+ return err
218
226
}
219
227
220
- func updateInt (ui ui.UI , config cmdutil.Config , param , desc string ) error {
221
- value := config .GetInt (param )
222
- value , err := ui .AskForInt (desc , value )
223
- if err != nil {
224
- return err
228
+ func updateInt (ui ui.UI , config cmdutil.Config , param , desc string ,
229
+ ) func () error {
230
+ return func () error {
231
+ value := config .GetInt (param )
232
+ value , err := ui .AskForInt (desc , value )
233
+ if err != nil {
234
+ return err
235
+ }
236
+ config .SetInt (param , value )
237
+ return nil
225
238
}
226
- config .SetInt (param , value )
227
- return nil
228
239
}
229
240
230
241
func updateFlag (
231
- ui ui.UI , config cmdutil.Config , param , description string ) (err error ) {
232
- b := config .GetBool (param )
233
- if b , err = ui .Confirm (description , b ); err != nil {
242
+ ui ui.UI , config cmdutil.Config , param , description string ,
243
+ ) func () error {
244
+ return func () (err error ) {
245
+
246
+ b := config .GetBool (param )
247
+ if b , err = ui .Confirm (description , b ); err != nil {
248
+ return
249
+ }
250
+ config .SetBool (param , b )
234
251
return
235
252
}
236
- config .SetBool (param , b )
237
- return
253
+
238
254
}
0 commit comments