Skip to content

Commit fd90557

Browse files
committed
change default settings to preferences per user via cookies
1 parent 1f62b39 commit fd90557

File tree

5 files changed

+53
-83
lines changed

5 files changed

+53
-83
lines changed

src/main/java/io/jenkins/plugins/agent_build_history/AgentBuildHistory.java

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.kohsuke.stapler.Stapler;
2424
import org.kohsuke.stapler.StaplerRequest;
2525

26+
import javax.servlet.http.Cookie;
2627
import java.util.ArrayList;
2728
import java.util.List;
2829
import java.util.concurrent.TimeUnit;
@@ -43,6 +44,18 @@ public AgentBuildHistory(Computer computer) {
4344
LOGGER.log(Level.CONFIG, () -> "Creating AgentBuildHistory for " + computer.getName());
4445
}
4546

47+
public static String getCookieValue(StaplerRequest req, String name, String defaultValue) {
48+
Cookie[] cookies = req.getCookies();
49+
if (cookies != null) {
50+
for (Cookie cookie : cookies) {
51+
if (cookie.getName().equals(name)) {
52+
return cookie.getValue();
53+
}
54+
}
55+
}
56+
return defaultValue; // Fallback to default if cookie not found
57+
}
58+
4659
/*
4760
* used by jelly
4861
*/
@@ -75,9 +88,9 @@ public RunListTable getHandler() {
7588
//Get Parameters from URL
7689
StaplerRequest req = Stapler.getCurrentRequest();
7790
int page = req.getParameter("page") != null ? Integer.parseInt(req.getParameter("page")) : 1;
78-
int pageSize = req.getParameter("pageSize") != null ? Integer.parseInt(req.getParameter("pageSize")) : AgentBuildHistoryConfig.get().getEntriesPerPage();
79-
String sortColumn = req.getParameter("sortColumn") != null ? req.getParameter("sortColumn") : AgentBuildHistoryConfig.get().getDefaultSortColumn();
80-
String sortOrder = req.getParameter("sortOrder") != null ? req.getParameter("sortOrder") : AgentBuildHistoryConfig.get().getDefaultSortOrder();
91+
int pageSize = req.getParameter("pageSize") != null ? Integer.parseInt(req.getParameter("pageSize")) : Integer.parseInt(getCookieValue(req, "pageSize", "20"));
92+
String sortColumn = req.getParameter("sortColumn") != null ? req.getParameter("sortColumn") : getCookieValue(req, "sortColumn", "startTime");
93+
String sortOrder = req.getParameter("sortOrder") != null ? req.getParameter("sortOrder") : getCookieValue(req, "sortOrder", "desc");
8194
//Update totalPages depending on pageSize
8295
int totalEntries = BuildHistoryFileManager.readIndexFile(computer.getName(), AgentBuildHistoryConfig.get().getStorageDir()).size();
8396
totalPages = (int) Math.ceil((double) totalEntries / pageSize);
@@ -223,24 +236,6 @@ public static void startJobExecution(Computer c, Run<?, ?> run) {
223236
public static void startFlowNodeExecution(Computer c, WorkflowRun run, FlowNode node) {
224237
BuildHistoryFileManager.addRunToNodeIndex(c.getName(), run, AgentBuildHistoryConfig.get().getStorageDir());
225238
}
226-
/*
227-
used by jelly
228-
*/
229-
public int getEntriesPerPage() {
230-
return AgentBuildHistoryConfig.get().getEntriesPerPage();
231-
}
232-
/*
233-
used by jelly
234-
*/
235-
public String getDefaultSortColumn() {
236-
return AgentBuildHistoryConfig.get().getDefaultSortColumn();
237-
}
238-
/*
239-
used by jelly
240-
*/
241-
public String getDefaultSortOrder() {
242-
return AgentBuildHistoryConfig.get().getDefaultSortOrder();
243-
}
244239

245240
@Override
246241
public String getIconFileName() {
Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.jenkins.plugins.agent_build_history;
22

33
import hudson.Extension;
4-
import hudson.util.ListBoxModel;
54
import jenkins.model.GlobalConfiguration;
65
import jenkins.model.Jenkins;
76
import org.kohsuke.stapler.DataBoundSetter;
@@ -15,9 +14,6 @@ public class AgentBuildHistoryConfig extends GlobalConfiguration {
1514
private static final Logger LOGGER = Logger.getLogger(AgentBuildHistoryConfig.class.getName());
1615

1716
private String storageDir = getDefaultStorageDir();
18-
private int entriesPerPage = 20;
19-
private String defaultSortColumn = "startTime";
20-
private String defaultSortOrder = "desc";
2117

2218
public AgentBuildHistoryConfig() {
2319
load(); // Load the persisted configuration
@@ -61,53 +57,9 @@ public void setStorageDir(String storageDir) {
6157
}
6258
}
6359

64-
public int getEntriesPerPage() {
65-
return entriesPerPage;
66-
}
67-
68-
@DataBoundSetter
69-
public void setEntriesPerPage(int entriesPerPage) {
70-
this.entriesPerPage = entriesPerPage;
71-
save(); // Save the configuration
72-
}
73-
74-
public String getDefaultSortColumn() {
75-
return defaultSortColumn;
76-
}
77-
78-
@DataBoundSetter
79-
public void setDefaultSortColumn(String defaultSortColumn) {
80-
this.defaultSortColumn = defaultSortColumn;
81-
save(); // Save the configuration
82-
}
83-
84-
public String getDefaultSortOrder() {
85-
return defaultSortOrder;
86-
}
87-
88-
@DataBoundSetter
89-
public void setDefaultSortOrder(String defaultSortOrder) {
90-
this.defaultSortOrder = defaultSortOrder;
91-
save(); // Save the configuration
92-
}
93-
9460
// Static method to access the configuration instance
9561
public static AgentBuildHistoryConfig get() {
9662
return GlobalConfiguration.all().get(AgentBuildHistoryConfig.class);
9763
}
98-
99-
public ListBoxModel doFillDefaultSortColumnItems() {
100-
ListBoxModel items = new ListBoxModel();
101-
items.add("Start Time", "startTime");
102-
items.add("Build Name and Build Number", "build");
103-
return items;
104-
}
105-
106-
public ListBoxModel doFillDefaultSortOrderItems() {
107-
ListBoxModel items = new ListBoxModel();
108-
items.add("Ascending", "asc");
109-
items.add("Descending", "desc");
110-
return items;
111-
}
11264
}
11365

src/main/resources/io/jenkins/plugins/agent_build_history/AgentBuildHistory/index.jelly

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@
3636
<l:progressiveRendering handler="${it.handler}" callback="abhDisplayExtendedBuildHistory"/>
3737
<!-- Pagination Controls -->
3838
<j:set var="page" value="${request.getParameter('page') != null ? request.getParameter('page') : 1}"/>
39-
<j:set var="pageSize" value="${request.getParameter('pageSize') != null ? request.getParameter('pageSize') : it.entriesPerPage}"/>
39+
<j:set var="pageSize" value="${request.getParameter('pageSize') != null ? request.getParameter('pageSize') : h.getCookie(request, 'pageSize', '20')}"/>
4040
<j:set var="totalPages" value="${it.totalPages}"/>
41-
<j:set var="sortColumn" value="${request.getParameter('sortColumn') != null ? request.getParameter('sortColumn') : it.defaultSortColumn}"/>
42-
<j:set var="sortOrder" value="${request.getParameter('sortOrder') != null ? request.getParameter('sortOrder') : it.defaultSortOrder}"/>
41+
<j:set var="sortColumn" value="${request.getParameter('sortColumn') != null ? request.getParameter('sortColumn') : h.getCookie(request, 'sortColumn', 'startTime')}"/>
42+
<j:set var="sortOrder" value="${request.getParameter('sortOrder') != null ? request.getParameter('sortOrder') : h.getCookie(request, 'sortOrder', 'desc')}"/>
4343
<div class="abh-pagination-container">
4444
<!-- Pagination Previous/Next Buttons -->
4545
<nav aria-label="Page navigation" class="abh-pagination">
@@ -99,8 +99,12 @@
9999
${%Started}
100100
<j:if test="${sortColumn == 'startTime'}">
101101
<j:choose>
102-
<j:when test="${sortOrder == 'asc'}"> <span class="sortarrow" style="font-size: large;"> ↑</span> <!-- Up arrow for ascending order --></j:when>
103-
<j:otherwise> <span class="sortarrow" style="font-size: large;"> ↓</span> <!-- Down arrow for descending order --></j:otherwise>
102+
<j:when test="${sortOrder == 'asc'}">
103+
<span class="sortarrow" style="font-size: large;"> ↑</span> <!-- Up arrow for ascending order -->
104+
</j:when>
105+
<j:otherwise>
106+
<span class="sortarrow" style="font-size: large;"> ↓</span> <!-- Down arrow for descending order -->
107+
</j:otherwise>
104108
</j:choose>
105109
</j:if>
106110
</a>

src/main/resources/io/jenkins/plugins/agent_build_history/AgentBuildHistoryConfig/config.jelly

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,5 @@
55
<f:textbox />
66
</f:entry>
77
<p class="info">Note: On storage directory change, old data must be removed manually. A new synchronization will start on the next access to the Agent History.</p>
8-
<f:entry title="Default Entries per Page" field="entriesPerPage">
9-
<f:number min="1" default="30"/>
10-
</f:entry>
11-
<f:entry title="Default Sort Column">
12-
<f:select field="defaultSortColumn"/>
13-
</f:entry>
14-
<f:entry title="Default Sort Order">
15-
<f:select field="defaultSortOrder"/>
16-
</f:entry>
178
</f:section>
189
</j:jelly>

src/main/resources/io/jenkins/plugins/agent_build_history/agentBuildHistory.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,12 @@ window.abhDisplayExtendedBuildHistory = function(data) {
171171
ts_refresh(table);
172172
};
173173

174+
function setCookie(name, value) {
175+
const expires = new Date();
176+
expires.setFullYear(expires.getFullYear() + 1); // Cookie expires in 1 year
177+
document.cookie = `${name}=${encodeURIComponent(value)}; expires=${expires.toUTCString()}; path=/`;
178+
}
179+
174180
document.addEventListener("DOMContentLoaded", function () {
175181
const pageSizeInput = document.getElementById("pageSizeInput");
176182
const pageInput = document.getElementById("pageInput");
@@ -179,6 +185,7 @@ document.addEventListener("DOMContentLoaded", function () {
179185
if (pageSizeInput) {
180186
pageSizeInput.addEventListener("change", function () {
181187
const pageSize = pageSizeInput.value;
188+
setCookie("pageSize", pageSize);
182189
const page = 1; // Reset to the first page when page size changes
183190
const sortColumn = pageSizeInput.getAttribute('data-sort-column');
184191
const sortOrder = pageSizeInput.getAttribute('data-sort-order');
@@ -200,5 +207,26 @@ document.addEventListener("DOMContentLoaded", function () {
200207
window.location.href = newUrl;
201208
});
202209
}
210+
const sortLinks = document.querySelectorAll('.sortheader');
211+
sortLinks.forEach(function (link) {
212+
link.addEventListener('click', function (event) {
213+
event.preventDefault(); // Prevent default link behavior
214+
215+
const urlParams = new URLSearchParams(link.search);
216+
const sortColumn = urlParams.get('sortColumn');
217+
const sortOrder = urlParams.get('sortOrder');
218+
219+
// Set cookies for sortColumn and sortOrder
220+
setCookie("sortColumn", sortColumn);
221+
setCookie("sortOrder", sortOrder);
222+
223+
// Redirect to the new URL with sorting parameters
224+
const pageSize = pageSizeInput ? pageSizeInput.value : '20';
225+
const page = pageInput ? pageInput.value : '1';
226+
227+
const newUrl = `${window.location.pathname}?page=${page}&pageSize=${pageSize}&sortColumn=${sortColumn}&sortOrder=${sortOrder}`;
228+
window.location.href = newUrl;
229+
});
230+
});
203231
});
204232

0 commit comments

Comments
 (0)