44# SPDX-License-Identifier: GPL-2.0-or-later
55
66from django .contrib import messages
7+ from django .contrib .auth .models import User
78from django .http import Http404
89from django .http import HttpResponse
910from django .http import HttpResponseForbidden
1617from patchwork .forms import PatchForm
1718from patchwork .models import Cover
1819from patchwork .models import Patch
20+ from patchwork .models import PatchAttentionSet
1921from patchwork .models import Project
2022from patchwork .views import generic_list
2123from patchwork .views import set_bundle
@@ -61,6 +63,10 @@ def patch_detail(request, project_id, msgid):
6163
6264 editable = patch .is_editable (request .user )
6365 context = {'project' : patch .project }
66+ is_maintainer = (
67+ request .user .is_authenticated
68+ and project in request .user .profile .maintainer_projects .all ()
69+ )
6470
6571 form = None
6672 create_bundle_form = None
@@ -80,6 +86,50 @@ def patch_detail(request, project_id, msgid):
8086 errors = set_bundle (
8187 request , project , action , request .POST , [patch ]
8288 )
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+ )
83133
84134 elif not editable :
85135 return HttpResponseForbidden ()
@@ -93,6 +143,13 @@ def patch_detail(request, project_id, msgid):
93143 if request .user .is_authenticated :
94144 context ['bundles' ] = request .user .bundles .all ()
95145
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+
96153 comments = patch .comments .all ()
97154 comments = comments .select_related ('submitter' )
98155 comments = comments .only (
0 commit comments