9
9
"time"
10
10
11
11
"code.gitea.io/gitea/modules/timeutil"
12
+
13
+ "xorm.io/xorm"
12
14
)
13
15
14
16
// Stopwatch represents a stopwatch for time tracking.
@@ -61,20 +63,36 @@ func StopwatchExists(userID, issueID int64) bool {
61
63
62
64
// HasUserStopwatch returns true if the user has a stopwatch
63
65
func HasUserStopwatch (userID int64 ) (exists bool , sw * Stopwatch , err error ) {
66
+ return hasUserStopwatch (x , userID )
67
+ }
68
+
69
+ func hasUserStopwatch (e Engine , userID int64 ) (exists bool , sw * Stopwatch , err error ) {
64
70
sw = new (Stopwatch )
65
- exists , err = x .
71
+ exists , err = e .
66
72
Where ("user_id = ?" , userID ).
67
73
Get (sw )
68
74
return
69
75
}
70
76
71
77
// CreateOrStopIssueStopwatch will create or remove a stopwatch and will log it into issue's timeline.
72
78
func CreateOrStopIssueStopwatch (user * User , issue * Issue ) error {
73
- sw , exists , err := getStopwatch (x , user .ID , issue .ID )
79
+ sess := x .NewSession ()
80
+ defer sess .Close ()
81
+ if err := sess .Begin (); err != nil {
82
+ return err
83
+ }
84
+ if err := createOrStopIssueStopwatch (sess , user , issue ); err != nil {
85
+ return err
86
+ }
87
+ return sess .Commit ()
88
+ }
89
+
90
+ func createOrStopIssueStopwatch (e * xorm.Session , user * User , issue * Issue ) error {
91
+ sw , exists , err := getStopwatch (e , user .ID , issue .ID )
74
92
if err != nil {
75
93
return err
76
94
}
77
- if err := issue .loadRepo (x ); err != nil {
95
+ if err := issue .loadRepo (e ); err != nil {
78
96
return err
79
97
}
80
98
@@ -90,11 +108,11 @@ func CreateOrStopIssueStopwatch(user *User, issue *Issue) error {
90
108
Time : timediff ,
91
109
}
92
110
93
- if _ , err := x .Insert (tt ); err != nil {
111
+ if _ , err := e .Insert (tt ); err != nil {
94
112
return err
95
113
}
96
114
97
- if _ , err := CreateComment ( & CreateCommentOptions {
115
+ if _ , err := createComment ( e , & CreateCommentOptions {
98
116
Doer : user ,
99
117
Issue : issue ,
100
118
Repo : issue .Repo ,
@@ -104,21 +122,21 @@ func CreateOrStopIssueStopwatch(user *User, issue *Issue) error {
104
122
}); err != nil {
105
123
return err
106
124
}
107
- if _ , err := x .Delete (sw ); err != nil {
125
+ if _ , err := e .Delete (sw ); err != nil {
108
126
return err
109
127
}
110
128
} else {
111
129
// if another stopwatch is running: stop it
112
- exists , sw , err := HasUserStopwatch ( user .ID )
130
+ exists , sw , err := hasUserStopwatch ( e , user .ID )
113
131
if err != nil {
114
132
return err
115
133
}
116
134
if exists {
117
- issue , err := getIssueByID (x , sw .IssueID )
135
+ issue , err := getIssueByID (e , sw .IssueID )
118
136
if err != nil {
119
137
return err
120
138
}
121
- if err := CreateOrStopIssueStopwatch ( user , issue ); err != nil {
139
+ if err := createOrStopIssueStopwatch ( e , user , issue ); err != nil {
122
140
return err
123
141
}
124
142
}
@@ -129,11 +147,11 @@ func CreateOrStopIssueStopwatch(user *User, issue *Issue) error {
129
147
IssueID : issue .ID ,
130
148
}
131
149
132
- if _ , err := x .Insert (sw ); err != nil {
150
+ if _ , err := e .Insert (sw ); err != nil {
133
151
return err
134
152
}
135
153
136
- if _ , err := CreateComment ( & CreateCommentOptions {
154
+ if _ , err := createComment ( e , & CreateCommentOptions {
137
155
Doer : user ,
138
156
Issue : issue ,
139
157
Repo : issue .Repo ,
@@ -147,21 +165,33 @@ func CreateOrStopIssueStopwatch(user *User, issue *Issue) error {
147
165
148
166
// CancelStopwatch removes the given stopwatch and logs it into issue's timeline.
149
167
func CancelStopwatch (user * User , issue * Issue ) error {
150
- sw , exists , err := getStopwatch (x , user .ID , issue .ID )
168
+ sess := x .NewSession ()
169
+ defer sess .Close ()
170
+ if err := sess .Begin (); err != nil {
171
+ return err
172
+ }
173
+ if err := cancelStopwatch (sess , user , issue ); err != nil {
174
+ return err
175
+ }
176
+ return sess .Commit ()
177
+ }
178
+
179
+ func cancelStopwatch (e * xorm.Session , user * User , issue * Issue ) error {
180
+ sw , exists , err := getStopwatch (e , user .ID , issue .ID )
151
181
if err != nil {
152
182
return err
153
183
}
154
184
155
185
if exists {
156
- if _ , err := x .Delete (sw ); err != nil {
186
+ if _ , err := e .Delete (sw ); err != nil {
157
187
return err
158
188
}
159
189
160
- if err := issue .loadRepo (x ); err != nil {
190
+ if err := issue .loadRepo (e ); err != nil {
161
191
return err
162
192
}
163
193
164
- if _ , err := CreateComment ( & CreateCommentOptions {
194
+ if _ , err := createComment ( e , & CreateCommentOptions {
165
195
Doer : user ,
166
196
Issue : issue ,
167
197
Repo : issue .Repo ,
0 commit comments