diff --git a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy index 70e6a21468d3ef9fcdbe825173da6c7fe2ebf917..f9b2c7bc47f9c982368d317d033eb64decdac275 100755 --- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy +++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy @@ -1711,11 +1711,10 @@ class ApiController { internalRecordIds = paramsProcessorUtil.decodeIds(params.recordID) } - Map<String, Object> filters = new LinkedHashMap<String, Object>() + Map<String, Map<String, Object>> filters = new LinkedHashMap<String, Map<String, Object>>() if (!StringUtils.isEmpty(params.filter)) { filters = paramsProcessorUtil.decodeFilters(params.filter) } - log.debug(new groovy.json.JsonBuilder( filters ).toPrettyString()) // Everything is good so far. if ( internalRecordIds.size() == 0 ) { diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java index c8a1407bb40e22dc1276b554c33b43c0613ba462..db87f3595179fbe6fae3b732561585bceda336cd 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java @@ -339,7 +339,7 @@ public class MeetingService implements MessageListener { return null; } - public HashMap<String,Recording> getRecordings(ArrayList<String> idList, Map<String, Object> filters) { + public HashMap<String,Recording> getRecordings(ArrayList<String> idList, Map<String, Map<String, Object>> filters) { //TODO: this method shouldn't be used HashMap<String,Recording> recs= reorderRecordings(recordingService.getRecordings(idList, filters)); return recs; diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/ParamsProcessorUtil.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/ParamsProcessorUtil.java index 152263c455f7e5b69bfed8064ae2f4e05d46ded5..18191dcc0c1946494c6e44bcada83849cf5dd6e0 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/ParamsProcessorUtil.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/ParamsProcessorUtil.java @@ -740,8 +740,8 @@ public class ParamsProcessorUtil { return resp; } - public Map<String, Object> decodeFilters(String encodedFilters) { - Map<String, Object> filters = new LinkedHashMap<String, Object>(); + public Map<String, Map<String, Object>> decodeFilters(String encodedFilters) { + Map<String, Map<String, Object>> filters = new LinkedHashMap<String, Map<String, Object>>(); try { String[] sFilters = encodedFilters.split(URLDECODER_SEPARATOR); diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/RecordingService.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/RecordingService.java index a632215f98d27055f6c71b280eebb9461d3088d6..cd1f257a406dff6186cda1de72cd08d4b2dc5c3d 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/RecordingService.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/RecordingService.java @@ -57,7 +57,7 @@ public class RecordingService { } } - private boolean shouldIncludeDir( Map<String, Object> filters, String type ) { + private boolean shouldIncludeDir( Map<String, Map<String, Object>> filters, String type ) { boolean r = false; if( filters.containsKey("state") ) { @@ -83,7 +83,18 @@ public class RecordingService { return r; } - public ArrayList<Recording> getRecordings(ArrayList<String> meetingIds, Map<String, Object> filters) { + private String[] recordingIdsFromFilters( Map<String, Map<String, Object>> filters ) { + String[] recordingIds = {}; + + if( filters.containsKey("id") ) { + Map<String, Object> filter = (Map<String, Object>)filters.get("id"); + recordingIds = (String[])filter.get("values"); + } + + return recordingIds; + } + + public ArrayList<Recording> getRecordings(ArrayList<String> meetingIds, Map<String, Map<String, Object>> filters) { ArrayList<Recording> recs = new ArrayList<Recording>(); if(meetingIds.isEmpty()){ @@ -99,21 +110,21 @@ public class RecordingService { for(String meetingId : meetingIds){ if ( shouldIncludeDir(filters, Recording.STATE_PUBLISHED) ) { - ArrayList<Recording> published = getRecordingsForPath(meetingId, publishedDir); + ArrayList<Recording> published = getRecordingsForPath(meetingId, recordingIdsFromFilters(filters), publishedDir); if (!published.isEmpty()) { recs.addAll(published); } } if ( shouldIncludeDir(filters, Recording.STATE_UNPUBLISHED) ) { - ArrayList<Recording> unpublished = getRecordingsForPath(meetingId, unpublishedDir); + ArrayList<Recording> unpublished = getRecordingsForPath(meetingId, recordingIdsFromFilters(filters), unpublishedDir); if (!unpublished.isEmpty()) { recs.addAll(unpublished); } } if ( shouldIncludeDir(filters, Recording.STATE_DELETED) ) { - ArrayList<Recording> deleted = getRecordingsForPath(meetingId, deletedDir); + ArrayList<Recording> deleted = getRecordingsForPath(meetingId, recordingIdsFromFilters(filters), deletedDir); if (!deleted.isEmpty()) { recs.addAll(deleted); } @@ -171,7 +182,7 @@ public class RecordingService { return ids; } - private ArrayList<Recording> getRecordingsForPath(String meetingId, String path) { + private ArrayList<Recording> getRecordingsForPath(String meetingId, String[] recordingId, String path) { ArrayList<Recording> recs = new ArrayList<Recording>(); String[] format = getPlaybackFormats(path); @@ -180,7 +191,9 @@ public class RecordingService { for (int f = 0; f < recordings.length; f++) { if (recordings[f].getName().startsWith(meetingId)) { Recording r = getRecordingInfo(path, recordings[f].getName(), format[i]); - if (r != null) recs.add(r); + if (r != null && ( recordingId.length == 0 || Arrays.asList(recordingId).contains("any") || Arrays.asList(recordingId).contains(r.getId())) ) { + recs.add(r); + } } } }