4
4
# SPDX-License-Identifier: GPL-2.0-or-later
5
5
6
6
from django .contrib import messages
7
+ from django .contrib .auth .models import User
7
8
from django .http import Http404
8
9
from django .http import HttpResponse
9
10
from django .http import HttpResponseForbidden
16
17
from patchwork .forms import PatchForm
17
18
from patchwork .models import Cover
18
19
from patchwork .models import Patch
20
+ from patchwork .models import PatchAttentionSet
19
21
from patchwork .models import Project
20
22
from patchwork .views import generic_list
21
23
from patchwork .views import set_bundle
@@ -61,6 +63,10 @@ def patch_detail(request, project_id, msgid):
61
63
62
64
editable = patch .is_editable (request .user )
63
65
context = {'project' : patch .project }
66
+ is_maintainer = (
67
+ request .user .is_authenticated
68
+ and project in request .user .profile .maintainer_projects .all ()
69
+ )
64
70
65
71
form = None
66
72
create_bundle_form = None
@@ -80,6 +86,50 @@ def patch_detail(request, project_id, msgid):
80
86
errors = set_bundle (
81
87
request , project , action , request .POST , [patch ]
82
88
)
89
+ elif action in ['add-interest' , 'remove-interest' ]:
90
+ if request .user .is_authenticated :
91
+ if action == 'add-interest' :
92
+ PatchAttentionSet .objects .get_or_create (
93
+ patch = patch , user = request .user
94
+ )
95
+ message = (
96
+ 'You have declared interest in reviewing this patch'
97
+ )
98
+ else :
99
+ user_id = request .POST .get ('attention_set' )
100
+
101
+ if is_maintainer or user_id == str (request .user .id ):
102
+ rm_user = User .objects .get (pk = user_id )
103
+ PatchAttentionSet .objects .filter (
104
+ patch = patch , user = rm_user
105
+ ).delete ()
106
+
107
+ rm_user_name = (
108
+ f"'{ rm_user .username } '"
109
+ if rm_user != request .user
110
+ else 'yourself'
111
+ )
112
+ message = (
113
+ f"You removed { rm_user_name } from patch's "
114
+ 'attention list'
115
+ )
116
+
117
+ patch .save ()
118
+ messages .success (
119
+ request ,
120
+ message ,
121
+ )
122
+ else :
123
+ messages .error (
124
+ request ,
125
+ "You can't remove another user interest in this "
126
+ 'patch' ,
127
+ )
128
+ else :
129
+ messages .error (
130
+ request ,
131
+ 'You must be logged in to change the user attention list.' ,
132
+ )
83
133
84
134
elif not editable :
85
135
return HttpResponseForbidden ()
@@ -93,6 +143,13 @@ def patch_detail(request, project_id, msgid):
93
143
if request .user .is_authenticated :
94
144
context ['bundles' ] = request .user .bundles .all ()
95
145
146
+ attention_set = [
147
+ data .user for data in PatchAttentionSet .objects .filter (patch = patch )
148
+ ]
149
+
150
+ context ['attention_set' ] = attention_set
151
+ context ['is_maintainer' ] = is_maintainer
152
+
96
153
comments = patch .comments .all ()
97
154
comments = comments .select_related ('submitter' )
98
155
comments = comments .only (
0 commit comments