implemented option to list tasks without rendering markdown

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2026-03-11 18:26:33 +01:00
parent b73fb7c716
commit e4a9463307
3 changed files with 25 additions and 11 deletions

View File

@@ -228,20 +228,19 @@ public class Task implements Mappable {
return tags; return tags;
} }
@Override public Map<String,Object> toMap(boolean renderMarkdown){
public Map<String, Object> toMap() {
var map = new HashMap<String,Object>(); var map = new HashMap<String,Object>();
var memberMap = new HashMap<Long,Map<String,Object>>(); var memberMap = new HashMap<Long,Map<String,Object>>();
if (members != null) for (var entry : members.entrySet()){ if (members != null) for (var entry : members.entrySet()){
memberMap.put(entry.getKey(),entry.getValue().toMap()); memberMap.put(entry.getKey(),entry.getValue().toMap());
} }
map.put(ID, id); map.put(ID, id);
map.put(PROJECT_ID, projectId); map.put(PROJECT_ID, projectId);
map.put(PARENT_TASK_ID, parentTaskId); map.put(PARENT_TASK_ID, parentTaskId);
map.put(PRIORITY,priority); map.put(PRIORITY,priority);
map.put(NAME, name); map.put(NAME, name);
map.put(DESCRIPTION, mapMarkdown(description)); map.put(DESCRIPTION, renderMarkdown ? mapMarkdown(description) : Map.of(SOURCE,description));
map.put(STATUS, status); map.put(STATUS, status);
map.put(EST_TIME, estimatedTime); map.put(EST_TIME, estimatedTime);
map.put(START_DATE,start); map.put(START_DATE,start);
map.put(DUE_DATE,dueDate); map.put(DUE_DATE,dueDate);
@@ -254,6 +253,11 @@ public class Task implements Mappable {
return map; return map;
} }
@Override
public Map<String, Object> toMap() {
return toMap(true);
}
private int totalPrio() { private int totalPrio() {
if (status >= Status.COMPLETE.code()) return 0; // task is done, do no longer highlight if (status >= Status.COMPLETE.code()) return 0; // task is done, do no longer highlight
int total = priority; int total = priority;

View File

@@ -178,6 +178,7 @@
const url = api('task/list'); const url = api('task/list');
selector.show_closed = true; selector.show_closed = true;
selector.no_index = true; selector.no_index = true;
selector.rendered = false;
var resp = await post(url,selector); var resp = await post(url,selector);
if (resp.ok){ if (resp.ok){
var json = await resp.json(); var json = await resp.json();

View File

@@ -32,6 +32,7 @@ import de.srsoftware.tools.SessionToken;
import de.srsoftware.umbrella.core.BaseHandler; import de.srsoftware.umbrella.core.BaseHandler;
import de.srsoftware.umbrella.core.ModuleRegistry; import de.srsoftware.umbrella.core.ModuleRegistry;
import de.srsoftware.umbrella.core.api.*; import de.srsoftware.umbrella.core.api.*;
import de.srsoftware.umbrella.core.constants.Field;
import de.srsoftware.umbrella.core.constants.Text; import de.srsoftware.umbrella.core.constants.Text;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.*; import de.srsoftware.umbrella.core.model.*;
@@ -271,6 +272,12 @@ public class TaskModule extends BaseHandler implements TaskService {
return taskList; return taskList;
} }
private Map<Long,Map<String,Object>> mapTasks(Map<Long,Task> tasks, boolean render){
if (render) return mapValues(tasks);
return tasks.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,e -> e.getValue().toMap(false)));
}
private boolean newParentIsSubtask(Task task, long newParent) { private boolean newParentIsSubtask(Task task, long newParent) {
var parent = taskDb.load(newParent); var parent = taskDb.load(newParent);
while (parent != null) { while (parent != null) {
@@ -422,21 +429,23 @@ public class TaskModule extends BaseHandler implements TaskService {
var noIndex = json.has(NO_INDEX) && json.get(NO_INDEX) instanceof Boolean bool ? bool : false; var noIndex = json.has(NO_INDEX) && json.get(NO_INDEX) instanceof Boolean bool ? bool : false;
var projectId = json.has(PROJECT_ID) && json.get(PROJECT_ID) instanceof Number number ? number.longValue() : null; var projectId = json.has(PROJECT_ID) && json.get(PROJECT_ID) instanceof Number number ? number.longValue() : null;
var parentTaskId = json.has(PARENT_TASK_ID) && json.get(PARENT_TASK_ID) instanceof Number number ? number.longValue() : null; var parentTaskId = json.has(PARENT_TASK_ID) && json.get(PARENT_TASK_ID) instanceof Number number ? number.longValue() : null;
var markdown = !json.has(RENDERED) || !(json.get(RENDERED) instanceof Boolean render) || render;
if (isSet(projectId)) { if (isSet(projectId)) {
if (parentTaskId == null) { if (parentTaskId == null) {
var list = taskDb.listRootTasks(projectId, user, showClosed); var list = taskDb.listRootTasks(projectId, user, showClosed);
return sendContent(ex, mapValues(list)); return sendContent(ex, mapTasks(list,markdown));
} }
var projectTasks = taskDb.listProjectTasks(projectId, parentTaskId, noIndex); var projectTasks = taskDb.listProjectTasks(projectId, parentTaskId, noIndex);
loadMembers(projectTasks.values()); loadMembers(projectTasks.values());
var tags = tagService().getTags(TASK,projectTasks.keySet(),user); var tags = tagService().getTags(TASK,projectTasks.keySet(),user);
projectTasks = addTags(projectTasks, tags); projectTasks = addTags(projectTasks, tags);
return sendContent(ex, mapValues(projectTasks)); return sendContent(ex, mapTasks(projectTasks, markdown));
} }
if (isSet(parentTaskId)) return sendContent(ex, mapValues(taskDb.listChildrenOf(parentTaskId, user, showClosed))); if (isSet(parentTaskId)) return sendContent(ex, mapValues(taskDb.listChildrenOf(parentTaskId, user, showClosed)));
var taskIds = json.has(IDS) && json.get(IDS) instanceof JSONArray ids ? ids.toList().stream().map(Object::toString).map(Long::parseLong).toList() : null; var taskIds = json.has(IDS) && json.get(IDS) instanceof JSONArray ids ? ids.toList().stream().map(Object::toString).map(Long::parseLong).toList() : null;
if (isSet(taskIds)) return sendContent(ex, mapValues(taskDb.load(taskIds))); var tasks = taskDb.load(taskIds);
if (isSet(taskIds)) return sendContent(ex, mapTasks(tasks,markdown));
return sendEmptyResponse(HTTP_NOT_IMPLEMENTED, ex); return sendEmptyResponse(HTTP_NOT_IMPLEMENTED, ex);
} }